【人工智能概论】 自编码器(Auto-Encoder , AE)

这篇具有很好参考价值的文章主要介绍了【人工智能概论】 自编码器(Auto-Encoder , AE)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【人工智能概论】 自编码器(Auto-Encoder , AE)


一.自编码器简介

  1. 自编码器结构图
    自编码器,【人工智能概论】,人工智能,深度学习,神经网络
  2. 自编码器是自监督学习的一种,其可以理解为一个试图还原其原始输入的系统。
  3. 其主要由编码器(Encoder)和解码器(Decoder)组成,其工作流程是将输入的数据x经编码器压缩成yy再由解码器转化成x*,其目的是让x*x尽可能相近。

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


二.自编码器的特点

  1. 自编码器是自监督模型,其训练数据相对容易获取。
  2. 编码器的输出(此后称之为code)维度相较于输入要低很多,但其中却隐含着大量的特征信息。因此编码器有做数据压缩的潜质。
  3. code中蕴含着输入数据的信息,维度又很低。因此其具有为数据进一步处理节约运算成本的潜质。
  4. 从结果上看,解码器是通过一个低维数据生成一个高维数据的模型。因此解码器有做生成模型的潜质。

三.自编码器的应用潜质探索

1. 降噪——De-noising Auto-Encoder

  • 将原始数据加上噪声作为输入,但输出的数据仍尽可能接近原始数据,通过这样一个小调整既能实现降噪,也能提高模型的鲁棒性,也有助于模型学到更深层次的特征。
  • 实际上Bert的训练似乎与它有异曲同工之妙,Bert训练采用的Mask方法何尝不是一种加噪声,Bert就好似Encoder,它的产出就是code,后面加的网络就是Decoder。

2. 特征分离——Feature Disentanglement

  • Disentanglement的意思是把原本纠缠在一起的东西解开。
  • 自编码器的code中纠缠了许多信息,如果能把这些信息分拣出来,可以做很多有趣的事,这种想法就是Feature Disentanglement。
  • 举例子来说,可以做语者转换,利用大量语音信号训练自编码器,同时再做个Feature Disentanglement的技术(比如控制code大部分维度不便,每次只调整一两个维度变化摸索规律,进而了解每个维度的作用),通过它来知道code中哪些维度代表语音内容,哪些维度代表语者特征,接下来把不同人的语音特征进行交换,然后解码还原。这就做到了语者转换。
  • 不止如此这种技术还可以应用到影像,NLP等领域,这就是风格迁移。

3. 潜在离散表示——Discrete Latent Representation

  • 自编码器的code不一定都是实数向量,也可以是二值向量,它的每个分量代表某种特征的存在与否。

比如,因为输入的是一个女生的图片,所以导致code的第一个维度就是1,她戴眼镜了,所以code的第二个维度也是1,她有一头乌黑的长发,因此code的第三个维度还是1,她的身高是超过170cm,code的第四个维度仍是1,但很可惜她不喜欢你所以code的第五个维度是0。

  • 甚至可以强迫code是独热编码,这样就实现了自监督分类器。
  • 能不能更离谱点,code一定是数字组成的向量吗? 当然不一定,code完全可以是一串文字,这段文字对应的正是输入文章的摘要或总结,这可能要求自编码器的编码器和解码器都是seq2seq结构。此外实际操作中不难发现code往往都是“加密”的,笑死人类根本看不懂,这时候可以再引入一个Discriminator,让它来监督Encoder输出的必须是人看的懂的东西,这样编码器不仅要能生成文字code,还要骗过Discriminator,大概率不好训练,怎么办?用RL硬train一发。这其实就是cycleGAN的想法。
  • 还能不能再离谱点? 能,输入文章,把Encoder的输出变成Tree structure,再用它还原文字。
  • 潜在离散表示相关技术中较为知名有VQ-VAE,其算法流程大概如下
  • step1:首先设置 K 个向量作为可查询的 Codebook备用,一般这k个向量也是经过学习获得的。
  • step2:输入的数据经过encoder编码转换成code,这个code通过最近邻算法与Coebook中的k个向量作对比,找出最接近的它的一个向量。
  • step3:将筛选出来的向量作为解码器的输入进行解码重构。
  • VQ-VAE 最核心的部分就是 Codebook 查询操作,通过使用具有高度一致性的 Codebook 来代替混乱的中间表征,可以有效的提高数据生成的可控性和丰富度。把它用在语音上codebook可能学到最基本的发声部位(phonetic音标),codebook里的每个向量对应着某个发音,就像对应某个音标符号。

4. 生成——Generate Network

  • 前面提到过自编码器的解码器是有作为生成模型的潜质的。
  • 实际上常见的三种生成模型除了GAN以外,剩下的两种其中一个就是VAE(Variational Auto-Encoder)

5. 降维,可视化,编码

  • 前面提到过自编码器的编码器有做压缩器的潜质,且相较于传统的线性压缩,它的非线性压缩更有优势。
  • 将输入数据降到二维,三维可以实现数据分布的可视化。
  • 编码code也有为减少计算成本贡献的潜力。

6. 异常检测——Anomaly Detection

  • 这是个重头戏
  • 什么是异常检测?假设现在已有一堆训练资料『Xi』,现在来一笔新资料,它到底和之前的资料是否相似,是不是有什么隐疾,靠人为检查可能很难检查出来,这就需要一个能够检测出异常的检测系统。这个系统做得工作就是异常检测。
  • 具体来说,通过大量已有的正确的样本训练出来的模型,如果给它新输入的资料与原本的资料类似,那么它就会认定这就是个nomaly的资料,否则就是一个anomaly的资料。
  • 异常检测有什么用?安全工程,欺诈检测,异常访问,异常细胞检测等
  • 怎么做到异常检测,把它看成一个二分类问题行不行?理论上似乎可行,实际上是行不通的,因为收集到的资料大部分都是正常的,异常数据是非常少的,数据非常不平衡,根本没法有效训练。况且在一大堆正常数据中甄别出几个异常数据也是相当困难的。最极端的当属根本没有异常数据,这根本无法训练二分类问题。
  • 那该如何是好,Auto-Encoder为你解忧愁。举个例子甄别一张人脸图片是不是算法合成的,可以用大量的真实人脸训练一个自编码器,然后给它新的数据,它将通过计算还原出的图像与原始图像间的相似度来断定是不是真人脸,算法合成的人脸可能能骗过人类,但是自编码器却不能完美的重构它,算出来的相似度势必会比输入真人脸得到的相似度要明显低,这就实现了异常检测。
  • 当然也要明确这也只是异常检测的一种思路。

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

  • 听起来自编码器很完美,但事实并非如此,它的缺陷也是致命的。

编码器的映射空间不连续,且呈现不规则的,无界的分布

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

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

  • 传统自编码器的编码器映射空间不连续,即不同训练样本在该空间中对应的点与点之间没有平滑的过渡。这就导致了自编码器的生成几乎是一对一的,只有靠近训练数据对应code的点生成的数据才可能有意义,即使是一个小的扰动也有可能导致输出的数据非常离谱。
  • 因此想做生成模型传统自编码器是不合格的。

2.编码器的映射分布无规律

  • code的表示自由自在,在映射空间中呈随意弥散状,聚类的效果差,可解释性差,预期中希望code里包含语义信息往往实现不了,code往往扮演一个编号的角色。
  • 因此想用自编码器做数据压缩、聚类往往不可行。

3.编码器映射呈无界分布

  • 这将导致在映射空间不连续的基础上,进一步加大随机取点生成的数据无意义的几率。
  • 在不能做生成模型的基础上反复鞭尸。

五.引出VAE

  • AE有诸多不足,这就引出VAE。

实际上前面谈及的自编码器的应用潜质,多数都是由VAE实现的文章来源地址https://www.toymoban.com/news/detail-764070.html

到了这里,关于【人工智能概论】 自编码器(Auto-Encoder , AE)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录智能车自制霍尔编码器(PCB篇)

    前文论述了智能车独轮车组自制编码器的可行性,昨天下单编码器今天就到货了,在此记录一下自制(抄板)年轻人的第一款编码器的历程。 到货的编码器  这种商品店家自然是不可能提供原理图和PCB,能有尺寸图已经是非常好了。所以主要靠自己观察,好在构造本就很简单,

    2024年02月06日
    浏览(45)
  • 人工智能概论复习笔记

    笔者精力有限,本文还没有完全完成 人工智能概述是人工智能导论课程的第一个模块,它主要介绍了人工智能的定义、人工智能的发展历史以及人工智能的研究方向。这一部分内容旨在帮助学生了解人工智能的基本概念和背景知识。 人工智能(Artificial Intelligence),英文缩写

    2024年01月15日
    浏览(62)
  • 【人工智能概论】 K折交叉验证

    简单验证: 将原始数据集随机划分成训练集和验证集两部分,例,将数据按照7:3的比例分成两部分,70%的样本用于训练模型;30%的样本用于模型验证,如下图。 数据都只被用了一次; 验证集上计算出来的评估指标与原始分组有很大关系; 对于时序序列,要保存时序信息,

    2024年02月08日
    浏览(42)
  • 【人工智能概论】 XGBoost应用——特征筛选

    换一个评价指标,特征排序结果就会不一样,甚至同样的数据同样的方法多次执行得到的结果也不是完全一样,特征筛选这件事见仁见智,要理性看待,但确实可以提供一种交叉验证的角度。 使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个特征的重要

    2024年01月23日
    浏览(53)
  • 编码器 | 基于 Transformers 的编码器-解码器模型

    基于 transformer 的编码器-解码器模型是 表征学习 和 模型架构 这两个领域多年研究成果的结晶。本文简要介绍了神经编码器-解码器模型的历史,更多背景知识,建议读者阅读由 Sebastion Ruder 撰写的这篇精彩 博文。此外,建议读者对 自注意力 (self-attention) 架构 有一个基本了解

    2024年02月08日
    浏览(61)
  • hnu计算机与人工智能概论5.6

    最近有点忙,好久没更新了,大家见谅!最后一关howell也做不出来  第1关:数据分析基础 1.将scores.xls文件读到名为df的dataframe中 2.添加平均分列:考勤、实验操作、实验报告的平均 3.输出前3行学生的平均分列表,控制小数点后两位 4.输出学生人数和班级数 5.分别输出实验报

    2024年02月04日
    浏览(52)
  • 【FPGA】Verilog:编码器 | 实现 4 到 2 编码器

    0x00 编码器(Encoder) 编码器与解码器相反。当多台设备向计算机提供输入时,编码器会为每一个输入生成一个与设备相对应的信号,因此有多少比特就有多少输出,以数字形式表示输入的数量。 例如,如果有四个输入,就需要一个两位二进制数来表示 0 至 3,这样就有四个输

    2024年02月04日
    浏览(54)
  • 【人工智能概论】 optimizer.param_groups简介

    optimizer.param_groups : 是一个list,其中的元素为字典; optimizer.param_groups[0] :是一个字典,一般包括[‘params’, ‘lr’, ‘betas’, ‘eps’, ‘weight_decay’, ‘amsgrad’, ‘maximize’]等参数(不同的优化器包含的可能略有不同,而且还可以额外人为添加键值对); 举例展示: 不同键

    2024年02月10日
    浏览(44)
  • hnu计算机与人工智能概论答案3.8

    连夜更新,求求关注!! 写在前面:这一课难度较低,报错时多看看冒号和缩进有无错误,祝大家做题顺利!!! 第1关:python分支入门基础 根据提示,在右侧编辑器补充代码,完成分支程序设计(用函数调用的方式来实现)。 第1题: 闰年的判断:判断某一年是否是闰年,

    2024年02月08日
    浏览(44)
  • hnu计算机与人工智能概论答案2.20

    补一下第一次作业 第1关:数据输入与输出 第一题 在屏幕上输出字符串:hi, \\\"how are you\\\" ,I\\\'m fine and you 第二题 从键盘输入两个整数,计算两个数相除的商与余数 假设输入12,5 输出为 2 2 第三题 在屏幕上 输入一个三位数输出该数的个位、十位和百位数字 假设输入125 输出为 5 2

    2024年02月08日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包