自编码器代码(自编码器(Auto-Encoder))
一 、自编码器原理
自编码器算法属于自监督学习范畴 ,如果算法把x作为监督信号来学习 ,这里算法称为自监督学习(Self-supervised Learning)
在监督学习中神经网络的功能: 。是输入的特征向量长度 ,是网络输出的向量长度 。对于分类问题 ,网络模型通过把长度为输入特征向量𝒙变换到长度为的输出向量𝒐 ,这个过程可以看成是特征降维的过程 ,把原始的高维输入向量𝒙变换到低维的变量𝒐 。
特征降维(Dimensionality Reduction)在机器学习中有广泛的应用 , 比如文件压缩(Compression) 、 数据预处理(Preprocessing)等 。 最常见的降维算法有主成分分析法(Principal components analysis , 简称 PCA) ,通过对协方差矩阵进行特征分解而得到数据的主要成分 ,但是 PCA 本质上是一种线性变换 ,提取特征的能力极为有限
利用神经网络的强大非线性表达能力去学习到低维的数据表示 ,但是训练神经网络一般需要一个显式的标签数据(或监督信号),但是无监督的数据没有额外的标注信息 ,只有数据𝒙本身
利用数据𝒙本身作为监督信号来指导神经网络的训练 ,即希望神经网络能够学习到映射: 𝒙 → 𝒙 。
把网络切分为两个部分,前面的子网络尝试学习映射关系:: 𝒙 → 𝒛 ,后面的子网络尝试学习映射关系: 𝒛 → 𝒙 。 把看成一个数据编码(Encode)的过程 ,把高维度的输入𝒙编码成低维度的隐变量𝒛(Latent Variable ,或隐藏变量) ,称为 Encoder 网络(编码器); 看成数据解码(Decode)的过程 ,把编码过后的输入𝒛解码为高维度的𝒙 , 称为 Decoder 网络(解码器)
编码器和解码器共同完成了输入数据𝒙的编码和解码过程 ,把整个网络模型叫做自动编码器(Auto-Encoder) ,简称自编码器 。 如果使用深层神经网络来参数化和函数 , 则称为深度自编码器(Deep Auto-encoder)
自编码器能够将输入变换到隐藏向量𝒛 ,并通过解码器重建(Reconstruct ,或恢复)出𝒙 。解码器的输出能够完美地或者近似恢复出原来的输入 ,即𝒙 ≈ 𝒙, 自编码器的优化目标:, dist(𝒙, 𝒙)表示 𝒙和的距离度量,称为重建误差函数 。 常见的度量方法有欧氏距离的平方 ,计算方法如下:ℒ = ∑(𝑥𝑖 - 𝑥̅𝑖)2
它和均方误差原理上是等价的 。 自编码器网络和普通的神经网络并没有本质的区别 , 只是训练的监督信号由标签𝒚变成了自身𝒙 。 借助于深层神经网络的非线性特征提取能力, 自编码器可以获得良好的数据表示 ,相对于 PCA 等线性方法 ,自编码器性能更加优秀 , 甚至可以更加完美的恢复出输入𝒙
二 、多种自编码器
自编码器网络的训练较为稳定 ,但是由于损失函数是直接度量重建样本与真实样本的底层特征之间的距离 ,而不是评价重建样本的逼真度和多样性等抽象指标 , 因此在某些任务上效果一般 ,如图片重建 ,容易出现重建图片边缘模糊 ,逼真度相对真实图片仍有不小差距 。为了尝试让自编码器学习到数据的真实分布 ,产生了一系列的自编码器变种网络
1.Denoising Auto-Encoder
为了防止神经网络记忆住输入数据的底层特征 , Denoising Auto-Encoders 给输入数据添加随机的噪声扰动
,如给输入𝒙添加采样自高斯分布的噪声𝜀:,添加噪声后 ,网络需要从学习到数据的真实隐藏变量 z ,并还原出原始的输入𝒙
2.Dropout Auto-Encoder
Dropout Auto-Encoder 通过随机断开网络的连接来减少网络的表达能力,防止过拟合,
通过在网络层,中插入 Dropout 层即可实现网络连接的随机断开
3.Adversarial Auto-Encoder
为了能够方便地从某个已知的先验分布中𝑝(𝒛)采样隐藏变量𝒛 ,利用𝑝(𝒛)来重建输入 , 对抗自编码器(Adversarial Auto-Encoder)利用额外的判别器网络(Discriminator , 简称 D网络)来判定降维的隐藏变量𝒛是否采样自先验分布𝑝(𝒛), 判别器网络的输出为一个属于[0,1]区间的变量 ,表征隐藏向量是否采样自先验分布𝑝(𝒛):所有采样自先验分布𝑝(𝒛)的𝒛标注为真 , 采样自编码器的条件概率𝑞(𝒛|𝒙)的𝒛标注为假。通过这种方式训练 ,除了可以重建样本 ,还可以约束条件概率分布𝑞(𝒛|𝒙)逼近先验分布𝑝(𝒛) 。
对抗自编码器由生成对抗网络算法衍生而来
4.Variational AutoEncoders
基本的自编码器本质上是学习输入𝒙和隐藏变量𝒛之间映射关系 , 它是一个判别模型(Discriminative model) ,并不是生成模型(Generative model) 。
变分自编码器(Variational AutoEncoders ,VAE):给定隐藏变量的分布P(𝒛) , 如果可以学习到条件概率分布P(𝒙|𝒛) , 则通过对联合概率分布P(𝒙, 𝒛) = P(𝒙|𝒛)P(𝒛)进行采样, 生成不同的样本
从神经网络的角度来看 , VAE 相对于自编码器模型 ,同样具有编码器和解码器两个子网络。解码器接受输入𝒙, 输出为隐变量𝒛;解码器负责将隐变量𝒛解码为重建的𝒙 。 不同的是 , VAE 模型对隐变量𝒛的分布有显式地约束 ,希望隐变量𝒛符合预设的先验分布P(𝒛) 。在损失函数的设计上 ,除了原有的重建误差项外 ,还添加了隐变量𝒛分布的约束项
从概率的角度 ,假设数据集都采样自某个分布𝑝(𝒙|𝒛) , 𝒛是隐藏变量 ,代表了某种内部特征 , 比如手写数字的图片𝒙 , 𝒛可以表示字体的大小 、 书写风格 、 加粗 、斜体等设定 ,它符合某个先验分布𝑝(𝒛) ,在给定具体隐藏变量𝒛的情况下
,可以从学到了分布𝑝(𝒙|𝒛)中采样一系列的生成样本,这些样本都具有𝒛所表示的共性
通常假设𝑝(𝒛)符合已知的分布𝒩(0,1) 。 在𝑝(𝒛)已知的条件下 , 希望能学会生成概率模型𝑝(𝒙|𝒛) 。这里可以采用最大似然估计(Maximum Likelihood Estimation)方法: 一个好的模型 ,应该拥有很大的概率生成真实的样本𝒙 ∈ 𝔻 。 如果生成模型𝑝(𝒙|𝒛)是用𝜃来参数化, 那么的神经网络的优化目标是:,由于z是连续变量 ,这个积分不能转换为离散形式 ,不能直接优化 。
利用变分推断 ,再经过一系列化简VAE模型优化目标: ,可以用编码器网络参数化𝑞 (𝒛|𝒙)函数 ,解码器网络参数化𝑝𝜃(𝒙|𝒛)函数 ,通过计算解码器的输出分布𝑞 (𝒛|𝒙)与先验分布𝑝(𝒛)之间的 KL 散度 ,以及解码器的似然概率log 𝑝𝜃(𝒙|𝒛)构成的损失函数 ,即可优化ℒ(𝜃, 𝜙)目标 。
优化函数转换为:和 ,该项可以基于自编码器中的重建误差函数实现 其中 ,当𝑞 (z |𝑥)和𝑝(z )都假设为正态分布时:
当𝑞 ( |𝑥)为正态分布𝒩(𝜇1, 𝜎1) , 𝑝( )为正态分布𝒩(0,1)时 ,即𝜇2 = 0, 𝜎2 =1,此时
第一项优化目标可以理解为约束隐变量𝒛的分布 ,第二项优化目标理解为提高网络的重建效果
隐变量采样自编码器的输出𝑞 ( |𝑥) ,当𝑞(z|𝑥)和𝑝(z )都假设为正态分布时, 编码器输出正态分布的均值𝜇和方差𝜎2 ,解码器的输入采样自𝒩(𝜇, 𝜎2) 。由于采样操作的存在 ,导致梯度传播是不连续的 ,无法通过梯度下降算法端到端式地训练 VAE 网络
Reparameterization Trick(重新参数化技巧):
它通过方式采样隐变量z ,和是连续可导的 ,从而将梯度传播连接起来
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!