Attention is all you need

本文最后更新于:1 年前

\(开山之作\text{:}\ \mathbf{Attention\ is\ all\ you\ need}\)

  1. CNN 并行但只能学习有限信息(时间短、效果差

    学习远程句子困难,例如 making ... more difficult,空间受限。

  2. RNN 学习全局信息但不能并行(时间长、效果好

    输入顺序来分解计算 \(h^{(t)}=f(h^{(t-1)}, x^{(t)})\),时间受限。

  3. Transformer 使用 self-attention 结合 Multi 机制,并行化+学习全局信息(时间短、效果好


\(\mathbf{Scaled-dot\ product}\) 流程

\(I\)\(\begin{bmatrix}a^1 &a^2 & \cdots & a^n\end{bmatrix}\),权重 \(I=WX\)。每个 \(\text{query, key and value}\) 分别为 \(q^i, k^i, v^i\),组装为 \(Q,K,V\),对应权重 \(Q=W^{q}I,K=W^{k}I,V=W^{v}I\)\(\text{query}\)\(\text{key}\) 点积并正则化得到

\[ \alpha_{i j}=\frac{\left\langle q^i, k^j\right\rangle}{\sqrt{d_k}}\tag{1} \]

并计算 \(\text{softmax}_{ij}=\hat{\alpha}_{ij}=\dfrac{\exp{\alpha_{ij}} }{\sum_{j} \exp(\alpha_{ij})}\),最后计算 \(B=\hat{A}V\) 得到输出。

如果有 \(h\) 层,由于为线性空间变换,可以拼接矩阵然后作相同计算允许模型在不同的子空间中学习相关的信息,主要目的是抽取更加丰富的特征信息。

这样就避免了循环神经网络中运算有先后的问题,同时复杂度没有卷积神经网络那么大(矩阵乘法运算也可以优化,论文中维度取为 \(512,1024\)\(2\) 的幂次便于分治算法,详见参考算法导论中对贪心调度器的讨论)


时间复杂度降低

在卷积神经网络中,由于要保证输出矩阵为方阵(每个词表示向量间的权重关系,一共 \(n\) 个词,从而 \(n\cdot d^2\) 个元素),而方阵中的每个元素都是通过卷积核运算得到的,令卷积核的大小为 \(k\),则每个元素的浮点运算次数($ $)为 \(k\cdot n\cdot d^2\)

在注意力机制中,各矩阵维数 \(Q, K, V: n \times d\)

  • \(Q K^T: n \times d\)\(d \times n\) 运算,得到 \(n \times n\) 矩阵,复杂度为 \(O\left(n^2 d\right)\)
  • \(\text{softmax}\)计算: 对每行复杂度为 \(O(n)\),则 \(n\) 行的复杂度为 \(O\left(n^2\right)\)
  • 加权和: \(n \times n\)\(n \times d\) 运算,得到 \(n \times d\) 矩阵,复杂度为 \(O\left(n^2 d\right)\)

在本文中将三者矩阵拆成 \(h=8\) 个头用于并行计算,相当于第一个 \(n\) 减少为 \(r\),复杂度为 \(O(rnd)\)\(\text{Multi}\) 由此而来,不同的 \(\text{Multi}\) 可以学习到不同的状态。


正则化系数推导

在论文中结合其注释可以推导,由公式 \((1)\) 中为两个维度为 \(d_k\) 的向量点积,从线性空间的角度从 \(\mathbb{R}^n\longrightarrow \mathbb{R}\),其误差会放大,假设 \(q^{\prime}=q-\overline{q}\)\(,v^{\prime}=v-\overline{v}\),可以理解为中心偏差计算两者点积的期望和方差,假设两者方差相同

\[ \begin{cases} \displaystyle E\left[\sum_{i}q_{i}v_{i}\right]=\sum_{i}E[q_i]E[v_i]=0\\ \displaystyle E\left[\left(\sum_{i}q_{i}v_{i}\right)^2\right]=\sum_{i}E\left[q_{i}^2\right]E\left[v_{i}^2\right]=d_{k}\text{Var}(q_i)^2 \end{cases}\tag{2} \]

如果除以 \(\sqrt{d_{k}}\),则能保证方差不变,从而噪声不会展平,效果会更好。(这里保证初始的方差为 \(1\),见后面的预处理)


\(\mathbf{position}\) 编码增加位置信息

论文中对输入向量增加了位置编码张量

\[ \begin{aligned} P E_{(p o s, 2 i)} & =\sin \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \\ P E_{(p o s, 2 i+1)} & =\cos \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \end{aligned}\tag{3} \]

在 NLP 任务中能学习到以 10000 个分词为跨度的权重已经达到极限了,相当于这些平面波构成词向量所有组合的“完备空间”。至于分奇偶是要求当位置变化 k 时,由三角函数公式均可被线性表出。

位置编码也可以通过训练获得,两者效果相似。


隐藏层的正则化处理

这里运用中心极限定理将数据正则化,其中分布中添加的 \(\epsilon>0\) 是为了防止分母为 \(0\)

\[ \begin{aligned}\mu_L&=\frac{1}{m} \sum_{i=1}^m x_i \\ \delta^2&=\frac{1}{m} \sum_{i=1}^m\left(x_i-\mu\right)^2 \\ L N\left(x_i\right)&=\alpha \frac{x_i-\mu_L}{\sqrt{\delta^2+\epsilon}}+\beta\end{aligned}\tag{4} \]

这样就能保证公式 \((2)\) 中的方差不变。


Attention is all you need
https://lr-tsinghua11.github.io/2023/01/19/NLP/Attention_is_all_you_need_notes/
作者
Learning_rate
发布于
2023年1月19日
许可协议