@srush_nlp:我一直对 DL Alchemy 课程(https://deep-learning-alchemy.github.io)非常着迷。决定将……
摘要
斯坦福大学的 CS 312“深度学习炼金术”课程将构建理论的重担交给学生(以及他们的 Claude 助手),让他们在一个用 6.14 亿个 token 训练的 8 层 Transformer 上开展消融实验,以实证方式探究 Transformer 的各个组件——这引发了一个反思:也许死记硬背的机器学习知识从来就没那么重要。
查看缓存全文
缓存时间: 2026/10/29 14:01
我最近对 DL Alchemy 课程(https://deep-learning-alchemy.github.io)非常着迷。把构建理论的重担交给学生(以及他们的 Claude),这种做法让人感觉很有变革性,也出乎意料地富有挑战。也许机器学习知识从来就没那么关键。
斯坦福 CS 312 | 深度学习炼金术
来源:https://deep-learning-alchemy.github.io/ 作业示例题:从我们在 614M 个 token 上预训练的深度为 8 的基线 Transformer 开始。这个 Transformer(实现见下文)包含预归一化、注意力、MLP、残差连接和位置嵌入等多个组件。在本题中,我们希望了解每个组件能在多大程度上降低损失。请探索以下方向。1. 对当前模型中的各个组件进行逐一移除的消融实验,研究其作用。 2. ... 3. ... 4. 理解残差连接的作用。你能否提出不同的方案,让残差连接在降低损失方面发挥更大的作用?
相关代码片段`` class Block(nn.Module): def init(self, width, …): super().init() self.attn_norm = RMSNorm(width) self.attn = Attention(width, …) self.mlp_norm = RMSNorm(width) self.mlp = MLP(width, …)
def update(self, x):
attn = self.attn(self.attn_norm(x))
mlp = self.mlp(self.mlp_norm(x + attn))
return attn + mlp
def forward(self, x):
return x + self.update(x)
class Transformer(nn.Module): def init(self, vocab_size, depth=8, …): super().init() self.token_embed = nn.Embedding(vocab_size, …) self.position_embed = nn.Embedding(…) self.blocks = nn.ModuleList( [Block(…) for _ in range(depth)] ) self.final_norm = RMSNorm(…) self.lm_head = nn.Linear(…, vocab_size)
def forward(self, tokens):
positions = torch.arange(
tokens.size(1), device=tokens.device
)
x = self.token_embed(tokens)
x = x + self.position_embed(positions)
for block in self.blocks:
x = block(x)
return self.lm_head(self.final_norm(x))
``
测验示例题 (难度:简单):我们使用相同的训练方案和超参数,训练以下各个深度为 8 的 Transformer 变体。请按最终验证损失从低到高对这些变体排序。在字母之间使用 <、> 或 =;当损失差在 0.01 以内时使用 =。1. 基线 2. 无预归一化 3. 无残差连接 4. 无 MLP 5. 无注意力 6. 无位置嵌入
移除预归一化的差异`` @@ -10,4 +10,4 @@ class Block.update def update(self, x):
- attn = self.attn(self.attn_norm(x))
- attn = self.attn(x)
- mlp = self.mlp(self.mlp_norm(x + attn))
- mlp = self.mlp(x + attn) return attn + mlp ``
移除残差连接的差异`` @@ -16,2 +16,2 @@ class Block.forward def forward(self, x):
- return x + self.update(x)
- return self.update(x) ``
移除 MLP 的差异`` @@ -10,4 +10,3 @@ class Block.update def update(self, x): attn = self.attn(self.attn_norm(x))
- mlp = self.mlp(self.mlp_norm(x + attn))
- return attn + mlp
- return attn ``
移除注意力的差异`` @@ -10,4 +10,3 @@ class Block.update def update(self, x):
- attn = self.attn(self.attn_norm(x))
- mlp = self.mlp(self.mlp_norm(x + attn))
- return attn + mlp
- mlp = self.mlp(self.mlp_norm(x))
- return mlp ``
移除位置嵌入的差异`` @@ -22,2 +22,1 @@ Transformer.init self.token_embed = nn.Embedding(vocab_size, …)
-
self.position_embed = nn.Embedding(...)
@@ -30,8 +29,4 @@ Transformer.forward def forward(self, tokens):
-
positions = torch.arange( -
tokens.size(1), device=tokens.device -
) x = self.token_embed(tokens) -
x = x + self.position_embed(positions) for block in self.blocks: x = block(x)
``
测验示例题 (难度:困难):我们训练默认的 8 层 Transformer,以及一个变体:该变体的残差连接不再仅来自上一层,而是取上一层输出的 0.5 和上上层输出的 0.5 相加(第一层除外)。对于每种方法,我们取六个学习率 {10−4, 3 × 10−4, 10−3, 3 × 10−3, 10−2, 3 × 10−2} 下的最佳损失。你预测这两种方法之间的损失差 (L混合残差−L默认) 是多少?核心差异`` @@ -34,3 +34,9 @@ Transformer.forward x_two_back = None for i, block in enumerate(self.blocks):
- x = block(x)
- update = block.update(x)
- residual = (
-
x if i == 0 -
else 0.5 * x + 0.5 * x_two_back - )
- x_two_back, x = x, residual + update ``
注意:这两道题都很难,如果不运行作业中的实验,你对它们没有直觉,也不要灰心\!
相似文章
@StanfordAILab: 绝佳机会宣传 @tatsu_hashimoto 和 @kothasuhas 的 CS 312: Deep Learning Alchemy。所有录像和课程材料……
斯坦福人工智能实验室宣布公开 CS 312: Deep Learning Alchemy 课程的录像和材料,包括关于深度学习概念(如Transformer组件)的作业和测验。
@MichaelRan15: Stanford CS312 Deep Learning Alchemy 值得关注。它不仅仅是又一个2022年的深度学习课程。讲师…
斯坦福大学宣布了一门新的深度学习课程CS312,其独特的评分系统强调测验和实践实验,而非作业。
@AndrewYNg: 新课程:Transformers in Practice。你将获得对基于Transformer的LLM工作方式的实践理解,从而能够推理…
deeplearning.ai与AMD合作推出的新课程《Transformers in Practice》,教授对基于Transformer的LLM的实践理解,涵盖文本生成、注意力机制以及量化(quantization)和KV缓存等推理优化技术。
@RuiWu560670:CS336 的老粉丝了。我最喜欢的部分是从前沿实验室的技术报告中提炼实证发现。那些经验教训是用真实的算力换来的,往往比在狭隘假设下推导出来的理论更有用。CS312 在此基础上更进一步:它教你直接观察这些实证现象,再反向推导背后的科学。Stanford 在这方面真的走在前面。我会跟进 CS312 的。
一位 CS336 的老粉丝称赞了课程对实证研究的重视,并对 Stanford 新开设的 CS312《Deep Learning Alchemy》课程表示期待。该课程由 Tatsunori Hashimoto 推出,旨在教授前沿深度学习研究中那些混乱而依赖经验的一面。
@shao__meng:斯坦福大学 CS 312「Deep Learning Alchemy」秋季新课,由 @tatsu_hashimoto 和 @kothasuhas 主讲……
斯坦福大学新开设 CS 312「Deep Learning Alchemy」课程,由 Tatsunori Hashimoto 和 Suhas Kotha 主讲,聚焦深度学习中以经验为主的知识——超参数缩放、优化器不变性(μP、Muon)、损失景观与训练稳定性等,全部作业代码、测验和讲义公开,可视为 CS 336 的续作。