0. 简介
本文将从维度变换的视角,详细剖析BERT中输入序列的处理流程——从原始文本输入到Encoder层输出的全过程。通过追踪这些维度的变化,希望有助于更好地理解BERT模型(即Transformer的Encoder部分)的内部运作机制。
1. 前置说明
以bert-base-uncased模型为例,进行step by step解析:
- 输入序列长度:
n(例如,512 是 BERT 的典型最大长度) - 批大小:
batch_size(例如,32) - 词表大小:
vocab_size(例如,30522 对于 BERT-base) embedding_size或d_model:d(例如,768 对于 BERT-base,在config.json中的名字是"hidden_size",所以这3个名字都是指同一个意思)- 注意力头数:
h(例如,12 对于 BERT-base) - 每个头的维度:
d_k = d_v = d_head(例如,d_head = d / h = 768 / 12 = 64对于 BERT-base) - 前馈网络隐藏层维度:
d_ff(例如,4 * d = 3072对于 bert-base-uncased该值存于config.json的"intermediate_size"字段)
补充说明:
之前有小伙伴问我embedding_size和d_model是什么关系,这里做一些补充说明。
其实embedding_size = d_model,只是称谓不同而已。
embedding_size(也称为d_model):
指的是你将每个输入token转换成的连续向量表示的维度大小。例如,你有一个包含 30000 个单词的词表,embedding_size=512意味着每个单词会被表示成一个 512 维的实数向量。d_model:在 Transformer 架构(BERT 基于此)中,d_model是模型内部表示的统一维度。它定义了模型在处理序列时,每个时间步(每个token位置)的特征向量的长度。它是 Transformer 块(编码器/解码器层)设计的关键参数。- 关系:在标准的 Transformer 和 BERT 实现中,
embedding_size被设定为等于d_model。也就是说,词嵌入向量被直接映射到模型内部工作所需的维度d_model上。这是模型设计的一个关键点,它确保了:- 可加性:词嵌入(Word Embedding)、位置嵌入(Positional Embedding)、段嵌入(Segment Embedding)都是
d_model维的,可以直接相加。 - 一致性:所有后续线性变换(如 Q、K、V 投影)、层归一化(LayerNorm)、前馈网络(FFN)的输入和输出在序列长度
n的每个位置上都保持d_model维的特征向量。
- 可加性:词嵌入(Word Embedding)、位置嵌入(Positional Embedding)、段嵌入(Segment Embedding)都是
步骤0:输入准备
- 输入数据:一批句子。每个句子被分词、添加特殊token(如
[CLS],[SEP])并填充/截断到长度n。 - 初始维度:
(batch_size, n)。这是一个整数张量,每个元素是词表vocab_size中的token ID。
完整版欢迎前往微信公众号"小窗幽记机器学习"。
1593

被折叠的 条评论
为什么被折叠?



