2020李宏毅学习笔记——50.More about Auto-Encoder(4_4)
Discrete Representation离散表示
如果模型可以从连续型的向量表示变成输出离散的表示,那么对于表示的解释性估计会有更好的理解。(·Easier to interpret or clustering)
例如:用独热编码表示图片,做法很简单,在连续向量后面接相同维度的独热编码,看连续变量的哪个维度最大就用哪个做独热编码的1.
通常情况下,Encoder输出的Embedding都是连续值的向量,这样才可以使用反向传播算法更新参数。但如果可以将其转换为离散值的向量,例如one-hot向量或是binary向量,我们就可以更加方便的观察Embedding的哪一部分表示什么信息。当然此时不能直接使用反向传播来训练模型,一种方式就是用强化学习来进行训练。
同样可以用Binary向量来表示图片,只不过判断0/1的方法不一样,这里如果大于0.5取1,小于取0
但是上面的模型在连续向量转离散向量的步骤上是不可做偏导的(无法GD)但是有办法:
当然,上面两个离散向量的模型比较起来,Binary模型要好,原因有两点:
1、同样的类别Binary需要的参数量要比独热编码少,例如1024个类别Binary只需要10维即可,独热需要1024维;
2、使用Binary模型可以处理在训练数据中未出现过的类别。
除了上面的两个模型之外,在实作上有:
VQVAE:
Vector Quantized Variational Auto-encoder (VQVAE),它引入了一个Code book。它是将Embedding分为了很多的vector,然后比较哪一个和输入更像,就将其丢给Decoder重建输入。
第一步:先用Encoder抽取为连续型的向量vector;
第二步:再用vector与Codebook中的离散变量Vectori 进行相似度计算,例如上图中黄色的Vector3
第三步:用Vector3还原输入信息。
上面的模型中,如果输入的是语音信息,那么语者信息和噪音信息会被过滤掉,因为上面的Codebook中保存的是离散变量,而内容信息是一个个的token,是容易用离散向量来表示的,而其他信息不适合用离散变量表示,因此会被过滤掉。
因此过滤信息是VQVAE的一个应用。
既然可以用离散向量来表示输入信息,那么我们也可以考虑用序列来embedding
2.Sequence as Embedding
如果我们要训练一个seq2seq2seq的Auto-encoder时,使用其他对抗的思想进行训练,就可以得到类似关于输入文档的摘要信息
例如:一篇文章经过encoder得到一串文字,然后这串文字再通过decoder还原回文章。
Only need a lot of documents to train the model.
中间的文字是什么?摘要。
但是这个模型效果是不好的,例如:
台湾大学会被机器抽取为:湾学,而不是台大。因为模型只要还原原文,回到台湾大学,而没有要求抽取出来的东西要符合语法规则。
因此模型可以改进为:gan
binary:来判断是否是人写的,discriminator骗过机器:他看过很多台北大学,就不会搞出来玩雪。
3.Tree as Embedding
除了向量表示,序列表示,还有tree表示(不展开)
回顾一下:一共讲了两个内容:
More than minimizing reconstructioon error(比最小化重建错误更好地东西)
- Using Discriminator(鉴别器)
- Sequential data(顺序数据)
More interpretable embedding(更具解释性的嵌入) - Feature Distangle(特征距离角)
- Discrete and Structured(离散和结构化)