三大经典模型学习笔记

AI 三大经典模型学习笔记

——BERT · 深度强化学习 · 扩散模型
(参考:李沐、王树森、李宏毅课程)


1. BERT 模型实战(李沐)

1.1 背景与核心思想

概览与动机

  • BERT(Bidirectional Encoder Representations from Transformers)是用大量未标注语料通过自监督学习预训练出通用语言表示的模型。

  • 目标:学习上下文敏感的词向量,使得同一单词在不同上下文有不同表示(contextualized embedding)。学习通用的语言表示(contextualized word embeddings),可在下游多种 NLP 任务上微调。

  • 关键工程:基于 Transformer Encoder(多层堆叠),通过大规模自监督预训练获得参数,然后以较小代价做下游微调(fine-tune)。

1.2 Transformer 在 NLP 中的应用(核心结构回顾)

  • Transformer Encoder 每一层主要组件:

    1. 多头自注意力(Multi-head Self-Attention)
    2. 前馈网络(Position-wise Feed-Forward):两层全连接 + 激活(如 GELU)
    3. 残差连接 + 层归一化(LayerNorm)
  • 符号:给定输入序列矩阵 $$X \in \mathbb{R}^{n \times d}$$(n 为 token 数,d 为隐藏维度)。

  • Self-attention(单头)计算:

Attention(Q,K,V)=softmax(QKdk)V\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V

其中 $$Q = XW^Q,\quad K = XW^K,\quad V = XW^V$$。

  • 多头注意力:

MultiHead(X)=Concat(head1,,headh)WO\text{MultiHead}(X)=\text{Concat}(\text{head}_1,\dots,\text{head}_h)W^O

headi=Attention(XWiQ,XWiK,XWiV)\text{head}_i=\text{Attention}(XW_i^Q, XW_i^K, XW_i^V)

  • 前馈网络:

FFN(x)=GELU(xW1+b1)W2+b2\text{FFN}(x)=\text{GELU}(xW_1 + b_1)W_2 + b_2

1.3 BERT 的预训练任务(MLM、NSP)与损失

BERT 的网络结构

  • 基本单元:Transformer Encoder 堆叠 LLL 层(常见:BERT-Base:12 层,隐藏维度 768,12 个 heads;BERT-Large:24 层,隐藏维度 1024,16 个 heads)。
  • 输入表示:将三类向量相加(token embedding + position embedding + segment embedding)。
    • segment embedding(也称 token type):用于区分句子 A / B(NSP)。
    • special token [CLS](序列级别表示),[SEP] 用于分割句子。

预训练任务(核心)

  • 掩码语言模型(MLM):随机掩盖输入中部分 tokens(通常 15%),模型基于上下文预测被掩盖的 token。
    • 标注策略示例:在被选的 15% token 中,80% 替换为 [MASK],10% 替换为随机 token,10% 保持原 token。
    • MLM 损失

LMLM=iMlogPθ(wiXmasked)\mathcal{L}_{MLM} = -\sum_{i\in \mathcal{M}} \log P_\theta(w_i | X_{\text{masked}})

其中 $$\mathcal{M}$$ 是被掩码位置集合。

  • 下一句预测(NSP):给定两段句子 A、B,目标判断 B 是否为 A 的下一句。
    • 输入格式:$$[CLS] ; \text{A tokens} ; [SEP] ; \text{B tokens} ; [SEP]$$
    • NSP 损失(二元交叉熵):

LNSP=ylogpθ(1y)log(1pθ)\mathcal{L}_{NSP} = -y \log p_\theta - (1-y)\log(1 - p_\theta)

  • 总体预训练损失

L=LMLM+λLNSP\mathcal{L} = \mathcal{L}_{MLM} + \lambda \mathcal{L}_{NSP}

通常 $$\lambda = 1$$。

1.4 BERT 是双向的 —— 为什么?

经典自回归 LM(如 GPT)只能在预测 wtw_t 时看到 w<tw_{<t}(左到右),或右到左。BERT 使用 MLM,让模型在预测位置同时“看到”左、右上下文,因此是条件于双向上下文的表示学习(严格来说,MLM 并非直接建模 $ P(w_t | w_{<t}, w_{>t}) $ 的分布,但训练目标等价于让表示能够基于左右文重构中心词——实现双向)。

注意:不是直接看到真实 token 的双向信息(那样会作弊),而是通过掩码训练间接学到双向表示。

1.5 预训练与微调(Fine-tuning)——关系与流程

  • 预训练:在大规模未标注语料上自监督训练得到通用参数(捕捉语言统计、语法、语义信息)。适合通用表示学习。

    微调:在标注数据(下游任务)上继续训练整个模型或部分层,使模型适应任务目标。通常做法:

    在 BERT 顶部加少量任务特定层(classification head, span prediction head, token classification head 等)。

    使用较小学习率(如 1e1e-5 到 5e5e-5),训练若干 epoch(2–4 epoch 常见)。

    使用适当的序列长度和 batch size(批次要足够大或使用梯度累积)。

1.6 微调示例任务详解

  • 文本分类(单文本 / 对文本)

    输入:单句 ([CLS], tokens, [SEP]) 或句对 ([CLS], A, [SEP], B, [SEP])

    head:取 [CLS] 的最后一层隐藏向量 hCLSh_{CLS},通过一个线性层 + Softmax:

    haty=softmax(WchCLS+b)hat{y} = \text{softmax}(W_{c} h_{CLS} + b)

    损失:交叉熵。

    超参建议:batch 16/32,lr 2e2e-5 到 5e5e-5,epochs 2–4,warmup 比例 0.06,weight decay 0.01。

    问答(SQuAD 风格 span prediction)

    输入:[CLS] question [SEP] context [SEP]

    head:两个线性层分别预测 start 和 end 的 logits(对每个 token),即对序列长度 LLL 输出两个向量:

    s=WsH+bs,e=WeH+bes = W_s H + b_s,\quad e = W_e H + b_e

    其中 HRL×dH \in \mathbb{R}^{L \times d} 是 BERT 最后一层的 token 表示。

    损失:start 与 end 的交叉熵之和(独立计算)。

    注意:要处理 long context(windowing、sliding window),以及答案跨段问题。

    命名实体识别(NER,序列标注)

    输入:序列(通常 wordpiece 导致 token 与原词对齐问题需做映射)。

    head:对每个 token 的表示做线性 + Softmax,预测 BIO 标签。

    损失:逐 token 的交叉熵(可掩码 padding)。

    注意:当使用 WordPiece 时,常把一个词的第一个 subtoken 的标签用于训练/评估。

1.7 为什么 BERT 可以“一模多用”?

  • 在大语料上预训练可获得通用语义/句法知识;Transformer 强表达能力使其输出表示可直接被多种下游任务使用,仅需小量 task-specific 层即可适配。

1.8 实践技巧 & 常见工程问题

  • 预训练与 vocab mismatch:使用同一 tokenizer;domain-adaptive pretraining(继续在领域语料上训练)。
  • 长文本处理:sliding window、Longformer 等。
  • 微调稳定性:small lr、warmup、AdamW、weight decay、梯度裁剪。
  • 模型压缩:蒸馏(DistilBERT)、量化、剪枝。

1.9 检测题(答案)

  1. BERT 的核心预训练任务是什么?

    主任务是 掩码语言模型(MLM):随机掩盖一部分 token,训练模型预测这些 token,利用双侧上下文。辅助任务是 下一句预测(NSP):判断两句是否相邻。实际上一些变体(RoBERTa)去掉 NSP,改为其它句间任务或更大数据量训练。

2.为什么 BERT 被称为双向模型?

因为 MLM 训练过程中,同一位置的预测利用了其左侧和右侧的上下文信息,模型的 attention 机制允许直接访问序列两侧信息,从而学习到双向依赖的表示。

3.BERT 预训练和微调的关系是什么?

预训练是在大规模未标注语料上学习一般语言知识(通用表示)。微调是在任务标注数据上对预训练模型进行有监督 fine-tune,使模型适配特定任务。两者的关系是“先通用学习,再专门适配”——经典迁移学习流程。

4.BERT 微调流程(分类、问答、命名实体识别)

分类:[CLS] 输出 → Linear → Softmax。微调整个模型或只 top 层。

问答(span):sequence 输出 → 两个 Linear(start, end logits)→ Softmax over tokens。需要滑窗处理 long context。

NER:token-level linear + Softmax,对 subtoken 做对齐处理(通常用第一个 subtoken 表示整个词)。

5.为什么 BERT 可以应用到很多不同的下游任务?

因为预训练学到的表示包含丰富的语法和语义信息(词义、句法依赖、句子关系等),这些信息是许多下游任务的共同基础。通过在顶部添加少量任务特定层并微调,模型即可高效迁移。

2.1 强化学习基本框架与目标

RL 研究智能体在环境中基于交互(state, action, reward)学习策略以最大化累计回报。深度强化学习(Deep RL)是用深度网络来表示策略、价值函数或环境动态。

基本概念(形式化)

  • 马尔可夫决策过程(MDP)(S,A,P,R,γ)(\mathcal{S}, \mathcal{A}, P, R, \gamma):

    • 状态空间 S\mathcal{S},动作空间 A\mathcal{A}
    • 转移概率 P(ss,a)P(s'|s,a)
    • 即时奖励函数 R(s,a)R(s,a)(或 R(s,a,s)R(s,a,s'))。
    • 折扣因子γ[0,1]\gamma \in [0,1]
  • 策略 π(as)\pi(a|s)(确定性策略或随机策略)。

  • 目标:

J(θ)=E[t=0γtrt]J(\theta)=\mathbb{E}\left[\sum_{t=0}^\infty \gamma^t r_t\right]

2.2 值函数、优势函数与 Bellman 方程

  • 状态价值:

Vπ(s)=Eπ[t=0γtrts0=s]V^\pi(s) = \mathbb{E}_\pi\left[\sum_{t=0}^\infty \gamma^t r_t \mid s_0=s\right]

  • 动作价值:

Qπ(s,a)=Eπ[t=0γtrts0=s,a0=a]Q^\pi(s,a) = \mathbb{E}_\pi\left[\sum_{t=0}^\infty \gamma^t r_t \mid s_0=s, a_0=a\right]

  • 优势:

Aπ(s,a)=Qπ(s,a)Vπ(s)A^\pi(s,a) = Q^\pi(s,a) - V^\pi(s)

  • Bellman 最优方程:

Q(s,a)=Es[r+γmaxaQ(s,a)s,a]Q^*(s,a) = \mathbb{E}_{s'}\left[r + \gamma \max_{a'} Q^*(s',a') \mid s,a\right]

2.3 经典算法:Q-learning、SARSA、DQN

Q-learning(离线、值迭代)

  • 目标:学习最优 Q 函数Q(s,a)Q^*(s,a)

Q(s,a)Q(s,a)+α(r+γmaxaQ(s,a)Q(s,a))Q(s,a) \leftarrow Q(s,a) + \alpha\Big(r + \gamma \max_{a'}Q(s',a') - Q(s,a)\Big)

优点:理论保证(在足够探索、学习率衰减条件下)收敛到 QQ^*

SARSA(在策略上)

  • 更新用的是下一个状态实际采取的动作:

Q(s,a)Q(s,a)+α(r+γQ(s,a)Q(s,a))Q(s,a) \leftarrow Q(s,a) + \alpha\Big(r + \gamma Q(s',a') - Q(s,a)\Big)

SARSA 更“保守”(考虑当前策略的实际行为),在风险环境中更稳定(例如存在随机陷阱)。

DQN(Deep Q-Network)

  • 用神经网络Qθ(s,a)Q_\theta(s,a) 近似 Q 值。

  • 关键技巧:

    经验回放(Replay Buffer):打破时间相关性,随机采样 mini-batches。

    目标网络(Target Network):周期性或软更新 θθ\theta^- \leftarrow \theta 来稳定目标。

DQN 损失:

L(θ)=E(s,a,r,s)D[(r+γmaxaQ(s,a;θ)Q(s,a;θ))2]\mathcal{L}(\theta) = \mathbb{E}_{(s,a,r,s')\sim \mathcal{D}}\left[\left(r + \gamma \max_{a'}Q(s',a';\theta^-) - Q(s,a;\theta)\right)^2\right]

2.4 策略梯度与 Actor-Critic

  • 策略梯度定理:

    目标直接对策略参数 θ\theta 做梯度上升:

θJ(θ)=Eπ[θlogπθ(as)Qπ(s,a)]\nabla_\theta J(\theta) = \mathbb{E}_\pi\left[\nabla_\theta \log \pi_\theta(a|s) Q^\pi(s,a)\right]

  • 策略梯度方法(REINFORCE):

    θJ(θ)=Eπ[θlogπθ(as)(Gtb(s))]∇θJ(θ)=Eπ[∇θlogπθ(a∣s)(Gt−b(s))]

Actor-Critic(结合策略与价值)

Actor:参数化策略 πθ(as)\pi_\theta(a|s)

Critic:估计值函数Vϕ(s)V_\phi(s)ϕ(s) 或 Qϕ(s,a)Q_\phi(s,a)

Actor 更新使用 advantage(A(s,a)=Q(s,a)V(s)A(s,a) = Q(s,a) - V(s)r+γV(s)V(s)r + \gamma V(s') - V(s))降低方差,Critic 用 TD error 更新。

通用性强、样本效率高。

A^t=rt+γVϕ(st+1)Vϕ(st)\hat{A}_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)

Actor 更新:$$\nabla_\theta \log \pi_\theta(a_t|s_t) \hat{A}_t$$。

2.5 进阶算法:PPO、A3C

PPO(Proximal Policy Optimization)

  • 目标限制策略更新幅度的近端方法,有两种常见形式:clip 版本和 KL 正则化版本。

    Clip 版本损失:

LCLIP(θ)=Et[min(rt(θ)A^t,  clip(rt(θ),1ϵ,1+ϵ)A^t)]L^{CLIP}(\theta)=\mathbb{E}_t\Big[\min\big(r_t(\theta)\hat{A}_t,\;\text{clip}(r_t(\theta),1-\epsilon,1+\epsilon)\hat{A}_t\big)\Big]

其中 rt(θ)=πθ(atst)πθold(atst)r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)}

  • 为什么稳定?因为它阻止每次更新时概率比率 rtr_t 偏离过多,从而防止策略崩溃。

A3C(Asynchronous Advantage Actor-Critic)

多线程异步:多个 actor 并行采样环境并更新全局网络,减少样本相关性,提高训练速度。

优点:高效并行,收敛速度快;但现代实现更多用同步多环境(vectorized envs)替代异步实现。

2.6 实践技巧

  • 稳定性:reward normalization、梯度裁剪、熵正则化。
  • 提高样本效率:优先经验回放、模型基方法(world models)、离线 RL。
  • 并行与分布式训练:多 actor 多 learner 架构。
  • 常用调参项:学习率、gamma、目标网更新频率、回放 buffer 大小等。

2.7 检测题(答案)

  1. 强化学习的目标是什么?

    学习一个策略 π\pi 来最大化期望累计回报:maxπEπ[t=0γtrt]\max_\pi \mathbb{E}_\pi \left[\sum_{t=0}^\infty \gamma^t r_t\right]。换言之,让智能体在长期内获得尽可能多的奖励。

  2. DQN 和 Q-learning 的区别是什么?

    Q-learning 是表格/函数逼近形式的值迭代算法(使用显式 Q 表时)。DQN 将 Q 函数用深度网络 Qθ(s,a)Q_\theta(s,a)Qθ(s,a) 表示,并引入经验回放与目标网络以稳定训练,是 Q-learning 的深度版本。

  3. 为什么 PPO 在实际中比 REINFORCE 更稳定?

    REINFORCE 是无偏但高方差的策略梯度方法,直接更新策略可能导致大波动。PPO 通过对策略更新进行裁剪或约束(clip 或 KL penalty),限制了单步更新幅度,从而降低策略崩溃风险、提高稳定性。

  4. A3C 的优势是什么?

    A3C 使用多线程异步采样并更新全局参数:提升样本多样性、缩短收敛时间、避免死循环探索。相比单线程,其效率与鲁棒性更好。


3. 扩散模型(李宏毅)

3.1 基本思想

扩散模型通过定义一个逐步**加噪(forward)**的过程将数据分布 q(x0)q(x_0) 转换成接近高斯噪声的分布;然后训练一个去噪网络学习逆向(reverse)过程,从噪声逐步重构数据样本 x0x_0

3.2 前向扩散过程

  • 时间步 t=1,,Tt = 1,\dots,T,定义一系列噪声强度 βt\beta_t(小而递增)。
  • 前向过程定义:

q(xtxt1)=N(xt;1βtxt1,βtI)q(x_t|x_{t-1}) = \mathcal{N}\big(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I\big)

  • 由马尔可夫链递推至任意 tt

q(xtx0)=N(xt;αˉtx0,(1αˉt)I)q(x_t|x_0) = \mathcal{N}\big(x_t; \sqrt{\bar{\alpha}_t} x_0, (1-\bar{\alpha}_t)I\big)

其中 $$\alpha_t=1-\beta_t,\quad \bar{\alpha}t=\prod{s=1}^t\alpha_s$$。

3.3 反向过程与训练目标

  • 反向条件分布(真实的):

    q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tI)q(x_{t-1} | x_t, x_0) = \mathcal{N}\left(x_{t-1}; \tilde{\mu}_t(x_t, x_0), \tilde{\beta}_t I\right)

  • 但该分布依赖 x0x_0。扩散模型拟合参数化逆过程::

pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))p_\theta(x_{t-1}|x_t) = \mathcal{N}\big(x_{t-1}; \mu_\theta(x_t,t), \Sigma_\theta(x_t,t)\big)

  • 训练目标是最小化 KL divergence(variational lower bound, VLB),简化后常用噪声预测损失:

Lsimple(θ)=Ex0,ϵN(0,I),t[ϵϵθ(xt,t)2]\mathcal{L}_{\text{simple}}(\theta)=\mathbb{E}_{x_0,\epsilon\sim\mathcal{N}(0,I),t}\left[\|\epsilon - \epsilon_\theta(x_t,t)\|^2\right]

其中 $$x_t=\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t},\epsilon$$。

常用做法:训练一个 U-Net 风格网络 ϵθ(xt,t)\epsilon_\theta(x_t, t) 来预测输入xtx_t 中的噪声 ϵ\epsilon

3.4 为什么比 GAN 更稳定?

GAN 依赖对抗训练(生成器 vs 判别器),容易出现训练不稳定、模式崩溃(mode collapse)、梯度不可靠等问题。

扩散模型的训练目标是明确的(最小化均方误差 / VLB),是监督回归式的训练,不存在对抗过程,优化更稳定且有理论上的似然估计意义(approximate maximum likelihood)。

3.5训练与采样流程

  • 训练:
    1. 从数据集中采样 x0x_0
    2. 随机采样时间步 tt(均匀或按分布)。
    3. 采样 ϵN(0,I)\epsilon \sim \mathcal{N}(0,I),构造 xtx_t
    4. 计算预测噪声 ϵθ(xt,t)\epsilon_\theta(x_t, t),最小化 MSE。
  • 采样(生成):
    1. 从纯噪声 xTN(0,I)x_T \sim \mathcal{N}(0,I) 开始。
    2. 反向迭代 t=T1t = T \to 1:采样xt1pθ(xt1xt)x_{t-1} \sim p_\theta(x_{t-1} | x_t)(常取均值并加采样噪声)。
    3. 输出 x0x_0

扩散模型 检测题详

  1. 扩散模型的基本思想是什么?

    通过正向的逐步加噪过程将数据变为噪声,再训练一个去噪网络学习逆过程,从噪声逐步重构数据样本。实质是学习一组条件概率 pθ(xt1xt)p_\theta(x_{t-1} | x_t) 来近似真实反向过程。

  2. 为什么扩散模型比 GAN 更稳定?

    扩散模型的训练是回归式的、基于明确的似然/ELBO 目标,不涉及对抗优化,因此避免了生成器/判别器之间的博弈不稳定性和模式崩塌问题。

  3. 扩散模型生成一张图片需要哪些步骤?

    从高斯噪声采样 xTx_T,对 t=T,T1,,1t = T, T-1, \dots, 1 依次采样 xt1pθ(xt1xt)x_{t-1} \sim p_\theta(x_{t-1}|x_t)(或用确定性近似),最终得到 x0x_0

  4. 扩散模型在训练时主要学的是什么?

    学会预测噪声(ϵ\epsilon)或直接预测无噪声图像/predicted mean,从而逼近反向扩散的条件分布;训练目标通常是最小化噪声预测 MSE(等价近似 ELBO 的一项)。


三大经典模型学习笔记
https://this-is-kuo.github.io/2025/10/23/三大经典模型学习笔记/
作者
Kuo
发布于
2025年10月23日
许可协议