大家好,欢迎来到IT知识分享网。
以下是“第 8 天:自注意力机制详解”的详细学习计划,专注于理解 Transformer 中的自注意力(Self-Attention)机制。学习时长为 5 小时,适合在第 6-7 天微调 BERT 的实践基础上,深入掌握其核心技术——自注意力。计划包括理论学习、数学推导和动手计算,确保从概念到实践全面理解。
第 8 天学习计划:自注意力机制详解(5 小时)
目标:
- 理解自注意力机制的数学原理(查询 Q、键 K、值 V)。
- 阅读《Attention is All You Need》论文前半部分,结合视频资源加深理解。
- 完成一个简单的注意力计算手算任务。
总时长:5 小时工具:纸笔、计算器(可选)、电脑(阅读论文和视频)
时间分配
- 0:00 – 1:30(1.5 小时):理论学习与论文阅读
- 1:30 – 3:00(1.5 小时):视频讲解与数学公式推导
- 3:00 – 4:30(1.5 小时):手算注意力计算任务
- 4:30 – 5:00(30 分钟):总结与反思
详细学习任务
1. 理论学习与论文阅读(1.5 小时)
目标:掌握自注意力的背景和基本原理。
- 任务 1.1:阅读《Attention is All You Need》前半部分(45 分钟)
- 资源:论文 PDF(https://arxiv.org/abs/1706.03762),重点阅读第 1-3.2 节。
- 步骤: 背景(Section 1): 了解 Transformer 为何取代 RNN,提升并行性和长依赖处理。 模型架构(Section 3.1): 认识 Encoder-Decoder 结构,自注意力是核心组件。 注意力机制(Section 3.2): 重点阅读 Scaled Dot-Product Attention 和 Multi-Head Attention。
- 关键技术词语: Attention:根据输入的“相关性”加权求和。 Self-Attention:序列内部每个词关注其他词。 Scaled Dot-Product Attention:计算注意力的具体方法。
- 笔记:
- 记录公式:。
- \\text{Attention}(Q, K, V) = \\text{softmax}(\\frac{QK^T}{\\sqrt{d_k}})V
- 理解为什么要缩放()。
- \\sqrt{d_k}
- 任务 1.2:概念梳理(45 分钟)
- 步骤: 理解 Q、K、V 的含义: Query (Q):查询向量,表示当前词想“问”什么。 Key (K):键向量,表示其他词的“标签”。 Value (V):值向量,表示其他词的实际内容。 梳理流程: Q 和 K 点积计算相关性 → 缩放 → softmax 归一化 → 加权 V。
- 成果:掌握自注意力基本思想,能口述其步骤。

2. 视频讲解与数学公式推导(1.5 小时)
目标:通过视频直观理解自注意力,并推导核心公式。
- 任务 2.1:观看视频讲解(45 分钟) 推荐资源: “The Illustrated Transformer” by Jay Alammar(http://jalammar.github.io/illustrated-transformer/ 或 YouTube 搜索)。 “Transformer Neural Network” by StatQuest(YouTube)。 步骤: 观看自注意力部分的讲解(约 15-20 分钟)。 记录动画中 Q、K、V 如何交互。 关键技术词语: Dot Product (点积):衡量 Q 和 K 的相似度。 Softmax:将相似度转为概率分布。 成果:通过可视化理解注意力计算过程。
- 任务 2.2:数学公式推导(45 分钟)
- 步骤:
- 复习公式:
- \\text{Attention}(Q, K, V) = \\text{softmax}(\\frac{QK^T}{\\sqrt{d_k}})V
- 拆解步骤:
- QK^T:计算查询和键的相似度矩阵。
- \\frac{QK^T}{\\sqrt{d_k}}:缩放,防止数值过大。
- \\text{softmax}:归一化成权重。
- \\times V:用权重加权值向量。
- 理解 :
- \\sqrt{d_k}
- d_k 是 K 的维度,缩放避免点积过大导致 softmax 梯度消失。
- 笔记:
- 写下每个步骤的矩阵维度变化(如 是 , 是 )。
- Q
- n \\times d_k
- K^T
- d_k \\times n
- 成果:能手动推导注意力公式。
3. 手算注意力计算任务(1.5 小时)
目标:通过简单例子手算自注意力,验证理解。
- 任务 3.1:设定输入与参数(30 分钟)
- 设定:
- 输入句子:“I like to eat”(4 个词)。
- 假设词向量维度 (简化计算)。
- d_k = d_v = 2
- 随机初始化 Q、K、V 矩阵(实际由线性层生成,这里手动指定):
- Q = [[1, 0], [0, 1], [1, 1], [0, 0]] # 4个词的查询向量 K = [[1, 0], [1, 1], [0, 1], [0, 0]] # 4个词的键向量 V = [[1, 2], [2, 1], [0, 1], [1, 0]] # 4个词的值向量
- 成果:准备好计算输入。
- 任务 3.2:手算注意力(1 小时)
- 步骤:
- 计算 QK^T:
- QK^T = \\begin{bmatrix} 1 & 0 \\\\ 0 & 1 \\\\ 1 & 1 \\\\ 0 & 0 \\end{bmatrix} \\times \\begin{bmatrix} 1 & 1 & 0 & 0 \\\\ 0 & 1 & 1 & 0 \\end{bmatrix} = \\begin{bmatrix} 1 & 1 & 0 & 0 \\\\ 0 & 1 & 1 & 0 \\\\ 1 & 2 & 1 & 0 \\\\ 0 & 0 & 0 & 0 \\end{bmatrix}
- 缩放 \\frac{QK^T}{\\sqrt{d_k}}:
- d_k = 2,
- \\sqrt{d_k} = \\sqrt{2} \\approx 1.414
- \\frac{QK^T}{\\sqrt{2}} = \\begin{bmatrix} 0.707 & 0.707 & 0 & 0 \\\\ 0 & 0.707 & 0.707 & 0 \\\\ 0.707 & 1.414 & 0.707 & 0 \\\\ 0 & 0 & 0 & 0 \\end{bmatrix}
- Softmax(按行归一化):
- 第一行: →
- [0.707, 0.707, 0, 0]
- [0.5, 0.5, 0, 0]
- 第二行: →
- [0, 0.707, 0.707, 0]
- [0, 0.5, 0.5, 0]
- 第三行: →
- [0.707, 1.414, 0.707, 0]
- [0.25, 0.5, 0.25, 0]
- 第四行: → (全 0 时均分)。
- [0, 0, 0, 0]
- [0.25, 0.25, 0.25, 0.25]
- 结果:
- \\text{softmax} = \\begin{bmatrix} 0.5 & 0.5 & 0 & 0 \\\\ 0 & 0.5 & 0.5 & 0 \\\\ 0.25 & 0.5 & 0.25 & 0 \\\\ 0.25 & 0.25 & 0.25 & 0.25 \\end{bmatrix}
- 计算输出 \\text{softmax} \\times V:
- V = \\begin{bmatrix} 1 & 2 \\\\ 2 & 1 \\\\ 0 & 1 \\\\ 1 & 0 \\end{bmatrix}
- \\text{Attention} = \\begin{bmatrix} 0.5 & 0.5 & 0 & 0 \\\\ 0 & 0.5 & 0.5 & 0 \\\\ 0.25 & 0.5 & 0.25 & 0 \\\\ 0.25 & 0.25 & 0.25 & 0.25 \\end{bmatrix} \\times \\begin{bmatrix} 1 & 2 \\\\ 2 & 1 \\\\ 0 & 1 \\\\ 1 & 0 \\end{bmatrix} = \\begin{bmatrix} 1.5 & 1.5 \\\\ 1 & 1 \\\\ 1.25 & 1.25 \\\\ 1 & 1 \\end{bmatrix}
- 成果:计算出每个词的注意力输出。
4. 总结与反思(30 分钟)
目标:巩固理解,记录成果。
- 任务 4.1:总结计算过程 记录: 输入 Q、K、V 和最终输出。 每个步骤的中间结果。 回答问题: “I” 的输出 [1.5, 1.5] 表示什么?(“I” 关注了 “I” 和 “like”)。 缩放的作用是什么?(防止点积过大)。
- 任务 4.2:反思 思考自注意力如何帮助 BERT 理解上下文。 准备第 9 天问题:多头注意力如何扩展这个计算?
- 成果:完成学习笔记,理解自注意力机制。
第 8 天成果
- 技能:掌握自注意力的数学原理,能手算简单示例。
- 输出:一个完整的注意力计算过程。
- 理解:深入认识 Transformer 的核心机制。
注意事项
- 简化计算:用小矩阵(2 维)避免复杂运算。
- 资源:若公式推导困难,重看视频或查阅博客。
- 验证:可用 NumPy 验证手算:python
- import numpy as np Q = np.array([[1, 0], [0, 1], [1, 1], [0, 0]]) K = np.array([[1, 0], [1, 1], [0, 1], [0, 0]]) V = np.array([[1, 2], [2, 1], [0, 1], [1, 0]]) scores = Q @ K.T / np.sqrt(2) weights = np.exp(scores) / np.sum(np.exp(scores), axis=1, keepdims=True) output = weights @ V print(output)
第 8 天完成后,你将对自注意力有扎实的理论和实践理解,为后续学习多头注意力和 Transformer 架构打下基础!有问题随时问我!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/173099.html