深度学习之自编码器(1)自编码器原理

深度学习之自编码器(1)自编码器原理

  • 自编码器原理

 前面我们介绍了在给出样本及其标签的情况下,神经网络如何学习的算法,这类算法需要学习的是在给定样本 x \boldsymbol x x下的条件概率 P ( y ∣ x ) P(y|\boldsymbol x) P(yx)。在社交网络蓬勃发展的今天,获取海量的样本数据 x \boldsymbol x x,如照片、语音、文本等,是相对容易的,但困难的是获取这些数据所获得的标签信息,例如机器翻译,除了收集源语言的对话文本外,还需要待翻译的目标语言文本数据。数据的标注工作目前主要还是依赖人的 先验知识(Prior Knowledge)来完成,如亚马逊的Mechanical Turk系统专门负责数据标注业务,从全世界招纳兼职人员完成客户的数据标注任务。深度学习所需要的数据规模一般非常大,这种强依赖人工完成数据标注的方式代价较高,而且不可避免地引入标注人员的主观先验偏差。

 面对海量的无标注数据,有没有办法能够从中学习到数据的分布P(x)的算法?这就是我们这章要介绍的 无监督学习(Unsupervised Learning)算法。特别地,如果算法把x作为监督信号来学习,这类算法称为 自监督学习(Self-supervised Learning),本章要介绍的自编码器算法就是属于自监督学习范畴。

自编码器原理

 让我们来考虑有监督学习中神经网络的功能:
o = f θ ( x ) , x ∈ R d i n , o ∈ R d o u t \boldsymbol o=f_θ (\boldsymbol x),\boldsymbol x\in R^{d_{in}},\boldsymbol o\in R^{d_{out}} o=fθ(x),xRdin,oRdout
其中 d i n d_{in} din是输入的特征向量长度, d o u t d_{out} dout是网络输出的向量长度。对于分类问题,网络模型通过把长度为 d i n d_{in} din的输入特征向量 x \boldsymbol x x变换到长度为 d o u t d_{out} dout的输出向量 o \boldsymbol o o,这个过程可以看成是特征降维的过程,把原始的高维输入向量 x \boldsymbol x x变换到低维的变量 o \boldsymbol o o特征降维(Dimensionality Reduction)在机器学习中有广泛的应用,比如文件压缩(Compression)数据预处理(Preprocessing)等。最常见的降维算法有主成分分析法(Principle components analysis,简称PCA),通过对协方差矩阵进行特征分解而得到数据的主要成分,但是PCA本质上是一种线性变换,提取特征点能力极为有限。

 那么能不能利用神经网络的强大非线性表达能力去学习到低维的数据表示呢?问题的关键在于,训练神经网络一般需要一个显式的标签数据(或监督信号),但是无监督的数据没有额外的标注信息,只有数据 x \boldsymbol x x本身。

 于是,我们尝试着利用数据 x \boldsymbol x x本身作为监督信号来直到网络的训练,即希望神经网络能够学习到映射 f θ : x → x f_θ:\boldsymbol x→\boldsymbol x fθ:xx 。我们把网络 f θ f_θ fθ切分为两个部分,前面的子网尝试学习映射关系 g θ 1 : x → z g_{θ_1}:\boldsymbol x→\boldsymbol z gθ1:xz,后面的子网络尝试学习映射关系 h θ 2 : z → x h_{θ_2 }:\boldsymbol z→\boldsymbol x hθ2:zx,如下图所示:

深度学习之自编码器(1)自编码器原理_第1张图片
自编码器模型


我们把 g θ 1 g_{θ_1} gθ1看成一个数据编码(Encode)过程,把高纬度的输入 x \boldsymbol x x编码成低维度的隐变量 z \boldsymbol z z(Latent Variable,或隐藏变量),称为Encoder网络(编码器) h θ 2 \boldsymbol h_{θ_2} hθ2看成数据解码(Decode)的过程,把编码过后的输入 z \boldsymbol z z解码为高纬度的 x \boldsymbol x x,称为Decoder网络(解码器)

 编码器和解码器共同完成了输入数据 x \boldsymbol x x的编码和解码过程,我们把整个网络模型 f θ f_θ fθ叫做自动编码器(Auto-Encoder),简称自编码器。如果使用深层神经网络来参数化 g θ 1 g_{θ_1} gθ1 h θ 2 h_{θ_2} hθ2函数,则称为深度自编码器(Deep Auto-encoder),如下图所示:

深度学习之自编码器(1)自编码器原理_第2张图片

利用神经网络参数化的自编码器


 自编码器能够将输入变换到隐藏向量 z \boldsymbol z z,并通过解码器重建(Reconstruct,或恢复) x ˉ \bar \boldsymbol x xˉ。我们希望解码器的的输出能够完美地活着近似恢复出原来的输入,即 x ˉ ≈ x \bar\boldsymbol x\approx \boldsymbol x xˉx,那么,自编码器的优化目标可以写成:
Minimize  L = dist ( x , x ˉ ) x ˉ = h θ 2 ( g θ 1 ( x ) ) \text{Minimize}\ \mathcal L=\text{dist}(\boldsymbol x,\bar\boldsymbol x)\\ \bar\boldsymbol x= h_{θ_2} (g_{θ_1} (\boldsymbol x)) Minimize L=dist(x,xˉ)xˉ=hθ2(gθ1(x))
其中 dist ( x , x ˉ ) \text{dist}(\boldsymbol x,\bar\boldsymbol x) dist(x,xˉ)表示 x \boldsymbol x x x ˉ \bar\boldsymbol x xˉ的距离度量,称为重建误差函数。最常见的度量方法有欧式距离(Euclidean distance)的平方,计算方法如下:
L = ∑ i ( x i − x ˉ i ) 2 \mathcal L=\sum_i(\boldsymbol x_i-\bar\boldsymbol x_i)^2 L=i(xixˉi)2
它和均方误差原理上是等价的。自编码器网络和普通的神经网络并没有本质的区别,只不过训练的监督信号由标签 y \boldsymbol y y变成了自身 x \boldsymbol x x。借助于深层神经网络的非线性特征提取能力,自编码器可以获得良好的数据表示,相对于PCA等线性方法,自编码器性能更加优秀,甚至可以更加完美的恢复出输入 x \boldsymbol x x

深度学习之自编码器(1)自编码器原理_第3张图片

自编码器对比PCA


 在上图(a)中,第1行是随机采样自测试的真实MNIST手写数字图片,第2、3、4行分别是基于长度为30的隐藏向量,使用自编码器、Logistic PCA和标准PCA算法恢复出的重建样本图片;在图(b)中,第1行为真实的人像图片,第2、3行分别是基于长度为30的隐藏向量,使用自编码器和标准PCA算法恢复出的重建样本。可以看到,使用深层神经网络的自编码器重建出图片相对清洗,还原度较高,而PCA算法重建出的图片较模糊。

你可能感兴趣的:(TensorFlow2,深度学习,深度学习,神经网络,tensorflow)