(九)Transformer 模型,最牛皮的模型

Transformer 模型

  • Transformer 是一种 Seq2Seq 模型
  • Transformer 不是 RNN
  • Transformer 只有 Attention 和 Dense 层
  • Transformer 在 NLP 完爆其他模型

剥离 RNN,保留 Attention

Attention

Encoder 端的输入 x1,x2,,xm\bold x_1,\bold x_2,\dots,\bold x_m,经过映射生成 k:i\bold k_{:i}v:i\bold v_{:i}

  • Key: k:i=WKxi\bold k_{:i}=\bold W_K \bold x_i
  • Value: v:i=WVxi\bold v_{:i}=\bold W_V \bold x_i

Decoder 端的输入 x1,x2,,xt\bold x_1',\bold x_2',\dots,\bold x_t',经过映射生成 q:j\bold q_{:j}

  • Query: q:i=WQxj\bold q_{:i}=\bold W_Q \bold x_j'

计算权重向量 α:i\bold{\alpha_{:i}}

α:i=Softmax(KTq:1)\bold{\alpha_{:i}}=Softmax(\bold K^T\bold{q_{:1}})

计算上下文向量(Context Vector):

c:1=α11v:1++αm1v:m=Vα:1\bold c_{:1}=\bold{\alpha_{11}\bold{v_{:1}}}+\dots+\bold{\alpha_{m1}\bold{v_{:m}}}=\bold V \bold{\alpha_{:1}}

直到所有 c\bold c 向量都计算完毕

c:j=α1jv:1++αmjv:m=Vα:j\bold c_{:j}=\bold{\alpha_{1j}\bold{v_{:1}}}+\dots+\bold{\alpha_{mj}\bold{v_{:m}}}=\bold V \bold{\alpha_{:j}}

上面公式又可写作:

c:j=Vα:j=Vsoftmax(KTq:j)=Vsoftmax((WKX)TWQxj)\bold c_{:j}=\bold V \bold{\alpha_{:j}}=\bold V \cdot softmax(\bold K^T\bold q_{:j})=\bold V \cdot softmax(\bold {(\bold W_K \bold X)}^T\bold {\bold W_Q \bold x_j'})

所以每个 c\bold c 向量都只和当前的 xj\bold x_j' 与 所有的 xi\bold x_i 相关。

这就是 Attention:

C=Attn(X,X)\bold C=\text{Attn}(\bold X,\bold X')

  • Encoder 的输入:X=[x1,x2,,xm]\bold X=[\bold x_1,\bold x_2,\dots,\bold x_m]
  • Decoder 的输入:X=[x1,x2,,xt]\bold X'=[\bold x_1',\bold x_2',\dots,\bold x_t']
  • 参数矩阵:WQ,WK,WV\bold W_Q,\bold W_K,\bold W_V

Self-Attention

对于 Self-Attention 来说,可用同一函数来处理,输入稍稍变一下即可

C=Attn(X,X)\bold C=\text{Attn}(\bold X,\bold X)

  • 输入:X=[x1,x2,,xm]\bold X=[\bold x_1,\bold x_2,\dots,\bold x_m]
  • 参数矩阵:WQ,WK,WV\bold W_Q,\bold W_K,\bold W_V

输入 x1,x2,,xm\bold x_1,\bold x_2,\dots,\bold x_m,经过映射生成 q:i\bold q_{:i}, k:i\bold k_{:i}v:i\bold v_{:i}

  • Query: q:i=WQxi\bold q_{:i}=\bold W_Q \bold x_i
  • Key: k:i=WKxi\bold k_{:i}=\bold W_K \bold x_i
  • Value: v:i=WVxi\bold v_{:i}=\bold W_V \bold x_i

计算所有的 α:j\bold \alpha_{:j} 向量(α1,α2,,αm\bold \alpha_{1},\bold \alpha_{2},\dots,\bold \alpha_{m}

α:j=Softmax(KTq:j)\bold{\alpha_{:j}}=Softmax(\bold K^T\bold{q_{:j}})

计算所有的 c:j\bold c_{:j} 向量(c1,c2,,cm\bold c_{1},\bold c_{2},\dots,\bold c_{m}

c:j=α1jv:1++αmjv:m=Vα:j\bold c_{:j}=\bold{\alpha_{1j}\bold{v_{:1}}}+\dots+\bold{\alpha_{mj}\bold{v_{:m}}}=\bold V \bold{\alpha_{:j}}

所有的 c\bold c 向量就是 Self-Attention 的输出

上面公式又可写作:

c:j=Vα:j=Vsoftmax(KTq:j)=Vsoftmax((WKX)TWQxj)\bold c_{:j}=\bold V \bold{\alpha_{:j}}=\bold V \cdot softmax(\bold K^T\bold q_{:j})=\bold V \cdot softmax(\bold {(\bold W_K \bold X)}^T\bold {\bold W_Q \bold x_j})

所以每个 c\bold c 向量都只和当前的 xj\bold x_j 与 所有的 xi\bold x_i 相关。

Multi-Head Self-Attention

单头自注意力可以被合并为多头自注意力,我愿称之为横向扩展

Stacked Self-Attention Layers

给每一个上下文向量后面都接一个 Dense 层,经过映射,再重新作为输入,接到到另一个 Self-Attention Layer。

我愿称之为纵向扩展。

Encoder

所以,以一个 Stacked Self-Attention Layers 作为 block。

6 个这样的 blocks 连在一起就叫做一个 Transformer 的 Encoder

Encoder

Decoder

以前熟悉的 LSTM Encoder + Decoder (Seq2Seq)整体变成了一个 Decoder,叠了6 层的Encoder 输出的结果目标文本经过多头 Self-Attention 的结果得到的上下文向量共同输入到多头 Attention 层,最终得到 z\bold z 向量,经过 Dense 层得到最终的输出 s\bold s

这样一个结构叫做一个 Decoder 的 block

Transformer

将 6 个 Decoders 和 6 个 Encoders 连接在一起,就得到了一个 Transformer

总结

Encoder 总结:

  • 1 encoder block ≈ multi-head self-attention + dense.
  • Input shape: 512 × m.
  • Output shape: 512 × m.
  • Encoder network is a stack of 6 such blocks.

Decoder 总结:

  • 1 decoder block ≈ multi-head self-attention + multi-head attention + dense.
  • Input shape: (512 × m, 512 × t)
  • Output shape: 512 × t.
  • Decoder network is a stack of 6 such blocks.

Transformer 的完整实现


   转载规则


《(九)Transformer 模型,最牛皮的模型》 Harbor Zeng 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
(十)BERT 是 Transformer 的 Encoder 而已 (十)BERT 是 Transformer 的 Encoder 而已
BERT (Bidirectional Encoder Representations from Transformers) Bert 是 Transformer 的 Encoder 预训练模型,训练技巧是:预测文本中被遮挡的单词,预测两个句子是否是原文中相邻的句子。 预测文本中被遮挡的单词 eee:被遮挡单词 cat 的 one-hot 向量 ppp:被遮挡的地方输出的概率分布 Loss
2021-01-17
下一篇 
  目录