網(wǎng)站文化建設軟文新聞發(fā)布網(wǎng)站
以下用形狀來描述矩陣。對于向量,為了方便理解,也寫成了類似(1,64)這種形狀的表示形式,這個你理解為64維的向量即可。下面講的矩陣相乘都是默認的叉乘。
詞嵌入矩陣形狀:以BERT_BASE為例,我們知道其有12層Encoder,12個Head。對于中文版的BERT_BASE來說,詞嵌入矩陣的形狀為(21128,768),其中21128就是詞典的大小,768是詞典中的每個字對應的維度。
需要注意的是這個維度其實可以是其他值,只不過官方恰巧給的是768=64×12(12個head,每個head是64維),對于Transformer的Encoder來說,這個維度是512,這個時候512≠64×6(6個head,每個head為64維)。一般來說Encoder層數(shù)越多,該詞向量維度也應該越大,畢竟整個網(wǎng)絡參數(shù)數(shù)量增大之后,有能力學習更多維度的信息。
詞向量維度:然后我們知道,每個位置x的輸入其實一開始是一個序數(shù),通過這個序數(shù)便可以在上述詞嵌入矩陣中查找到相應的詞向量,每個位置x的詞向量維度為(1,768)。對于整個BERT序列來說,其序列長度為512,所以BERT序列的形狀為(512,768)。
Q、K、V向量的維度:這個是論文中固定的,維度都是(1,64)。而由詞向量x到Q、K、V向量是分別乘以一個權重矩陣(Wq、Wk、Wv)得到的,所以權重矩陣的形狀為(768,64)。上述都是一個head的情況,擴展到12個head,那么整個權重矩陣的形狀就變成了(768,768)。這樣詞向量x和這個權重矩陣相乘后得到維度為(1,768)維度的向量,然后經(jīng)過切分在單個head上為(1,64)維度的向量。
注意力計算后的維度:注意力的計算如下,這里盜個圖,鏈接為:
https://zhuanlan.zhihu.com/p/48508221
可知Q向量(1,64)和K的轉置(64,1)相乘后其實就變成了一個數(shù),該數(shù)再和V向量進行數(shù)乘得到的z向量,維度和V一樣,為(1,64)。多個head中的z向量進行拼接得到(1,768)維的Z’向量。Z’向量再乘以一個轉換矩陣Wo(768,768)得到最終的Z向量(1,768)。
需要注意的是,上述圖中的Q、K、V向量均有兩個,最終得到兩個z向量。并且這里公式?jīng)]有考慮掩碼的情況,但是掩碼并不影響矩陣的形狀。
前饋神經(jīng)網(wǎng)絡(FFNN)的形狀:前饋神經(jīng)網(wǎng)絡用一句話概括就是對于多頭注意力的輸出先進行線性變化,然后經(jīng)過激活函數(shù)之后再進行線性變換。前饋神經(jīng)網(wǎng)絡的維度為3072,由于單個時刻多頭注意力的輸出維度為(1,768),第一個線性變換的矩陣形狀為(768,3072),第二個線性變換矩陣的形狀為(3072,768)。