IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【学习笔记】李宏毅2021春机器学习课程第8.2节:自编码器(二) -> 正文阅读

[人工智能]【学习笔记】李宏毅2021春机器学习课程第8.2节:自编码器(二)

1 用自编码器实现特征解耦

Auto-Encoder 还有一个有意思的应用:Feature Disentanglement,也就是特征解耦。

image-20210714145952267

那为什么会有 Disentangle 这个议题呢,我们来想想 Auto-Encoder 它在做的事情是什么。

image-20210714150218260
  • 如果是图片的话,Auto-Encoder 就是把一张图片变成一个 Embedding,再把这个 Embedding 变回图片,既然这个 Embedding 可以变回图片,就说明这个 Embedding 里面包含了生成图片所需要的资讯,举例来说,图片里面有什么样的东西啊,图片的色泽纹理啊等等。
  • Auto-Encoder 这个概念也不是只能用在图片上,如果用在语音上,你可以把一段声音丢到 Encoder 里面,变成向量再丢回 Decoder,输出原来的声音。那这个向量也应该包含了语音里面所有重要的资讯,包括这句话的内容是什么,还有这句话是谁说的等等。

举例来说,如果我们今天把一段声音讯号丢进 Encoder,它会给我们一个向量,但是这个向量里面究竟哪些维度代表了这句话的内容,哪些维度代表这句话的语者信息,我们是区分不出来的。

image-20210717133633109

那我们有没有可能做到说 Encoder 输出一个 100 维的向量,我们就知道前 50 维就代表了这句话的内容后 50 维就代表了这句话说话人的特征呢,那这种技术就叫做特征解耦。

这件事情事实上是有办法做的,这边举一个语音上的应用,这个应用叫做 Voice Conversion,也就是语者转换,其实就是柯南的领结变声器。

image-20210717140504984

这个在二十年前,阿笠博士就已经做得很成功了。只是过去阿笠博士在做这个 Voice Conversion 的时候,需要成对的声音讯号,也就是假设你要把 A 的声音转成 B 的声音,你必须把 A 跟 B 都找来,让他们念一模一样的句子:

image-20210717140541591

由于有这些成对的资料,所以就是一个 Supervised Learning 的问题,Train 一个 Supervised 的 Model,把 A 的声音丢进去,输出就变成 B 的声音,就结束了。

但是如果 A 跟 B 都需要念一模一样的句子,念个成千上万句作为训练资料,显然是不切实际的。而今天有了 Feature Disentangle 的技术以后,也许我们期待机器可以做到,给它 A 的声音,给它 B 的声音,A 跟 B 不需要念同样的句子,甚至不需要讲同样的语言,机器也有可能学会把 A 的声音转成 B 的声音。

那实际上是怎么做的呢,假设我们收集到一大堆人类的声音讯号,然后拿这堆声音讯号去 Train 一个 Auto-Encoder,同时我们又做了 Feature Disentangle 的技术,所以我们知道在 Encoder 的输出里面,哪些维度代表了语音的内容,哪些维度代表了语者的特征。

接下来我们就可以把两句话声音跟内容的部分互换,这样就实现了语者的转换。

image-20210717155052660

举例来说,上边是李老师的声音,它说 How are you,输进 Encoder 以后,Encoder 的输出做特征解耦,你就道说 Encoder 输出的向量里面哪些维度代表 How are you 的内容,哪些维度代表语者的声音特征

image-20210717211046635

同样的把新垣结衣的声音丢进 Encoder,然后对 Encoder 的输出做特征解耦,接下来我们只要把代表李老师说话内容的部分取出来把代表新垣结衣说话的声音特征的部分取出来,然后把两者拼接起来,丢到 Decoder 里面,就可以用新垣结衣的声音,讲李老师说的话的内容。

2 离散隐变量表示

下一个要跟大家讲的自编码器的应用,叫做 Discrete Latent Representation

image-20210718145909442

到目前为止我们都假设这个 Embedding 就是一个向量,向量的每一维都是一个实数,那它可不可以是别的东西呢?

image-20210718150617371
  • 举例来说,它可不可以是 Binary 的呢?Binary 的好处是,每一个维度就代表了某种特征的有或者是没有。就比如输入的这张图片,如果是女生,可能第一维就是 1,男生第一维就是 0;如果戴了眼镜,就是第三维是1,没有戴眼镜,就是第三维是 0,等等。这样可以让我们在解释 Encoder 输出的时候更为容易。
  • 甚至有没有可能强迫这个向量一定要是 One-Hot 呢,也就只有一维是 1,其他的都是 0。这样的话也许可以做到 unsupervised 的分类。举例来说,假设你想要做手写数字识别,你有一大堆 0 到 9 的图片,但是这些图片都没有对应的标签,你就可以用这些图片训练一个这样的 Auto-Encoder,然后强迫中间的 Latent Representation,强迫中间的这个 Embedding 的向量一定要是 One-Hot Vector,就比如把这个 Embedding设置为10维,那也许每一种 One-Hot 的 Embedding,正好就对应到一个数字也说不定。

那在这种 Discrete Latent Representation 的技术里面,其中最知名的就是 VQVAE,也即 Vector Quantized Variational Auto-Encoder 的缩写。VQVAE 是这样运作的,你输入一张图片给 Encoder,然后 Encoder 输出一个向量,这个向量它是一般的没有做任何限制的向量,但接下来你会有一个 Codebook

在这里插入图片描述
所谓 Codebook 的意思就是,你有一排向量,这排向量也是 Learn 出来的,你把 Encoder 的输出,去跟这排向量都去算个相似度,这件事情其实跟 Self-attention 有点像上面 Encoder 输出的 Vector 就是 Query,下面这些 Codebook 里面的 Vector 就是 Key,那接下来呢就看下面这些 Vector 里面,谁跟 Query 的相似度最大,然后你把相似度最大的那个 Vector 拿出来,作为 Decoder 的输入,然后要它输出一张图片,接下来 Training 的时候就是要让输入跟输出越接近越好。

Decoder,Encoder 还有 Codebook 都是一起从资料里面被学出来的,这样做的好处就是你可以有离散的隐变量表示,也就是说 Decoder 的输入一定是这个 Codebook 里面有限的向量中的一个,假设 Codebook 里面有 32 个向量,那 Decoder 的输入就只有 32 种可能。

那其实像这种技术,如果你把它用在语音上,你就是一段声音讯号输进来,通过 Encoder 以后产生一个向量,接下来你去计算这个向量和 Codebook 里面向量的相似度,把最像的那个向量拿出来丢给 Decoder,再输出一样的声音讯号,这个时候你会发现你的 Codebook 可能可以学到最基本的发音单位


3 用自编码器生成文章摘要

那其实还有更多疯狂的想法,Representation 甚至不一定要是向量,举例来说,它也可以是一段文字。

image-20210803101112898

假设我们现在要做文字的 Auto-Encoder,就是你有一个 Encoder,一篇文章丢进去,产生一个 Embedding,把这个 Embedding 丢到 Decoder,再让它还原原来的文章。但我们现在可以不用向量来当做 Embedding,我们的 Embedding 可以是一串文字。

如果把 Embedding 变成一串文字有什么好处呢?那也许这串文字就是文章的摘要,因为你想想看,把一篇文章丢到 Encoder 的里面,它输出一串文字,而这串文字可以通过 Decoder 还原回原来的文章,那代表说这段文字应该是这篇文章的精华,也就是这篇文章的摘要。

不过这边的 Encoder 显然需要是一个 Seq2seq 的 Model,比如说 Transformer,因为我们这边输入是文章,输出是一串文字,这个 Decoder 输入是一串文字,输出是文章,所以都是输入一串东西再输出一串东西,所以 Encoder 跟 Decoder 显然都必须要是 Seq2seq 的 Model。

所以这里不是一个普通的 Auto-Encoder,它是一个 seq2seq2seq 的 Auto-Encoder,它把长的 Sequence 转成短的 Sequence,再把短的 Sequence 还原回长的 Sequence。这个 Auto-Encoder 在训练的时候不需要标注的资料,因为训练时只需要收集大量的没有标注的文章就可以了。

image-20210803101235002

但是真的有这么容易吗,实际上这样 Train 起来以后发现是行不通的,因为这个 Encoder 跟 Decoder 之间会发明自己的暗号,Encoder 会产生一段文字,这段文字是我们看不懂的,但 Decoder 可以看得懂,它还原得了原来的文章,但是人看不懂,所以它根本就不是一段摘要,所以怎么办呢?

**这里我们再借用 GAN 的概念,加上一个 Discriminator。**Discriminator 看过人写的句子,所以它知道人写的句子长什么样子,然后这个 Encoder 要想办法去骗过 Discriminator,Encoder 要想办法产生一段句子,这段句子不仅可以被 Decoder 还原回原来的文章,还要是 Discriminator 觉得像是人写的句子,期待通过这个方法就可以强迫 Encoder 不只产生一段密码可以给 Decoder 去破解,而是产生一段人看得懂的摘要。

image-20210803102018852

你可能会觉得这个概念有点像 CycleGAN,其实这本质上就是 CycleGAN,我们只是从 Auto-Encoder 的角度来看待 CycleGAN 这个想法而已。

那实际上做的结果是怎么样呢,以下是真正 Network 输出的结果,你给它读一篇文章,然后它就用 Auto-Encoder 的方法,用 300 万篇文章做训练以后,然后给它一篇新的文章,看 Encoder 的输出是不是就是人可以看得懂的摘要。

image-20210803102224453

举例来说,给 Encoder 看上面所示的文章,它的输出看起来确实就是文章的摘要。

当然很多时候,它也是会犯错的,就像下面所举的例子那样:

image-20210803102507802

那有时候它也会产生莫名其妙的句子,但总之这个例子只是想要告诉你,我们确实有可能拿一段文字来当做 Embedding。


4 自编码器的更多应用

image-20210803103329473

接下来会介绍 Auto-Encoder 更多的应用,Auto-Encoder 还可以拿来做些什么事情呢?举例来说,我们刚才用的都是 Encoder,那其实 Decoder 也有作用。


4.1 Decoder 作为生成器

我们把 Decoder 单独拿出来,这不就是一个 Generator 吗,因为我们的 Decoder 就是输入一个向量,产生一个图片,所以我们完全可以把它当做一个 Generator 来使用。

image-20210803104340119

你可以从一个已知的 Distribution,比如说 Gaussian Distribution 中 Sample 一个向量,丢给 Decoder,看看它能不能够输出一张图片。

事实上在我们之前在讲这个 Generative Model 的时候,其实有提到说除了 GAN 以外,还有另外两种 Generative 的 Model,其中一个就叫做 VAE(Variarional Auto-Encoder),你看它名字里面的 Auto-Encoder,显然是跟 Auto-Encoder 非常有关系的,它其实就是把 Auto-Encoder 的 Decoder 拿出来,当做 Generator 来用。


4.2 压缩

Auto-Encoder 也可以拿来做压缩

image-20210803104611861

我们遇到图片太大的情况,常常会使用一些压缩的方法,比如说 JPEG 的压缩,而 Auto-Encoder 也可以拿来做压缩,你完全可以把 Encoder 的输出当做是一个压缩的结果,因为一张图片是一个非常高维的向量,而一般我们 Encoder 的输出是一个非常低维的向量。

所以你的 Encoder 做的事情就是压缩,你的 Decoder 做的事情就是解压缩。

只是这个压缩它肯定是有损的压缩,也就是说会有一定的失真,你没有办法 Train 到输入的图片跟输出的图片100% 完全一模一样,它还是会有一些差距的。


4.3 异常检测

Auto-Encoder 的另一个应用场景是做 Anomaly Detection,也就是异常检测。

image-20210803110021868

假设你有一堆训练资料,这边用 X1 到 XN 来表示,异常检测要做的事情就是,来了一笔新的资料,它到底跟我们之前在训练资料里面看过的资料相不相似呢?

  • 给它一笔新的资料,如果这笔新的资料看起来像是训练资料里面的 Data,就说它是正常的。
  • 如果看起来不像是训练资料里面的 Data,就说它是异常的。

但是所谓的相似这件事,其实并没有非常明确的定义,它会根据你的应用情境而有所不同。

image-20210803133222034
  • 假设现在你的训练资料都是雷丘,那这个皮卡丘就算是异常的东西。
  • 但是假设你的训练资料都是皮卡丘,那雷丘就是异常的东西。某个东西是正常或异常,取决于你的训练资料长什么样子
  • 或者假设你的训练资料里面通通都是宝可梦,那雷丘跟皮卡丘都算是正常的,而数码宝贝就算是异常的。

那个这个异常检测有什么样的应用呢?

image-20210803133604585
  • 举例来说,它可以来做欺诈侦测,假设你的训练资料里面有一大堆信用卡的交易纪录,那我们可以想像到多数信用卡的交易都是正常的,那你拿这些正常的信用卡训练的交易纪录,来训练一个异常检测的模型。有一笔新的交易纪录进来,你就可以让机器帮你判断说,这笔纪录算是正常的还是异常的,所以这种异常检测的技术可以拿来做欺诈侦测。
  • 或者可以拿来做网络的侵入侦测,举例来说,你有很多连线的纪录资料,那你相信多数人连到你的网站的时候,他的行为都是正常的。你收集到一大堆正常的连线的纪录,训练出一个异常检测的模型。那接下来有一笔新的连线进来,你就可以根据这个模型看看新的连线是正常的连线还是异常的连线。
  • 又或者是在医学上,你收集到一大堆正常细胞的资料,拿来训练一个异常检测的模型,那也许看到一个新的细胞,它可以知道这个细胞有没有突变,也许有突变,它就是一个癌细胞等等。

那讲到这边有人可能会想,异常检测的问题好像可以当做二元分类的问题来看,收集一堆正常的信用卡纪录,一堆异常的信用卡纪录,训练一个 Binary 的 Classifier 就结束了不是吗?

image-20210803133706511

但这种异常检测的问题的难点就在于收集资料上,通常你比较有办法收集到正常的资料,但是不太容易收集到很多异常的资料

所以我们往往假设,我们有一大堆正常的资料,但我们几乎没有异常的资料,所以它不是一个一般的分类的问题,这种分类的问题又叫做 One Class 的分类问题,就是我们只有一个类别的资料,那这种情况下就无法训练二元的分类器了,这个时候就是 Auto-Encoder 可以派得上用场的时候了。

举例来说,假设我们现在想要做一个系统,这个系统的目的是侦测一张图片是不是真人的人脸。

image-20210803134026264

举例来说,我们可以找到一大堆真人人脸的图片,来训练一个 Auto-Encoder。训练完这个 Auto-Encoder 以后,在测试的时候,如果输入的也是一张真人的照片,那因为在训练的时候有看过这样的照片,所以它可以顺利地被还原回来。

不过反过来说,假设有一张照片是训练的时候没有看过的,比如输入一张动漫人物的照片。

image-20210803134138489

因为这是训练的时候没有看过的照片类型,那你的 Decoder 就很难把它还原回来,如果你计算输入跟输出的差异,就可以发现这个差异非常地大,那就代表现在输入给 Encoder 的这张照片可能是异常的。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:37:50  更:2021-08-06 09:44:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 15:06:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码