第 2 课作业手册
主题
作业 2:Attention 与 Transformer
对应材料
-
作业说明:
ai-model/2/2-prog/5-CSE447_517_Win24_A2.pdf
- Notebook 1:
ai-model/2/2-prog/5-A2S1-attention.ipynb
- Notebook 2:
ai-model/2/2-prog/5-A2S2-attention.ipynb
致谢
本作业来自 Yejin Choi 老师课程
CSE 517/447 的 Assignment 2。
作业说明中注明,该作业主要由 Yegor Kuznetsov、Liwei Jiang、Jaehun Jung
设计,并得到多位同学与助教的反馈支持。这里致谢。
一、这份作业在考什么
这份作业不是单纯考你会不会调用 Transformer,而是在考三种不同层次的理解:
- 概念层:你是否真正理解 attention 在做什么。
-
实现层:你是否能从零写出 scaled dot-product
self-attention。
-
实现层进阶:你是否能把 attention / Transformer
的关键部件落实到代码实现里。
因此,这份作业比第 1 课的 PyTorch 基础作业更接近“真正的大模型基础能力”。
二、作业结构
作业分成两个核心部分。
第 1 部分:Understanding Attentions
对应 notebook:
你要做的事情包括:
- 构造 query 让 attention 选中某个 value
- 构造 query matrix 让 attention 产生 identity mapping
- 构造 query 让 attention 做平均
- 修改某个 key,观察输出如何改变
- 回答这些行为对语言建模意味着什么
真正想考什么
- 你是否理解 query、key、value 的角色
- 你是否理解注意力输出如何由相似度决定
-
你是否能从“操作层面”解释 attention,而不是只会背
softmax(QK^T)V
对应 notebook:
你要做的事情包括:
- 实现 attention 的核心组件
- 实现 causal masking
- 实现 multi-head split / merge
- 拼出完整 self-attention
- 在给定 scaffold 下训练一个小型 decoder-only Transformer
- 设计一个自己的小实验并写 mini-report
真正想考什么
- 你是否能把 Transformer 的数学形式翻译成 PyTorch 代码
- 你是否真正理解 causal mask 和 multi-head 的作用
- 你是否能读懂并修改研究原型代码 / 教学代码
三、每部分的完成建议
1. A2S1:先建立行为直觉
建议做法:
- 先不要急着填答案
-
先看
attention(query, key, value) 和
check_query() 在做什么
- 每道题先想“想得到怎样的 attention matrix”
- 再反推 query 应该如何设计
重点不是猜中一个数,而是解释:
- 为什么这个 query 会让某些 key 得分高
- 为什么 softmax 后会形成你想要的权重分布
2. A2S2:按 step 完成,不要跳步
建议顺序:
- 先写 step 1 的基本 attention
- 跑测试 1
- 再写 causal mask
- 跑测试 2
- 再写 multi-head
- 跑测试 3
这是最稳的方式。
如果你一次把所有 TODO 都填完,再一起调试,通常会很痛苦。
最需要盯住的点
- shape
- transpose 维度
- softmax 的维度
- split / merge 前后 embedding 维度的变化
四、作业提交形式
根据 PDF,这份作业需要同时提交:
-
代码
- §1 到 §2 对应 notebook 的代码版本
- 原课程要求是导出为
.py
-
写作报告
- §1 到 §2 的 written answers / reports
- 提交为单个 PDF
原作业说明还强调:
- 需要在 write-up 开头写明协作者
- 如果使用了 AI 工具,也要说明如何使用
如果你在本课程中沿用这份作业形式,也建议保留这条要求。
五、建议学生在 write-up 中重点回答什么
关于 A2S1
- attention 的选择能力为什么重要?
- attention 的平均 / 聚合能力为什么重要?
- 为什么改变某个 key 会改变输出分布?
关于 A2S2
- causal mask 的作用是什么?
- multi-head attention 比单头注意力多了什么能力?
- 你实现 attention 时最容易出错的是哪里?
六、做这份作业时要特别注意什么
-
不要只追求“代码能跑”
-
A2S2 一定要重视 shape
- attention 的大多数 bug 都是 shape 问题。
-
训练效果和泛化效果不是一回事
七、建议学生记录的关键问题
- attention 为什么可以像检索一样“挑出”信息?
- attention 为什么也可以像池化一样“聚合”信息?
- causal mask 为什么让 decoder-only Transformer 适合语言模型?
- multi-head attention 的本质收益是什么?
-
从零实现 attention 和直接调用 Hugging Face,有什么学习价值上的差别?
八、这份作业真正想让你带走什么
- 你应该能把 attention 从“公式”理解成“信息路由机制”。
- 你应该能从零实现 Transformer 中最关键的注意力模块。
-
你应该开始形成一种能力:既能看懂原理,也能读懂代码,并能把注意力模块落实为可验证的实现。