【CS336】Lecture1课程讲义-语言模型发展历程&Tokenization概念

CS336:从零开始构建语言模型(2025年春季)

讲义原文链接

一、课程开篇与核心目标

欢迎语

这是CS336课程的第二次开设,斯坦福校区的选课人数增长了50%。课程讲座会发布在YouTube上,供全球学习者观看。

课程开设的初衷

我们先提问:"为何要开设一门从零开始构建语言模型的课程?"

核心问题在于:研究人员正与底层技术逐渐脱节。

  • 8年前,研究人员会自主实现并训练模型;
  • 6年前,研究人员会下载现成模型(如BERT)并进行微调;
  • 如今,研究人员仅需调用闭源商用模型(如GPT-4/Claude/Gemini)的API。

抽象层级的提升确实提高了生产效率,但存在两大问题:

  1. 这些抽象层并非"无泄漏"(与编程语言、操作系统的抽象层不同);
  2. 仍有大量基础研究需要打破现有技术栈才能推进。

本课程的核心:通过"构建"实现"理解"

二、语言模型的工业化现状

GPT-4据称拥有1.8万亿参数,训练成本约1亿美元;xAI搭建了配备20万个H100显卡的集群用于训练Grok模型;OpenAI、英伟达、甲骨文合作的"星门计划"更是计划在4年内投入5000亿美元。

更关键的是,前沿模型的构建细节并未公开------GPT-4的技术报告中也几乎没有实质性技术细节。

"规模不同,本质不同"

前沿大模型超出了我们的可及范围,但构建小语言模型(本课程聚焦10亿参数以下)可能无法完全代表大模型的特性:

  • 示例1:注意力机制与MLP(多层感知机)消耗的计算量占比随模型规模变化;
  • 示例2:模型能力会随规模扩大出现"涌现"现象。
课程能传递的核心知识

我们能学到三类可迁移的知识:

  1. 机制:技术原理(如Transformer架构、模型并行如何利用GPU);
  2. 思维模式:最大化硬件利用率、重视规模效应(如缩放定律);
  3. 直觉:数据与建模决策如何影响模型精度(这类直觉仅部分可迁移)。

部分设计决策尚无理论支撑,仅来自实验探索(例如SwiGLU激活函数的提出)。

"苦涩的教训"

错误解读:规模决定一切,算法无关紧要;

正确解读:可缩放的算法 才是关键。

核心公式:精度 = 效率 × 资源

事实上,规模越大,效率越重要(无法承受资源浪费)。有研究表明,2012-2019年间ImageNet任务的算法效率提升了44倍。

课程核心框架:在给定计算和数据预算下,如何构建最优模型?即最大化效率

三、语言模型发展历程

前神经网络时代(2010年前)
  • 用语言模型测量英语的熵(香农,1950);
  • 大量n-gram语言模型的研究(用于机器翻译、语音识别)。
神经网络核心组件(2010年代)
  • 首个神经语言模型(Bengio,2003);
  • 序列到序列建模(用于机器翻译);
  • Adam优化器(2014);
  • 注意力机制(用于机器翻译,Bahdanau等,2015);
  • Transformer架构(用于机器翻译,2017);
  • 混合专家模型(MoE,2017);
  • 模型并行技术(GPipe、ZeRO、Megatron-LM,2018-2019)。
早期基础模型(2010年代后期)
  • ELMo:基于LSTM预训练,微调后提升任务性能;
  • BERT:基于Transformer预训练,微调适配各类任务;
  • Google T5(110亿参数):将所有任务转化为"文本到文本"形式。
拥抱规模化,封闭性增强
  • OpenAI GPT-2(15亿参数):生成流畅文本,首次展现零样本能力,分阶段发布;
  • 缩放定律:为模型规模化提供可预测性;
  • OpenAI GPT-3(1750亿参数):展现上下文学习能力,闭源发布;
  • Google PaLM(5400亿参数):超大规模,但训练不足;
  • DeepMind Chinchilla(700亿参数):计算最优的缩放定律。
开源模型浪潮
  • EleutherAI:开源数据集(The Pile)与模型(GPT-J);
  • Meta OPT(1750亿参数):复刻GPT-3,暴露大量硬件问题;
  • Hugging Face/BigScience BLOOM:聚焦数据来源合规性;
  • Meta Llama系列、阿里云通义千问、深度求索DeepSeek、AI2 OLMo等开源模型。
开放程度分级
  1. 闭源模型(如GPT-4o):仅开放API调用;
  2. 开源权重模型(如DeepSeek):提供权重、架构细节,但无数据细节;
  3. 全开源模型(如OLMo):提供权重、数据及大部分技术细节。

四、课程后勤与安排

课程属性

5学分课程,2024年春季课程评价显示:"第一次作业的工作量约等于CS224n全部5次作业+期末项目的总和"。

适合/不适合选课的人群
  • 适合:痴迷于理解技术底层原理、希望提升研究工程能力的学习者;
  • 不适合:本季度需完成研究产出、仅想学习AI热门技术(如多模态、RAG)、仅想在特定应用领域快速出成果的学习者(这类需求直接调用/微调现有模型即可)。
课后跟进方式

所有讲义和作业会公开,讲座会通过斯坦福CGOE(原SCPD)录制并上传至YouTube(略有延迟),课程计划明年继续开设。

作业安排
  • 5次作业:基础、系统、缩放定律、数据、对齐;
  • 无脚手架代码,但提供单元测试和适配器接口验证正确性;
  • 本地实现验证正确性,集群运行进行精度/速度基准测试;
  • 部分作业设排行榜(在训练预算下最小化困惑度);
  • 谨慎使用AI工具(如CoPilot、Cursor),避免影响学习效果。
计算集群

感谢Together AI提供计算集群,需提前阅读使用指南,尽早开始作业(截止日前集群会拥堵)。

五、课程核心模块

核心目标:效率优先

资源包括数据+硬件(计算、内存、通信带宽),核心问题:给定固定资源,如何训练最优模型?(例如:给定Common Crawl数据和32张H100显卡,为期2周,该如何设计?)

课程模块概览
  1. 基础模块

    • 目标:实现完整流水线的基础版本;
    • 组件:分词、模型架构、训练;
    • 分词:字节对编码(BPE),以及无分词器方案(直接基于字节,尚未规模化);
    • 架构:以原始Transformer为起点,涵盖激活函数(ReLU、SwiGLU)、位置编码(正弦编码、RoPE)、归一化(LayerNorm、RMSNorm)、注意力机制(全注意力、滑动窗口注意力、GQA/MLA)等变体;
    • 训练:优化器(AdamW、Muon、SOAP)、学习率调度(余弦调度、WSD)、批大小、正则化、超参数搜索;
    • 作业1:实现BPE分词器、Transformer、交叉熵损失、AdamW优化器、训练循环,在TinyStories和OpenWebText数据集上训练,基于H100 90分钟训练时长最小化OpenWebText困惑度。
  2. 系统模块

    • 目标:最大化硬件利用率;
    • 组件:内核、并行、推理;
    • 内核:编写CUDA/Triton/CUTLASS内核,通过优化计算组织方式减少数据移动,提升GPU利用率;
    • 并行:多GPU场景下的集体操作(gather/reduce/all-reduce),参数/激活/梯度/优化器状态分片,数据/张量/流水线/序列并行;
    • 推理:生成式任务的prefill(预填充)与decode(解码)阶段优化(KV缓存、批处理、推测解码);
    • 作业2:实现Triton融合RMSNorm内核、分布式数据并行训练、优化器状态分片,进行基准测试与性能分析。
  3. 缩放定律模块

    • 目标:小规模实验,预测大规模模型的超参数/损失;
    • 核心问题:给定计算预算C,应增大模型规模N还是训练数据量D?
    • 计算最优缩放定律:D* = 20N*(如14亿参数模型应训练280亿token);
    • 作业3:基于给定训练API收集数据,拟合缩放定律,预测大规模超参数,在计算预算下最小化损失。
  4. 数据模块

    • 核心问题:模型需要具备哪些能力?(多语言、代码、数学?);
    • 评估:困惑度、标准化测试(MMLU/GSM8K)、指令遵循(AlpacaEval)、测试时计算缩放(思维链、集成)、LM作为评估器;
    • 数据治理:数据来源(网页、书籍、论文、代码)、版权合规、格式转换(HTML/PDF转文本);
    • 数据处理:转换、过滤(高质量/去有害内容)、去重(布隆过滤器/MinHash);
    • 作业4:Common Crawl HTML转文本、训练质量/有害内容过滤分类器、MinHash去重,在token预算下最小化困惑度。
  5. 对齐模块

    • 基础模型仅具备"原始潜力"(擅长预测下一个token),对齐让模型具备实际使用价值;
    • 对齐目标:遵循指令、调整风格、保障安全;
    • 两个阶段:监督微调(SFT)、从反馈中学习(RLHF);
      • 监督微调:基于(提示,响应)对微调模型,挖掘基础模型已有能力;
      • 反馈学习:偏好数据(多响应+用户偏好)、验证器(形式化/学习型)、算法(PPO/DPO/GRPO);
    • 作业5:实现监督微调、DPO、GRPO。

六、分词(Tokenization)

核心概念

分词器实现字符串与整数序列(token)的双向转换,核心直觉:将字符串拆分为高频片段。

分词方案对比
  1. 字符分词:基于Unicode码点,词汇量过大(约15万),稀有字符浪费词汇空间;
  2. 字节分词:基于UTF-8编码,词汇量固定为256,但压缩率为1(序列过长,受Transformer上下文长度限制);
  3. 单词分词:经典NLP方案,词汇量庞大,未见过的单词需用UNK标记,影响困惑度计算;
  4. 字节对编码(BPE):GPT-2采用的方案,核心思路:从单字节开始,迭代合并最频繁的相邻token对,平衡词汇量与压缩率。
BPE训练与使用
  • 训练:初始化单字节token,统计相邻token对频率,合并最高频对,生成新token,重复指定次数;
  • 编码:将字符串转为字节序列,按训练得到的合并规则迭代合并;
  • 解码:按词汇表将token映射回字节,再解码为字符串;
  • 作业1扩展要求:优化编码效率、支持特殊token、预分词(GPT-2正则)、提升性能。
总结
  • 分词器:实现字符串与token的双向映射;
  • 字符/字节/单词分词均非最优;
  • BPE是利用语料统计信息的有效启发式方法;
  • 分词是"必要之恶",未来或可直接基于字节实现。

七、后续内容预告

下一次课程:PyTorch核心组件、资源核算。

相关推荐
新缸中之脑1 小时前
Hermes-Agent 简明指南
人工智能
WiSirius1 小时前
LLM:基于 AgentScope + Streamlit 的 AI Agent脑暴室
人工智能·深度学习·自然语言处理·大模型·llama
跨境猫小妹1 小时前
采购交期拉长如何把补货策略从经验改为预测
大数据·人工智能·产品运营·跨境电商·营销策略
console.log('npc')1 小时前
Cursor,Trae,Claude Code如何协作生产出一套前后台app?
前端·人工智能·react.js·设计模式·ai·langchain·ai编程
AI视觉网奇1 小时前
动作迁移算法笔记 2026
人工智能·笔记
@TsUnAmI~2 小时前
当翻译不只是翻译:我做了一个AI桌面翻译助手
人工智能
码农垦荒笔记2 小时前
OpenClaw实战 #07:从 0 写一个自定义 Skill——让 AI 自动同步 Notion 待办到飞书(完整代码)
人工智能·飞书·notion
进击ing小白2 小时前
OpenCv之图像的仿射和透视变化
人工智能·opencv·机器学习