Attention is all you need
Attention is all you need
Attention is all you need
structure
Encoder and decoder
Encoder
编码器由6层组成,每层包含两个子层(多头注意力层,全连接网络层)在每层后使用残差连接和层归一化
残差连接类似一种兜底策略,目的是使得 就算模型的深度已经达到最优解,后面再增加冗余层也至少不会导致之前的效果下降 。
Decoder
同样由6层组成,但每层包含三个子层(增加了一个掩码多头注意力层)目的是为了防止当前位置注意到后续的位置。
Attention
$$
\mathrm{Attention}(Q,K,V)=\mathrm{softmax}(\frac{QK^T}{\sqrt{d_k}})V
$$
Q,K,V均来自于输入的特征的线性变换
其中Q代表着需要查询的信息,K代表着输入本身的内容,V代表着原本的信息。
所以如果不引入注意力机制,全部使用V就是简单的全连接神经网络
Q和K的乘积表示了需要的内容和本身的内容之间的相似度,进而指出了需要注意哪些内容
比例系数是为了防止softmax后的值过大,所有的注意力被分走,同时可以让softmax的偏导数不至于太小,加快收敛速度
Multi-Head Attention
$$
\text{MultiHead}(Q, K, V) = \text{Concat(head}_1, …, \text{head}_h)W^O
$$
$$
\text{where head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)
$$
将输入的dk维度,分成h个头来分别执行注意力操作 再将其拼接起来 这样做可以允许模型从不同的子空间关注不同的位置
FFN
作用是引入非线性变换增强模型的学习能力? 混合多头注意力处理的结果? 给模型一个思考的空间来处理注意力计算的结果? 在记忆方面有作用?
作用目前尚没有定论 有很多说法