当前位置:网站首页>边境的悍匪—机器学习实战:第十七章 使用自动编码器和GAN的表征学习和生成学习
边境的悍匪—机器学习实战:第十七章 使用自动编码器和GAN的表征学习和生成学习
2022-08-05 16:19:00 【来自边境的悍匪】
第十七章 使用自动编码器和GAN的表征学习和生成学习
文章目录
前言
我们在训练一个神经网络时,会遇到拥有一个很庞大的数据集,但是数据集中有标签的只占一小部分的情况,还会遇到数据集特征很多同样很庞大同时又存在很多无用的特征等一系列的问题。面对这些问题我们可以使用无监督学习、特征选择、降维来解决,虽然都有办法可以解决,但是过程复杂且繁琐。这一章需要学习的自动编码器和GAN就是用于解决这些问题,两个技术虽然解决的问题是同一个,但是实现方法完全不同。现在就让我们来学习一下吧。
一、主要内容
1、有效的数据表征
我们在日常的学习生活中会遇到很多需要记忆的问题,有的时候我们会发现当需要记忆的数据集很长时,我们往往需要在数据集中找到一定的规律来方便我们记忆而不是死记硬背,数据集中的这一规律就称之为有效的数据表征。正常情况下寻找这一规律的过程需要我们自己来完成,但是在神经网络中由编码器来充当了寻找规律的这个角色,我们通过给编码器加上不同的约束来迫使编码器找到我们需要的规律。
2、使用不完整的线性自动编码器执行PCA
自动编码器由两个组件组成:编码器、解码器。当整个自动编码器使用的是最基础的线性激活时,那么它所完成的工作就与本书上一部分降维中PCA的操作是一样的,尝试把一个高维数据降低到自己需要的指定维度。
3、堆叠式自动编码器
定义
自动编码器和其他的神经网络一样,可以通过堆叠多个隐藏层的方式来使得模型拟合更加复杂的数据集,这时的自动编码器称为堆叠式自动编码器。
使用Keras实现堆叠式自动编码器
与线性自动编码器一样的同样是分为编码器与解码器,不同的是堆叠式自动编码器的内部由多个隐藏层堆叠起来。编码器的输入、解码器的输出与原始的数据集大小相同,编码器的输出与解码器的输入大小相同,训练数据集与目标相同。自动编码器的性能验证可以使用可视化输入输出的差别来判断,因为从理论上来看,自动编码器的输入和输出不应该有太大的差距。使用堆叠式自动编码器的无监督预训练
无监督预训练就是自动编码器用于处理数据集庞大但是标签数据少情况的方法。我们在之前遇到这样的情况采用的方式就是寻找一些类似任务的神经网络然后重用一些较低层的隐藏层,然后根据自己的实际情况修改输出层。同样的在应用自动编码器时,我们只是把寻找类似神经网络的过程变为了自己通过无监督学习的方式训练一个可以重用的神经网络,其他的步骤是一样的。
堆叠式自动编码器的训练
我们可以使用两种方式来完成堆叠式自动编码器的训练:绑定权重,一次训练一个自动编码器。
绑定权重
如果我们需要训练的自动编码器是一个完全对称的,那么我们可以使用绑定权重的方式将编码器与解码器除了输入层与输出层以外的权重绑定起来,降低神经网络权重的数量加快训练降低模型过拟合的风险。
一次训练一个自动编码器
这种方式也成为分层训练法,这一种模式的发现也是神经网络能够经历两次寒冬之后再次崛起的触发因素之一,不过现在很少使用。这个方法每次会训练一个自动编码器,然后使用上一个编码器输出的数据再次训练一个编码器,以此类推。然后自将所有的编码器组合起来组成一个完整的自动编码器。
4、卷积自动编码器
同样的如正常的神经网络一样,卷积神经网络相比于全连接的神经网络更利于处理图像数据,卷积自动编码器在对图像数据降维、无监督预训练时优于其他的堆叠式自动编码器。组件编码器的内部结构与常规的卷积神经网络类似,由多个卷积层与池化层组成,而组件解码器则必须使用反向卷积层,同样的解码器的输入大小要等于编码器的输出。
5、循环自动编码器
循环自动编码就相对比较好理解,与语言翻译的思想有点类似。编码器将序列转换为向量,然后解码器再将向量转换为序列,在组件解码器中,为了确保向量在每个时间步长都能馈送到解码器,需要将解码器的第一层设置为RepeatVector。
6、去噪自动编码器
前面提到的自动编码器都是从结构的角度出发讲解不同结构的编码器,而这个去噪自动编码器就是自动编码器在实际开发过程中的一个应用。我们通过在图片输入的时候对图片加上一定程度的噪音来迫使编码器学习还原图像原本无噪音的样子,达到降噪的目的。添加噪音的方式也比较简单就是在编码器的输入之后添加一个dropout层或者是高斯噪音层。
7、稀疏自动编码器
稀疏自动编码器是一个典型的可用于特征提取的自动编码器。它通过减少每个隐藏层中的神经元数量来迫使每个神经元能够代表一个有用的特征。实现稀疏自动编码器与去噪一样,同样是对编码器下手,将编码器输出层的激活函数替换为sigmoid,使得编码器的输出约束在0到1之间,再对编码器的激活函数加上正则化。
8、变分自动编码器
变分自动编码器是一个可以用于解决训练数据集少的问题,帮助生成一些与训练数据类似的数据,它是在GAN之前很受欢迎的自动编码器。相比于其他的自动编码器它有两个特殊的地方。
- 它的编码器输出是由概率决定并不是由它原本的输入决定。
- 它是生成式自动编码器,它可以生成看起来像是训练集的新实例。
变分自动编码器并不是为给定输入生成编码,而是根据数据数据为编码器生成一个平均的编码和,是实际的输出是从计算出来的均值和标准差的正态分布中随机采样生成的。
9、生成式对抗网络
简介
生成式网络同样是由两部分组成:生成器、判别器。生成器尽量生成看起来真的图片来欺骗判别器,而判别器要尽力从图片中找到不是生成的真图片,两个神经网络相互竞争,使两个网络的性能越来越好。
生成式对抗网络每一批次的训练分为两个阶段:
a) 训练判别器
使用真实图片与生成器生成的图片相结合,真实图片标为1,假图片标为0,对判别器进行训练,在这一过程中反向传播只有判别器的权重会发生改变。
b) 训练生成器
使用生成器生成一批图片并把图片标为1,同样交由判别器来判别,在这个训练过程中,反向传播只会改变生成器的权重。
GAN的训练难点
模式的崩溃和训练的不稳定是GAN训练的两个难点。
a) 模式崩溃
模式崩溃指的是生成器会循环的生产一个自己擅长的类型图片来欺骗判别器,而当判别器学会判别这一类型的图片之后生成器又会生成另外一种类型的图片来欺骗判别器,周而复始整个对抗网络会忘记了除当前类型之外的其他类型。
b) 训练不稳定
训练不稳定很容易理解,因为生成器与判别器是时时刻刻在相互竞争的,所以会导致他们最终的参数结果会震荡不稳定。深度卷积GAN
深度卷积GAN是用于解决GAN训练困难的一种方法。就如你想的那样,将生成式对抗网络中的所有全连接层换成卷积层。想要实现深度卷积GAN科学家们给出了一下几点准则。
a) 用跨步卷积(在判别器中)和转置卷积(在生成器中)替换所有池化层
b) 除生成器的输出层和判别器的输出层外,在生成器和判别器中都使用批量归一化。
c) 删除全连接的隐藏层已获得更深的架构
d) 对生成器中的所有层只用ReLU激活函数,除了输出层应该使用tanh。
e) 对判别器中的所有层使用leaky ReLU激活函数
这些准则在许多情况下会起作用,但是非总是如此,因此你可能需要实验不同的超参数。GAN的逐步增长
同样是为了解决生成式对抗网络的问题,并且由于需要深度卷积GAN能够处理较大的图片,研究人员提出了多种技术,如:将生成器的图像不断放大来解决大图像的问题;小批量标准差鼓励生成器产生更多不同的输出;均衡的学习率加快和稳定了训练过程;像素归一化层,避免了由于生成器和判别器之间的竞争过度导致的激活爆炸。StyleGAN
StyleGAN是一项高分辨率图像生成的技术,作者在生成器上使用了风格转换技术,以确保生成的图像在各个尺寸上都具有与训练图像想吐的局部结构,从而提高了生产图像的质量。
二、课后练习
自动编码器的主要任务是什么?
特征提取、无监督预训练、降维、生成模型、异常检测假设你要训练一个分类器,并且你有很多未标记的训练数据,但是只有几千个标记的实例。自动编码器怎么能够帮助你?你会如何进行?
如果你想训练一个分类器并且拥有大量未标记的训练数据,但只有数千个有标记的实例,那么可以先在完整的数据集(有标记的加上未标记的)上训练一个深度自动编码器,然后对分类器重用其下半部分(即重用包括编码层在内的上部所有层),并使用有标记的数据训练分类器。如果有标记数据很少,则你在训练分类器时可能要冻结重用的层。如果自动编码器能完美地重构输入,是否一定是一个好的自动编码器?如何评估自动编码器的性能?
自动编码器可以完美地重构其输入并不一定意味着它是一个很好的自动编码器。也许这仅仅是一个过于完整的自动编码器,它学会了将其输入复制到编码层,然后复制到输出层。实际上,即使编码层只包单个神经元,非常深的自动编码器也有可能学习到把每个训练实例映射到不同的编码(例如,第一个实例可以映射到0.001,第二个实例可以映射到0.002,第三个到0.003,以此类推),它可以用心地学习为每个编码重建正确的训练实例。它可以完美地重构其输入,而无须真正学习数据中的任何有用模式。实际上,这种映射不太可能发生,但它说明了一个事实,即完美的重构并不能保证自动编码器会学到任何有用的信息。但是,如果产生了非常差的重构,则几乎可以保证它是一个差的自动编码器。为了评估自动编码器的性能,一种选择是测量重建损失(例如,计算MSE或输出减去输入的均方根)。同样,高的重建损失是一个坏自动编码器的迹象,但是低的重建损失并不能保证它是好的。你还应该根据其用途来评估自动编码器。例如,如果你将其用于分类器的无监督预训练,则还应该评估分类器的性能。什么是不完整的自动编码器和完整的自动编码器?自动编码器过于不完整的主要风险是什么?自动编码器过于完整的主要风险是什么?
一个不完整的自动编码器,其编码层小于输入层和输出层。如果它很大,则它是一个完整的自动编码器。过于不完整的自动编码器的主要风险是可能无法重建输入。过于完整的自动编码器的主要风险在于,它可能只是将输入复制到输出,而没有学习到任何有用的特征。如何将权重绑定在堆叠式自动编码器中?这样做有什么意义?
要将编码层及其相应的解码层的权重绑定在一起,只需使解码器权重等于编码器权重的转置即可。这会使模型中的参数数量减少一半,通常使训练收敛速度更快,训练数据更少,并减少了过拟合训练集的风险。什么是生成模型?你能说出一种生成型自动编码器吗?
生成模型是一种能够随机生成类似于训练实例的输出的模型。例如,一旦成功地在MNIST数据集上进行了训练,生成模型就可以随机生成数字的逼真图像。输出分布通常类似于训练数据。例如,由于MNIST包含每个数字的许多图像,因此生成模型会输出大致相同数量的每个数字的图像。某些生成模型可以被参数化——例如,仅生成某些类型的输出。生成自动编码器的一个示例是变分自动编码器。什么是GAN?你能说出一些使用GAN的任务吗?
生成式对抗网络是一种神经网络架构,由具有相反目的的两个部分组成:生成器和判别器。生成器的目的是生成类似于训练集中的实例来欺骗判别器。判别器必须将实际实例与生成的实例区分开。在每次训练迭代中,像正常的二元分类器一样训练判别器,然后训练生成器使判别器的误差最大。GAN用于高级图像处理任务,例如超分辨率、彩色化、图像编辑(将对象替换为逼真的背景),将简单的草图转换为逼真的图像或预测视频中的下一帧。它们还用于扩充数据集(来训练其他模型),生成其他类型的数据(例如文本、音频和时间序列),识别其他模型中的弱点并加以弥补。训练GAN的主要困难是什么?
由于生成器和判别器之间复杂的动态关系,训练GAN极其困难。最大的困难是模式崩溃,生成器产生的输出几乎没有多样性。而且,训练可能非常不稳定:它可能开始时很好,然后突然开始振荡或发散,而没有任何明显的原因。GAN对选择超参数也非常敏感。
三、总结
以上就是这一章的所有内容,我们找到了了另外一种方式来解决在训练机器学习或者神经网络模型过程中遇到的问题:特征太多太杂需要降维、做特征选择,带标签数据集数据量不够、原始数据集数量少问题等等。对这一章做一个总结就是:
- 面对数据集很庞大很复杂的问题,我们可以使用自动编码器找到数据集中的规律,并且我们可以对自动编码器添加约束来找到我们需要的规律。
- 自动编码器由编码器与解码器两个神经网络组成。它们与正常的神经网络一样,可以使用单层也可以将多个隐藏层堆叠起来。
- 堆叠式自动编码器中卷积自动编码器用于处理图片,循环自动编码器用于处理序列。
- 从功能的角度来讲,去噪自动编码器可以去噪、 稀疏自动编码器可以做特征选择、变分自动编码器可以生成与训练集类似的数据。
- 生成式对抗网络(GAN)由两部分组成:生成器、判别器。通过生成器生成图片欺骗判别器的方式训练模型,来提高模型的性能。
- GAN的训练过程有模式崩溃与训练不稳定两个问题,科学家们已经提出了包括深度卷积GAN在内的很多方法来解决这些问题。
对文章有任何疑惑或者想要和博主一起学机器学习一起进步的朋友们可以添加 群号:666980220。需要机器学习实战电子版或是思维导图的也可以联系我。祝你好运!
项目地址: 码云地址
边栏推荐
猜你喜欢

EasyCVR调用停止实时录像接口,未返回录像地址该如何解决?

【2022新生学习】第四周要点

分布式深度学习最佳入门(踩坑)指南

【案例】animation动画曲线之steps的使用

关于将本地 SAP UI5 应用配置到本地 Fiori Launchpad 的技术实现深入讲解试读版

Monotonic Bounded Criterion for High Numbers_Prove_Limit Existence

突不了围,阿里海外怎么办?

【翻译】EF Core 3.1.x, 5.x & 6.x Second Level Cache Interceptor

软件供应链的漏洞及攻击类型

Visual Studio Code如何新建一个工程
随机推荐
流行的 Web 框架安全性比较
Look at HTTP through the browser cache
VS code An SSH installation couldn't be found 问题解决方案
『攻防』记一次EDU攻防演练
Mapping of gpnmb+ gpnmb- AT2 cells on idling Mapping----version 3.2.2seurat
数据库篇——hash索引
.NET WebShell 免杀系列之Unicode编码
以训辅教,以战促学 | 新版攻防世界平台正式上线运营!
分布式深度学习最佳入门(踩坑)指南
腾讯将取消部分外包免费食堂福利;iPhone 14 Pro或取消远峰蓝,新增紫色;马斯克:我被推特骗了|极客头条
学习笔记220—office2016无法登录账号,提示“很抱歉遇到一些临时服务器问题”?
图像边缘检测——一阶微分算子 Roberts、Sobel、Prewitt、Kirsch、Robinson
透过浏览器看HTTP缓存
编译器工程师眼中的好代码:Loop Interchange
当UNet遇见ResNet会发生什么?
【R语言】对年龄数据进行清洗
盲盒+带货玩法,让你开“盲”盒
傅里叶变换
拉格朗日对偶问题
mapping transferdata FindTransferAnchors TransferData