这个算是在课程学习之外的探索,不过希望能尽快用到项目实践中。在文章里会引用较多的博客,文末会进行reference。
搜索Transformer机制,会发现高分结果基本上都源于一篇论文Jay Alammar的《The Illustrated Transformer》(图解Transformer),提到最多的Attention是Google的《Attention Is All You Need》。
- 对于Transformer的运行机制了解即可,所以会基于这篇论文来学习Transformer,结合《Sklearn+Tensorflow》中Attention注意力机制一章完成基本的概念学习;
- 找一个基于Transformer的项目练手
1.从seq2seq到Attention
本节内容学习自《从Seq2seq到Attention模型到Self Attention》
上一节实现了一个打乱单词字母顺序的seq2seq,本节希望学习MT领域如何从Seq2seq演进至Attention model再至self attention,为之后Transformer的学习铺垫。
Seq2seq全名是Sequence-to-sequence,也就是从序列到序列的过程,是近年当红的模型之一。Seq2seq被广泛应用在机器翻译、聊天机器人甚至是图像生成文字等情境。Seq2seq常见情境为机器翻译,因此接下来的内容都会以情境进行说明。
从LSTM & GRU 到seq2seq
教程中分析了LSTM 、 GRU 、 seq2seq三个模型。
- 最早的RNN是通过时序将上一阶段的hidden state(h_t)输出作为本次的输入,以此达到“记忆”的目的。这也就带来了梯度消失和梯度爆炸的问题。
- 为了对应RNN的梯度爆炸/消失问题,引入了遗忘/输入/输出门(forget/input/output gate),隐藏状态(hidden state),记忆单元(cell memory)等概念。
- 上一节已经提到,seq2seq包含两部分:Encoder和Decoder。一旦将句子输入至Encoder,即可从Decoder获得目标句。Encoder就是个单纯的RNN / LSTM。
Decoder的公式和RNN的差别在于Decoder多了一个C (context vector/thought vector)。
context vector可以看成是一个含有所有输入句信息的向量,也就是Encoder的最后一个hidden state。简单来说,Encoder将输入句压缩成固定长度的context vector,context vector即可完整表达输入句,再透过Decoder将context vector内的信息产生输出句。
但是问题来了,固定长度的context vector是否合适?就像上一节中包含有20个以上字符的单词,预测结果并不理想。
于是,注意力模型(attention model)被引入。
注意力模型(attention model)
1.如何计算context vector
attention model替输入句的每个文字都创造一个context vector,而非仅仅替输入句创造一个从最终的hidden state得来的context vector。
举例来说,如果一个输入句有N个文字,就会产生N个context vector,好处是,每个context vector能够被更有效的译码。
教程在这里很详细的讲了一下理论机制,我没看懂,有兴趣的可以看一下原帖,我们继续。
Attention score是attention model中提出一个很重要的概念,可以用来衡量输入句中的每个文字对目标句中的每个文字所带来重要性的程度。在Neural Machine Translation发表之后,接续的论文Effective approaches of the NMT、Show,Attend and Tell提出了global/local attention和soft/hard attention的概念。
softmax算出attention score,进一步attention score列为矩阵,透过此矩阵可看到输入端文字和输出端文字间的对应关系,也就是论文当中提出align的概念。
2.attention model中的encoder
attention model中的encoder用的是改良版RNN:双向RNN(Bi-directional RNN)。
以往单向RNN的问题在于t时刻时,只能透过之前的信息进行预测,但事实上,模型有时候可能也需要利用未来时刻的信息进行预测,其运作模式为,一个hidden layer用来由左到右,另一个由右到左,透过双向RNN,我们可以对词语进行更好的预测。
eg:”我喜欢苹果,因为它很好吃”?和”我喜欢苹果,因为他比安卓稳定”这两个句子当中,如果只看”我喜欢苹果”,你可能不知道苹果指的是水果还是手机,但如果可以根据后面那句得到信息,答案就很显而易见,这就是双向RNN运作的方式。
3.attention model的缺点
attention model解决了输入句仅有一个context vector的缺点,但依旧存在不少问题。
- context vector计算的是输入句、目标句间的关联,却忽略了输入句中文字间的关联,和目标句中文字间的关联性。
- 不管是Seq2seq或是Attention model,其中使用的都是RNN,RNN的缺点就是无法平行化处理,导致模型训练的时间很长,有些论文尝试用CNN去解决这样的问题,像是Facebook提出的Convolutional Seq2seq learning,但CNN实际上是透过大量的layer去解决局部信息的问题。
在2017年,Google提出了一种叫做”The transformer”的模型,透过self attention、multi-head的概念去解决上述缺点,完全舍弃了RNN、CNN的构架。Transformer终于登场了……