@srush_nlp:我一直对 DL Alchemy 课程(https://deep-learning-alchemy.github.io)非常着迷。决定将……

X AI KOLs Timeline 新闻

摘要

斯坦福大学的 CS 312“深度学习炼金术”课程将构建理论的重担交给学生(以及他们的 Claude 助手),让他们在一个用 6.14 亿个 token 训练的 8 层 Transformer 上开展消融实验,以实证方式探究 Transformer 的各个组件——这引发了一个反思:也许死记硬背的机器学习知识从来就没那么重要。

我最近对 DL Alchemy 课程(https://deep-learning-alchemy.github.io)非常着迷。让学生(以及他们的 Claude)承担构建理论的重任,这一决定让人感觉具有变革性,也出乎意料地充满挑战。也许机器学习领域的知识从来就没那么关键。
查看原文
查看缓存全文

缓存时间: 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 ``

注意:这两道题都很难,如果不运行作业中的实验,你对它们没有直觉,也不要灰心\!

相似文章

@RuiWu560670:CS336 的老粉丝了。我最喜欢的部分是从前沿实验室的技术报告中提炼实证发现。那些经验教训是用真实的算力换来的,往往比在狭隘假设下推导出来的理论更有用。CS312 在此基础上更进一步:它教你直接观察这些实证现象,再反向推导背后的科学。Stanford 在这方面真的走在前面。我会跟进 CS312 的。

X AI KOLs Timeline

一位 CS336 的老粉丝称赞了课程对实证研究的重视,并对 Stanford 新开设的 CS312《Deep Learning Alchemy》课程表示期待。该课程由 Tatsunori Hashimoto 推出,旨在教授前沿深度学习研究中那些混乱而依赖经验的一面。