机器学习-自编码器,变分自编码器及其变种的基本原理(一)

  • Post author:
  • Post category:其他


本篇从自编码器(Auto-Encoder)入手,进行扩展,论述了监督学习和无监督学习的相关知识。接着讲解了自编码器的各种变种,以及比较难以理解的变分自编码器(Variational Auto-Encoders)。最后补充了极大似然估计这一数学知识,以及对变分自编码器的问题的优化。


目录


引入自编码器的目的:


监督学习和无监督学习:


自编码器原理:


自编码器变种:


变分自编码器(Variational Auto-Encoders):


AE与VAE的区别:


极大似然估计:


重参数(Reparameterization Trick):


引入自编码器的目的:

之前介绍的是给出样本及其标签的情况下,神经网络如何学习的算法,这类算法需要学习的是在给定样本x下的条件概率𝑃(𝑦|x)。目前获取数据相对比较容易,但是获取数据对应的标签信息比较困难。数据的标注工作目前主要还是依赖人的先验知识来完成,代价较高,且有主观偏差。


监督学习和无监督学习:

监督学习(Supervised Learning):从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。输入要求有数据集和标注集,监督学习就是最常见的分类问题,通过已有的训练样本去训练得到一个模型或算法,并根据该模型或算法对测试集的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的。监督学习的目标往往是让计算机去学习我们已经创建好的分类系统。

面对无标注数据,从中学习到数据的分布P(x),就是无监督学习(Unsupervised Learning)算法。输入数据没有被标记,也没有确定的结果。实际应用中,不少情况下无法预先知道样本的标签,也就是说没有训练样本对应的类别,因而只能从原先没有样本标签的样本集开始学习分类器设计。非监督学习目标不是告诉计算机怎么做,而是让它(计算机)自己去学习怎样做事情。如果算法把x作为监督信号来学习,这类算法称为自监督学习。自编码器算法就是属于自监督学习。

二者的区别:

监督学习要有训练集和测试集,从训练集中获取数据,对策略进行优化,最后放到一个易于训练集的测试集数据中进行验证。而非监督学习没有训练集,只有一组数据,在该组数据集内寻找规律。

监督学习用于识别事物,识别的结果表现在给待识别数据加上了标签。因此训练样本集必须由带标签的样本组成。非监督学习方法只有要分析的数据集的本身,预先没有什么标签。

非监督学习目的在于寻找数据集中的规律性,不一定要达到划分数据集的目的,即不一定要分类。比监督学习方法的用途要广。


自编码器原理:

对于分类问题,网络把长度为din的输入特征向量x变换到长度为dout的输出特征向量,该过程可以看作是降维过程,把输入的高维向量变为输出的低维向量。特征降维在机器学习中有广泛的应用,常见的降维算法有主成分分析法(Principal components analysis,简称 PCA),通过对协方差矩阵进行特征分解而得到数据的主要成分,但是PCA 本质上是一种线性变换,提取特征的能力极为有限。

训练神经网络一般需要一个显式的标签数据(或监督信号),但是无监督的数据没有额外的标注信息,只有数据x本身。因此试着利用数据x本身作为监督信号来指导网络的训练,即希望神经网络 能够学习到映射
\small f_{\theta }
: x → x。把网络𝑓𝜃切分为两个部分,子网络1尝试学习映射关系
\small g_{\theta 1}
: x → z;子网络2尝试学习映射关系
\small h_{\theta 2}
: z→ x。

我们可以把
\small g_{\theta 1}
看作一个编码(Encode)过程,即将高维的输入x变换为低维的隐变量z(Latent  Variable),称为 Encoder 网络(编码器)。
\small h_{\theta 2}
看作一个解码(Decode)过程,把编码过后的z作为输入,变换为高维度的x,称为 Decoder 网络(解码器)。

编码器和解码器共同完成了输入数据x的编码和解码过程,我们把整个网络模型
\small f_{\theta }
叫做自动编码器(Auto-Encoder),简称自编码器。

假设输入向量为x,输出向量为
\small \bar{x}
,我们此时希望输出
\small \bar{x}
能尽可能近似于输入x。

因此损失函数L=dist(x,
\small \bar{x}
),dist()表示距离度量,称为重建误差函数。该函数可以使用各种度量方法,比较常用的有欧氏距离,即对应元素之间距离的平方求和。

自编码器网络和普通的神经网络并没有本质的区别,只不过训练的监督信号由标签y变成了自身x。相对于 PCA 等线性方法,自编码器性能更加优秀。



相信讲到这里大家会比较疑惑,从一个x出发,经过一大堆变换又得到了一个x,还要它俩尽可能相似,那这样做的意义何在呢?大家仔细观察自编码器的结构应该不难发现,自编码器构成的神经网络里面输入层,编码器,解码器,输出层都有很多参数,但唯独隐藏层z的变量或者说参数很少。讲到这里大家应该多少能猜到了,隐藏层就像是一个瓶口,对输入的特征进行压缩与提取,有点高度压缩的意思,用很少的参数就能表示输入的数据。当然z也不是越小越好,越小表现特征的能力就越弱,越大重构出的图片就越清晰。

我查阅了一些资料给大家讲一下自编码器的实际应用:如服务器先在服务器端把这些图片encoder,把编码后的特征传给客户端,在客户端再进行解码与重构,这样就能有效的节约流量。


自编码器变种:

自编码器的训练效果比较稳定,由于损失函数是直接度量重建样本与真实样本的底层特征之间的距离,而不是评价重建样本的逼真度和多样性等抽象指标,因此在某些任务上效果一般。

降噪自动编码器(Denoising Auto-Encoder) :

主要是为了防止神经网络记住输入数据的底层特征,降噪自动编码器给输入数据添加随机的噪声扰动,如给输入添加一个高斯噪声,接着网络需要从该输入学习到数据的真实隐藏变量z,并还原出未加噪声的原始输入。

损失函数是L=(未加噪声输入,实际输出)

Dropout 自动编码器(Dropout Auto-Encoder):

通过随机断开网络的连接来减少网络的表达能力,防止过拟合。它的思想和我们之前讲解的Dropout层的思想是一样的,它的实现也不复杂,通过在网络层中插入 Dropout 层即可实现网络连接的随机断开。

对抗自编码器(Adversarial Auto-Encoder):

为了能够方便地从某个已知的先验分布p(z)中采样隐藏变量z,方便利用p(z)来重建输入,对抗自编码器利用额外的判别器网络来判定降维的隐藏变量z是否采样自先验分布p(z)。判别器网络的 输出为一个属于[0,1]区间的变量,表征隐藏向量是否采样自先验分布p(z):所有采样自先验分布p(z)的z标注为真,,采样自编码器的条件概率q(z|x)的z标注为假。过这种方式训练,除了可以重建样本,还可以约束条件概率分布q(z|x)逼近先验分布p(z)。

先验分布就是已经事先知道的分布,根据该分布或者概率来确定后续发生。


变分自编码器(Variational Auto-Encoders):

基本的自编码器本质上是学习输入x和隐藏变量z之间映射关系,它是一个判别模型 (Discriminative model),并不是生成模型(Generative model)。


简单解释一下VAE:

变分自编码器就是不再把输入映射到固定变量上,而是映射到一个分布上。此时z就是一个分布,比如高斯分布等。网络模型中的bottle neck也被分解成了两个向量, 一个叫均值向量,一个叫方差向量。损失函数相对自编码器较复杂,由重建损失(和自编码器一样)与KL散度(学习的分布和高斯分布之间的相似性)。

VAE一般用于图像压缩,图像降噪等。

给定隐藏变量的分布p(z),如果可以学习到条件概率分布p(x|z)(此处实际上是网络的后半部分,是由z映射到x),则通过对联合概率分布p(x,z) = p(x|z)p(z)进行采样,生成不同的样本。

从神经网络的角度来看,VAE 相对于自编码器模型,同样具有编码器和解码器两个子网络。解码器接受输入x,输出为隐变量z;解码器负责将隐变量z解码为重建的x 。不同的是,VAE 模型对隐变量

z的分布有显式地约束,希望隐变量z符合预设的先验分布P(z)。

因此,在损失函数的设计上,除了原有的重建误差项外,还添加了

隐变量z分布的约束项

从概率的角度,我们假设任何数据集都采样自某个分布p(x|z),z是隐藏变量,代表了某种内部特征。比如手写数字的图片x,z可以表示字体的属性,如大小,粗细等,它符合某个

先验分布p(z)

(如高斯分布),在给定具体隐藏变量z的情况下,我们可以从学到了分布p(x|z)中采样一系列的生成样本,这些样本都具有z所表示的共性。在p(z)已知的情况下,我们的目的就是希望能学会生成概率模型p(x|z),即在z确定且已知的情况下求x的概率或分布。这里可以使用极大似然估计方法。

学会数据x的分布,根据数据的分布就能产生新的样本。但是分布是不易判断的,而且需要大量样本。因此可以使用一个隐变量z,z经过复杂的映射得到x,z的分布是服从高斯分布的且已知。

有x=f(z;
\small \theta
),其中
\small \theta
是给定的参数,只需要学习隐变量z所服从的高斯分布的参数,以及映射函数,就可得到原始数据的分布,在此条件下可以把z映射成x。

AE与VAE的区别:

AE中隐层的分布是未知的,而VAE中隐层隐变量的分布是服从高斯分布的

AE中学习的是encoder和decoder,VAE中还需要学习隐变量高斯分布的参数即均值和方差。

AE只能从一个x得到相对应的重构x,VAE可以产生新的z,从而得到新的x即新的样本。

损失函数:

除了重构误差,由于隐变量z付出高斯分布,因此encoder对应的条件概率分布,应当和高斯分布尽可能相似。可以用相对熵,又称KL散度来衡量两个分布的差异。严格地说,距离一般是对称的,而 KL 散度并不对称。


极大似然估计:

概率:已有环境,预测结果

似然:已经产生结果,根据结果来推断可能产生这个结果的自然环境。

假设x代表环境对应的参数,y代表事件发生的结果。

概率可以表示为p(y|x),在环境参数条件下,y发生的概率。p是关于y的函数

似然可以表示为L(x|y),在已知观察结果是y的情况下,去推断环境x。L是关于x的函数

最大似然估计:利用已知的样本标记结果,反推最具有可能或者最大概率导致这些结果出现的模型参数。即环境x为多少时结果y最有可能发生,也是L(x|y)取得最大值。

举个简单例子:抛了十次硬币,七次图案朝上,三次数字朝上。设P(图案朝上)=a,P(数字朝上)=1-a。则似然函数L(a)=a^7(1-a)^3,此时L也被称为似然函数,最大似然估计就是求a为多少的时候10次观测最可能发生七次图案朝上,三次数字朝上这个结果。经过计算a=0.7时最可能发生上述结果。

在机器学习中经常用到极大似然估计这个概念,即根据已有的数据,相当于y,学习到相应的参数分布,也就是计算x(相当于例子中的a)。这个过程就对应了机器学习的训练。


重参数(Reparameterization Trick):

VAE模型实际中存在一个问题:隐变量采样自编码器的输出q(z|x),当q(z|x)和p(z)都假设为正态分布时,编码器输出正态分布的均值
\small \mu
和方差
\small \sigma ^{2}
,解码器的输入采样自正态分布(
\small \mu
,
\small \sigma ^{2}
)。但由于采样操作的存在,导致梯度传播是不连续的,无法通过梯度下降法训练VAE网络。

下面涉及到一点数学推导:假设有正态分布z的均值
\small \mu
和方差
\small \sigma
,z此时是服从正态分布的,但不是标准正态分布,但是通过数学计算可以化为正态分布,即
\small \varepsilon
=(z-
\small \mu
)/
\small \sigma
,z是指从正态分布中取得的数值,此时
\small \varepsilon
服从标准正态分布即均值为0,方差为1。因此给定一个
\small \varepsilon
,我们便可以求出

z=
\small \mu
+
\small \sigma
\small \odot
\small \varepsilon
,并通过该方法采样隐变量z,同时保证梯度传播是连续的。



版权声明:本文为weixin_46737548原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。