在[#260811]中,
通过注意力机制让Token之间互相查看,
得到新的向量。


但注意力机制只是Transformer中的一部分,
还需要通过残差连接和归一化,
让模型能稳定地不断堆叠更多层。


一、残差连接


在Transformer中,
注意力机制的输出不会直接替换原始输入。


而是将原始输入${X}$
和注意力机制输出相加:

$$ Y = X + \text{Attention}(X) $$


其中${X}$为进入当前层的向量,
$\text{Attention}(X)$为注意力机制计算出的新向量。


简单来说:

原来的信息保留,
注意力机制计算出的信息也保留。


这样即使后续层学不到有用的内容,
也可以至少将原始信息继续传下去。


同时,
残差连接可以缓解深层网络训练时的梯度消失问题。


图解:


二、归一化


在[#260810]中提到过Softmax归一化,
其目的是让输出的概率总和为1。


而Transformer中常用的归一化为LayerNorm
用于让每一层的向量数值保持在稳定范围内。


设输入向量为:

$$ X = (x_1, x_2, \dots, x_d) $$


先计算向量的平均值:

$$ \mu = \frac{1}{d}\sum_{i=1}^{d}x_i $$


再计算方差:

$$ \sigma^2 = \frac{1}{d}\sum_{i=1}^{d}(x_i-\mu)^2 $$


最后进行归一化:

$$ \text{LayerNorm}(x_i)=\gamma\frac{x_i-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta $$


其中:

  • $\epsilon$:防止分母为0的小数。
  • $\gamma$:缩放参数。
  • $\beta$:偏移参数。

$\gamma$和$\beta$与${W_q}$、${W_k}$、${W_v}$一样,
都可以在模型训练中慢慢确定。


简单来说:

LayerNorm会先让向量中的数值,
回到相对稳定的范围内。


再通过$\gamma$和$\beta$,
让模型自行决定应当放大、缩小或偏移多少。


三、注意力层的完整过程


输入向量${X}$进入注意力层后:

  1. 通过${W_q}$、${W_k}$、${W_v}$得到${Q}$、${K}$、${V}$。
  2. 计算注意力权重,并与${V}$相乘。
  3. 将注意力输出与原始输入${X}$相加。
  4. 对相加后的结果进行LayerNorm。

形似:

$$ Y = \text{LayerNorm}(X + \text{MultiHeadAttention}(X)) $$


经过这一步,
Token既获得了其他Token的信息,
也保留了原本的信息。


后续还会进入前馈神经网络,
继续进行一次残差连接和归一化。


图解: