Encoder-Decoder
- Encoder-Decoder、Seq2Seq 以及他们的升级方案Attention
- Encoder-Decoder 算是一个通用的框架,在这个框架下可以使用不同的算法来解决不同的任务
- Encoder-Decoder 这个框架很好的诠释了机器学习的核心思路:将现实问题转化为数学问题,通过求解数学问题,从而解决现实问题!
- Encoder:将现实问题转化为数学问题
- Decoder:求解数学问题,并转化为现实世界的解决方案
- PS:① 不论输入和输出的长度是什么,中间的「向量 c」 长度都是固定的(这也是它的缺陷,下文会详细说明)② 根据不同的任务可以选择不同的编码器和解码器(可以是一个 RNN ,但通常是其变种 LSTM 或者 GRU)
Seq2Seq
- 输入一个序列,输出另一个序列。这种结构最重要的地方在于输入序列和输出序列的长度是可变的
- Seq2Seq的动机:一般的DL再图像分类上都很不错,他们的输入输出得是固定的长度!而机器翻译语音识别等方面都是长度未知的!
- Seq2Seq 属于 Encoder-Decoder 的大范畴 // Seq2Seq 更强调目的,Encoder-Decoder 更强调方法
- 应用:文字-文字;音频-文字;图片-文字
- 机器翻译:Sequence to Sequence Learning with Neural Networks 2014
- 语音识别:A Comparison of Sequence-to-Sequence Models for Speech Recognition 2017
- 图像描述生成:Sequence to Sequence – Video to Text 2015
Attention
- Encoder-Decoder 缺点就是压缩到了固定的长度,当输入信息太长时,会丢失掉一些信息。
- Attention 机制就是为了解决「信息过长,信息丢失」的问题
- Attention 模型的特点是 Eecoder 不再将整个输入序列编码为固定长度的「中间向量 C」 ,而是编码成一个向量的序列。引入了 Attention 的 Encoder-Decoder 模型如下图:
- Attention本质:核心逻辑就是「从关注全部到关注重点」,将有限的注意力集中在重点信息上,从而节省资源,快速获得最有效的信息
- Attention 机制最早是在计算机视觉里应用的,随后在 NLP 领域也开始应用了,真正发扬光大是在 NLP 领域,因为 2018 年 BERT 和 GPT 的效果出奇的好,进而走红。而 Transformer 和 Attention 这些核心开始被大家重点关注。
Attention的3大优点
- 参数少 / 速度快 / 效果好 (这还写个啥…就无敌了呗…)
- 参数少:模型复杂度跟 CNN、RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。
- 速度快:Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。
- 效果好:Attention 是挑重点,就算文本比较长,也能从中间抓住重点,不丢失重要的信息。下图红色的预期就是被挑出来的重点。
Attention的原理
-
Attention可以脱离机器翻译的框架!
-
第一步: query 和 key 进行相似度计算,得到权值
-
第二步:将权值进行归一化,得到直接可用的权重
-
第三步:将权重和 value 进行加权求和
-
总结四个字:
“带权求和”
Attention的类型
- Soft Attention、Hard Attention、静态Attention、动态Attention、Self Attention 等等
- 计算区域分类标准:①
Soft Attention
,这是比较常见的Attention方式,对所有key求权重概率,每个key都有一个对应的权重,是一种全局的计算方式(也可以叫Global Attention)。这种方式比较理性,参考了所有key的内容,再进行加权。但是计算量可能会比较大一些。②Hard Attention
,这种方式是直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。(或者使用gumbel softmax之类的)③Local Attention
,这种方式其实是以上两种方式的一个折中,对一个窗口区域进行计算。先用Hard方式定位到某个地方,以这个点为中心可以得到一个窗口区域,在这个小区域内用Soft方式来算Attention。 - 所用信息分类标准:所用信息包括内部信息和外部信息,内部信息指的是原文本身的信息,而外部信息指的是除原文以外的额外信息。
General Attention
/Local Attention
- 结构层次分类标准:
单层Attention
/多层Attention
/多头Attention
- 模型方面:Attention一般用在CNN和LSTM上,也可以直接进行纯Attention计算。① CNN+Attention ② CNN+Attention ③ 纯Attention
- CNN+Attention:卷积操作可以看成提取重要特征的操作,多层cnv扩大视野;池化层如maxpooling提取最大数值的特征,像hard attention的思想!(注意这里还是NLP的cnn+attention)
- Attention-Based BCNN-1 / Attention-Based BCNN-2 / 在pooling层做attention,代替max pooling。比如Attention pooling
- LSTM+Attention:LSTM内部有Gate机制,其中input gate选择哪些当前信息进行输入,forget gate选择遗忘哪些过去信息,我觉得这算是一定程度的Attention了,而且号称可以解决长期依赖问题,实际上LSTM需要一步一步去捕捉序列信息,在长文本上的表现是会随着step增加而慢慢衰减,难以保留全部的有用信息。
- ① 直接使用最后的hidden state(可能会损失一定的前文信息,难以表达全文)/ ② 对所有step下的hidden state进行等权平均(对所有step一视同仁)/ ③ Attention机制,对所有step的hidden state进行加权,把注意力集中到整段文本中比较重要的hidden state信息
- 纯Attention:Attention is all you need 2017
- CNN+Attention:卷积操作可以看成提取重要特征的操作,多层cnv扩大视野;池化层如maxpooling提取最大数值的特征,像hard attention的思想!(注意这里还是NLP的cnn+attention)
- 相似度计算方法:① 点乘 就是向量积 ② 矩阵相乘 ③ 余弦相似度 ④ concatenate ⑤ 多层感知器
- Pytorch - seq2seq参考
BERT
- Bidirectional Encoder Representation from Transformers
- BERT是双向Transformer的Encoder,因为decoder是不能获要预测的信息的
- 模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
- 从现在的大趋势来看,使用某种模型预训练一个语言模型看起来是一种比较靠谱的方法。从之前AI2的 ELMo,到 OpenAI的fine-tune transformer,再到Google的这个BERT,全都是对
预训练的语言模型
的应用。BERT这个模型与其它两个不同的是 - 在训练双向语言模型时以减小的概率把少量的词替成了Mask或者另一个随机的词。我个人感觉这个目的在于使模型被迫增加对上下文的记忆。至于这个概率,我猜是Jacob拍脑袋随便设的。
- 增加了一个预测下一句的loss。这个看起来就比较新奇了。
- BERT模型具有以下两个特点:
- 1 是这个模型非常的深,12层,并不宽(wide),中间层只有1024,而之前的Transformer模型中间层有2048。这似乎又印证了计算机图像处理的一个观点——深而窄 比 浅而宽 的模型更好。
- 2 MLM(Masked Language Model),同时利用左侧和右侧的词语,这个在ELMo上已经出现了,绝对不是原创。其次,对于Mask(遮挡)在语言模型上的应用,已经被Ziang Xie提出了(我很有幸的也参与到了这篇论文中):[1703.02573] Data Noising as Smoothing in Neural Network Language Models。这也是篇巨星云集的论文:Sida Wang,Jiwei Li(香侬科技的创始人兼CEO兼史上发文最多的NLP学者),Andrew Ng,Dan Jurafsky都是Coauthor。但很可惜的是他们没有关注到这篇论文。用这篇论文的方法去做Masking,相信BRET的能力说不定还会有提升。