x
1BertModel(
2 # token个数
3 vocab_size=30522,
4 # 词向量维度
5 d_model=768
6 # 隐藏层维度
7 hidden_size=768,
8 # 文本输入最长大小
9 max_position_embeddings=512,
10 # 句子个数
11 token_type_embeddings=2
12)
Token Embedding
token个数 * 词向量维度 = 30522 * 768
Segment Embedding
只有0和1区分上下句子 = 2 * 768
Position Embedding
文本输入最长大小 * 词向量维度 = 512 * 768
所以,embedding参数 = (30522 + 2 + 512)* 768 = 23835648
权重矩阵
BERT中head个数:12
BERT中Encoder(或看认为一次Multi Head Attention)个数:12
该步骤使用了
因此,
12层全连接层的参数为:12 * (768 * 3072 * 2) = 54MB (未考虑bias)
layer normalization有两个参数,分别是gamma和beta。有三个地方用到了layer normalization,分别是embedding层后、multi-head attention后、feed forward后,这三部分的参数为768*2+12*(768*2+768*2)=38400
参数量较小,忽略。
Embedding: (30522 + 2 + 512)* 768 = 23835648
Multi-head Attention:(768*64 * 12 * 3 + 768 * 768)* 12 = 28311552
FeedForward:12 * (2 * 768 * 3072) = 56623104
LayerNorm:768 * 2 + (768 * 2)*12 + (768 * 2)*12 = 38400
Total = 23835648 + 28311552 + 56623104 + 38400 = 108808704