【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)

文章目录

    • 1 引言:自监督学习框架
    • 2 什么是自编码器
    • 3 自编码器到底好在哪里?
    • 4 自编码器并不是一个新想法
    • 5 去噪的自编码器

1 引言:自监督学习框架

在讲 Auto-Encoder 之前,我们再来回忆一下自监督学习的框架,因为其实 Auto-Encoder 也可以算是Self-Supervised Learning 的一环

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第1张图片

首先你有大量的没有标注的资料,用这些没有标注的资料,你可以去训练一个模型做一些不需要标注资料的任务,比如说做填空题,预测下一个 Token 等等。这个不用标注资料的学习就叫做 Self-Supervised Learning,或者是也有人叫 Pre-Training,那用这些无标注资料的训练完的模型它本身看起来作用并不大,BERT 只能做填空题,GPT 只能够把一句话补完,但是你可以把它们用在其他下游的任务里面,只需要把这些模型做一下微调,然后就可以用在下游的任务里面。

在有 BERT 在有 GPT 之前,其实有一个更古老的任务,更古老的不需要用标注资料的任务,就叫做 Auto-Encoder,所以你也可以把 Auto-Encoder 看作是 Self-Supervised Learning 的一种 Pre-Train 的方法。


2 什么是自编码器

Auto-Encoder 是怎么运作的呢,因为之前我们在讲 Self-Supervised Learning 的时候,都是用文字做例子,那现在我们换成用影像来做例子:

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第2张图片
假设你有非常大量的图片,在 Auto-Encoder 里面你有两个 Network,一个叫做 Encoder,一个叫做 Decoder,他们就是两个 Network

  • Encoder 把一张图片读进来,它把这张图片变成一个向量,就 Encoder 它可能是很多层的 CNN,把一张图片读进来,它的输出是一个向量,接下来这个向量会变成 Decoder 的输入。

  • Decoder 会产生一张图片,所以 Decoder 的 Network 的架构,就像是 GAN 里面的 Generator,它是输入一个向量,输出一张图片。

训练的目标是希望 Encoder 的输入跟 Decoder 的输出越接近越好,也有人把这件事情叫做 Reconstruction,叫做重建。

因为我们的Encoder就是把一张图片压缩成一个向量,接下来 Decoder 要根据这个向量,重建原来的图片,那我们希望重建后的结果跟原输入的结果越接近越好。

讲到这边你可能会发现说,这个概念似曾相似,没错,我们在讲 Cycle GAN 的时候,已经讲过了这个概念。

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第3张图片
我们在做 Cycle GAN 的时候,我们会需要两个 Generator,第一个 Generator 把 X Domain 的图片转到 Y Domain,另外一个 Generator 把 Y Domain 的图片转回来,希望最原先的图片,跟转完两次后的图片越接近越好。

那这个 Auto-Encoder 的概念跟 Cycle GAN 其实是一模一样的,都是希望所有的图片经过两次转换以后,要跟原来的输出越接近越好,而这个训练的过程,完全不需要任何的标注资料,你只需要收集到大量的图片,就可以做这个训练。

所以它是一个 Unsupervised Learning 的方法,跟 Self-Supervised 那一系列,Pre-Training 的做法一样,你完全不需要任何有标注的资料

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第4张图片

像这个 Encoder 的输出,有时候我们叫它 Embedding,我们在讲 BERT 的时候,也提过 Embedding 这个词。

怎么把 Train 的 Auto-Encoder,用在 Downstream 的任务里面呢?常见的用法就是,原来的图片,你也可以把它看作是一个很长的向量,但这个向量太长了不好处理,于是你把这个图片丢到 Encoder 以后,输出另外一个向量,这个向量你会让它比较短,比如说只有10维,100 维,那你拿这个新的向量来做你接下来的任务,也就是让图片不再是一个很高维度的向量,它通过 Encoder 的压缩以后,变成了一个低维度的向量,你再拿这个低维度的向量,来做接下来想做的事情,这就是常见的Auto-Encoder用在下游任务的方法。

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第5张图片

Encoder 做的事情就是把本来很高维度的东西,转成低维度的东西,把高维度的东西转成低维度的东西又叫做 Dimension Reduction。Dimension Reduction 这个技术其实涉及的范围非常地广,你可以把 Auto-Encoder 的 Encoder拿来做 Dimension Reduction,那其他还有很多不是以深度学习为基础的降维技术,比如说PCA,T-SNE等等,具体的介绍视频的链接就放在下面:

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第6张图片

3 自编码器到底好在哪里?

那 Auto-Encoder 到底好在哪里呢,当我们把一个高维度的图片变成一个低维度的向量时,到底带来什么样的帮助?我们来想一下,Auto-Encoder 要做的是把一张图片压缩又还原回来,但是还原这件事情为什么能成功呢?

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第7张图片

你想想看假设本来图片是 3×3 的大小,你要用 9 个数值来描述一张 3×3 的图片,假设 Encoder 输出的向量是二维的,我们是如何从二维的向量去还原 3×3 的图片,用2个值还原9个数值呢?

能够做到这件事情是因为,对于图片来说,并不是所有 3×3 的矩阵都是图片图片的变化其实是有限的,你随便 Sample 一个 Random 的 Noise,随便 Sample 一个矩阵,得到的通常都不是我们平常会看到的图片。

举例来说,假设图片是 3×3 的,那表面上看我们要有 3×3 个数值,才能够描述 3×3 的图片,但是也许它的变化实际上是有限的,也许你把图片收集起来发现,它的出现其实只有两种模式:

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第8张图片

它只有这两种类型,其他类型根本就不是你在训练的时候会看到的状况,就是说图片的变化还是有限的。所以你在做这个 Encoder 的时候,最后可以做到只用两个维度就可以描述一张图片,虽然图片是 3×3,应该用 9 个数值才能够储存,但是实际上它的变化也许只有两种类型,那你或许只需要用两个值就能够描述他们。

所以 Encoder 做的事情就是化繁为简,把表面上比较复杂,而事实上变化有限的东西,抽丝剥茧,让它变得能用比较简单的方法来表示。

如果我们可以把原本复杂的图片,用比较简单的方法来表示,在下游的任务里面,我们可能就只需要比较少的训练资料,就可以让机器学到我们本来要它学的事情,这个就是 Auto-Encoder 的概念。


4 自编码器并不是一个新想法

Auto-Encoder 其实并不是一个很新的想法,举例来说 Hinton 在 06 年的 Science 的 Paper 里面,就有提到 Auto-Encoder 这个概念,只是那个时候用的 Network 跟今天用的 Network 还是有很多不一样的地方:

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第9张图片

那个时候人们不觉得 Deep 的 Network 是 Train 得起来的,那时候觉得说这个把 Network 叠很多很多层,然后每一层一起 Train 不太可能成功,所以那时候的信念是,每一层应该分开训练,所以 Hinton 用的是一个叫做 Restricted Boltzmann Machine 的技术,缩写是 RBM。

这个 Restricted Boltzmann Machine,你会发现今天很少有人在提到它了,它其实不是一个 Deep Learning 的技术,在10年前,大家都相信这个 Deep 的 Network 一定要用 Restricted Boltzmann Machine,然后其实 Hinton 后来在 2012 年的时候,有一篇 Paper 偷偷在结尾下一个结论说,其实 Restricted Boltzmann Machine 也没有什么必要 ,所以后来就没有什么人再用 Restricted Boltzmann Machine 了。

而且那时候还有一个神奇的信念,就是觉得 Encoder 和 Decoder 必须是对称的,不过现在比较少有人在使用这样的限制。总之这里只想告诉你说,Auto-Encoder 不是新的概念,它是一个非常有历史的概念。


5 去噪的自编码器

那 Auto-Encoder 还有一个常见的变形,叫做 De-Noising 的 Auto-Encoder

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第10张图片

De-Noising 的 Auto-Encoder 是说,我们把原来要输进去给 Encoder 的图片加上一些杂讯,就自己随便找一个杂讯把它加进去,然后一样通过 Encoder,一样再通过 Decoder,试图还原原来的图片。

那我们现在还原的不是 Encoder 的输入,Encoder 的输入的图片是有加杂讯的,我们要还原的是加入杂讯之前的结果。所以现在 Encoder 跟 Decoder 除了还原原来的图片这个任务以外,它还多了一个任务,这个任务就是它必须要自己学会把杂讯去掉

但是如果你看今天的 BERT 的话,其实你也可以把它看作一个 De-Noising 的 Auto-Encoder:

【学习笔记】李宏毅2021春机器学习课程第8.1节:自编码器(一)_第11张图片

输入我们会加 Masking,那些 Masking 其实就是 Noise,BERT 的模型就是 Encoder,它的输出就是 Embedding。

在讲 BERT 的技术的时候,我们就告诉你说这个输出就叫做 Embedding,接下来有一个 Linear 的模型,就是 Decoder,Decoder 要做的事情就是还原原来的句子,也就是把被盖住的地方还原回来,所以我们可以说,BERT 其实就是一个 De-Noising 的 Auto-Encoder

你可能感兴趣的:(机器学习,机器学习,深度学习,人工智能,神经网络)