針對上圖分別從每個部分進行計算。
- BERT-Base, Uncased 12層,768個隱單元,12個Attention head,110M參數
- BERT-Large, Uncased 24層,1024個隱單元,16個head,340M參數
- BERT-Base, Cased 12層,768個隱單元,12個Attention head,110M參數
- BERT-Large, Uncased 24層,1024個隱單元,16個head,340M參數。
bert base 12層 768隱藏單元 12個head 共110M
vocab_size=30522,
hidden_size=768,
max_position_embeddings=512,
token_type_embeddings=2
第 1 部分:
Token Embeddings:總詞彙是30522每個輸出維度都是768,參數量是30522*768
Position Embeddings:transformer中位置信息是通過sincos生成,但是在bert中是學出來了 (原文中說的應該是的數據量足,能學出來)最大長度是512所以這裏參數量是512*768
Segment Embeddings:用1和0表示,所以參數是2*768
所以這個部分就是 (30522+512 + 2)* 768=23835648
第 2 部分(注意力部分):
multi-head因爲分成12份
單個head的參數是 768 * 768/12 * 3
12個head就是 768 * 768/12 * 3 * 12
緊接着將多個head進行concat再進行變換,此時W的大小是768 * 768
所以這個部分是768 * 768/12 * 3 * 12 + 768 * 768=2359296
第 3 部分(殘差和norm):
norm使用的是layer normalization,每個維度有兩個參數
768 * 2 = 1536
第 4 部分(前向傳播):
有兩層
第一層:768*3072(原文中4H長度) + 3072=2360064
第二層:3072*768+768=2362368
=4722432
第 5 部分(殘差和norm):
768 * 2 = 1536
總共參數:
1的部分+(2,3,4,5部分)*12
23835648+(2359296+1536+2362368+1536)= 108,853,248 約等於109M參數