Attention机制¶
🎯 本节目标¶
深入理解Self-Attention机制的数学原理和计算过程,掌握面试中的高频问题。
📖 阅读材料¶
必读文章¶
- 《Attention is All You Need》浅读(简介+代码) - 科学空间
- GPT与BERT差别深入解析 - 知乎
- 深入浅出理解transformer - 知乎
- Transformer模型详解(图解最完整版) - 知乎
- Transformer位置编码(基础) - 知乎
原论文¶
- Attention Is All You Need - 经典必读
🎬 视频材料¶
学习建议: 倍速观看,重点理解概念而非细节
- GPT,GPT-2,GPT-3 论文精读 - 哔哩哔哩
- Llama 3.1论文精读 - 哔哩哔哩
📝 知识总结¶
Self-Attention计算公式¶
\[Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V\]
核心组件: - Query (Q): 查询向量,决定当前位置关注什么 - Key (K): 键向量,被查询的内容 - Value (V): 值向量,实际传递的信息 - 缩放因子: \(\sqrt{d_k}\),防止softmax梯度消失
Multi-Head Attention¶
将输入投影到多个不同的子空间,并行计算多个注意力头:
\[MultiHead(Q,K,V) = Concat(head_1, ..., head_h)W^O\]
其中 \(head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)\)
💬 面试问题解答¶
Q1: Attention计算公式是什么?¶
标准回答:
Self-Attention的核心公式是 Attention(Q,K,V) = softmax(QK^T/√d_k)V
。
详细解释: 1. 先计算Query和Key的点积得到注意力分数 2. 除以√d_k进行缩放 3. 通过softmax归一化得到注意力权重 4. 最后与Value相乘得到输出
Q1.1: 为什么要除以根号d_k?¶
核心原因: 防止softmax函数进入饱和区导致梯度消失。
技术解释: - 当d_k较大时,QK^T的方差会很大 - 大的数值经过softmax后梯度接近0 - 除以√d_k可以控制方差为1,保持梯度稳定
Q1.2: Softmax的作用是什么?¶
主要作用: 1. 归一化: 确保注意力权重之和为1 2. 突出重点: 通过指数函数放大重要特征 3. 可微分: 保证反向传播可以正常进行
💻 代码实现¶
练习1: 实现Self-Attention机制¶
练习2: 实现Multi-Head Attention¶
平台: Deep-ML Multi-Head Attention
代码模板¶
import torch
import torch.nn as nn
import math
class SelfAttention(nn.Module):
def __init__(self, d_model, n_heads):
super().__init__()
self.d_model = d_model
self.n_heads = n_heads
self.d_k = d_model // n_heads
self.W_q = nn.Linear(d_model, d_model)
self.W_k = nn.Linear(d_model, d_model)
self.W_v = nn.Linear(d_model, d_model)
self.W_o = nn.Linear(d_model, d_model)
def scaled_dot_product_attention(self, Q, K, V, mask=None):
# TODO: 实现注意力计算
pass
def forward(self, x, mask=None):
# TODO: 实现完整的前向传播
pass
✅ 学习检验¶
完成以下检验才算掌握本节:
- [ ] 能画出Self-Attention的计算流程图
- [ ] 完成Deep-ML平台的两个编程练习
- [ ] 面试问题能用自己的话流利回答