【李宏毅2020 ML/DL】P62-65 More about Auto-encoder

我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。

本节内容综述

  1. 本节课将补充一些 Auto Encoder 新技术;今天要讲两部分:More than minimizing reconstruction error, More interpretable embedding。
  2. 首先来讨论优化目标:More than minimizing reconstruction error。首先考虑,What is good embedding?将介绍Discriminator的训练方法。还提到Deep InfoMax (DIM)
  3. 对于 Sequential Data 如何做?此时可以做更多的变化。提及了 Skip thought、Quick thought、Contrastive Predictive Coding, CPC。
  4. 接下来讲的 Feature Disentangle 特征分解。训练包含两种思路:Adversarial Training、Designed Network Architecture。语音转换的例子可见李老师学生作品:https://jjery2243542.github.io/voice_conversion_demo/
  5. 最后一部分,关于 Discrete Representation 。如果让 Encoder 的输出是离散的,那么其聚类、提取特征都是容易的。提供了一些文献,其中有些 trick 讲如何训练这种不能微分的网络。还提到了Vector Quantized Variational Auto-encoder (VQVAE)
  6. Sequence as Embedding,做一个 seq2seq2seq auto-encoder 。注意,这里举了一个例子,也是不可微分,使用强化学习进行训练。
  7. 此外,提了一些新研究,如 Tree as Embedding 。

小细节

What is good embedding?

换言之,如何知道 Encoder 的输出,能否很好地表征出输入的特性呢?

因此,我们需要有一个 Discriminator ,用于判断图片与code是否匹配。
【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,因此我们得到了一个分类问题,定义优化目标即为交叉熵。

因此,我们可以得到一种新优化目标,即上图中的LDL_D^*
【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,其实可以把传统自编码方式理解为 Discriminator 的一种特例。上图中,上下的意思其实是一样的,图中下面这种 Discriminator 构造,得到的分数实际上就是 reconstruction error

此外,在使用 Discriminator 时,其参数 ϕ\phi 与 encoder 的参数 θ\theta 是同时训练的,这用在了 2019 年的文章 Deep InfoMax 中。

Sequential Data

Skip thought

对于一个句子,预测其前一个与后一个句子。
【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
其思想是:两个不同的句子A、B,其前后两个句子如果相同,那么这两个句子A、B应该是相同意义的。

Quick thought

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,让 Classifier 正确匹配句子与其下一个句子。

Contrastive Predictive Coding, CPC

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,训练目标是,这个 encoder 输出的 embedding ,可以预测同一个 encoder 对其下几个输入得到的 embedding 。

Feature Disentangle

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,一个输入可能包含各种资讯:

  • 语音可能包含这个人的音色等等信息;
  • 还可能包括说的内容的信息。

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,不管用哪种思想,我们都是希望在编码内,将不同的信息分开。

如此,可以进行 Voice Conversion 。
【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
李老师开了个玩笑,来说明变声应用场景。
【李宏毅2020 ML/DL】P62-65 More about Auto-encoder

Adversarial Training

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,使用对抗训练的方法。让我们希望用于表征内容的那部分编码,输入到音色分类器中,使其尽可能骗过音色分类器。这样其中就不包含音色的信息了。

Designed Network Architecture

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,此外,还可以训练两个 Encoder ,让其只包含我们想要的信息。另一种思路是,通过设计网络结构,来过滤、分散信息。不详细讲。

Discrete Representation

Easier to interpret or clustering

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如图,我们希望 Encoder 输出的向量是离散的数字组成的,这样更方便解释与聚类。

但是怎么训练呢?因为,变成 0-1 编码这部分没法微分。李老师提供了一些tirck:arxiv.org/pdf/16/11.01144.pdf

Vector Quantized Variational Auto-encoder (VQVAE)

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,我们有一个 Codebook(也是从数据训练出来的),我们得到的编码,与 Coderbook 中的向量对比,选择最像的那个,作为编码。

实际上有什么用呢?比如语音辨识,这个方法会保存一些 Discrete 的信息在编码 Codebook 中,而音色等等信息,将被忽略。

Sequence as Embedding

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
如上,讲序列进行 embedding 。我们希望这个 embedding 作为 Summary ,人能看懂,则需要进行两部分训练:

  • 首先,这个 Summary 可以通过 Decoder 还原回以前的文章;
  • 其次,这个 Summary 要能骗过 Discriminator ,让 Discriminator 觉得是人写的。

但是,这也没法微分。

因此,使用 RL 来训练。
【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
正确的结果如上。

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder
错误的结果如上。

Tree as Embedding

【李宏毅2020 ML/DL】P62-65 More about Auto-encoder