自编码器Auto-Encoder简介与应用潜力探索

自编码器Auto-Encoder简介与应用潜力探索

一.简介

1.自编码器是自监督学习的一种,在Bert,GPT大行其道之前,它就已崭露头角。

2.总体结构自编码器Auto-Encoder简介与应用潜力探索_第1张图片

3.如何训练?

希望重构的输出和原始的输入尽可能的相似。

4.Auto-Encoder的技术如何应用到Downstream里?

(1)数据压缩,应用Encoder可以实现数据特征压缩,Encoder输出的code一般比输入维度低很多,可以认为是特征压缩的产物,它更轻便,更好处理,这是一种很好的维度压缩的技术。

(2)数据分布的可视化,应用code可以用于实现数据分布的可视化,即通过Encoder把高维度的数据压缩到二维,三维空间实现数据分布的可视化。

(3)数据生成,应用Decoder可以实现数据生成,code往往符合某种分布,在明确code的分布后,随机simple出一个code输入Decoder就可以生成新的数据。

总之,它全身是宝。具体的后面谈。


二.自编码器的衡量原则

1.编码器能尽可能的高效压缩输入数据的特征,使编码code的分布(编码器的映射空间)尽可能合理(聚类清晰,有规律,不同类别间过渡平缓)

2.在编码器映射空间(code的分布空间)中的任意随机采样,将其通过解码器能获得逼真的图像。最重要的是,在映射空间中选择不同的随机点应该会产生不同的生成图像,这些图像应该涵盖模型看到的所有类型的数据。

注意:尽管自编码器是自监督模型,但是输入的数据总归是有规律的,以猫狗识别数据集为例,模型不知道它们是什么,作开发的我们却是知道的,我们不能揣着明白装糊涂,要利用我们上帝视角的优势更好的把握全局,优化算法。


三.自编码器的常见变体

1.De-noising Auto-Encoder

与普通的自编码器输入原始数据不同的是,De-noising Auto-Encoder 的输入是加上噪声的数据,产出的数据仍然是越接近原始数据越好,显然这样实现的模型可以实现滤波的。

实际上Bert听起来似乎与它的思路很有异曲同工之妙,Bert训练采用的Mask的方法何尝不是一种加噪声,Bert就好似Encoder,它的产出就是code,后面加的网络就是Decoder。

此外加噪声也可以认为是数据增强的过程,有助于学习到更深层次的特征。

2.Dropout Auto-Encoder

听起来很玄幻,实际上就是训练时引入随机丢弃(测试时不用),以此使模型有更强的表达能力。


四.自编码器的应用潜质

1.Feature Disentanglement

(1)Disentanglement的意思是把原本纠缠在一起的东西解开。

(2)自编码器的code中纠缠了许多信息,如果能把这些信息分拣出来,可以做很多有趣的事,这种想法就是Feature Disentanglement。

(3)举个例子来说可以做语者转换

具体来说,可以用大量人的语音信号训练一个自编码器,同时再做个Feature Disentanglement的技术,并通过它来知道自编码器code中哪些维度代表语音内容,那些维度代表语者特征,接下来把不同人的语音特征进行交换,然后解码还原。这就做到了语者转换。
不止如此这种技术还可以应用到影像,NLP等领域,这部就是风格迁移。

2.Discrete Latent Representation(潜在离散表示)

(1)自编码器的code不一定都是实数向量,可能是二值向量,它代表某种特征的存在与否。

(2)比如输入一个女生的图片,可能code的第一个维度的值就是1,她戴眼镜了code的第二个维度就是1,她有一头乌黑的长发code的第三个维度就是1,她的身高是超过170cm的对应code的第四个维度就是1,很可惜她不喜欢你所以code的第五个维度就是0。

(3)甚至我们可以强令code是独热编码,这样就实现了无监督的分类器了。

(4)相关技术中比较知名的就是VQ-VAE,其算法流程大概如下

step1:首先设置 K 个向量作为可查询的 Codebook备用,一般这k个向量也是经过学习获得的。
step2:输入的数据经过encoder编码转换成code,这个code通过最近邻算法与Coebook中的k个向量作对比,找出最接近的它的一个向量。
step3:将筛选出来的向量作为解码器的输入进行解码重构。

VQ-VAE 最核心的部分就是 Codebook 查询操作,通过使用具有高度一致性的 Codebook 来代替混乱的中间表征,可以有效的提高数据生成的可控性和丰富度。把它用在语音上codebook可能学到最基本的发声部位(phonetic音标),codebook里的每个向量对应着某个发音,就像对应某个音标符号。

(5)能不能更离谱点,code一定是数字组成的向量吗?

当然不是,code完全可以是一串文字,这段文字对应的正是输入文章的摘要或总结,这可能要求自编码器的编码器和解码器都是seq2seq结构。此外实际操作中不难发现code往往都是“加密”的,笑死人类根本看不懂,这时候可以再引入一个Discriminator,让它来监督Encoder输出的必须是人看的懂的东西,这样编码器不仅要能生成文字code,还要骗过Discriminator,大概率不好训练,怎么办?用RL硬train一发。这其实就是cycleGAN的想法。

(6)还能不能再离谱点?

能,输入文章,把Encoder的输出变成Tree structure,再用它还原文字。

3.Decoder做为生成器也是完全可以的

实际上常见的三种生成模型除了GAN以外,剩下的两种其中一个就是VAE(Variational Auto-Encoder)

4.Anomaly Detection

(1)什么是Anomaly Detection

异常检测,假设现在已有一堆训练资料『Xi』,现在来一笔新资料,它到底和之前的资料是否相似,是不是有什么隐疾,靠人为检查可能很难检查出来,这就需要一个能够检测出异常的检测系统。这个系统做得工作就是异常检测。

(2)异常检测具体点的介绍

它是通过大量已有的正确的样本训练出来的,如果新输入的资料与原本的资料类似那么这就是个nomaly的资料,否则就是一个anomaly的资料。

(3)异常检测有什么用?

欺诈检测,异常访问,异常细胞检测等

(4)怎么做到异常检测,把它看成一个二分类问题行不行?

实际上是不行的,因为收集到的资料大部分都是正常的,异常数据是非常少的,数据非常不平衡,根本没法有效训练。况且在一大堆正常数据中甄别出几个异常数据也是相当困难的。最极端的当属根本没有异常数据,这根本无法训练二分类问题。

(5)那该如何是好,Auto-Encoder为你解忧愁

举个例子甄别一张人脸图片是不是算法合成的,可以用大量的真实人脸训练一个自编码器,然后通过计算还原出的图像与原始图像间的区别来断定是不是真人脸,算法合成的人脸可能能骗过人类,但是自编码器却不能完美的重构它,算出来的差异势必会比输入真人脸的差异要大,这就实现了异常检测。
当然也要明确这也只是异常检测的一种思路。

5.降维编码(降到二维,三维可以实现数据分布可视化)(对比PCA的线性,高损映射)


五.传统自编码器的缺点(编码器映射空间的缺点)

1.编码器的映射空间不连续。

想要清晰的理解映射空间不连续这件事不妨借助一个极端的例子——自编码器的解码器过拟合,它强大到可以轻易的记住所有的训练数据,而编码器只需要给所有数据无脑的分配一个毫无意义的一对一编号,每个样本经过编码器得到的code相互混杂,彼此孤立,毫无关系,整个code里没有任何有价值的信息,学号跟它比起来都是信息量巨大,实际上这时候的解码器就是个大型的switch…case…结构,不在code范围的一切编码都用“default语句“生成一个“四不像”。

总之,传统自编码器的编码器学习的映射空间不是连续的,也就是说该空间中的点之间的含义没有平滑的过渡,因此即使是一个小的扰动也有可能导致输出的数据非常离谱。

2.映射空间成不规则的、无界的分布,随机点采样困难

无论是为了随机取点,还是方便分析数据,让映射空间分布变得有规律,或者说至少以某种方式是有界的,都是非常必要的。

3.不同类别数据分布空间大小不尽相同

这将导致code随机取样的时候,模型生成不同类别的频率是不一样的。


六.引出VAE

AE有诸多不足,尤其是在生成领域,这就引出VAE。


你可能感兴趣的:(人工智能)