09-斯坦福CS336作业 📝
本文档介绍斯坦福大学 CS336《从零开始的语言模型》课程的 5 个作业内容及其作用,帮助学习者了解这门硬核实践课程的核心训练环节。
章节阅读路线图 🗺️
flowchart LR
A["1. 作业概述"]:::overview --> B["2. Assignment 1: 基础组件"]:::a1
B --> C["3. Assignment 2: 系统与分布式训练"]:::a2
C --> D["4. Assignment 3: 缩放定律"]:::a3
D --> E["5. Assignment 4: 数据处理"]:::a4
E --> F["6. Assignment 5: 对齐与强化学习"]:::a5
F --> G["7. 作业特点总结"]:::summary
classDef overview fill:#e3f2fd,stroke:#1565c0
classDef a1 fill:#e8f5e9,stroke:#2e7d32
classDef a2 fill:#fff3e0,stroke:#ef6c00
classDef a3 fill:#f3e5f5,stroke:#6a1b9a
classDef a4 fill:#fce4ec,stroke:#c62828
classDef a5 fill:#e0f2f1,stroke:#00695c
classDef summary fill:#fff8e1,stroke:#f57f17
阅读顺序说明:
- 第1章:了解作业整体概况和课程要求
- 第2-6章:依次了解 5 个作业的内容和作用
- 第7章:总结作业的整体特点和难度
1. 作业概述 📊
本章介绍 CS336 课程作业的整体概况
CS336 课程的作业以高度实践 著称,学生需要从零开始构建完整的大语言模型,而非使用现成的 API 或框架。
1.1 作业结构
课程共包含 5 个作业,对应课程的 5 个核心单元:
| 作业 | 主题 | 核心内容 |
|---|---|---|
| Assignment 1 | 基础(Basics) | 分词器、Transformer 模块、优化器、训练循环 |
| Assignment 2 | 系统(Systems) | 内存优化、分布式训练 |
| Assignment 3 | 缩放定律(Scaling Laws) | 模型缩放、计算预算优化 |
| Assignment 4 | 数据(Data) | 数据收集、过滤、去重 |
| Assignment 5 | 对齐(Alignment) | 模型对齐、强化学习 |
1.2 作业要求
- 代码量巨大:相比其他 AI 课程,代码量至少是一个数量级的增长
- 极少脚手架代码:学生需要自己编写大部分代码,仅提供单元测试和适配器接口
- 代码 + 报告:每个作业包含两部分------代码实现和书面报告
- 时间投入大:这是一门 5 学分的课程,需要大量的学习和开发时间
1.3 前置要求
- 精通 Python 编程
- 熟悉 PyTorch 和深度学习基础
- 了解微积分、线性代数、概率统计
- 掌握机器学习基础知识
参考资料:
- Stanford CS336 官方网站 -- Stanford ⭐值得阅读
- Standford CS336 Language Modeling from Scratch通关总结 -- 知乎
- Stanford CS336 | Language Modeling from Scratch -- GitHub
2. Assignment 1: 基础组件 🔨
本章介绍第一个作业:构建大语言模型的基础组件
2.1 作业内容
Assignment 1 是整个课程的基础作业,学生需要从零实现以下组件:
-
BPE 分词器(Byte-Pair Encoding Tokenizer)
- 训练字节级 BPE 分词器
- 支持高效的并行预处理和合并操作
- 处理特殊符号和 Unicode 字符串
-
Transformer 语言模型
- 构建仅解码器的 Transformer 结构(类似 GPT)
- 实现线性层、注意力机制、前馈网络等核心模块
- 使用 Xavier 初始化等方法
-
训练循环与优化器
- 实现训练损失计算
- 构建优化器(如 AdamW)
- 完成完整的训练流程
2.2 作业作用
为什么需要这个作业?
- 理解底层机制:通过手写分词器和 Transformer 模块,深入理解大模型的底层工作原理
- 建立完整知识体系:从数据处理到模型训练的完整链路,建立系统性认知
- 为后续作业打基础:Assignment 1 的代码会成为后续作业的基座模型
- 熟悉 PyTorch 核心元素:掌握张量、模型、优化器、训练循环等基本组件
学习收获:
- 掌握 BPE 分词器的原理和实现
- 理解 Transformer 的每个组件如何协同工作
- 能够独立从零搭建一个可训练的语言模型
参考资料:
- Stanford CS336 | Assignment 1 - BPE Tokenizer Training 实现 -- CSDN
- 斯坦福大学CS336从零实现大语言模型课程作业复现------Tokenization -- 和鲸社区
- CS336 Assignment - 1 -- Martian148
3. Assignment 2: 系统与分布式训练 ⚙️
本章介绍第二个作业:优化系统性能和实现分布式训练
3.1 作业内容
Assignment 2 重点关注系统优化和分布式训练:
-
内存优化
- 构建内存高效的训练代码
- 优化显存占用,减少内存碎片
- 实现梯度检查点(Gradient Checkpointing)等技术
-
分布式训练
- 实现数据并行训练(Data Parallel Training)
- 在多台机器、多个 GPU 上分布式训练模型
- 优化通信开销和同步策略
-
性能分析
- 分析计算资源(FLOPs)的使用情况
- 识别性能瓶颈并优化
3.2 作业作用
为什么需要这个作业?
- 掌握大模型训练的核心技能:大模型训练离不开分布式系统和内存优化,这是工业界的必备技能
- 理解硬件与算法的关系:学习如何让算法适配硬件,充分利用 GPU 资源
- 提升工程能力:从"能跑"到"跑得快",培养系统优化的思维
- 为大规模训练做准备:后续的缩放定律和数据处理作业需要高效的训练系统
学习收获:
- 掌握分布式训练的核心技术(如 DDP、FSDP)
- 能够分析和优化模型的内存和计算效率
- 理解大模型训练背后的系统工程原理
参考资料:
- Standford CS336 Language Modeling from Scratch通关总结 -- 知乎
- Stanford CS336 | Language Modeling from Scratch -- Stanford
4. Assignment 3: 缩放定律 📈
本章介绍第三个作业:理解模型的缩放规律
4.1 作业内容
Assignment 3 聚焦于缩放定律(Scaling Laws):
-
拟合缩放定律
- 使用提供的 IsoFLOPs 训练数据拟合缩放曲线
- 理解模型大小、数据量和计算量之间的关系
-
实验收集缩放数据
- 在有限的 FLOPs 预算下查询训练 API
- 收集不同配置下的训练数据
-
优化计算预算分配
- 分析如何在给定计算预算下最优地分配模型大小和训练 token 数
- 找到最佳的训练配置
4.2 作业作用
为什么需要这个作业?
- 理解大模型的缩放规律:缩放定律是大模型训练的理论基础,帮助理解"越大越好"背后的科学原理
- 掌握资源分配策略:学会在有限的计算资源下做出最优决策
- 培养科学实验能力:通过系统性的实验设计和数据分析,培养科研思维
- 指导实际训练:缩放定律可以直接指导工业界的大模型训练实践
学习收获:
- 理解 Chinchilla 等缩放定律的核心思想
- 能够根据计算预算估算最优的模型大小和训练数据量
- 掌握缩放实验的设计和数据分析方法
参考资料:
- Standford CS336 Language Modeling from Scratch通关总结 -- 知乎
- Melody-Zhou/stanford-cs336-spring2025-assignments -- GitHub
5. Assignment 4: 数据处理 🗃️
本章介绍第四个作业:构建数据处理流水线
5.1 作业内容
Assignment 4 专注于数据收集和处理:
-
HTML 转纯文本
- 从网页爬虫数据中提取干净的文本
- 处理 HTML 标签、脚本、样式等噪声
-
内容过滤
- 过滤有害内容(如暴力、色情、仇恨言论等)
- 实现多种过滤策略和启发式规则
-
数据去重
- 实现高效的文本去重算法
- 处理大规模数据集中的重复内容
-
构建数据流水线
- 整合上述步骤,构建完整的数据处理流水线
- 优化处理效率和数据质量
5.2 作业作用
为什么需要这个作业?
- 理解数据的重要性:数据质量直接影响模型性能,"Garbage in, garbage out"
- 掌握大数据处理技能:体验大数据时代和大模型恐怖的数据量级
- 学习工业级数据 pipeline:掌握实际生产环境中数据处理的完整流程
- 培养数据敏感性:学会识别和处理数据中的各种问题(噪声、偏差、重复等)
学习收获:
- 能够构建从原始网页到高质量训练数据的完整流水线
- 掌握数据过滤和去重的核心算法
- 理解数据质量对大模型训练的关键影响
💡 这是很多同学最喜欢的作业,能明显感受到大数据时代和大模型恐怖的数据量级!
参考资料:
- Standford CS336 Language Modeling from Scratch通关总结 -- 知乎
- CS336 Spring 2025: Assignment 4 Guide -- Scribd
6. Assignment 5: 对齐与强化学习 🎯
本章介绍第五个作业:模型对齐和强化学习
6.1 作业内容
Assignment 5 关注模型对齐和推理强化学习:
-
模型对齐技术
- 学习人类反馈强化学习(RLHF)
- 实现直接偏好优化(DPO)等对齐算法
- 让模型输出更符合人类价值观和意图
-
推理优化
- 优化模型的推理效率和输出质量
- 实现思维链(Chain-of-Thought)等推理增强技术
-
安全与责任
- 理解大模型的安全性问题
- 实现对齐后的安全评估
6.2 作业作用
为什么需要这个作业?
- 掌握大模型对齐的核心技术:对齐是当前大模型研究的热点和难点
- 理解 RLHF 等前沿方法:学习 ChatGPT 等主流模型背后的对齐技术
- 培养安全意识:理解大模型的潜在风险和缓解策略
- 紧跟研究前沿:对齐和强化学习是大模型领域最活跃的研究方向之一
学习收获:
- 理解模型对齐的原理和实现方法
- 掌握 RLHF、DPO 等主流对齐算法
- 能够评估和改进大模型的安全性和对齐程度
参考资料:
- Stanford CS336 | Language Modeling from Scratch -- Stanford
- Standford CS336 Language Modeling from Scratch通关总结 -- 知乎
7. 作业特点总结 📝
本章总结 CS336 作业的整体特点
7.1 作业难度曲线
| 作业 | 难度 | 代码量 | 核心挑战 |
|---|---|---|---|
| Assignment 1 | ⭐⭐⭐ | 大 | 从零搭建完整模型 |
| Assignment 2 | ⭐⭐⭐⭐ | 大 | 系统优化和分布式训练 |
| Assignment 3 | ⭐⭐⭐ | 中 | 实验设计和数据分析 |
| Assignment 4 | ⭐⭐⭐⭐⭐ | 大 | 大数据处理和去重 |
| Assignment 5 | ⭐⭐⭐⭐ | 中 | 对齐算法实现 |
7.2 核心特点
- 从零开始:不使用高级 API,所有组件都需要手写
- 完整的训练链路:从数据处理 → 模型构建 → 训练优化 → 对齐,覆盖大模型的全生命周期
- 注重实践:代码量巨大,强调动手能力
- 紧跟前沿:涵盖缩放定律、分布式训练、RLHF 等最新技术
- 工业级标准:作业内容和工业界大模型开发高度一致
7.3 适合人群
- ✅ 想深入理解大模型底层原理的研究者和工程师
- ✅ 有扎实的 Python 和 PyTorch 基础
- ✅ 有足够的学习时间(建议每周 10-15 小时)
- ❌ 不适合只想调用 API 的应用开发者
- ❌ 不适合编程基础薄弱的初学者
7.4 学习建议
- 扎实基础:确保 Python、PyTorch、深度学习基础扎实
- 循序渐进:按顺序完成作业,前面的代码会成为后面的基础
- 重视报告:书面报告帮助整理思路,加深对原理的理解
- 善用资源:参考官方课程网站、GitHub 开源实现和社区讨论
- 团队合作:如果允许,可以和同学组队,互相学习
参考资料:
- Standford CS336 Language Modeling from Scratch通关总结 -- 知乎 ⭐值得阅读
- 斯坦福大模型课CS336,硬核到让人怀疑人生? -- 博客园
- 斯坦福CS336:25年最新最好的大模型入门课 -- 知乎
- Stanford CS336 | Language Modeling from Scratch -- Stanford ⭐值得阅读
- QR-0W/Stanford-CS336 -- GitHub
最后更新时间:2026-05-18