【TimeSerias】Transformer

Sequence

1. rnn 和 cnn【TimeSerias】Transformer_第1张图片

【TimeSerias】Transformer_第2张图片

  • RNN 很难并行化
  • CNN很难捕捉较远的信息

2. Self-attention

【TimeSerias】Transformer_第3张图片

  • 拿每个query q去对每个 key k做attention
    【TimeSerias】Transformer_第4张图片
  • 计算输出
    【TimeSerias】Transformer_第5张图片

Self-attition 矩阵计算

q i = W q a i k i = W k q i v i = W v a i Q = W q A K = W k A V = W v A (1.1) \begin{align*} q^i =& W^q a^i \\ k^i =& W^k q^i \\ v^i = & W^va^i \\ Q =& W^qA \\ K =& W^kA \\ V =& W^vA \end{align*} \tag{1.1} qi=ki=vi=Q=K=V=WqaiWkqiWvaiWqAWkAWvA(1.1)

计算输出:
A ^ = softmax ( K ⊤ Q ) d B = V ∗ A ^ (1.2) \begin{align*} \hat{A} =& \frac{\text{softmax}(K^{\top}Q)}{\sqrt{d}} \\ B =& V * \hat{A} \end{align*} \tag{1.2} A^=B=d softmax(KQ)VA^(1.2)

Muti-head Self-attention

【TimeSerias】Transformer_第6张图片

  • 多头自注意力机制在 q、k、v
  • qi1 之和 ki1 、vi1 操作
  • 最后将多头的结果 拼接
  • [ b i , 1 b i , 2 ] [b^{i,1} b^{i,2}] [bi,1bi,2]做降维即:
    b i = W i [ b i , 1 b i , 2 ] ⊤ b^i = W^i [b^{i,1} b^{i,2}]^{\top} bi=Wi[bi,1bi,2]
  • 头的数量是超参数,一个可能的解释是,不同的头可能关注的点不一样,关注Long-Time 或者 Short-Time

Positional Encoding

解决问题:

  • 在 self-attention 中没有位置信息
    【TimeSerias】Transformer_第7张图片
    使用 e i e^i ei来对位置进行编码。使用: e i + a i e^i + a^i ei+ai 作为输入
  • 为什么不是concat 而是相加?
  • 假设有一个one-hot 的位置编码,做位置拼接。在后续的运算中,可以发现:
  • W I x i W^Ix^i WIxi a i a^i ai
  • W P p i W^Pp^i WPpi e i e^i ei
  • concat 和直接相加后运算等价
    【TimeSerias】Transformer_第8张图片
    - W p W^p Wp 怎样计算?

Transformer

【TimeSerias】Transformer_第9张图片

【TimeSerias】Transformer_第10张图片

你可能感兴趣的:(transformer,深度学习,人工智能)