主题
字号
CHAPTER 07 ≈ 50 MIN READ

自监督学习、语言模型与强化学习

本章导读

前面的章节讲了"如何训练模型"——但都假设有标注数据。现实中,标注数据是昂贵的,而无标注数据(文本、图片、网页)是海量的。

自监督学习的核心思想:从无标注数据中自动构造监督信号来预训练模型,然后在少量有标注数据上微调。这是 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$(或取两者平均)。

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$ 共现:

对于 $K$ 个随机采样的负样本 $c_1^-, c_2^-, \ldots, c_K^-$(从词汇表中按噪声分布 $P_n$ 采样的词,不在窗口内):

负采样损失函数

$$\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]$$

最大化这个目标(等价于最小化负对数)。

解读

噪声分布:通常取词频的 3/4 次方:$P_n(w) \propto (\text{freq}(w))^{3/4}$

为什么 3/4?平滑分布——降低高频词的采样概率,给低频词更多机会被当作负样本。

计算量:每次更新只涉及 $1 + K$ 个词的向量($K$ 通常 5-20),而非整个词汇表——从 $O(|V|)$ 降到 $O(K)$


BERT

核心创新

  1. 双向上下文:同时看左右两侧(不像 GPT 只看左边)
  2. 动态表征:同一个词在不同语境中有不同向量(Word2Vec 是静态的——每个词永远一个向量)

模型结构

BERT = 多层堆叠的 Transformer Encoder(使用完全双向的自注意力)。

原始 BERT-base:12 层,$d=768$,12 头,110M 参数。

预训练任务 1:掩码语言模型(MLM)

随机遮住输入中 15% 的 token,让模型根据上下文预测被遮住的原词。

具体操作:对被选中的 15% 的 token:

为什么不全部换成 [MASK]

15% 比例的意义

预训练任务 2:下一句预测(NSP)

给定句子对 $(A, B)$:

模型需要判断 $B$ 是否是 $A$ 的下一句。

作用:帮助模型理解句间关系(对问答、自然语言推理等任务有帮助)。

BERT 的微调

只需在预训练好的 BERT 上加一个很小的任务头:

微调时所有参数(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 的自注意力)。

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})$$

参数量

需要存储所有可能的 $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——这就是"词嵌入"的本质贡献。


大语言模型(LLM)

关键概念

幻觉(Hallucination):模型生成看起来流畅合理但事实错误的内容。本质是模型在"编"——它学到的是语言模式而非事实知识。

Scaling Law(缩放定律):模型性能随三个量呈幂律提升:

$$L \propto N^{-\alpha}$$(固定数据和计算时,参数越多 loss 越低)

涌现(Emergence):当模型规模超过某个阈值时,突然展现出小模型完全不具备的能力。不是渐进提升,而是质的跃迁。例如:

指令遵循(Instruction Following):模型理解并执行自然语言指令的能力——不需要 few-shot 示例,直接说"帮我翻译这段话"就能做。

思维链(Chain-of-Thought, CoT):提示模型"一步步想",展示推理过程,可以显著提升复杂推理任务的表现。

LLM 构建三阶段

阶段 1:预训练(Pre-training)

阶段 2:有监督微调(Supervised Fine-Tuning, SFT)

阶段 3:人类对齐(Alignment)


强化学习基础

与其他学习范式的关系

范式 数据 反馈 学习方式
监督学习 $(x, y)$ 对 即时、精确 模仿正确答案
无监督学习 只有 $x$ 发现数据结构
强化学习 状态-动作序列 延迟、标量奖励 试错中最大化回报

核心区别


马尔可夫决策过程(MDP)

定义

MDP 是强化学习问题的标准数学框架,由五元组 $(S, A, P, R, \gamma)$ 定义:

元素 符号 含义 类比
状态空间 $S$ 所有可能的状态 棋盘上所有可能的棋局
动作空间 $A$ 所有可能的动作 所有合法的落子位置
转移概率 $P(s'|s,a)$ 状态 $s$ 下执行 $a$ 后到达 $s'$ 的概率 落子后对手可能的回应
奖励函数 $R(s,a,s')$ 转移时获得的即时奖励 吃子得分
折扣因子 $\gamma \in [0,1]$ 未来奖励的衰减系数 眼前利益 vs 长远利益

马尔可夫性质

$$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)$$

"未来只依赖当前,与历史无关"——当前状态包含了所有用于预测未来的信息。

策略(Policy)

策略定义了智能体的行为方式——在每个状态下选择什么动作:

目标:找到最优策略 $\pi^*$,使得从任何状态出发的期望累积折扣奖励最大。


价值函数

状态价值函数 $V^\pi(s)$

从状态 $s$ 出发,按策略 $\pi$ 行动,期望获得的累积折扣奖励

$$V^\pi(s) = \mathbb{E}_\pi\left[\sum_{t=0}^{\infty} \gamma^t R_{t+1} \mid S_0 = s\right]$$

直觉:这个状态有多"值钱"。靠近终点、奖励丰厚的状态,$V$ 值高。

动作价值函数 $Q^\pi(s, a)$

在状态 $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$ 和 $Q$ 的关系

$$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')$ 完全已知。

价值迭代(Value Iteration)

反复应用贝尔曼最优方程更新:

$$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$。


Q-Learning

无模型学习

不需要知道 $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)$ 稍微朝"更准确的估计"方向移动。

Off-policy 特性

Q-Learning 是 off-policy 的:

行为和更新可以不同——探索的同时学最优。


DQN(Deep Q-Network)

问题

当状态空间很大(如 Atari 游戏的像素输入 $210\times160\times3$)时,无法用表格存储所有 $(s, a)$ 对的 Q 值。

解决:用神经网络近似 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$。

为什么:如果用同一个网络既算预测又算目标,目标在不断变化——像追逐移动靶,训练不稳定。

DQN 损失函数

$$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 的平方——本质上是回归问题。


InfoNCE 与 Skip-gram 负采样的对比

InfoNCE 损失(对比学习)

$$\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)}$$

两者对比

InfoNCE Skip-gram 负采样
形式 多类 softmax 多个独立二分类 sigmoid
概率解释 严格概率分布 非严格(各项独立)
正样本数 通常 1 个 窗口内多个上下文词
负样本来源 Batch 内其他样本 按噪声分布采样
温度参数 有 $\tau$ 控制平滑度
应用领域 通用表示学习(图像、多模态) 词嵌入

共同本质:都通过对比正负样本学习表示——拉近相似、推远不同。