1. 编码器架构解析
Transformer编码器由N个相同的编码器层堆叠而成,每个编码器层包含两个核心子层:多头自注意力机制和前馈神经网络。这种设计使得模型能够同时捕捉序列中的全局依赖关系和局部特征。
1.1 编码器层结构详解
每个编码器层的标准结构包含:
- 多头自注意力子层(Multi-Head Self-Attention)
- 前馈神经网络子层(Feed Forward Network)
- 每个子层都配有残差连接和层归一化
这种设计的关键在于:
- 多头注意力机制让模型能够并行关注输入序列的不同位置
- 前馈网络提供非线性变换能力
- 残差连接缓解梯度消失问题
- 层归一化稳定训练过程
实际实现时通常采用Pre-LN结构(先层归一化再子层计算),相比原始论文的Post-LN结构(先子层计算再层归一化)训练更稳定
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 注意力机制实现
2.1 缩放点积注意力
缩放点积注意力是Transformer的核心计算单元,其数学表达式为:
Attention(Q,K,V) = softmax(QK^T/√d_k)V
代码实现要点:
python复制def attention(query, key, value, mask=None, dropout=None):
d_k = query.size(-1)
scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(d_k)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
p_attn = scores.softmax(dim=-1)
if dropout is not None:
p_attn = dropout(p_attn)
return torch.matmul(p_attn, value), p_attn
关键细节说明:
- 除以√d_k是为了防止点积结果过大导致softmax梯度消失
- 掩码机制将需要忽略的位置设置为负无穷,softmax后这些位置权重接近0
- dropout应用于注意力权重而非原始
