CSAPP(第三版)第三章程式的機器級表示學習筆記
阿新 • • 發佈:2022-05-10
由於老是忘記transformer的細節,今天整個筆記記一下,免得又忘了
一個batch 有batch_size
句話,一句話有n
個單詞,不夠就pad到n,超出就截斷
嵌入層嵌入後,輸出維度是[batchsize, n, d_model]
也就是每個單詞的嵌入是一個(1, d_model)
的向量
進入到self-attention。先計算q, k, v
,每個單詞都有一個q, k, v
對於一個單詞的詞嵌入
對所有的單詞,\(W^Q,W^K,W^V\)
都是一樣的
然後計算每個單詞和其他所有單詞的注意力分數,對於一個單詞的q
和其他所有單詞(包括自己)的v
之間的相似度,每個相似度是一個標量,所以一個單詞和n
個單詞的相似度是\(R^{1\times n}\)的向量,然後對這個向量做softmax,得到的結果和各個單詞的v
加權和,作為一個單詞的attention輸出。
整個句子的輸出是
\[Z^{n\times d_{model}}\ = softmax(QK^T/\sqrt{d_k})V \]多頭注意力
生成h
個
這樣,對於每個單詞,可以得到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}\)