在[#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}$进入注意力层后:
- 通过${W_q}$、${W_k}$、${W_v}$得到${Q}$、${K}$、${V}$。
- 计算注意力权重,并与${V}$相乘。
- 将注意力输出与原始输入${X}$相加。
- 对相加后的结果进行LayerNorm。
形似:
$$ Y = \text{LayerNorm}(X + \text{MultiHeadAttention}(X)) $$
经过这一步,
Token既获得了其他Token的信息,
也保留了原本的信息。
后续还会进入前馈神经网络,
继续进行一次残差连接和归一化。
图解:
