当前位置:   article > 正文

(5)一文懂“NLP Bert-base” 模型参数量计算

bert-base

    Bert 的模型由多层双向的Transformer编码器组成,由12层组成,768隐藏单元,12个head,总参数量110M,约1.15亿参数量。

1、词向量参数(embedding)

    词向量包括三个部分的编码:词向量参数,位置向量参数,句子类型参数。

    词汇量的大小vocab_size=30522

    隐藏层hidden_size=768 (即词向量维度d_model=768

    文本输入最长大小max_position_embeddings=512

    词向量参数token embedding=30522*768

    位置向量参数position embedding=512*768

    句子类型参数Segment embedding=2*768(2个句子,0和1区分上下句子)

    故,embedding总参数 = (30522+512+2)*768 = 23,835,648 = 22.7MB

2、multi-heads参数(Multi-Heads Attention)

    单头与多头注意力结构如下:

    假设输入X(x, 768),则Q=XW(Q)=(x, 64),K=XW(K)=(x, 64),V=XW(v)=(x, 64)

    QK(T)=(x, x),V=(x, 64)

    Z=softmax(QK(T)/8)*V=(x, 64),12头concat又进行了线性变换(下图为8头Transformer示例)

     Z(concat)=(x, 64*12)

    故W(O) = (768, 768),最终Z=(x, 768),与输入保持一致

    权重矩阵W(Q)/W(K)/W(V)维度为:(768, 768/12=64)

    权重矩阵W(O)维度为:(768, 768)

    故,12multi-heads的参数为:768*64*3*12 + 768*768 = 2,359,296

    故,12multi-heads的参数为:2,359,296 * 12 = 28,311,552 = 27MB

3、全连接层(FeedForward)参数

    前馈网络feed forword的参数主要由2个全连接层组成,论文中全连接层的公式为:

         FFN(x) = max(0, xW1 + b1)W2 + b2

    其中用到了两个参数W1和W2,Bert沿用了惯用的全连接层大小设置,即4 * dmodle = 3072,因此,W1,W2分别为(768, 3072),(3072, 768)

    故,12层的全连接层参数为:12*( 2 * 768 * 3072)= 56,623,104 = 54MB(未统计Bias)

4、LayerNorm层

    LN层有gamma和beta等2个参数。在三个地方用到了layernorm层:embedding层后、multi-head attention后、feed forward后。

    故,12层LN层参数为:768*2 + (768*2)*12 + (768*2)*12 = 38,400 = 37.5KB

5、结论

    Base Bert的encoder用了12层,因此,最后的参数大小为:

    1)词向量参数(包括layernorm) = (30522+512+2)* 768 + 768 * 2

    2)12 * (Multi-Heads参数 + 全连接层参数 + layernorm参数) =

                12 *((768*64*3*12 + 768*768) + (768 * 3072 * 2) + (768*2*2))

    Total:108808704.0 ≈ 104MB

    注:本文介绍的参数仅仅是encoder的参数,基于encoder的两个任务next sentence prediction 和 MLM涉及的参数(分别是768 * 2,768 * 768,总共约0.5M)并未加入,此外涉及的bias由于参数很少,本文也并未加入。

参考:https://blog.csdn.net/weixin_43922901/article/details/102602557

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号