(5)一文懂“NLP 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

  • 13
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的语言模型,它可以用于各种自然语言处理任务,例如文本分类、命名实体识别、问答等等。bert-base-chinese是针对中文语言的BERT预训练模型。 使用bert-base-chinese模型,可以按照以下步骤进行: 1. 安装相应的Python库,例如transformers库,可以使用pip install transformers进行安装。 2. 加载bert-base-chinese模型,可以使用transformers库中的BertModel类和BertTokenizer类。BertTokenizer类可以将输入文本转换为模型输入的格式,BertModel类则是BERT模型的实现。 3. 对文本进行预处理,包括分词、截断、填充等操作,将文本转换为模型输入的格式。 4. 调用BertModel类进行预测,得到模型的输出结果。 以下是一个使用bert-base-chinese模型进行文本分类的示例代码: ```python from transformers import BertTokenizer, BertModel import torch # 加载bert-base-chinese模型和tokenizer tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = BertModel.from_pretrained('bert-base-chinese') # 输入文本 text = "这是一段测试文本" # 对文本进行预处理 inputs = tokenizer(text, return_tensors='pt') input_ids = inputs['input_ids'] attention_mask = inputs['attention_mask'] # 调用BertModel类进行预测 outputs = model(input_ids, attention_mask=attention_mask) ``` 在以上示例代码中,我们首先加载了bert-base-chinese模型和tokenizer,然后将文本转换为模型输入的格式,最后调用BertModel类进行预测。在预测过程中,我们可以得到模型的输出结果outputs,可以使用这些输出结果进行各种自然语言处理任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值