中国科学院大学自然语言处理复习(王石老师)

说明:文档围绕老师画的重点展开,但仍然需要过一遍PPT。考试题型:选择题、填空题、简答题、复杂分析题、一道应用题。

文章目录

  • [第一讲 绪论](#第一讲 绪论)
  • [第二讲 神经网络基础](#第二讲 神经网络基础)
  • [第三讲 注意力机制](#第三讲 注意力机制)

第一讲 绪论

  1. token、token化是什么?它和传统NLP中的分词有什么区别?token 词表是怎么产生的?注意一个token不一定等于一个词。
    答:Token 是模型处理文本的最小单位,但它不一定对应一个"词"或一个"字"。Tokenization 是将原始文本字符串转换为整数索引序列的过程。

    原始文本: "Hello world!"

    Tokenizer 处理

    Token ID 序列: [15496, 995, 0] ← 每个整数对应词表中的一个条目

    模型输入(Embedding 层查找)

完整流程

复制代码
文本 → 预处理(规范化、Unicode 处理)→ 切分 → 查词表 → Token IDs

词表是从海量语料中统计学习出来的,不是人工编写的。高频组合被合并为独立 token,低频组合被拆分为子词,这是 BPE 等算法的核心智慧。

维度 传统 NLP 分词 现代 Tokenization(LLM)
目标 语言学意义上的"正确切分" 为神经网络提供高效、无歧义、可逆的表示
粒度 通常是词或字 子词(subword),动态决定
OOV 问题 严重(未登录词无法处理) 基本解决(任何词都能拆成子词)
词表大小 几万到几十万 通常 32K~200K(如 GPT-4 约 100K)
语言无关性 每种语言需要独立分词器 多语言统一处理
可逆性 分词后难以精确还原原文 必须可逆(detokenize 能还原原文)
空格处理 通常忽略或特殊处理 空格本身可能是 token(如 GPT 用 Ġ 表示词前空格)
  1. 神经网络语言模型(A neural probabilistic language model),三层,输入词的向量表示,输出是:当前输入下,最可能的下一个词。

第二讲 神经网络基础

  1. 要会神经网络
  2. 激活函数。非0即1的激活函数不便于反向传播,用sigmoid,sigmoid公式、曲线、有什么好处?
    答:曲线见图,公式:
    y = 1 1 + e − z w x + b = z y=\frac{1}{1+e^{-z}} \\ wx+b=z y=1+e−z1wx+b=z
    好处:a.输出天然是概率(0到1之间),b.处处平滑可导,导数解析形式简洁,意味着前向传播和反向传播的梯度计算都很直接。c.单调且连续。
  1. sigmoid和softmax区别:
    Sigmoid 是"逐元素独立压缩",Softmax 是"向量整体归一化"。
Sigmoid Softmax
输入 单个标量 z z z 一个向量 z = z 1 , z 2 , . . . , z K \mathbf{z} = z_1, z_2, ..., z_K z=z1,z2,...,zK
输出 单个值 ∈ ( 0 , 1 ) \in (0,1) ∈(0,1) 一个向量,每个元素 ∈ ( 0 , 1 ) \in (0,1) ∈(0,1),且总和为 1
关系 各输出相互独立 各输出相互竞争(此消彼长)
典型场景 二分类、多标签分类 多分类(单标签)

s o f t max ⁡ ( z i ) = e z i Σ j = 1 K e z j soft\max \left( z_i \right) =\frac{e^{z_i}}{\varSigma _{j=1}^{K}e^{z_j}} softmax(zi)=Σj=1Kezjezi

  1. 损失函数,其他都会,这里讲解交叉熵损失函数。
    L = − Σ i = 1 n y i log ⁡ ( y ^ i ) L=-\varSigma _{i=1}^{n}y_i\log \left( \hat{y}_i \right) L=−Σi=1nyilog(y^i)
符号 含义
y i y_i yi 第 i i i 类的真实标签(one-hot 编码,真实类别为 1,其余为 0)
y ^ i \hat{y}_i y^i 模型预测的第 i i i 类的概率(通常由 Softmax 输出)
n n n 类别总数

假设是 3 分类问题(猫、狗、鸟):

真实标签 y y y 0 1 0 (one-hot:真实是"狗")
预测概率 y ^ \hat{y} y^ 0.1 0.7 0.2 (Softmax 输出)

计算损失: L = − log ⁡ ( 0.7 ) L=-\log \left( 0.7 \right) L=−log(0.7)

由于 one-hot 的特性,只有真实类别那一项有贡献,其他项都是 0×something=0 。

交叉熵衡量的是两个概率分布之间的差异:

y :真实的"目标分布"(one-hot,所有概率集中在正确类别)

y_hat:模型的"预测分布"(Softmax 输出的分散概率)

损失越小 → 预测分布

y_hat越接近真实分布 y → 模型对正确类别的预测概率越高。

  1. 激活函数是怎么工作起作用的?常见的损失函数?梯度下降怎么下降到最小点?

    答:上层多个或单个神经元加权求和,经过激活函数得到输出,根据任务场景设计激活函数即可,比如二分类问题用sigmiod,多分类用softmax,解决异或问题/给神经网络非线性判别能力:用非线性的激活函数。MAE,MSE,交叉熵损失函数。梯度下降法,沿着损失函数的负梯度方向,配合学习率做梯度下降,损失函数则会下降到最小点。

  2. 常见的网络结构:RNN(处理时序数据,预测下一个词之前,已经记录了历史所有词状态),RNN的缺点 梯度消失梯度爆炸。

  3. 梯度消失梯度爆炸分别是什么?

    梯度消失:反向传播时,梯度逐层衰减,前面层的参数几乎不更新,模型"冻住"了。根本原因是激活函数导数 < 1,多层连乘后梯度指数级缩小。

    梯度爆炸:反向传播时,梯度逐层放大,前面层的参数更新幅度巨大,损失函数震荡甚至NaN。根本原因:权重初始化过大或激活函数导数 > 1,多层连乘后梯度指数级膨胀。

  4. LSTM,增加记忆细胞,来解决RNN的梯度消失 梯度爆炸。记忆细胞可以实现有选择性的长期记忆。

  5. encoder-decoder,用于处理序列到序列任务的架构。将输入序列先通过编码器压缩为一个中间表示,再由解码器根据该表示逐步生成输出序列,编码器、解码器都是神经网络。

第三讲 注意力机制

  1. Transformer论文、qkv, attention,自注意力计算的过程(PPT图,自注意力计算的整个过程要考,需要非常熟练)

  2. 关于缩放点积注意力,缩放是什么、为什么要缩放、作用和效果?

    这是Transformer架构中**缩放点积注意力(Scaled Dot-Product Attention)**的核心设计,也是自注意力最基础的关键优化。下面从「是什么、为什么要缩放、作用、效果」四个层面,结合两张图完整解释。


    一、缩放的定义
    自注意力的第一步,是用查询向量q和键向量k计算注意力分数,原始的计算方式是两个向量的点积(内积)

    \alpha_{i,j} = q^i \cdot k^j

    而"缩放",就是在内积计算完成后,除以一个固定的缩放因子 \boldsymbol{\sqrt{d_k}}d_k 是q、k向量的维度大小),修正后的分数为:

    \alpha_{i,j} = \frac{q^i \cdot k^j}{\sqrt{d_k}}

    之后再输入Softmax函数,得到最终的注意力权重。


    二、为什么要缩放:核心矛盾是「内积方差随维度膨胀」
    1. 数学本质:内积方差和维度线性正相关
    我们可以做一个最基础的假设:q、k向量的每个分量都是独立同分布、均值为0、方差为1的随机变量(神经网络初始化的常用设定):

    • 单个分量的乘积 q_i \cdot k_i,方差为 Var(q_i k_i) = 1
    • 内积是 d_k 个分量乘积的求和:q\cdot k = \sum_{i=1}^{d_k} q_i k_i
    • 根据方差的可加性,内积的总方差为 Var(q\cdot k) = d_k \times 1 = d_k

    结论很直观:向量维度越高,q、k内积的数值波动就越大,数值范围越广

    对应第一张图的例子:
    5维的全1向量q和全3向量k,内积就已经达到15;如果是Transformer常用的512维向量,内积数值会达到数百上千,不同token的分数差异会被极度放大。

    2. 直接后果:Softmax分布极端尖锐,梯度消失
    Softmax函数有一个关键特性:输入的数值差异越大,输出的概率分布就越极端------最大的输入值会被放大到接近1,其余所有值都会被压缩到接近0,形成"针尖状"的分布(近似one-hot)。

    对应第二张图的左图:
    输入序列[1, 2, 7, 12, 8, 5, 2, 1]中,最大值12和其他值差异很大,Softmax后几乎只有第3个token拥有注意力权重,其余token的权重几乎为0。

    这种情况会带来两个致命问题:

    • 注意力表达能力失效:模型几乎只能关注单个token,无法同时给多个相关词分配合理权重,丢失了上下文的关联信息(比如长句子里的多个指代、多组语义关联)。
    • 梯度消失,训练瘫痪:Softmax在输入差异极大时会进入"饱和区",梯度趋近于0;反向传播时参数几乎无法更新,模型直接训练不动。

    三、缩放机制的核心作用
    缩放因子 \sqrt{d_k} 的本质,就是内积的标准差。除以它相当于对内积做了标准化:

    Var\left( \frac{q\cdot k}{\sqrt{d_k}} \right) = \frac{Var(q\cdot k)}{d_k} = \frac{d_k}{d_k} = 1

    它的作用可以总结为3点:

    1. 统一数值尺度,消除维度影响
      无论向量维度d_k是大是小,缩放后的内积方差都被归一化到1,让不同维度的注意力计算都处于稳定的数值区间,不会因为维度升高就出现数值爆炸。

    2. 软化Softmax分布,保留多token关联
      拉平内积的数值差异,避免Softmax输出极端的"赢家通吃"分布,让模型可以同时给多个相关token分配注意力权重,保留更丰富的上下文语义。

    3. 稳定梯度,保障训练收敛
      避免Softmax进入饱和区,让反向传播的梯度保持在合理范围,解决高维度下的梯度消失问题,让深层、高维的大模型可以正常训练。


    四、缩放后的实际效果
    对应第二张图的右图:
    将同样的输入除以缩放因子后,Softmax的输出变得非常平缓------每个token都分配到了合理的注意力权重,最大值不再"一家独大",权重分布更均匀。

    最终对模型的收益:

    • 语义能力提升:注意力可以同时捕捉多组上下文关联(比如长指代、多义词、搭配关系),语义理解更准确;
    • 训练稳定性提升:高维度(512、1024甚至更高维)的注意力也能稳定收敛,支撑起大模型的参数规模;
    • 数值鲁棒性提升:避免训练中出现数值溢出、梯度爆炸/消失等工程问题。

    这个设计来自Transformer的开山论文《Attention Is All You Need》,是自注意力最基础也最关键的优化之一。

  3. 1111