BERT模型中的参数个数是如何计算的?
How is the number of parameters be calculated in BERT model?
Devlin & Co. 的论文“BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”计算了基本模型大小为 110M 的参数(即 L=12、H=768、A=12),其中 L = 层数,H = 隐藏大小,A = 自注意力操作数。据我所知,神经网络中的参数通常是层之间“权重和偏差”的计数。那么这是如何根据给定的信息计算出来的呢? 12768768*12?
Transformer Encoder-Decoder Architecture
BERT 模型仅包含 transformer 架构的编码器块。让我们看一下 BERT 编码器块的各个元素,以可视化数字权重矩阵和偏置向量。给定的配置 L = 12 意味着将有 12 层自我关注,H = 768 意味着单个标记的嵌入维度将为 768 维,A = 12 意味着在一层自我关注中将有 12 个注意力头。编码器块执行以下操作序列:
输入将是作为 S * d 维矩阵的标记序列。其中 s 是序列长度,d 是嵌入维度。生成的输入序列将是标记嵌入、标记类型嵌入以及位置嵌入的总和,作为每个标记的 d-dimensional 向量。在 BERT 模型中,第一组参数是词汇嵌入。 BERT 使用具有 30522 个标记的 WordPiece[2] 嵌入。每个标记有 768 个维度。
嵌入层归一化。一个权重矩阵和一个偏置向量。
Multi-head 自我关注。将有 h 个头,对于每个头,将有三个矩阵,分别对应查询矩阵、键矩阵和值矩阵。这些矩阵的第一个维度将是嵌入维度,第二个维度将是嵌入维度除以注意力头的数量。除此之外,还会有一个矩阵将注意力头生成的连接值转换为最终的标记表示。
残差连接和层归一化。一个权重矩阵和一个偏置向量。
Position-wise 前馈网络将有一个隐藏层,对应两个权重矩阵和两个偏置向量。论文中提到隐藏层的单元数会是embedding维度的四倍
残差连接和层归一化。一个权重矩阵和一个偏置向量。
让我们通过将正确的维度关联到 BERT 基础模型的权重矩阵和偏置向量来计算实际的参数数量。
嵌入矩阵:
- 词嵌入矩阵大小[词汇大小,嵌入维度] = [30522, 768] = 23440896
- 位置嵌入矩阵大小,[最大序列长度,嵌入维度] = [512, 768] = 393216
- 令牌类型嵌入矩阵大小 [2, 768] = 1536
- 嵌入层归一化、权重和偏差 [768] + [768] = 1536
- 总嵌入参数 = ≈
关注点:
查询权重矩阵大小 [768, 64] = 49152 and Bias [768] = 768
关键权重矩阵大小 [768, 64] = 49152 和偏差 [768] = 768
值权重矩阵大小 [768, 64] = 49152 和偏差 [768] = 768
12个头的一层attention的总参数=12*(3*(49152+768))=1797120
头部连接后投影的密集权重 [768, 768] = 589824 and Bias [768] = 768, (589824+768 = 590592)
层归一化权重和偏差 [768], [768] = 1536
位置明智的前馈网络权重矩阵和偏差 [3072, 768] = 2359296, [3072] = 3072 and [768, 3072] = 2359296, [768] = 768, (2359296+3072 + 2359296+768 = 4722432)
层归一化权重和偏差 [768], [768] = 1536
一个完整注意力层的总参数 (1797120 + 590592 + 1536 + 4722432 + 1536 = 7113216 ≈ 7)
12层注意力的总参数(*=≈)
BERT Encoder的输出层:
- 密集权重矩阵和偏差 [768, 768] = 589824, [768] = 768, (589824 + 768 = 590592)
ase 中的总参数 = + + = ≈
Devlin & Co. 的论文“BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”计算了基本模型大小为 110M 的参数(即 L=12、H=768、A=12),其中 L = 层数,H = 隐藏大小,A = 自注意力操作数。据我所知,神经网络中的参数通常是层之间“权重和偏差”的计数。那么这是如何根据给定的信息计算出来的呢? 12768768*12?
Transformer Encoder-Decoder Architecture BERT 模型仅包含 transformer 架构的编码器块。让我们看一下 BERT 编码器块的各个元素,以可视化数字权重矩阵和偏置向量。给定的配置 L = 12 意味着将有 12 层自我关注,H = 768 意味着单个标记的嵌入维度将为 768 维,A = 12 意味着在一层自我关注中将有 12 个注意力头。编码器块执行以下操作序列:
输入将是作为 S * d 维矩阵的标记序列。其中 s 是序列长度,d 是嵌入维度。生成的输入序列将是标记嵌入、标记类型嵌入以及位置嵌入的总和,作为每个标记的 d-dimensional 向量。在 BERT 模型中,第一组参数是词汇嵌入。 BERT 使用具有 30522 个标记的 WordPiece[2] 嵌入。每个标记有 768 个维度。
嵌入层归一化。一个权重矩阵和一个偏置向量。
Multi-head 自我关注。将有 h 个头,对于每个头,将有三个矩阵,分别对应查询矩阵、键矩阵和值矩阵。这些矩阵的第一个维度将是嵌入维度,第二个维度将是嵌入维度除以注意力头的数量。除此之外,还会有一个矩阵将注意力头生成的连接值转换为最终的标记表示。
残差连接和层归一化。一个权重矩阵和一个偏置向量。
Position-wise 前馈网络将有一个隐藏层,对应两个权重矩阵和两个偏置向量。论文中提到隐藏层的单元数会是embedding维度的四倍
残差连接和层归一化。一个权重矩阵和一个偏置向量。
让我们通过将正确的维度关联到 BERT 基础模型的权重矩阵和偏置向量来计算实际的参数数量。
嵌入矩阵:
- 词嵌入矩阵大小[词汇大小,嵌入维度] = [30522, 768] = 23440896
- 位置嵌入矩阵大小,[最大序列长度,嵌入维度] = [512, 768] = 393216
- 令牌类型嵌入矩阵大小 [2, 768] = 1536
- 嵌入层归一化、权重和偏差 [768] + [768] = 1536
- 总嵌入参数 = ≈
关注点:
查询权重矩阵大小 [768, 64] = 49152 and Bias [768] = 768
关键权重矩阵大小 [768, 64] = 49152 和偏差 [768] = 768
值权重矩阵大小 [768, 64] = 49152 和偏差 [768] = 768
12个头的一层attention的总参数=12*(3*(49152+768))=1797120
头部连接后投影的密集权重 [768, 768] = 589824 and Bias [768] = 768, (589824+768 = 590592)
层归一化权重和偏差 [768], [768] = 1536
位置明智的前馈网络权重矩阵和偏差 [3072, 768] = 2359296, [3072] = 3072 and [768, 3072] = 2359296, [768] = 768, (2359296+3072 + 2359296+768 = 4722432)
层归一化权重和偏差 [768], [768] = 1536
一个完整注意力层的总参数 (1797120 + 590592 + 1536 + 4722432 + 1536 = 7113216 ≈ 7)
12层注意力的总参数(*=≈)
BERT Encoder的输出层:
- 密集权重矩阵和偏差 [768, 768] = 589824, [768] = 768, (589824 + 768 = 590592)
ase 中的总参数 = + + = ≈