【TimeSerias】Transformer
Sequence
1. rnn 和 cnn
- RNN 很难并行化
- CNN很难捕捉较远的信息
2. Self-attention
- 拿每个query q去对每个 key k做attention
- 计算输出
Self-attition 矩阵计算
qi=Wqaiki=Wkqivi=WvaiQ=WqAK=WkAV=WvA(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)dB=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=dsoftmax(K⊤Q)V∗A^(1.2)
Muti-head Self-attention
- 多头自注意力机制在 q、k、v
- qi1 之和 ki1 、vi1 操作
- 最后将多头的结果 拼接
- 对 [bi,1bi,2][b^{i,1} b^{i,2}][bi,1bi,2]做降维即:
bi=Wi[bi,1bi,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 中没有位置信息
使用 eie^iei来对位置进行编码。使用:ei+aie^i + a^iei+ai 作为输入 - 为什么不是concat 而是相加?
- 假设有一个one-hot 的位置编码,做位置拼接。在后续的运算中,可以发现:
- WIxiW^Ix^iWIxi 是 aia^iai
- WPpiW^Pp^iWPpi是eie^iei
- concat 和直接相加后运算等价
-WpW^pWp 怎样计算?