📚 BERT 家族神经网络数据流对比(10模型并列)

BERT-base
BERT-large
RoBERTa
ALBERT
DistilBERT
SpanBERT
DeBERTa
Longformer
TinyBERT-4L
BERT-tiny
输入 IDs
token_ids∈(B,T)∈[0,30522) seg_ids∈(B,T)∈{0,1} pos_ids∈(B,T)∈[0,512)
Token Embedding查表
x_tok=Embedding(token_ids) 等价:one_hot∈(B,T,30522) ·E_tok,E_tok∈ℝ^(30522×768) x_tok∈(B,T,768)
Segment Embedding查表
x_seg=Embedding(seg_ids) 等价:one_hot∈(B,T,2) ·E_seg,E_seg∈ℝ^(2×768) x_seg∈(B,T,768)
Position Embedding查表
x_pos=Embedding(pos_ids) 等价:one_hot∈(B,T,512) ·E_pos,E_pos∈ℝ^(512×768) x_pos∈(B,T,768)
三路相加
三者维度均为(B,T,768) x=x_tok+x_seg+x_pos 逐元素相加,无需广播 x∈(B,T,768)
LayerNorm+Dropout
x_n=(x-μ)/√(σ²+ε)·γ+β x←Dropout(x_n,p=0.1) (B,T,768)
Encoder × 12层 Post-LN(H=768,4H=3072)
① 多头自注意力(7步)
步骤1:Q=X·W_Q W_Q∈ℝ^(768×768) Q/K/V∈(B,T,768) 步骤2-来源:双向自注意力 Q/K/V均来自X∈(B,T,768) 步骤3:d_k=768/12=64 Q_i=Q[:,:,i*64:(i+1)*64] Q_i∈(B,T,64);K_i/V_i同 reshape→(B,12,T,64) 步骤4-△Q·Kᵀ∈(B,12,T,T) 双向可见无掩码 V_i仅被加权聚合 步骤5-head_i=Softmax( Q_i·K_iᵀ/√64)·V_i∈(B,T,64) 步骤6-Concat(h1..h12) →(B,T,768) 步骤7-·W_O∈ℝ^(768×768) out:(B,T,768)
② 残差加法①:x'←x+attn_out
③ LayerNorm①(残差后)
x=(x-μ)/√(σ²+ε)·γ+β
④ Linear升维
W∈ℝ^(768×3072) out:(B,T,3072)
⑤ GELU
GELU(x)=x·Φ(1.702x)
⑥ Linear降维
W∈ℝ^(3072×768)
⑦ 残差加法②:x'←x+ffn_out
⑧ LayerNorm②(残差后)
Pooler
cls_in=x[:,0,:] cls_out=Linear(cls_in) W_pool∈ℝ^(768×768) out=tanh(cls_out) (B,T,768)→(B,768)
任务头(多头)
MLM 完形填空
15%token→[MASK] logits=h·W_v+b W_v∈ℝ^(768×30522) out:(B,T,V);masked位置CE
NSP 下一句预测
输入A[SEP]B logits=cls·W_n+b W_n∈ℝ^(768×2) out:(B,2) 二分类CE
QA 抽取式问答
问题[SEP]段落 logits=x·W_q+b W_q∈ℝ^(768×2) start/end各取argmax
输入 IDs
token_ids∈(B,T)∈[0,30522) seg_ids∈(B,T)∈{0,1} pos_ids∈(B,T)∈[0,512)
Token Embedding查表
等价:one_hot∈(B,T,30522) ·E_tok∈ℝ^(30522×1024) x_tok∈(B,T,1024)
Segment Embedding查表
E_seg∈ℝ^(2×1024) x_seg∈(B,T,1024)
Position Embedding查表
E_pos∈ℝ^(512×1024) x_pos∈(B,T,1024)
三路相加
三者均为(B,T,1024) x=x_tok+x_seg+x_pos x∈(B,T,1024)
LayerNorm+Dropout
Encoder × 24层 Post-LN(H=1024,4H=4096)
① 多头自注意力(7步)
步骤1:Q=X·W_Q W_Q∈ℝ^(1024×1024) Q/K/V∈(B,T,1024) 步骤2:双向自注意力 步骤3:d_k=1024/16=64 Q_i∈(B,T,64) reshape→(B,16,T,64) 步骤4-△Q·Kᵀ∈(B,16,T,T) 双向无掩码;V_i仅加权聚合 步骤5-head_i=Softmax( Q_i·K_iᵀ/√64)·V_i 步骤6-Concat→(B,T,1024) 步骤7-·W_O∈ℝ^(1024×1024)
② 残差①+③ LayerNorm①
④⑤⑥ Linear+GELU+Linear
1024→4096→GELU→1024
⑦ 残差②+⑧ LayerNorm②
Pooler
W_pool∈ℝ^(1024×1024) out=tanh(Linear(cls_in)) (B,1024)
任务头(多头)
MLM 完形填空
W_v∈ℝ^(1024×30522) out:(B,T,30522)
NSP 下一句预测
W_n∈ℝ^(1024×2);out:(B,2)
QA 抽取式问答
W_q∈ℝ^(1024×2) start/end argmax
输入 IDs
token_ids∈(B,T)∈[0,50265) pos_ids∈(B,T)∈[0,514) △无seg_ids
Token Embedding查表
等价:one_hot∈(B,T,50265) ·E_tok∈ℝ^(50265×768) x_tok∈(B,T,768)
Position Embedding查表
E_pos∈ℝ^(514×768) x_pos∈(B,T,768)
△两路相加(无Segment)
两者均为(B,T,768) x=x_tok+x_pos x∈(B,T,768)
LayerNorm+Dropout
Encoder × 12层 Post-LN(H=768)
① 多头自注意力(7步)
步骤1:W_Q∈ℝ^(768×768) Q/K/V∈(B,T,768) 步骤2:双向自注意力 步骤3:d_k=768/12=64 Q_i∈(B,T,64) reshape→(B,12,T,64) 步骤4-△Q·Kᵀ∈(B,12,T,T) 动态掩码;V_i仅加权聚合 步骤5-head_i=Softmax( Q_i·K_iᵀ/√64)·V_i 步骤6-Concat→(B,T,768) 步骤7-·W_O∈ℝ^(768×768)
②③ 残差①+LN①
④⑤⑥ FFN
768→3072→GELU→768
⑦⑧ 残差②+LN②
Pooler
W_pool∈ℝ^(768×768) out=tanh(Linear(cls_in))
任务头(多头)
MLM 完形填空(动态掩码)
W_v∈ℝ^(768×50265) out:(B,T,50265)
QA 抽取式问答
W_q∈ℝ^(768×2) start/end argmax
△无NSP预训练目标
输入 IDs
token_ids∈(B,T)∈[0,30000) seg_ids∈(B,T)∈{0,1} pos_ids∈(B,T)∈[0,512)
Token Embedding(小维度128)
E_tok∈ℝ^(30000×128) x_tok∈(B,T,128)
Segment Embedding查表
E_seg∈ℝ^(2×128) x_seg∈(B,T,128)
Position Embedding查表
E_pos∈ℝ^(512×128) x_pos∈(B,T,128)
三路相加
三者均为(B,T,128) x=x_tok+x_seg+x_pos x∈(B,T,128)
△因式分解投影
x=x·W_proj+b W_proj∈ℝ^(128×768) (B,T,128)→(B,T,768)
LayerNorm+Dropout
Encoder × 12层 Post-LN(△所有层共享权重)
① 多头自注意力(7步)
步骤1:W_Q∈ℝ^(768×768) Q/K/V∈(B,T,768) △全层共享W_Q/W_K/W_V 步骤2:双向自注意力 步骤3:d_k=768/12=64 Q_i∈(B,T,64) reshape→(B,12,T,64) 步骤4-△Q·Kᵀ∈(B,12,T,T) 权重共享复用同一套W V_i仅加权聚合 步骤5-head_i=Softmax( Q_i·K_iᵀ/√64)·V_i 步骤6-Concat→(B,T,768) 步骤7-·W_O∈ℝ^(768×768)△共享
②③ 残差①+LN①
④⑤⑥ FFN△共享
768→3072→GELU→768
⑦⑧ 残差②+LN②
Pooler
W_pool∈ℝ^(768×768) out=tanh(Linear(cls_in))
任务头(多头)
MLM 完形填空
W_v∈ℝ^(768×30000)
SOP 句子顺序预测(替代NSP)
判断AB顺序正序/反序 logits=cls·W_sop+b W_sop∈ℝ^(768×2) out:(B,2)
QA 抽取式问答
W_q∈ℝ^(768×2)
输入 IDs
token_ids∈(B,T)∈[0,30522) pos_ids∈(B,T)∈[0,512) △无seg_ids
Token Embedding查表
E_tok∈ℝ^(30522×768) x_tok∈(B,T,768)
Position Embedding查表
E_pos∈ℝ^(512×768) x_pos∈(B,T,768)
△两路相加(无Segment)
x=x_tok+x_pos x∈(B,T,768)
LayerNorm+Dropout
Encoder × 6层 Post-LN(对应BERT偶数层)
① 多头自注意力(7步)
步骤1:W_Q∈ℝ^(768×768) Q/K/V∈(B,T,768) 步骤2:双向自注意力 步骤3:d_k=768/12=64 Q_i∈(B,T,64) reshape→(B,12,T,64) 步骤4-△Q·Kᵀ∈(B,12,T,T) V_i仅加权聚合 步骤5-head_i=Softmax( Q_i·K_iᵀ/√64)·V_i 步骤6-Concat→(B,T,768) 步骤7-·W_O∈ℝ^(768×768)
②③ 残差①+LN①
④⑤⑥ FFN
768→3072→GELU→768
⑦⑧ 残差②+LN②
△无Pooler
x_cls=x[:,0,:] (B,T,768)→(B,768)
任务头(多头)
MLM 蒸馏完形填空
W_v∈ℝ^(768×30522) out:(B,T,30522)
QA 抽取式问答
W_q∈ℝ^(768×2) start/end argmax
输入 IDs
token_ids∈(B,T)∈[0,30522) pos_ids∈(B,T)∈[0,512) △无seg_ids
Token Embedding查表
E_tok∈ℝ^(30522×768) x_tok∈(B,T,768)
Position Embedding查表
E_pos∈ℝ^(512×768) x_pos∈(B,T,768)
△两路相加(无Segment)
x=x_tok+x_pos x∈(B,T,768)
LayerNorm+Dropout
Encoder × 12层 Post-LN(H=768)
① 多头自注意力(7步)
步骤1:W_Q∈ℝ^(768×768) 步骤2:双向自注意力 步骤3:d_k=768/12=64 Q_i∈(B,T,64) reshape→(B,12,T,64) 步骤4-△Q·Kᵀ∈(B,12,T,T) V_i仅加权聚合 步骤5-head_i=Softmax( Q_i·K_iᵀ/√64)·V_i 步骤6-Concat→(B,T,768) 步骤7-·W_O∈ℝ^(768×768)
②③ 残差①+LN①
④⑤⑥ FFN
768→3072→GELU→768
⑦⑧ 残差②+LN②
Pooler
W_pool∈ℝ^(768×768)→tanh
任务头(多头)
Span MLM 跨度掩码预测
连续span整体被掩码 W_v∈ℝ^(768×30522)
SBO 跨度边界目标
f=Linear([h_s;h_e;p_i]) →softmax预测span内token h_s/h_e:span起止隐状态 p_i:位置向量
QA 抽取式问答
W_q∈ℝ^(768×2)
输入 IDs
token_ids∈(B,T)∈[0,30522) pos_ids∈(B,T)∈[0,512)
Token(内容)Embedding查表
E_tok∈ℝ^(30522×768) H=x_tok∈(B,T,768) 内容流
Position Embedding查表
E_pos∈ℝ^(512×768) P=x_pos∈(B,T,768) 位置流
△解耦说明(不相加)
H与P不相加! H作为内容流独立输入 P作为位置流独立输入 注意力内分解为三路
LayerNorm+Dropout(对H)
Encoder × 12层 Post-LN(解耦多头注意力)
① 解耦多头注意力(7步)
步骤1:Q_c=H·W_Q^c∈(B,T,768) K_c=H·W_K^c∈(B,T,768) V=H·W_V∈(B,T,768) 内容侧 Q_r=P·W_Q^r∈(B,T,768) K_r=P·W_K^r∈(B,T,768) 位置侧 步骤2-△解耦:内容/位置两流独立 步骤3:d_k=768/12=64 各Q_c_i/K_c_i/V_i/Q_r_i/K_r_i 分别reshape→(B,12,T,64) 步骤4-△三路分数: A_c2c=Q_c·K_cᵀ/√64 内容→内容 A_c2p=Q_c·K_rᵀ/√64 内容→位置 A_p2c=Q_r·K_cᵀ/√64 位置→内容 V仅加权聚合不参与分数 步骤5-head_i=Softmax( (A_c2c+A_c2p+A_p2c)_i)·V_i 步骤6-Concat→(B,T,768) 步骤7-·W_O∈ℝ^(768×768)
②③ 残差①+LN①
④⑤⑥ FFN
768→3072→GELU→768
⑦⑧ 残差②+LN②
EMD(最后2层)
x←x+Linear(abs_pos) 补入绝对位置信息
Pooler
W_pool∈ℝ^(768×768)→tanh
任务头(多头)
MLM 完形填空
W_v∈ℝ^(768×30522)
QA 抽取式问答
W_q∈ℝ^(768×2)
输入 IDs
token_ids∈[0,50265) pos_ids∈[0,4098),T可达4096+ △无seg_ids
Token Embedding查表
E_tok∈ℝ^(50265×768) x_tok∈(B,T,768)
Position Embedding查表
E_pos∈ℝ^(4098×768) x_pos∈(B,T,768)
△两路相加(无Segment)
x=x_tok+x_pos x∈(B,T,768)
LayerNorm+Dropout
Encoder × 12层 Post-LN(局部+全局混合注意力)
① 混合多头注意力(7步)
步骤1:Q=X·W_Q∈(B,T,768) K/V∈(B,T,768) 步骤2-△混合注意力: 局部token只与w=512邻居交互 [CLS]等全局token与全部T交互 复杂度O(T·w)而非O(T²) 步骤3:d_k=768/12=64 局部Q_i只与K_i的w邻居内积 全局Q_i与全部K_i内积 步骤4-△局部Q·Kᵀ∈(B,12,T,w) 全局[CLS]Q·Kᵀ∈(B,12,1,T) V_i仅加权聚合 步骤5-局部+全局分别算后合并 head_i=Softmax(Q·Kᵀ/√64)·V_i 步骤6-Concat→(B,T,768) 步骤7-·W_O∈ℝ^(768×768)
②③ 残差①+LN①
④⑤⑥ FFN
768→3072→GELU→768
⑦⑧ 残差②+LN②
Pooler
W_pool∈ℝ^(768×768)→tanh
任务头(多头)
MLM 完形填空
W_v∈ℝ^(768×50265)
长文档QA 抽取式问答
支持T>4096长序列 W_q∈ℝ^(768×2)
输入 IDs
token_ids∈(B,T)∈[0,30522) seg_ids∈(B,T)∈{0,1} pos_ids∈(B,T)∈[0,512)
Token Embedding查表
E_tok∈ℝ^(30522×312) x_tok∈(B,T,312)
Segment Embedding查表
E_seg∈ℝ^(2×312) x_seg∈(B,T,312)
Position Embedding查表
E_pos∈ℝ^(512×312) x_pos∈(B,T,312)
三路相加
x=x_tok+x_seg+x_pos x∈(B,T,312)
LayerNorm+Dropout
Encoder × 4层 Post-LN(△只有4层,H=312)
① 多头自注意力(7步)
步骤1:W_Q∈ℝ^(312×312) Q/K/V∈(B,T,312) 步骤2:双向自注意力 步骤3:d_k=312/12=26 Q_i∈(B,T,26) reshape→(B,12,T,26) 步骤4-△Q·Kᵀ∈(B,12,T,T) d_k=26(非标准64) V_i仅加权聚合 步骤5-head_i=Softmax( Q_i·K_iᵀ/√26)·V_i 步骤6-Concat→(B,T,312) 步骤7-·W_O∈ℝ^(312×312)
②③ 残差①+LN①
④⑤⑥ FFN
312→1248→GELU→312
⑦⑧ 残差②+LN②
Pooler
W_pool∈ℝ^(312×312)→tanh
△蒸馏投影(仅训练)
W_h∈ℝ^(312×768) 对齐teacher BERT-base隐状态
任务头(多头)
蒸馏损失 三阶段
Emb/Hidden/Attention对齐
QA/分类 下游微调
W_q∈ℝ^(312×2)
输入 IDs
token_ids∈(B,T)∈[0,30522) seg_ids∈(B,T)∈{0,1} pos_ids∈(B,T)∈[0,512)
Token Embedding查表
E_tok∈ℝ^(30522×128) x_tok∈(B,T,128)
Segment Embedding查表
E_seg∈ℝ^(2×128) x_seg∈(B,T,128)
Position Embedding查表
E_pos∈ℝ^(512×128) x_pos∈(B,T,128)
三路相加
x=x_tok+x_seg+x_pos x∈(B,T,128)
LayerNorm+Dropout
Encoder × 2层 Post-LN(△只有2层,H=128)
① 多头自注意力(7步)
步骤1:W_Q∈ℝ^(128×128) Q/K/V∈(B,T,128) 步骤2:双向自注意力 步骤3:d_k=128/2=64 Q_i∈(B,T,64) reshape→(B,2,T,64) 步骤4-△Q·Kᵀ∈(B,2,T,T) 仅2个头;V_i仅加权聚合 步骤5-head_i=Softmax( Q_i·K_iᵀ/√64)·V_i 步骤6-Concat(h1,h2)→(B,T,128) 步骤7-·W_O∈ℝ^(128×128)
②③ 残差①+LN①
④⑤⑥ FFN
128→512→GELU→128
⑦⑧ 残差②+LN②
Pooler
W_pool∈ℝ^(128×128)→tanh
任务头(多头)
MLM 完形填空
W_v∈ℝ^(128×30522)
NSP 下一句预测
W_n∈ℝ^(128×2)
QA 抽取式问答
W_q∈ℝ^(128×2)
△直接预训练无蒸馏
模型LH每头d_kFFNSegment EmbLN位置特殊机制参数量预训练目标擅长任务
BERT-base1276864768→3072→768Post-LN标准110MMLM+NSP通用NLUQA分类
BERT-large241024641024→4096→1024Post-LN标准340MMLM+NSP高精度NLU
RoBERTa1276864768→3072→768Post-LN动态掩码、大batch、去NSP125MMLM通用NLU鲁棒性强
ALBERT1276864768→3072→768Post-LN因式分解Emb、跨层共享、SOP12MMLM+SOP参数高效
DistilBERT676864768→3072→768Post-LN知识蒸馏、BERT偶数层66MMLM蒸馏轻量推理快
SpanBERT1276864768→3072→768Post-LNSpan掩码、SBO110MSpanMLM+SBOQA共指
DeBERTa1276864768→3072→768Post-LN解耦内容位置注意力、EMD140MMLMSuperGLUE SOTA
Longformer1276864768→3072→768Post-LN局部窗口+全局CLS149MMLM长文档QA长文分类
TinyBERT-4L431226312→1248→312Post-LN两阶段蒸馏14.5M蒸馏移动端NLU
BERT-tiny212864128→512→128Post-LN直接预训练无蒸馏4.4MMLM+NSP极轻量边缘部署