【模型详解】Auto-Encoder 详解--- 总结AE自编码,本章通俗易懂

自动编码器(AE,DAE,CAE,SAE)的方法介绍与简单实现

自动编码器(Auto-Encoders, AE)

1986Rmelhart提出自动编码器的概念,将其高维复杂数据处理,促进了神经网络的发展。
自编码神经网络是一种无监督(自监督)学习算法,它使用了反向传播算法,并让目标值等于输入值

自编码分类及特点:
自动编码器
降噪自编码器
推叠降噪自动编码器
卷积自动编码器
变分自编码
自编码器的共同点:学习一个与输入相同的输出,并尽可能的让其具有较强的泛化能力
在这里插入图片描述
在这里插入图片描述
深度自编码器能够更好的学习书籍更高维度的特征.具有强大的表达能力深度神经网络的所有优点.

传统的自动编码器是一种数据的压缩算法
其算法包括编码阶段解码阶段,且拥有对称的结构。

目前自编码器的应用主要有两个方面,第一是数据去噪,第二是为进行可视化而降维。配合适当的维度和稀疏约束,自编码器可以学习到比PCA等技术更有意思的数据投影。

传统编码器的编解码过程描述如图:
在这里插入图片描述
在这里插入图片描述
评价
传统自编码器的目的是使输出与输入尽量相同,这完全可以通过学习两个恒等函数来完成,但是这样的变换没有任何意义,因为我们真正关心的是隐层表达,而不是实际输出。因此,针对自编码器的很多改进方法都是对隐层表达增加一定的约束,迫使隐层表达与输入不同。

降噪自编码(Denoising Auto-Encoders, DAE)(2008)

自编码器真正关心的是隐藏层的特征表达,一个好的表达能够捕获输入信号的稳定结构,以该目的为出发出现了降噪自动编码器。

降噪自动编码器,首先对干净的输入信号加入噪声产生一个受损的信号。然后将受损信号送入传统的自动编码器中,使其重建回原来的无损信号。

降噪自编码器的编解码过程描述如图:
在这里插入图片描述
在这里插入图片描述
降噪自编码器与传统的自动编码器的主要区别在于:

1.降噪自编码器通过人为的增加噪声使模型获得鲁棒性的特征表达

2.避免使隐层单元学习一个传统自编码器中没有意义的恒等函数

评价
降噪自编码器通过对输入信号人为地进行损坏,主要是为了达到两个目的,首先是为了避免使隐层单元学习一个传统自编码器中没有实际意义的恒等函数,其次就是为了使隐层单元可以学习到一个更加具有鲁棒性的特征表达。
降噪自编码器最大的优点在于,重建信号对输入中的噪声具有一定的鲁棒性,而最大的缺陷在于每次进行网络训练之前,都需要对干净输入信号人为地添加噪声,以获得它的损坏信号,这无形中就增加了该模型的处理时间。

堆叠降燥自动编码器 (Stacked Denoising Auto-Encoders, SAE)(2008)

降噪自编码器的编解码过程描述如图:
在这里插入图片描述
堆叠降噪自编码器与降噪自编码器的区别在于:

1.堆叠降噪自编码器采用了降噪编码器的编码器作为基础单元,并且使用其训练方法进行预训练

2.降噪自动编码器是无监督学习(自监督)的一种方法,而降噪自编码器是一种有监督方法.

评价
堆叠降噪自编码器是降噪自编码器的一个应用方法.

卷积自动编码器(Convolution Auto-Encoders, CAE)(2011)

全卷积网络是一种面向特定应用(图像语义分割)的卷积神经网络,其结构图如下图所示:
在这里插入图片描述
与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。

与全卷积网络类似的一种无监督方法称为卷机自动编码器。

由于卷积神经网络所取得的各种优异表现,直接推动了卷积自编码器的产生。

卷积自编码器属于传统自编码器的一个特例,它使用卷积层和池化层替代了原来的全连接层,卷积自编码器能很好的保留二维信号的空间信息。

评价
其主要差别在于卷积自编码器采用卷积方式对输入信号进行线性变换,并且其权重是共享的,这点与卷积神经网络一样。因此,重建过程就是基于隐藏编码的基本图像块的线性组合。

变分自动编码器(Variational Auto-Encoders, VAE)(Kingma, 2014)

变分自编码器是一种主要用于数据生成的自编码器的变体.当作为生成模型时,首先利用数据训练变分自编码器,然后只使用变分自编码器的解码部分,自动生成与训练数据类似的输出.

其结构图如图所示:
在这里插入图片描述
整个结构可以分成三个部分,分别是编码部分,解码部分和生成部分.编码部分和解码部分同时进行训练,目标函数是从KL散度的概念中推倒得到的.

在这里插入图片描述
loss函数的推导过程:
在这里插入图片描述
几种算法的改进点表格
在这里插入图片描述

实现与Python实现

传统的自动编码器实验结果

模型结构与实现代码

传统的自动编码器分为编码器部分和解码器部分,整体模型结构如图所示:
在这里插入图片描述
模型分为三个子模块,由上至下分别为输入层,编码器层和解码器层,编码器将输入维度为784(28 28)的mnint灰度值转化为一个维度为2的值.编码器将维度为2的值解码回维度为784(28 28)的mnint灰度值。

python-keras代码实现关键代码如下
在这里插入图片描述
训练过程

本实验讨论使用relu和tanh两种激活函数的自监督训练的情况.训练的loss函数选择为方均根误差.
训练过程的loss变化图像如下.

使用tanh作为激活函数时,loss变化情况如下:
在这里插入图片描述
可以观察到,loss收敛到0.0685,效果较好.使用relu作为激活函数同样能够有效收敛,不过误差数值相对较大.由于篇幅原因不将图片在此进行展示.

编码器输出的可视化结果

本节将从重建图像和编码器输出层的二维可视化图像两部分进行展示,分别展示使用tanh和relu两种损失函数的训练结果.

训练好的自动编码器重建图像(使用relu激活函数)如下图:
在这里插入图片描述
训练好的自动编码器重建图像(使用tanh激活函数)如下图:
在这里插入图片描述
两者对比可以发现relu函数训练出的模型存在一些像素颗粒,这也验证了上一节loss函数较大的实验结果.为了解释该问题,展示编码器输出层的二维可视化图片.

训练好的编码器输出图像(使用relu激活函数)如下图:
在这里插入图片描述
训练好的编码器输出图像(使用tanh激活函数)如下图:
在这里插入图片描述
以上两张图片是 编码器-解码器 结构中编码器部分的输出绘制成的二维可视化图片,不同的颜色代表了不同的数字,对应的数字在右边的图例中进行了显示.从以上两张图片中可以得到:

1.由于relu函数对负数的截断性质,使用relu激活函数训练的模型中有一部分点被限制在x=0,y=0两条边缘线上,这也是上文中提到的训练误差较大和出现像素颗粒的原因.

2.自动编码器虽然能够对mnist数据集进行编码和解码,但是效果并没有其改进的其他方法理想,这一观点可以从解码图片较为模糊和编码器可视化后各个类别的分类相重合得到验证.

说明与讨论

传统自编码器有很大的改进空间,改进空间的可以从几个方面阐述:

1.解码器输出较为模糊
2.编码器可视化的类别间的界限不明显

堆叠降噪自编码器

模型结构与实现代码

传统的自动编码器分为编码器部分和解码器部分,整体模型结构如图所示:
在这里插入图片描述
模型分为三个子模块,由上至下分别为输入层,多层编码器层和多层解码器层,编码器将输入维度为784(28 28)的mnint灰度值转化为一个维度为2的值.编码器将维度为2的值解码回维度为784(28 28)的mnint灰度值

python-keras代码实现关键代码如下
在这里插入图片描述
代码定义了三个模型,分别是用于自监督训练的 autoencoder, 用于二维化的编码器 encoder 和用于进行有监督训练的 SL_model.

训练过程

堆叠降噪自动编码器分为无监督的预训练过程和有监督的训练过程两部分.
本部分分别进行说明.

自监督的预训练过程loss变化情况如下:
在这里插入图片描述
无监督的训练过程正确率acc变化情况如下:
在这里插入图片描述
可以看到,在两个训练阶段,方法可以有效的达到收敛.

以下几点需要指出:

1.多层编码器的训练没有使用栈式编码器的训练方式.
2.预训练次数20epoch,并不足够模型充分收敛,但是作为预训练部分,已经充分.
3.预训练部分的误差与传统自编码器相比较大,是因为在初始层加入了噪声的原因.
4.训练时间与传统编码器相比更长,是其3倍左右.
5.在有监督学习的开始阶段,分类的正确率并不高,这也印证了上一部分二位可视化的结果,很多点的界限不清晰.

编码器输出的可视化结果
本节将从重建图像和编码器输出层的二维可视化图像两部分进行展示

预训练部分

重建图像

下图展示了添加噪声的效果(第一行原图,第二行增加噪声的图).
在这里插入图片描述
下图展示了,对添加噪声的图片进行重构的结果(第一行增加噪声的图,第二行重构图)
在这里插入图片描述
编码器输出层的二维可视化图像

下图展示了添加噪声的效果(第一行原图,第二行增加噪声的图).
在这里插入图片描述
以下几点需要指出:

1.本方法可以有效的对随机噪声进行去除
2.恢复图与原图相比虽然能够识别但是效果更模糊
3.与传统自动编码器相比,本方法得到的二维图的界限更加清晰

有监督训练部分
经过有监督的训练

重建图像(因为不是目标,所以必然走样)
下图展示了,对添加噪声的图片进行重构的结果(第一行增加噪声的图,第二行重构图)
在这里插入图片描述
编码器输出层的二维可视化图像
在这里插入图片描述
经过有监督学习,二维可视化图中各个组的界限更加清晰.

说明与讨论

堆叠降噪自编码器的改进有以下启发:

1.使用自监督预训练与有监督训练方式相结合的形式获得更加优秀的效果
2.使用增加噪声的形式迫使模型学习更加有效的特征
3.将深度玻尔兹曼姬的思想迁移到自动编码器中

卷积自编码器

模型结构与实现代码

卷积自编码器自动编码器分为编码器部分和解码器部分,整体模型结构如图所示:
在这里插入图片描述
python-keras代码实现关键代码如下:
在这里插入图片描述
训练过程

堆叠降噪自动编码器分为无监督的预训练过程和有监督的训练过程两部分.
本部分分别进行说明.

在自监督的预训练过程loss变化情况如下:
在这里插入图片描述
图像显示,自监督的训练loss收敛于0.07左右,该误差比降噪自编码器的0.09要小.与传统自编码器的训练误差相差不多.但是从下文可知其训练效果明显优于传统自动编码器.

在有监督的训练过程正确率acc变化情况如下:
在这里插入图片描述
图像显示,有监督训练过程的正确率上升到0.99,比降噪自动编码器的正确(0.95)率更高.
因此在mnist数据集中的重建任务和分类任务中,卷积自动编码器有一定优势.

不过以下几点需要指出:

1.与sDAE相比,CAE有更高的准确率和更低的损失
2.更好的效果除了卷积单元能够更好的处理图像数据外,可能与CAE方法的复杂度更高和其瓶颈处通道更宽有关

编码器输出的可视化结果

可以看到和stacked AE的主要区别在于局部卷积连接,而不所有层都是全连接。对图像和某些其他数据影响在空间局部的问题,比全连接更合适.因此效果更加优秀.

于降噪自动编码器相同,首先对图片增加噪声:
在这里插入图片描述
然后对增加噪声的图片进行去噪:
在这里插入图片描述
去噪结果比较优秀,与上文中所有的结果相比是最优秀的.

变分自编码器

模型结构与实现代码

变分自动编码器的结构最为复杂,并且在模型中引入了隐变量,和KL散度等概率论概念.对模型的实现造成了一定的影响.
自动编码器分为编码器部分和解码器部分,整体模型结构如图所示:
在这里插入图片描述
上图中并没有展开编码器和解码器的结构,编码器(encoder) 与 解码器(decoder)的形式分别如下:
encoder:
在这里插入图片描述
decoder:
在这里插入图片描述
python-keras代码实现关键代码如下:
在这里插入图片描述
训练过程

由于,变分自动编码器主要应用于图像生成,而并非是提取与分类,因此变分降噪自动编码器只有自监督的训练过程…

在自监督的训练过程,使用 KL散度+交叉熵 作为loss函数,loss变化情况如下.
在这里插入图片描述
可以看散度可以收敛到145的情况,能够有效进行收敛.

在自监督的训练过程,使用 KL散度+方均根 作为loss函数,loss变化情况如下.
在这里插入图片描述
对于两种损失函数效果的讨论在下文中进行.

自编码器输出的可视化结果

使用 KL散度+交叉熵 作为损失函数

基于kl散度的loss训练结果二维可视化如下
在这里插入图片描述
使用生成器对图像进行生成可以得到如下结果.
在这里插入图片描述

使用 KL散度+方均根 作为损失函数

基于kl散度的loss训练结果二维可视化如下
在这里插入图片描述
使用生成器对图像进行生成可以得到如下结果.
在这里插入图片描述
由于方均根与交叉熵的区别在于 解码器重现误差上面的区别,在编码器部分同样使用kl散度作为loss,因此两者的可视化结果类似.

以下几点需要指出:

1.二维可视化的结果中各个类别的界限较为明显,且其分布十分集中方便生成模型的图像生成.
2.KL散度作为一种新的损失函数无法与其他方法的误差进行对比.

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用: Auto-encoder是一种深度学习模型,用于将输入数据编码为低维表示,并尽可能地重构原始数据作为输出。在降维方面,PCA会将不同类别的数据混合在一起,而auto-encoder则可以将它们分开。除了降维之外,auto-encoder还有其他用途,比如图片搜索。 引用: 训练一个auto-encoder的过程通常会先固定一些权重参数,然后逐层训练多个自编码器,每个自编码器的输入和输出维度逐渐逼近目标维度。最后,可以使用反向传播来微调网络参数。现在也可以不进行预训练,直接训练auto-encoder。此外,auto-encoder还可以与卷积神经网络(CNN)一起使用。 引用: 特征区分技术是指在auto-encoder中,通过编码器获取的Embedding向量中,可以区分出不同输入数据的特征信息。比如,对于语音输入,可以分别提取出语音内容和说话者的特征。这就是Feature Disentangle的目标。 根据李宏毅老师的讲解,auto-encoder是一种用于降维、重构和特征提取的深度学习模型。它可以将输入数据编码为低维表示,并尽可能地重构原始数据作为输出。除了降维之外,auto-encoder还可以用于图片搜索等任务。训练auto-encoder时,可以使用预训练和微调的方法,也可以直接进行训练。此外,auto-encoder还可以与卷积神经网络(CNN)结合使用。特征区分技术可以用于auto-encoder中,用于提取不同输入数据的特征信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值