算不上最浅显易懂的Transformer机制讲解

158 阅读3分钟

引言

自注意力机制在很长的一段时间都令我困扰,看了很多教程依旧无法理解,好在最后还是搞清楚了,详情:最浅显易懂的自注意力机制讲解,杜绝QKV

接下来会进一步的介绍Transformer,实话说我认为搞清楚自注意力机制后Transformer就很容易理解了,所以标题是“算不上最浅显易懂”。

概览

下面是Transformer架构, 包括编码块和解码块: image.png

单纯看架构比较晦涩,不妨将Transformer看作一个黑盒,Transformer模型最初是为了翻译任务而设计的,在训练过程中,encoder接受源语言句子作为输入, decoder接受目标语言的翻译以及encoder的输出作为输入,不同于encoder,decoder顺序的进行解码,在生成每个词语时,注意力层只能访问前面已经生成的单词。因此我们需要在这里加一层掩码

image.png

正是因为decoder既逐个生成目的句子的翻译,又关注encoder的所有输出信息,所以可以在翻译任务上取得很好的成绩,因为同一句话在不同语言下的词语顺序可能并不一致。

多头注意力

对于Transformer最重要的多头注意力的部分了,关于注意力,之前的文章已经讲的很清晰了,这里就不赘述了:最浅显易懂的自注意力机制讲解,杜绝QKV

本文主要强调多头的意义:3. 我们希望通过拆分的方式,观察一个词在不同角度和其他词的相关性,比如一个词可能是名词,也可能是动词。在这种情况下,他的注意力分布一定是不同的。

image.png

如图,每个注意力头负责关注某一方面的语义相似性,多个头就可以让模型同时关注多个方面。多头注意力想较于自注意力可以捕获到更加复杂的特征信息。

残差网络和归一化

过深的网络会因为梯度的连乘,使得在反向传播的过程中,要么是梯度趋近于0(梯度消失),要么是梯度变得极大(梯度爆炸),这会让神经网络难以训练,在Transformer中,残差网络和归一化是decoder的重要组成部分,他们的作用是:

  1. 残差网络为梯度的反向传播提供了一条直接的通道,避免了梯度消失或爆炸
  2. LayerNormalization 标准化技术防止梯度爆炸或消失,在处理语言序列,LN相较于BN,没有因输入序列可变导致BN大小不固定进而训练不稳定的缺点

总结

通过这篇文章,可以从已掌握的自注意力机制出发,大致了解Transformer机制,如果想真正掌握,最好还是手敲一遍代码,这里推荐Umar Jamil 的从头开始实现 Transformer 模型