引言
自注意力机制在很长的一段时间都令我困扰,看了很多教程依旧无法理解,好在最后还是搞清楚了,详情:最浅显易懂的自注意力机制讲解,杜绝QKV
接下来会进一步的介绍Transformer,实话说我认为搞清楚自注意力机制后Transformer就很容易理解了,所以标题是“算不上最浅显易懂”。
概览
下面是Transformer架构, 包括编码块和解码块:
单纯看架构比较晦涩,不妨将Transformer看作一个黑盒,Transformer模型最初是为了翻译任务而设计的,在训练过程中,encoder接受源语言句子作为输入, decoder接受目标语言的翻译以及encoder的输出作为输入,不同于encoder,decoder顺序的进行解码,在生成每个词语时,注意力层只能访问前面已经生成的单词。因此我们需要在这里加一层掩码
正是因为decoder既逐个生成目的句子的翻译,又关注encoder的所有输出信息,所以可以在翻译任务上取得很好的成绩,因为同一句话在不同语言下的词语顺序可能并不一致。
多头注意力
对于Transformer最重要的多头注意力的部分了,关于注意力,之前的文章已经讲的很清晰了,这里就不赘述了:最浅显易懂的自注意力机制讲解,杜绝QKV
本文主要强调多头的意义:3. 我们希望通过拆分的方式,观察一个词在不同角度和其他词的相关性,比如一个词可能是名词,也可能是动词。在这种情况下,他的注意力分布一定是不同的。
如图,每个注意力头负责关注某一方面的语义相似性,多个头就可以让模型同时关注多个方面。多头注意力想较于自注意力可以捕获到更加复杂的特征信息。
残差网络和归一化
过深的网络会因为梯度的连乘,使得在反向传播的过程中,要么是梯度趋近于0(梯度消失),要么是梯度变得极大(梯度爆炸),这会让神经网络难以训练,在Transformer中,残差网络和归一化是decoder的重要组成部分,他们的作用是:
- 残差网络为梯度的反向传播提供了一条直接的通道,避免了梯度消失或爆炸
- LayerNormalization 标准化技术防止梯度爆炸或消失,在处理语言序列,LN相较于BN,没有因输入序列可变导致BN大小不固定进而训练不稳定的缺点
总结
通过这篇文章,可以从已掌握的自注意力机制出发,大致了解Transformer机制,如果想真正掌握,最好还是手敲一遍代码,这里推荐Umar Jamil 的从头开始实现 Transformer 模型