第 2 课编程与作业说明

主题

Attention 与 Transformer:从注意力直觉到手写实现

对应材料

致谢

这组材料主要来自 Yejin Choi 老师课程 CSE 517/447 的 Assignment 2。
作业说明中也注明,这份作业由 Yegor Kuznetsov、Liwei Jiang、Jaehun Jung 设计,并得到多位助教和同学的反馈支持。这里一并致谢。


一、这组材料在做什么

如果说第 1 课的重点是“神经网络为什么能训练”,那么第 2 课这组编程材料的重点就是:

  1. 先真正建立对 attention 的直觉。
  2. 再从零实现 multi-head self-attention。
  3. 最后把 attention 放回一个最小 Transformer 实现中验证。

这组材料不是单一 notebook,而是一条递进路线:


二、整体学习路线

第一步:先理解 Attention 在“做什么”

使用:5-A2S1-attention.ipynb

这份 notebook 不是在训练模型,而是在做一个非常重要的认知训练:

这部分的目标是让你不再把 attention 只看成一条公式,而是把它看成一种可控制的信息路由机制

第二步:自己实现 Attention

使用:5-A2S2-attention.ipynb

这份 notebook 会让你一步一步补出:

这部分的目标是把第 2 课 PPT 中的注意力公式真正落到代码实现。

补充说明:

三、各 notebook 应该怎样使用

1. A2S1:理解注意力

你会做什么

这份 notebook 最重要的收获

  1. attention 不是神秘黑箱,而是“基于相似度的加权取信息”。
  2. query / key 的关系决定“看谁”。
  3. value 决定“拿什么”。
  4. 输出既可以像检索,也可以像聚合。

建议课堂做法

容易忽略的问题


2. A2S2:从零实现 Attention

你会做什么

你要补全的核心函数包括:

这份 notebook 最重要的收获

  1. 你会真正理解 attention 的每一步 tensor 变换。
  2. 你会看到 causal mask 为什么是语言模型必需的。
  3. 你会弄清多头注意力不是“多做几次 attention”这么简单,而是和 shape 重排强相关。
  4. 你会第一次认真建立 multi-head attention 的实现直觉。

建议完成顺序

  1. 先实现最基本的 single-head attention
  2. 通过测试 1
  3. 再加 causal mask
  4. 通过测试 2
  5. 最后做 multi-head split / merge
  6. 通过测试 3

本部分重点注意

你要不断问自己:

容易出错的地方


四、建议学生的实际学习顺序

如果你是第一次学 attention / Transformer 编程,推荐按这个顺序:

  1. 先做 A2S1
  2. 再做 A2S2
  3. 在理解本课 attention 实现后,再去第 3 课看 Hugging Face 微调材料

五、建议学生重点记录的问题

  1. attention 为什么既像“检索”,又像“聚合”?
  2. causal mask 为什么是语言模型里不可缺少的一步?
  3. multi-head attention 到底比 single-head 多了什么能力?
  4. 为什么实现 attention 时最容易出错的是 shape,而不是公式本身?
  5. 当 A2S2 开始接入 mini Transformer 训练时,数据包、代码包和 notebook 分别扮演什么角色?

六、建议提交内容

如果你按课程作业方式来收,建议学生至少提交:

  1. 两份完成后的 notebook 或导出的 .py
  2. 一份简短 write-up
  3. 至少说明以下内容:

七、这组材料真正希望你带走什么

  1. attention 不是一句公式,而是一种信息选择与聚合机制。
  2. Transformer 的关键实现细节,最终都落在 tensor shape、mask 和矩阵运算上。
  3. 从零实现 attention 能帮助你真正看懂研究代码和工程代码。
  4. 当你能把 A2S1、A2S2 连起来看时,才真正从“会背 attention”走向“会实现 attention”。