关于Bert模型参数的分布

article/2025/9/14 23:42:37

参数分布

Bert模型的版本如下:

BERT-Base, Uncased: 12-layer, 768-hidden, 12-heads, 110M parameters

BERT-Large, Uncased: 24-layer, 1024-hidden, 16-heads, 340M parameters

BERT-Base, Cased: 12-layer, 768-hidden, 12-heads , 110M parameters

BERT-Large, Cased: 24-layer, 1024-hidden, 16-heads, 340M parameters

BERT-Base, Chinese: Chinese Simplified and Traditional, 12-layer, 768-hidden, 12-heads, 110M parameters

所有的输入长度最长为512,英文版的"vocab_size": 30522,中文版的"vocab_size": 21128

其中的parameters的数量很少有人关注过,下面就Bert模型中的参数进行一个简单的分析。

Bert模型的输入要做一个向量化,提取每个词的三维信息,如图:

因为,句子的长度不一样,而我们向量化的时候把每个输入都做成了512的长度,这里就需要一个类似补0的操作,我认为这里的表达形式也是一种参数的学习。因此在Embedding层也是有一个权重参数的。

然后就把处理好的向量输入到12个transformer blocks中,每一个transformer block(bert只是使用到transformer的encoder)中包含了encoder模块,具体的构成参考transformer相关文献。在encoder中主要是包含了self-Attention,前馈神经网络和归一化功能。

Self-Attention的主要功能是在编码当前单词的时候能够同时关注到上下文中和它有关的单词,在实现层面上,简单的说就是3个矩阵的自乘,矩阵计算形式:

这个Q、k和V都是要经过和网络的学习得到的权重矩阵做运算得到的,这里很有可能就涉及到大量的参数。

另外前馈神经网络做了全连接,每个连接需要对应的一个权重值——也就是权重参数。

根据具体的实现代码:logits_lm = self.decoder(h_masked)得知,最后在transformer blocks的后面还接入了一个全连接。这里也有一部分参数。

总体来说bert模型的参数主要包含3部分:Embeddding层的参数,transformer blocks的参数和最后输出的全连接参数。

第一部分的参数:

30522*768+512*768+4*768

第二部分参数:

【(768*768+768)*4+(768*2)+(3072*768*2+3072)+768*3】*12

第三部分参数:

768*768+768

参数个数总计:109482240~1.09亿

而BERT-Base, Chinese BERT-Base, Chinese总是约为1.02亿。

代码:

num_weights=0
for name, param in model.state_dict().items():#model为任意加载进来的一个bert模型if len(param.shape)==1:num_weights+=param.shape[0]print(name, param.shape,end='  ')print('参数个数为:',param.shape[0])else:num_weights += param.shape[0]*param.shape[1]print(name, param.shape, end='  ')print('参数个数为:', param.shape[0]*param.shape[1])
print('参数总数:',num_weights)

附录——部分参数:

bert.embeddings.word_embeddings.weight torch.Size([30522, 768])  参数个数为: 23440896

bert.embeddings.position_embeddings.weight torch.Size([512, 768])  参数个数为: 393216

bert.embeddings.token_type_embeddings.weight torch.Size([2, 768])  参数个数为: 1536

bert.embeddings.LayerNorm.weight torch.Size([768])  参数个数为: 768

bert.embeddings.LayerNorm.bias torch.Size([768])  参数个数为: 768

bert.encoder.layer.0.attention.self.query.weight torch.Size([768, 768])  参数个数为: 589824

bert.encoder.layer.0.attention.self.query.bias torch.Size([768])  参数个数为: 768

bert.encoder.layer.0.attention.self.key.weight torch.Size([768, 768])  参数个数为: 589824

bert.encoder.layer.0.attention.self.key.bias torch.Size([768])  参数个数为: 768

bert.encoder.layer.0.attention.self.value.weight torch.Size([768, 768])  参数个数为: 589824

bert.encoder.layer.0.attention.self.value.bias torch.Size([768])  参数个数为: 768

bert.encoder.layer.0.attention.output.dense.weight torch.Size([768, 768])  参数个数为: 589824

bert.encoder.layer.0.attention.output.dense.bias torch.Size([768])  参数个数为: 768

bert.encoder.layer.0.attention.output.LayerNorm.weight torch.Size([768])  参数个数为: 768

bert.encoder.layer.0.attention.output.LayerNorm.bias torch.Size([768])  参数个数为: 768

bert.encoder.layer.0.intermediate.dense.weight torch.Size([3072, 768])  参数个数为: 2359296

bert.encoder.layer.0.intermediate.dense.bias torch.Size([3072])  参数个数为: 3072

bert.encoder.layer.0.output.dense.weight torch.Size([768, 3072])  参数个数为: 2359296

bert.encoder.layer.0.output.dense.bias torch.Size([768])  参数个数为: 768

bert.encoder.layer.0.output.LayerNorm.weight torch.Size([768])  参数个数为: 768

bert.encoder.layer.0.output.LayerNorm.bias torch.Size([768])  参数个数为: 768

参考文献:

bert模型参数简化 - 微笑sun - 博客园


http://chatgpt.dhexx.cn/article/guKYy3ud.shtml

相关文章

BERT模型原理的详细介绍

文章目录 参考文章1. BERT模型1.1 模型结构1.2 输入表示1.3 预训练任务1.3.1 Task 1:Masked Language Model1.3.2 Task 2:Next Sentence Prediction 1.4 微调(fine-tuning)基于句子对的分类任务基于单个句子的分类任务问答任务命名实体识别 2. 总结 参考文章 【NLP…

BERT和GPT模型简介

1. 引言 从现在的大趋势来看,使用某种模型预训练一个语言模型看起来是一种比较靠谱的方法。从之前 AI2 的 ELMo,到 OpenAI 的 fine-tune transformer,再到 Google 的 BERT、GPT,全都是对预训练的语言模型的应用。 本文将主要介绍…

BERT模型简介

基础架构-Transformer的Encoder: 由下到上,依次三个部分为输入、注意力机制和前馈神经网络 基础的Bert,六个encoder,六个decoder。 输入部分 input token embedding segment embedding position embedding bert预训练的NSP&am…

BERT 模型详解

BERT 结构 上图是 BERT 的结构图,左侧的图表示了预训练的过程,右边的图是对于具体任务的微调过程 BERT 的输入 BERT 的输入可以包含一个句子对 (句子 A 和句子 B),也可以是单个句子。同时 BERT 增加了一些有特殊作用的标志位: …

如何从零开始训练BERT模型

我的许多文章都专注于 BERT——这个模型出现并主导了自然语言处理 (NLP) 的世界,标志着语言模型的新时代。 对于那些之前可能没有使用过 Transformer 模型(例如 BERT 是什么)的人,这个过程看起来有点像这样: pip 安装…

BERT模型详解

Auto-Regressive & Auto-Encoding 在介绍当下最火热的BERT模型之前,我们先来看两个概念,Auto-Regressive和Auto-Encoding。 Auto-Regressive Auto-Regressive如上图所示,其实很像是一个语言模型,遵循的是链式法则&#xff0…

BERT(预训练Transformer模型)

目录 一、前言 二、随机遮挡,进行预测 三、两句话是否原文相邻 四、两者结合起来 五、总结 六、参考链接 一、前言 Bert在18年提出,19年发表,Bert的目的是为了预训练Transformer模型encoder网络,从而大幅提高准确率 Bert …

详细介绍BERT模型

文章目录 BERT简介BERT, OpenAI GPT, 和ELMo之间的区别相关工作BERT的改进 BERT 的详细实现输入/输出表示预训练BERT微调BERT BERT用在下游任务GLUE(一个自然语言任务集合)SQuAD v1.1(QA数据集)SQuAD v2.0SWAG 消融实验预训练任务的影响模型大小的影响基于特征的BERT方法 结论 …

BERT模型—2.BERT模型预训练与微调

文章目录 引言一、预训练语言模型1.为什么要进行预训练?2. BERT预训练-掩码预测任务3.BERT预训练-下句预测任务 二、BERT的文本处理—subword tokenizer1. 为什么要学习subword tokenizer?2. 词表生成与分词 三、BERT embedding四、BERT微调—句子分类任务五、BERT…

图解BERT模型:从零开始构建BERT

转载:https://cloud.tencent.com/developer/article/1389555 本文首先介绍BERT模型要做什么,即:模型的输入、输出分别是什么,以及模型的预训练任务是什么;然后,分析模型的内部结构,图解如何将模…

BERT模型—1.BERT模型架构

文章目录 引言一、Bert模型总览二、注意力机制1.Seq2seq中的注意力操作2.注意力的一般形式(三步曲)3. transformer中的自注意力机制—Self.Attention4. transformer的多头注意力机制5. scaling6. 模型优化技巧:残差连接 三、BERT其他结构特性…

【科研】BERT模型理论详解

原文:https://cloud.tencent.com/developer/article/1389555 本文首先介绍BERT模型要做什么,即:模型的输入、输出分别是什么,以及模型的预训练任务是什么;然后,分析模型的内部结构,图解如何将模…

BERT模型的详细介绍

1.BERT 的基本原理是什么? BERT 来自 Google 的论文Pre-training of Deep Bidirectional Transformers for Language Understanding,BERT 是“Bidirectional Encoder Representations from Transformers”的首字母缩写,整体是一个自编码语言…

图解BERT模型

1. 模型的输入/输出 BERT模型的全称是:BidirectionalEncoder Representations from Transformer。从名字中可以看出,BERT模型的目标是利用大规模无标注语料训练、获得文本的包含丰富语义信息的Representation,即:文本的语义表示&…

BERT模型

BERT模型 Paper: https://arxiv.org/abs/1810.04805 BERT 全称为Bidirectional Encoder Representation from Transformers(来自Transformers的双向编码表示),谷歌发表的发的论文Pre-traning of Deep Bidirectional Transformers for Langu…

BERT模型的结构,特点和实践

BERT模型介绍,特点,资源 一、背景介绍二、BERT与语言模型1.feature-based2.fine-tuning3.BERT的语言模型 三、BERT整体概览1. BERT框架2. BERT模型结构2.1输入部分2.2 BERT的预训练任务任务1:Masked Language Model(MLM)任务2:Nex…

Bert算法:语言模型-BERT详细介绍

本文的目的是向NLP爱好者们详细解析一个著名的语言模型-BERT。 全文将分4个部分由浅入深的依次讲解。1.Bert简介 BERT是2018年10月由Google AI研究院提出的一种预训练模型。 BERT的全称是Bidirectional Encoder Representation from Transformers。BERT在机器阅读理解顶级水平…

Bert 模型学习

一、Bert 模型 BERT 模型的全称是 BidirectionalEncoder Representations from Transformer,基于 Transformer 的双向编码器表示,是一个预训练的语言表征模型,它强调了不再像以往一样采用传统的单向语言模型或者把两个单向语言模型进行浅层拼…

【理论篇】是时候彻底弄懂BERT模型了(收藏)

引言 本文对BERT模型的理论进行了一个非常详尽的解释,相信看完本篇文章后,你对BERT模型的理解会上升🚀一个层次。 本文是理论篇,下篇是实战篇。 BERT的基本思想 BERT如此成功的一个原因之一是它是基于上下文(context-based)的嵌…

Hive !!!

文章目录 Hive数据处理方法论step1 了解产品/运营的需求step2 数据收集(数据准备)step3 数据处理(数据调研)step4 数据分析 Hive背景Hive简介引入原因安装hive注意事项一些代码Hive SQL VS SQL Hive的数据类型数据类型Hive架构 Hi…