自监督学习、语言模型与强化学习
本章导读
前面的章节讲了"如何训练模型"——但都假设有标注数据。现实中,标注数据是昂贵的,而无标注数据(文本、图片、网页)是海量的。
自监督学习的核心思想:从无标注数据中自动构造监督信号来预训练模型,然后在少量有标注数据上微调。这是 GPT、BERT 等大模型的基础范式。
本章还覆盖强化学习的基本数学框架,作为课程的最后一个主题。
自监督学习概述
定义与动机
监督学习:需要人工标注的 $(x, y)$ 对。
自监督学习:从数据本身生成"伪标签"——不需要人工标注。
典型做法:
- 遮住输入的一部分,让模型预测被遮住的部分(自预测)
- 生成输入的两个不同"视角",让模型判断它们是否来自同一个样本(对比学习)
核心流程
大量无标注数据 → [自监督预训练] → 通用表示
↓
少量有标注数据 → [微调 Fine-tuning] → 下游任务模型
两大框架
| 框架 | 思想 | 监督信号来源 | 代表方法 |
|---|---|---|---|
| 自预测(Predictive) | 从上下文预测缺失内容 | 输入本身的结构 | BERT (MLM)、GPT (LM) |
| 对比学习(Contrastive) | 拉近正样本对,推远负样本对 | 数据增强构造正/负对 | SimCLR、MoCo、CLIP |
Word2Vec:Skip-gram 模型
目标
学习词向量(Word Embedding):将每个词映射到一个低维实数向量 $\boldsymbol{v}_w \in \mathbb{R}^d$,使得语义相近的词在向量空间中距离也近。
经典例子:$\vec{king} - \vec{man} + \vec{woman} \approx \vec{queen}$
两个向量
每个词 $w$ 实际上有两个向量:
- 中心词向量 $\boldsymbol{v}_w$:当 $w$ 作为中心词时使用
- 上下文向量 $\boldsymbol{u}_w$:当 $w$ 作为上下文词时使用
训练完成后通常只使用 $\boldsymbol{v}_w$(或取两者平均)。
Skip-gram 思想
给定一个中心词 $w$,预测其上下文窗口内出现的词:
$$\max \sum_{(w,c) \in \text{正样本对}} \log P(c | w)$$
理想情况下,用 softmax 定义概率:
$$P(c | w) = \frac{\exp(\boldsymbol{u}_c^T \boldsymbol{v}_w)}{\sum_{c' \in V} \exp(\boldsymbol{u}_{c'}^T \boldsymbol{v}_w)}$$
Softmax 的计算代价问题
分母需要对整个词汇表 $|V|$(通常几万到几十万)求和:
$$\sum_{c' \in V} \exp(\boldsymbol{u}_{c'}^T \boldsymbol{v}_w)$$
每次更新都要计算 $|V|$ 次指数和内积——计算成本 $O(|V|)$,不可行。
负采样(Negative Sampling)
核心思想:将多分类 softmax 问题转化为多个独立的二分类问题。
对于一个正样本对 $(w, c)$——中心词 $w$ 确实和上下文词 $c$ 共现:
- 正信号:$\boldsymbol{u}_c^T \boldsymbol{v}_w$ 应该大 → $\sigma(\boldsymbol{u}_c^T \boldsymbol{v}_w) \approx 1$
对于 $K$ 个随机采样的负样本 $c_1^-, c_2^-, \ldots, c_K^-$(从词汇表中按噪声分布 $P_n$ 采样的词,不在窗口内):
- 负信号:$\boldsymbol{u}_{c_k^-}^T \boldsymbol{v}_w$ 应该小 → $\sigma(-\boldsymbol{u}_{c_k^-}^T \boldsymbol{v}_w) \approx 1$
负采样损失函数:
$$\mathcal{L} = \log\sigma(\boldsymbol{u}_c^T \boldsymbol{v}_w) + \sum_{k=1}^K \mathbb{E}_{c_k^- \sim P_n}\left[\log\sigma(-\boldsymbol{u}_{c_k^-}^T \boldsymbol{v}_w)\right]$$
最大化这个目标(等价于最小化负对数)。
解读:
- 第一项:让正样本对的内积趋向正无穷($\sigma \to 1$)
- 第二项:让负样本对的内积趋向负无穷($\sigma(-\cdot) \to 1$)
噪声分布:通常取词频的 3/4 次方:$P_n(w) \propto (\text{freq}(w))^{3/4}$
为什么 3/4?平滑分布——降低高频词的采样概率,给低频词更多机会被当作负样本。
计算量:每次更新只涉及 $1 + K$ 个词的向量($K$ 通常 5-20),而非整个词汇表——从 $O(|V|)$ 降到 $O(K)$。
BERT
核心创新
- 双向上下文:同时看左右两侧(不像 GPT 只看左边)
- 动态表征:同一个词在不同语境中有不同向量(Word2Vec 是静态的——每个词永远一个向量)
模型结构
BERT = 多层堆叠的 Transformer Encoder(使用完全双向的自注意力)。
原始 BERT-base:12 层,$d=768$,12 头,110M 参数。
预训练任务 1:掩码语言模型(MLM)
随机遮住输入中 15% 的 token,让模型根据上下文预测被遮住的原词。
具体操作:对被选中的 15% 的 token:
- 80% 替换为特殊 token
[MASK] - 10% 替换为词汇表中的随机词
- 10% 保持不变
为什么不全部换成 [MASK]?
- 微调时输入中没有
[MASK],如果预训练时全用[MASK],会产生预训练-微调不匹配 - 随机替换和保持不变让模型不能简单地"只关注
[MASK]位置",必须建模所有位置
15% 比例的意义:
- 过高(如 50%)→ 上下文丢失太多,模型"看"不到足够信息来预测
- 过低(如 1%)→ 任务太简单,训练效率低,学不到深层语义
预训练任务 2:下一句预测(NSP)
给定句子对 $(A, B)$:
- 50% 的情况下 $B$ 确实是 $A$ 的下一句(正样本)
- 50% 的情况下 $B$ 是语料中的随机句子(负样本)
模型需要判断 $B$ 是否是 $A$ 的下一句。
作用:帮助模型理解句间关系(对问答、自然语言推理等任务有帮助)。
BERT 的微调
只需在预训练好的 BERT 上加一个很小的任务头:
- 文本分类:取
[CLS]token 的输出向量,接线性层 → softmax - 序列标注(NER):取每个 token 的输出向量,接分类层
- 问答:预测答案的起始和结束位置
微调时所有参数(BERT 本体 + 任务头)一起训练,但通常只需要少量标注数据和几个 epoch。
自回归语言模型与 GPT
自回归分解
将联合概率用链式法则分解为条件概率的连乘:
$$P(x_1, x_2, \ldots, x_n) = \prod_{t=1}^n P(x_t \mid x_1, x_2, \ldots, x_{t-1})$$
模型从左到右,依次预测下一个 token——这就是**语言模型(Language Model, LM)**的任务。
GPT 的结构
GPT = 多层堆叠的 Transformer Decoder(带 causal mask 的自注意力)。
- 每个位置只能看到自己和前面的位置(不能偷看未来)
- 通过 causal mask 实现:将注意力矩阵的上三角设为 $-\infty$
GPT 演进
| 版本 | 参数量 | 训练数据 | 关键突破 |
|---|---|---|---|
| GPT-1 (2018) | 117M | BookCorpus (5GB) | 预训练+微调范式 |
| GPT-2 (2019) | 1.5B | WebText (40GB) | Zero-shot 能力 |
| GPT-3 (2020) | 175B | 大规模混合 (45TB) | Few-shot / In-context learning |
Scaling 的发现:随着参数量增加 1000 倍,模型不仅量变,还产生了质变——涌现出小模型完全不具备的能力。
GPT vs BERT 完整对比
| 维度 | GPT | BERT |
|---|---|---|
| 架构 | Transformer Decoder | Transformer Encoder |
| 注意力方向 | 单向(只看左) | 双向(左右都看) |
| 预训练目标 | 预测下一个词(LM) | 预测被遮住的词(MLM)+ NSP |
| 预训练时 | 不需要破坏输入 | 需要随机 mask 输入 |
| 微调 | 取最后 token 输出 + 任务头 | 取 [CLS] 输出 + 任务头 |
| 擅长任务 | 生成(续写、对话、代码) | 理解(分类、匹配、抽取) |
| 推理方式 | 自回归生成(逐 token) | 单次前向传播 |
核心区别一句话:GPT 是"先读前文,写下一词";BERT 是"看完全文,理解每个位置"。
N-gram 语言模型
定义
用前 $n-1$ 个词来近似条件概率($n$ 阶马尔可夫假设):
$$P(x_t \mid x_1, \ldots, x_{t-1}) \approx P(x_t \mid x_{t-n+1}, \ldots, x_{t-1})$$
- Unigram ($n=1$):$P(x_t)$
- Bigram ($n=2$):$P(x_t \mid x_{t-1})$
- Trigram ($n=3$):$P(x_t \mid x_{t-2}, x_{t-1})$
参数量
需要存储所有可能的 $n$-gram 组合的概率。词汇表大小 $|V|$:
$$\text{参数量} = |V|^n$$
示例:$|V| = 18000$,$n = 6$(6-gram):
$$18000^6 = 3.4 \times 10^{25}$$
这是个天文数字——实际不可行。N-gram 模型只能用 $n \le 5$,且需要大量平滑技巧处理未见过的组合。
困惑度(Perplexity, PPL)
评估语言模型好坏的标准指标:
$$\text{PPL} = \exp\left(-\frac{1}{N}\sum_{t=1}^N \ln P(x_t \mid x_{ 或等价地:
$$\text{PPL} = \left(\prod_{t=1}^N P(x_t \mid x_{ 直觉: PPL = $k$ 的含义:模型在每个位置平均在 $k$ 个候选词中"犹豫"。PPL 越低,模型越好。 N-gram 的致命缺陷:维度灾难——参数量指数增长,且无法利用词之间的相似性。 神经网络解决: 前馈神经网络语言模型,$|V|=18000$,词嵌入 $d=100$,隐藏层 $h=60$,模型阶数 $n=6$(看前5个词): 不用嵌入层(直接 one-hot): 用嵌入层: 节省:$6{,}480{,}000 - 2{,}910{,}000 = 3{,}570{,}000$ 参数 嵌入层将输入维度从 90000 压缩到 500——这就是"词嵌入"的本质贡献。 幻觉(Hallucination):模型生成看起来流畅合理但事实错误的内容。本质是模型在"编"——它学到的是语言模式而非事实知识。 Scaling Law(缩放定律):模型性能随三个量呈幂律提升: $$L \propto N^{-\alpha}$$(固定数据和计算时,参数越多 loss 越低) 涌现(Emergence):当模型规模超过某个阈值时,突然展现出小模型完全不具备的能力。不是渐进提升,而是质的跃迁。例如: 指令遵循(Instruction Following):模型理解并执行自然语言指令的能力——不需要 few-shot 示例,直接说"帮我翻译这段话"就能做。 思维链(Chain-of-Thought, CoT):提示模型"一步步想",展示推理过程,可以显著提升复杂推理任务的表现。 阶段 1:预训练(Pre-training) 阶段 2:有监督微调(Supervised Fine-Tuning, SFT) 阶段 3:人类对齐(Alignment) 核心区别: MDP 是强化学习问题的标准数学框架,由五元组 $(S, A, P, R, \gamma)$ 定义: $$P(s_{t+1} \mid s_t, a_t, s_{t-1}, a_{t-1}, \ldots, s_0, a_0) = P(s_{t+1} \mid s_t, a_t)$$ "未来只依赖当前,与历史无关"——当前状态包含了所有用于预测未来的信息。 策略定义了智能体的行为方式——在每个状态下选择什么动作: 目标:找到最优策略 $\pi^*$,使得从任何状态出发的期望累积折扣奖励最大。 从状态 $s$ 出发,按策略 $\pi$ 行动,期望获得的累积折扣奖励: $$V^\pi(s) = \mathbb{E}_\pi\left[\sum_{t=0}^{\infty} \gamma^t R_{t+1} \mid S_0 = s\right]$$ 直觉:这个状态有多"值钱"。靠近终点、奖励丰厚的状态,$V$ 值高。 在状态 $s$ 执行动作 $a$,然后按策略 $\pi$ 行动的期望累积奖励: $$Q^\pi(s, a) = \mathbb{E}_\pi\left[\sum_{t=0}^{\infty} \gamma^t R_{t+1} \mid S_0 = s, A_0 = a\right]$$ 直觉:在这个状态下,做这个动作有多好。 $$V^\pi(s) = \sum_{a \in A} \pi(a|s)\; Q^\pi(s, a)$$ 状态价值 = 对所有可能动作的 Q 值按策略概率加权求和。 对于最优策略:$V^*(s) = \max_a Q^*(s,a)$(直接选最好的动作)。 价值函数满足递归关系——当前状态的价值由即时奖励 + 下一状态的价值决定: $$V^\pi(s) = \sum_a \pi(a|s) \sum_{s'} P(s'|s,a)\left[R(s,a,s') + \gamma V^\pi(s')\right]$$ 逐词理解: 整体:当前价值 = 期望的(即时奖励 + 折扣未来价值) $$V^*(s) = \max_a \sum_{s'} P(s'|s,a)\left[R(s,a,s') + \gamma V^*(s')\right]$$ $$Q^*(s,a) = \sum_{s'} P(s'|s,a)\left[R(s,a,s') + \gamma \max_{a'} Q^*(s',a')\right]$$ 区别:期望方程用"按策略加权",最优方程用"取最大值"。 最优策略:$\pi^*(s) = \arg\max_a Q^*(s, a)$ 模型已知——$P(s'|s,a)$ 和 $R(s,a,s')$ 完全已知。 反复应用贝尔曼最优方程更新: $$V_{k+1}(s) = \max_a \sum_{s'} P(s'|s,a)\left[R(s,a,s') + \gamma V_k(s')\right]$$ 初始化 $V_0(s) = 0$,迭代直到收敛。收敛后 $V_k \to V^*$。 局限:需要完整的环境模型——现实中通常不知道 $P$ 和 $R$。 不需要知道 $P$ 和 $R$!通过直接与环境交互(采取动作、观察奖励和下一状态)来学习 Q 函数。 $$Q(s,a) \leftarrow Q(s,a) + \alpha\left[r + \gamma \max_{a'} Q(s',a') - Q(s,a)\right]$$ 各项含义: 直觉:每次交互后,把 $Q(s,a)$ 稍微朝"更准确的估计"方向移动。 Q-Learning 是 off-policy 的: 行为和更新可以不同——探索的同时学最优。 当状态空间很大(如 Atari 游戏的像素输入 $210\times160\times3$)时,无法用表格存储所有 $(s, a)$ 对的 Q 值。 $$Q(s, a; \theta) \approx Q^*(s, a)$$ 输入是状态(如图像),输出是每个动作的 Q 值。 1. 经验回放(Experience Replay) 将每次交互经验 $(s, a, r, s')$ 存入回放缓冲区。训练时从缓冲区随机采样 mini-batch。 为什么:打破样本的时间相关性——连续的经验高度相关,直接用会让网络过拟合于最近的经验。 2. 目标网络(Target Network) 用一个参数固定的旧网络 $\theta^-$ 计算 TD target: $$\text{TD target} = r + \gamma \max_{a'} Q(s', a'; \theta^-)$$ 每隔 $C$ 步才将主网络参数复制给目标网络:$\theta^- \leftarrow \theta$。 为什么:如果用同一个网络既算预测又算目标,目标在不断变化——像追逐移动靶,训练不稳定。 $$L(\theta) = \mathbb{E}_{(s,a,r,s') \sim \text{Buffer}}\left[\left(r + \gamma \max_{a'} Q(s', a'; \theta^-) - Q(s, a; \theta)\right)^2\right]$$ 最小化 TD error 的平方——本质上是回归问题。 $$\mathcal{L}_i = -\log\frac{\exp(\text{sim}(\boldsymbol{z}_i, \boldsymbol{z}_i^+)/\tau)}{\exp(\text{sim}(\boldsymbol{z}_i, \boldsymbol{z}_i^+)/\tau) + \sum_{j \neq i}\exp(\text{sim}(\boldsymbol{z}_i, \boldsymbol{z}_j^-)/\tau)}$$ 共同本质:都通过对比正负样本学习表示——拉近相似、推远不同。
神经网络语言模型的优势
参数量对比示例
大语言模型(LLM)
关键概念
LLM 构建三阶段
强化学习基础
与其他学习范式的关系
范式
数据
反馈
学习方式
监督学习
$(x, y)$ 对
即时、精确
模仿正确答案
无监督学习
只有 $x$
无
发现数据结构
强化学习
状态-动作序列
延迟、标量奖励
试错中最大化回报
马尔可夫决策过程(MDP)
定义
元素
符号
含义
类比
状态空间
$S$
所有可能的状态
棋盘上所有可能的棋局
动作空间
$A$
所有可能的动作
所有合法的落子位置
转移概率
$P(s'|s,a)$
状态 $s$ 下执行 $a$ 后到达 $s'$ 的概率
落子后对手可能的回应
奖励函数
$R(s,a,s')$
转移时获得的即时奖励
吃子得分
折扣因子
$\gamma \in [0,1]$
未来奖励的衰减系数
眼前利益 vs 长远利益
马尔可夫性质
策略(Policy)
价值函数
状态价值函数 $V^\pi(s)$
动作价值函数 $Q^\pi(s, a)$
$V$ 和 $Q$ 的关系
贝尔曼方程
贝尔曼期望方程
贝尔曼最优方程
动态规划
前提条件
价值迭代(Value Iteration)
Q-Learning
无模型学习
更新规则
Off-policy 特性
DQN(Deep Q-Network)
问题
解决:用神经网络近似 Q 函数
两个关键技术
DQN 损失函数
InfoNCE 与 Skip-gram 负采样的对比
InfoNCE 损失(对比学习)
两者对比
InfoNCE
Skip-gram 负采样
形式
多类 softmax
多个独立二分类 sigmoid
概率解释
严格概率分布
非严格(各项独立)
正样本数
通常 1 个
窗口内多个上下文词
负样本来源
Batch 内其他样本
按噪声分布采样
温度参数
有 $\tau$ 控制平滑度
无
应用领域
通用表示学习(图像、多模态)
词嵌入