1. Transformer架构核心原理拆解
2017年那篇《Attention Is All You Need》论文扔进学术圈时,可能连作者都没想到Transformer会掀起这么大的浪。现在回头看,这套架构确实解决了传统RNN序列建模的两个致命伤:一是长距离依赖捕捉能力弱,二是无法并行计算。下面我们就拆开这个"变形金刚"看看它的核心部件。
1.1 自注意力机制工作原理
想象你在读一本侦探小说,当看到"凶手"这个词时,你的大脑会自动关联前文出现的"沾血的刀"、"午夜脚步声"等关键线索。自注意力机制干的正是这个事——通过计算词与词之间的关联权重,动态决定每个位置应该关注上下文的哪些部分。
具体实现时,每个输入词会被转换成Q(Query)、K(Key)、V(Value)三个向量。用餐厅点餐类比:Q是你要点的菜,K是菜单上的选项,V是实际端上来的菜品。注意力得分的计算过程就是看你的需求(Q)与菜单选项(K)的匹配程度,最终决定实际获取什么信息(V)。
python复制# 简化版自注意力计算
def self_attention(Q, K, V):
scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k)
weights = torch.softmax(scores, dim=-1)
return torch.matmul(weights, V)
关键细节:除以√d_k这个缩放因子非常重要。当维度d_k较大时,点积结果可能爆炸式增长,导致softmax进入梯度饱和区。
1.2 多头注意力的实际价值
单头注意力就像只用一只眼睛看世界,而多头机制相当于给了模型多组"视锥细胞"。在BERT-base中,12个注意力头各自学习不同的关注模式:有的专盯句法结构,有的捕捉语义关联,还有的负责指代关系。
实验中发现,不同头确实会发展出差异化能力:
- 头1可能专注"动词-受词"关系
- 头2擅长捕捉"形容词-名词"修饰
- 头3专门处理代词指代(如"它"指向前文的哪个名词)
1.3 位置编码的玄机
RNN天生自带序列顺序信息,而Transformer必须显式注入位置知识。原论文用的正弦位置编码看起来像魔法公式,其实蕴含重要特性:
