AutoEncoder的初步理解

结合李宏毅老师机器学习2021——AutoEncoder课程和网上查阅的资料,总结一下对AutoEncoder的理解

什么是AutoEncoder

  • Auto Encoder简称为AE,是一种生成式模型。从训练过程需不需要标签数据的角度来看,它属于自监督学习self-superivised(无监督学习的一种)。 在这里插入图片描述
  • Auto Encoder主要用于特征提取、降维、去噪等方面。它的过程是:一张图片encoder之后,得到了一个固定维度的向量表示,然后再经过decoder还原这个图像。如果encoder-decoder之后的图像与原图像越接近,则说明这张图片在encoder过程中的信息损失就越少,decoder过程中的还原能力就越强。
  • Auto-Encoder从广义来说是一种Seq2seq的model,它有一个编码器和一个解码器,与Seq2seq的形式一样。当然需要注意的是,Encoder-Decoder并不是只能用于Seq2seq的场景,例如降维、特征提取时。

AutoEncoder更深入的理解

  • AutoEncoder可以看做一个模型,但我认为也可以将其看做一种思想,一种非监督学习的框架。基于这种编码器-解码器的思想,演变出来了Seq2seq(序列到序列的模型)模型,Seq2seq模型中又分为RNN-RNN,LSTM-LSTM、Transformer等等等。所以我认为将其看做一种思想或者框架更为合适。
  • 诚然,AE的初衷是特征提取、降维等,但是其编码器、解码器可也是RNN组成的,也可也是LSTM组成的,因此把它归为框架更合适,然后把各个模式输入到框架中。

AutoEncoder与GAN、Bert的区别和联系

  • AutoEncoder与GAN的联系:AE和GAN都可以用来生成数据(不过生成数据时的AE一般用变形版VAE)。AE与GAN的主要区别在于AE缺少了一个discriminator,因此导致AE生成的图片过于模糊。但是在某种应用情况下AE和GAN是一模一样的,例如:
    在这里插入图片描述
      例如将一篇文章提取特征,提取摘要部分,然后再通过摘要生成整片文章。这时候需要加一个discriminator判别所生成的摘要是不是我们人可以看得懂的摘要。机器之间可以有他们自己的语言符号,所以要通过一个判别器判断一下是不是人能看懂的文字,这就是Cycle GAN。
      这时候你可能会说,上图中为何有seq2seq2seq,一般来说文章变成摘要不是seq2seq就可以了吗。是的,文章变成摘要只是seq2seq即可,但是我们要判断生成的摘要好不好,合理不合理,因此需要再将摘要转变为文档,然后将原始文档和生成的文档比较一下。你可以又说,文档变摘要的那个seq2seq,变成seq,后来的decoder是另一个seq不就行了吗。不可以的,因为只有seq2seq的model才能生成摘要序列半个seq2seq的model是不能生成序列的(或者说生成的效果是很差的)。
  • AutoEncoder与bert的联系: Auto-Encoder 有一个常见的变形,叫做 De-Noising 的 Auto-Encoder。
    在这里插入图片描述
      De-Noising 的 Auto-Encoder 是说,我们把原来要输进去给 Encoder 的图片,加上一些杂讯,通过Auto encoder后试图还原原始的未加杂讯的图片。所以你会发现说,现在 Encoder 跟 Decoder,除了还原原来的图片这个任务以外,它还多了一个任务,这个任务就是,它必须要自己学会把杂讯去掉。
      但是如果你看今天的 BERT 的话,其实你也可以把它看作就是一个De-Noising 的 Auto-Encoder。输入我们会加 Masking,那些 Masking 其实就是 Noise。BERT 的模型就是 Encoder,它的输出就是 Embedding。在讲 BERT 的技术的时候,我们就告诉你说这个输出就叫做 Embedding,接下来有一个 Linear 的模型,就是Decoder,Decoder 要做的事情,就是还原原来的句子,也就是把填空题被盖住的地方把它还原回来,所以我们可以说BERT 其实就是一个De-Noising 的 Auto-Encoder。有人可能会问说,为什么这个 Decoder 一定要 Linear 的呢,它不一定要是 Linear,它可以不是 Linear。
    在这里插入图片描述

AutoEncoder的应用举例

  • 将AutoEncoder的decoder当做GAN的generator使用:你把 Decoder 拿出来,这不就是一个 Generator 吗,我们说 Generator,不是就是要吃一个向量,产生一个东西。比如说一张图片嘛。而 Decoder 不正好是吃一个向量,产生一张图片嘛。所以 Decoder,你可以把它当做一个Generator 来使用。
    在这里插入图片描述

  • 压缩:Encoder 也可以拿来做压缩,你完全可以把 Encoder 的输出,当做是一个压缩的结果。因为一张图片,是一个非常高维的向量,而一般我们 Encoder 的输出,是一个非常低维的向量,你完全可以把那个向量,看作是一个压缩的结果。只不过这个压缩是那种 lossy 的压缩,所谓 lossy 的压缩就是它会失真。
    在这里插入图片描述

  • Anomaly Detection(异常检测):异常检测要做的事情就是,来了一笔新的资料,那么它跟我们之前在训练资料里面看过的资料相不相似呢。也就是说你需要有一个异常检测的系统,这个异常检测的系统,是通过大量你已经看过的资料训练出来的。(给它一笔新的资料,如果这笔新的资料,看起来像是训练资料裡面的 Data,就说它是正常的;如果看起来不像是训练资料裡面的 Data,就说它是异常的)。具体的可以用于做欺诈侦测、网络的侵入检测等等。

      那说到这有人可能会想说,Anomaly Detection 异常检测的问题,我们能不能够把它当做二元分类的问题来看呢,例如你要做诈欺侦测,你就收集一大堆正常的信用卡纪录,一堆诈欺的信用卡纪录,训练一个 Binary 的 Classifier,就结束啦,何必用到AE框架呢?

      这里问题就来了,首先二元分类的问题是一个监督学习的问题,收集资料的成本很高的,但是AE是一种无监督学习的资料,可以给我们降低成本。其次,通常你是比较有办法收集到正常的资料,但你比较不容易收集到异常的资料。你可能有一大堆信用卡交易的纪录,但是多数信用卡交易的纪录可能都是正常的,异常的资料相较于正常的资料可能非常地少。这使得我们没法做监督学习啦,这个时候就是 Aauto-Encoder,可以派得上用场的时候了。例如下面人脸识别的例子,
    在这里插入图片描述
      因为二次元在训练时是没有看过的东西,那你的 Decoder,就很难将二次元把它还原到人脸,就会出现很大的loss。

  • Feature Disentanglement(特征解耦):Disentangle 的意思就是,把一堆本来纠缠在一起的东西把它解开。

      如果是图片的话,就是把一张图片变成一个 embedding,再把 embedding变回图片。既然这个 embedding 可以变回图片,代表说这个 embedding 里面啊,有很多的资讯。包含图片里面所有的资讯,举例来说,图片里面有什么样的东西啊,图片的色泽纹理啊等等。
      Auto-Encoder 这个概念也不是只能用在影像上,如果用在语音上,你可以把一段声音丢到 Encoder 里面,变成embedding 再丢回 Decoder,变回原来的声音,代表这个向量包含了,语音里面所有重要的资讯,包括这句话的内容是什么,这句话是谁说的,音色,音质等等等。

      如果我们今天把一段声音讯号丢进 Encoder,它会给我们一个向量,但是这个向量裡面,哪些维度代表了这句话的内容,哪些维度代表这句话的语者,也就是谁说的,我们没有这样的资讯。而 Feature Disentangle 想要做到的事情就是,我们有没有可能想办法,在 Train 一个 Auto-Encoder 的时候,同时有办法知道,这个 Representation,或又叫做 Embedding,或又叫做 Code,我们这个 Embedding 的哪些维度代表了哪些资讯呢?我们有没有可能做到说 Encoder 输出一个,举例来说 100 维的向量,我们知道说前 50 维就代表了这句话的内容,后 50 维就代表了这句话说话人的特徵呢,那这样子的技术就叫做 Feature Disentangle。
    在这里插入图片描述
      所以这种技术很明显可以用于语音、音色的转换中啊!这时候有人可能会说,假设 A 说好 How are you,B 也说好 How are you;A 说 Good morning,B 也说 Good morning。他们两个各说一样的句子,说个 1000 句,接下来呢,你有成对的资料,Train 一个Supervised 的 Model,把 A 的声音丢进去,输出就变成 B 的声音,就结束了。但让这明显是不现实的。我们 A 跟 B 都需要念一模一样的句子,念个 500、1000 句,显然是不切实际的。假设我想要把我的声音转成科比的声音,我得把科比找来;更退一万步说,假设我真的把科比找来,他也不会说中文啊,所以根本是不现实的啊。
      今天有了 Feature Disentangle 的技术后,也许我们期待机器可以做到:给它 A 的声音 给它 B 的声音;A 跟B 不需要读同样的句子,甚至不需要讲同样的语言,机器也有可能学会把 A 的声音转成 B 的声音。
      今天你把你老婆的声音丢进 Encoder,想个办法得出 embedding 中某哪些维度代表你老婆说的话的内容;某一些维度代表你老婆的音色。接下来我们只要把我说话的内容的部分取出来,把你老婆说话的音色特征部分取出来,把它俩拼到一起丢到 Decoder里面,就可以用你老婆的声音,讲我说的话的内容。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值