Bert/Transformer模型的参数大小计算

文章详细分析了深度学习模型的参数数量与计算时间之间的关系,讨论了如何影响模型的训练效率和性能。作者提到了论文1810.04805中的观点,该论文可能提出了新的优化策略来平衡模型复杂性和计算资源。此外,还介绍了控制模型大小和优化时间复杂度的一些技术实践。

https://blog.youkuaiyun.com/weixin_43922901/article/details/102602557?spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-12-102602557-blog-126405946.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-12-102602557-blog-126405946.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=13
paper:https://arxiv.org/pdf/1810.04805.pdf
在这里插入图片描述

参数量 & 时间复杂度

https://blog.youkuaiyun.com/jining11/article/details/126124247

### 计算 BERT 模型参数数量的方法 对于 BERT 模型而言,其参数量主要取决于模型架构中的不同组件及其维度设置。具体来说,BERT参数主要包括嵌入层、编码器层以及前馈神经网络部分。 #### 嵌入层参数计算 嵌入层负责将输入的 token 转换成向量表示形式。这部分参数来源于词嵌入矩阵 \( W_e \),位置嵌入矩阵 \( W_p \) 和分段嵌入矩阵 \( W_s \)[^1]。假设词汇表大小为 V, 隐藏层尺寸 (hidden size) 为 H,则有: \[ \text{Embedding parameters} = V \times H + M \times H + S \times H \] 这里 M 表示最大序列长度;S 则代表可能存在的片段数目(通常设为2)。 #### 编码器层参数计算 每一层 Transformer 编码器都含有自注意力机制和全连接前馈网络两大部分。每层内部的具体参数如下所示: -attention layer**: 自注意层内含三个线性变换权重矩阵 Q, K, V 及偏置项 b_q, b_k, b_v 。如果多头数设定为 N_heads ,则单个 head 维度 d_h=H/N_heads , 故此层总参数量可表达为: \[ \text{Self Attention Parameters per Head}=d_h\times(H+d_h)+3d_h\] \[ \text{Total Self Attention Parameters }=\sum_{i=1}^{N\_heads}\left(\text { Self Attention Parameters per Head }\right)\] - **Feed Forward Network(FFN)**: FFN 中有两个线性映射操作,分别对应中间状态扩展到较大维度 F (feed-forward dimension),再压缩回原始隐藏层尺寸 H : \[ \text{FFN Parameters}=F \cdot H+H+F\] 考虑到整个编码器堆叠 L 层,那么总的编码器参数即上述两项乘以层数L[^2]: \[ \text{Encoder Layer Total Parameters}=L[\text{(Self Attention Parameters)}+\text{(FFN Parameters)}]\] 最终得到整个 BERT Base 或 Large 版本下的全部参数之和即可得出整体规模分别为约1亿1千万或3亿4千多万个参数。 ```python def calculate_bert_params(vocab_size, max_seq_len, hidden_dim, num_layers, intermediate_dim, attn_heads): embedding_params = vocab_size * hidden_dim + max_seq_len * hidden_dim + 2 * hidden_dim self_attn_per_head = ((hidden_dim // attn_heads) * (hidden_dim + (hidden_dim // attn_heads))) + 3*(hidden_dim // attn_heads) total_self_attention = self_attn_per_head * attn_heads ffn_params = intermediate_dim * hidden_dim + hidden_dim + intermediate_dim encoder_layer_total = num_layers * (total_self_attention + ffn_params) return embedding_params + encoder_layer_total # Example calculation for BERT Base configuration params_base_model = calculate_bert_params( vocab_size=30522, max_seq_len=512, hidden_dim=768, num_layers=12, intermediate_dim=3072, attn_heads=12 ) print(f"Bert base model has approximately {int(params_base_model/1e6)} Million parameters.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值