Self Attention:由Dot-Product(向量點乘)說起
https://lulaoshi.info/deep-learning/attention/transformer-attention.html#self-attention-從向量點乘說起
Transformer[1]論文提出了一種Self-Attention(自注意力機制), Self-Attention的最核心的公式為:
\(\large \begin{align*} \\
& Attention(Q,K,V)=Softmax( \frac{QK^⊤}{\sqrt{d_k}} )V \\
& where, Q : Query,\ K : key,\ V : Value \\
\\
\end{align*} \\
\)
單看這個公式,其實並不能很好地理解Attention到底在做什麼,
本文從Transformer所使用的Self-Attention,介紹Attention背後的原理。
Self-Attention:從向量點乘說起
我們先從:\(\large Softmax(XX ^⊤)X\)這樣一個公式開始。
首先需要複習\(\large Dot\ Product\)(向量點乘)的概念。對於兩個\(\large 行向量x和y\):
\(\large \begin{align*} \\
& x &=[x_0, x_1, \cdots, x_n] \\
& y &=[y_0, y_1, \cdots, y_n] \\
& x \cdot y &= x_0 \cdot y_0, x_1 \cdot y_1, \cdots, x_n \cdot y_n]
\end{align*} \\
\)
Self-Attention:
在這個基礎上,再進一步:
𝑆
𝑜
𝑓
𝑡
𝑚
𝑎
𝑥
(
𝑋
𝑋
⊤
)
𝑋
Softmax(XX
⊤
)X,將得到的歸一化的權重矩陣與詞向量矩陣相乘。權重矩陣中某一行分別與詞向量的一列相乘,詞向量矩陣的一列其實代表著不同詞的某一維度。經過這樣一個矩陣相乘,相當於一個加權求和的過程,得到結果詞向量是經過加權求和之後的新表示,而權重矩陣是經過相似度和歸一化計算得到的。
透過與權重矩陣相乘,完成加權求和過程
上述過程用 PyTorch 實現: