mcpField
W
worked-example-walkthrough

worked-example-walkthrough

github.com/lyndonkl其他18740 次安装10 周前更新
代码仓库

关于 worked-example-walkthrough

用于编写逐步演算示例的技能,让学习者能追踪每一步计算。每帧呈现当前状态、操作和观察要点,并以核验或变式练习收尾。

主要功能

  1. 01规划 3–7 帧的演示
  2. 02展示明确的中间数值
  3. 03为每项操作配上观察要点
  4. 04以合理性检查收尾
  5. 05适配单次、迭代或对比任务

适用场景

  1. 01讲解特征值计算
  2. 02逐步演示一次 SGD 更新
  3. 03说明跨多个 Token 的注意力计算
  4. 04用相同输入比较两种操作

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lyndonkl/claude --skill worked-example-walkthrough

安装后在 Claude Code 中输入/worked-example-walkthrough确认已加载。

附带文件resources/examples.md

详细介绍

已完成示例演练

目录

  1. 工作流
  2. 帧的结构
  3. 选择合适的示例
  4. 常见模式
  5. 防护措施
  6. 快速参考

演练是一系列编号的帧,展示每一步计算的状态。每一帧都回答三个问题:当前状态是什么?、是什么操作得出了这个结果?以及学习者应注意什么?

这是纯文本最接近 3Blue1Brown 动画的形式。学习者可以手动重新推演操作,而明确列出的中间状态能帮助发现只展示最终结果时容易掩盖的困惑。

快速示例(2×2 矩阵的特征值):

求 A = [[4, 1], [2, 3]] 的特征值。

帧 1。 状态:A = [[4, 1], [2, 3]]。我们要求满足 det(A − λI) = 0 的 λ。

帧 2。 写出 A − λI:

A - λI = [[4-λ,  1 ],
         [ 2,  3-λ]]

帧 3。 计算行列式: det = (4 − λ)(3 − λ) − 1·2 = (12 − 7λ + λ²) − 2 = λ² − 7λ + 10

帧 4。 解方程 λ² − 7λ + 10 = 0: 因式分解:(λ − 5)(λ − 2) = 0。因此 λ = 5 或 λ = 2。

帧 5。 特征值:5 和 2。快速检验:trace(A) = 4 + 3 = 7 = 特征值之和 ✓;det(A) = 12 − 2 = 10 = 特征值之积 ✓。

注意: 特征多项式就是展开后的 det(A − λI);求特征值就是求根。没有什么魔法。

5 帧,约 80 个词。学习者不到一分钟就能在纸上重做一遍。

工作流

复制此检查清单并跟踪进度:

Walkthrough Progress:
- [ ] Step 1: Pick the smallest possible example that exercises the concept
- [ ] Step 2: Write the goal — what we'll compute and why
- [ ] Step 3: Plan the frames (3-7 typically)
- [ ] Step 4: Write each frame: state, operation, notice
- [ ] Step 5: End with a sanity check or invitation to verify
- [ ] Step 6: Optional — invite the learner to redo with a variant

步骤 1:选择能体现概念的最小示例

示例必须足够小。使用 2×2 矩阵、3 维向量输入、3 个词元的序列。更大的示例会让运算掩盖结构。

示例还必须能体现概念,而不是仅做简单展示。对角矩阵的特征向量很简单;选择一个非对角的 2×2 矩阵。标量注意力很简单;至少选择 3 个词元。

关于各概念的推荐示例规模,请参阅 resources/examples.md。

步骤 2:写明目标——要计算什么,以及为什么

用一个句子说明。“计算 A = [[4, 1], [2, 3]] 的特征值。”或“使用随机 Q、K、V 向量对 3 个词元的序列应用注意力。”目标决定后续所有内容的方向。

步骤 3:规划分帧(通常为 3~7 帧)

每帧对应一个操作。先勾勒各帧,再展开编写——这样可以在问题出现在页面之前,先发现“跳步”问题。

适用于大多数操作的帧数:

  • 3 帧:简单的连续步骤(一次变换)
  • 5 帧:典型的单概念演示(特征值、softmax、单步 SGD)
  • 7 帧:复合演示(展示注意力的所有子步骤)

如果你发现自己想要超过 7 帧,要么是示例太大(缩小示例),要么是该操作包含多个子操作,值得分别演示。

步骤 4:编写每一帧:状态、操作、提示

每帧包含三个部分(参见 帧的构成):

  • 状态: 当前值,明确展示。
  • 操作: 我们刚才执行了什么操作才得到当前状态(或接下来要执行什么操作)。
  • 提示: 用一句话指出学习者可能会忽略的内容。

“提示”正是演示与例题解答的区别。例题解答展示步骤;演示还会说明该关注什么。

步骤 5:以合理性检查或验证邀请收尾

每个演示都应以以下其中一种方式收尾:

  • 合理性检查:“迹 ✓,行列式 ✓”。
  • 一致性检查:“结果具有预期的形状”。
  • 邀请验证:“尝试对 A = [[1, 2], [3, 4]] 执行相同操作;答案应为 λ ≈ −0.37 和 λ ≈ 5.37。”

合理性检查能告诉学习者结果是否正确,也是一种可复用的验证技巧,可用于类似问题。

步骤 6(可选):邀请学习者用一个变体重新做一遍

如果学习者有时间,而且示例很短,可以邀请他们稍作改动后重做:

  • “矩阵不变,但更换起始向量:用 v = (0, 1) 代替 (1, 0) 重做。”
  • “注意力计算不变,但将一个词元的 K 替换为零:先预测输出会如何变化,再进行计算。”

变体可以检验学习者是否掌握并迁移了整体图景,而不只是记住了运算。

帧的构成

每帧包含三个部分。用不同的视觉样式区分它们。

**Frame N.** [Operation: short verb phrase, what we're doing.]
[State: explicit values, in a code block if needed.]
[Notice: one sentence — what to look at.]
状态块

矩阵、向量和方程使用代码块。展示实际数值;尽量不要只写符号。关键在于具体。

v = (3, 4)
|v| = √(3² + 4²) = √25 = 5
操作短语

简短的动词短语:“计算……”“应用……”“代入……”“求解……”。仅一行。

提示句

用一句话指出本帧最重要的特征。

  • “交叉项抵消了——这是因为 A 是对称矩阵。”
  • “注意,第二个特征值为负——A 沿该方向进行反射。”
  • “softmax 的峰值出现在第一行——词元 1 的查询与键 1 高度匹配。”

如果某帧找不到值得说明的提示句,它可能不需要单独成帧。可以考虑将其合并。

选择合适的示例

选择的示例会决定演示的成败。选择时可参考以下启发:

使用具体的小数字,而不是符号

使用 a, b, c, d 的演示是推导,而不是演示。选择 2、3、1、−1 这样的数字——足够小,可以直接心算;同时又足够多样,可以展现规律。

避免使用过于简单的例子

单位矩阵、零向量、所有分数都相等——这些都过于简单,无法体现运算效果。演示需要让学习者看到运算在非平凡情况下会产生什么结果。

选择具有可验证性质的例子

对称矩阵的特征值都是实数——很容易发现错误。随机矩阵具有稳态分布——很容易验证。选择具有这些可检查性质的例子,才能让第 5 步的合理性检查有意义。

拿不准时,选择最小的非平凡尺寸
  • 矩阵:优先用 2×2;只有 2×2 无法体现概念时才用 3×3。
  • 向量:2D 或 3D。
  • 序列:至少 3 个 token(这样注意力才有意思);需要体现奇偶性时用 4 个。
  • 网络:用于反向传播演示时,至少用 1 层、2 个输入、1 个输出。

各概念的推荐例子见 resources/examples.md。

常见模式

模式 A:单次计算演示

适用于一次性运算:计算特征值、执行单步 SGD、进行单次注意力前向传播、对向量执行 softmax。 长度:3-5 帧。 结尾:合理性检查。

模式 B:迭代演示

适用于循环过程:多步梯度下降、通过幂迭代求特征向量、扩散采样。 长度:5-7 帧,明确展示 2-3 次迭代,然后写“依此类推……”。 结尾:说明收敛情况,并邀请读者预测极限。

模式 C:对比演示

适用于展示两种运算的差异:将矩阵-向量乘法表示为按行点积与按列组合;层归一化与批归一化;对同一梯度使用 SGD 与 Adam。 长度:通过两列并排帧或两轮演示进行对比。 结尾:用过渡句说明二者等价或不同的原因。

各模式的完整演示示例见 resources/examples.md。

注意事项

  • 展示实际数值,而不是符号。 使用 Av 的演示只是推导;使用 [5, 11] 的演示才是真正的演示。学习者需要看到数值。
  • 不要跳过学习者可能不确定的算术步骤。 “(4−λ)(3−λ) − 2 = λ² − 7λ + 10”可以;“(4−λ)(3−λ) − 2 = (λ−5)(λ−2)”跳过了展开步骤。先给出多项式,再进行因式分解。
  • 每一帧都应推进状态。 如果某一帧的状态与上一帧完全相同,只是换种说法,那这一帧就是浪费。
  • 每帧只进行一种运算。 一帧中包含两种运算,就应拆成两帧。
  • 不要让算术过程掩盖关键结果。 结尾要清楚地说明结果,并明确进行合理性检查。
  • 对于较长的计算,可考虑使用 Bash。 如果算术过程确实很长(例如 4×4 特征值问题),可使用 Bash 和 numpy 计算中间状态——但仍要将运算步骤展示为各帧。Bash 输出用于验证,不是演示本身。

快速参考

运算推荐例子帧数
矩阵-向量乘法A = [[1, 2], [3, 4]], v = (5, 6)3
特征值A = [[4, 1], [2, 3]]5
已知 λ 时求特征向量同一个 A,λ = 54
SVDA = [[3, 1], [1, 3]](对称矩阵,便于进行 SVD)6
Softmaxx = (2, 1, -1)4
交叉熵p = (1, 0, 0), q = (0.7, 0.2, 0.1)3
单步 SGD损失函数 x²,起点 x = 4,η = 0.54
注意力前向传播3 个 token,d = 27
LayerNormx = (1, 5, 9)5
微型网络的反向传播y = w₂σ(w₁x),一个输入/输出6
微型数据集上的 PCA2D 中的 4 个点6

每个演示的完整示例见 resources/examples.md。

评论

支持 Markdown