1. 程式人生 > 其它 >CSAPP(第三版)第三章程式的機器級表示學習筆記

CSAPP(第三版)第三章程式的機器級表示學習筆記

由於老是忘記transformer的細節,今天整個筆記記一下,免得又忘了

一個batch 有batch_size句話,一句話有n個單詞,不夠就pad到n,超出就截斷
嵌入層嵌入後,輸出維度是[batchsize, n, d_model]
也就是每個單詞的嵌入是一個(1, d_model)的向量

進入到self-attention。先計算q, k, v,每個單詞都有一個q, k, v
對於一個單詞的詞嵌入

\[\bm{x}_{emb} \in R^{1\times d_{model}} \] \[\bm{q}^{1\times d_{model}}\ \ = \bm{x}_{emb}\bm{W^{Q}}, \bm{W^{Q}}\in R^{d_{model\ \ \ \ } \times d_{model}} \] \[\bm{k}^{1\times d_{model}}\ \ = \bm{x}_{emb}\bm{W^{K}}, \bm{W^{K}}\in R^{d_{model\ \ \ \ } \times d_{model}} \] \[\bm{v}^{1\times d_{model}}\ \ = \bm{x}_{emb}\bm{W^{V}}, \bm{W^{V}}\in R^{d_{model\ \ \ \ } \times d_{model}} \]

對所有的單詞,\(W^Q,W^K,W^V\)

都是一樣的

然後計算每個單詞和其他所有單詞的注意力分數,對於一個單詞的q和其他所有單詞(包括自己)的v之間的相似度,每個相似度是一個標量,所以一個單詞和n個單詞的相似度是\(R^{1\times n}\)的向量,然後對這個向量做softmax,得到的結果和各個單詞的v加權和,作為一個單詞的attention輸出。

\[z_{1}^{1\times d_{model}} = softmax(q_1 \cdot k_1^T, q_1 \cdot k_2^T, \cdots, q_1 \cdot k_n^T)V \]

整個句子的輸出是

\[Z^{n\times d_{model}}\ = softmax(QK^T/\sqrt{d_k})V \]

多頭注意力

生成h

\[W^Q, W^K \in R^{d_{model\ \ \ \ }\times d_k} \] \[W^V \in R^{d_{model\ \ \ \ }\times d_v} \]

這樣,對於每個單詞,可以得到h個輸出,都是\(R^{1\times d_v}\)的,然後把這h個輸出直接拼接在一起,就變成了\(R^{1\times hd_v}\)
然後經過一個全連線層\(W_0\in R^{hd_v \times d_{model}}\),輸出的結果是\(R^{1\times d_{model}}\)
這個輸出結果在經過FFN,也就是先變成2048維,再變回來512維,一層就結束了。

在實際中,設定了\(d_k = d_v\),並且\(hd_v = d_{model} = 512\),所以\(W_0\)變換在改變維度上沒有起作用,僅僅增加了模型引數。

順便提一句,BERT的hidden_size就是指這裡的\(d_{model}\)