AI基础知识

2025年11月22日 0:24

基于统计方法的语言模型

n-grams 语言模型基于马尔可夫假设和离散变量的极大似然估计给出词元的预测概率。

Pn-grams(w1:N)=i=nNC(win+1:i) /C(win+1:i1)P\text {n-}grams(w_{1}:N)=\prod _{i=n}^{N}C(w_{i-n+1}:i)\ / C(w_{i-n+1}:i-1)

推导公式为:

该模型的泛化能力会随着 n 的增加而减弱,因为很多长序列出现的情况很少。因此在 n-grams 语言模型中,n 代表了拟合语料库的能力与对未知文本的泛化能力之间的权衡。


基于神经网络的语言模型

随着神经网络的发展,基于各类神经网络的语言模型被不断推出,泛化能力越来越强。

基于神经网络的传播范式可以分为两大类:

  • 前馈传播范式 FNN:feed-forword neural network
  • 循环传播范式:某些层的计算结果会被反向引回到前面层中(RNN:recurrent neural network)

FNN

每层神经元接受前一层神经元信号,并产生信号输出到下一层。第0层叫做输入层,最后一层叫做输出层,中间叫做隐藏层。数据单向流动。

ot=f(Wog(wixt))o_t =f(W_{o}g(w_{i}x_t))

其中:

  • f(·):输出函数
  • g(·):激活函数 ReLU

RNN

W 是每个时间点之间的权重矩阵,RNN 可以记住每一时刻的信息。每一时刻的隐藏层不仅由该时刻的输入层决定,还由上一时刻的隐藏层决定。

Ot=g(VSt)O_{t}=g(V\cdot S_{t})

St=f(UXt+WSt1)S_{t}=f(U\cdot X_{t}+W\cdot S_{t-1})

StS_t的值不仅仅取决于XtX_t,还取决于St1S_{t-1}

这里对于StWhS_t * W_hWhW_h 是不变的。当前状态为第一次输入时,定义 S0 为0,也可以相当于不添加隐藏层信息。WhW_h相当于记忆历史的压缩器。

⚠️ 训练RNN 时,涉及大量的矩阵连乘,容易造成梯度衰减或者梯度爆炸

RNN 的前向传播:

h1=σ(Whh0+Wxx1+b)h2=σ(Whh1+Wxx2+b)<!swig0>ht=σ(Whht1+Wxxt+b)<!swig1>hT=σ(WhhT1+WxxT+b)\begin{array}{c}{h_{1}=\sigma (W_{h}h_{0}+W_{x}x_{1}+b)}\\{h_{2}=\sigma (W_{h}h_{1}+W_{x}x_{2}+b)}\\\\{h_{t}=\sigma (W_{h}h_{t-1}+W_{x}x_{t}+b)}\\\\{h_{T}=\sigma (W_{h}h_{T-1}+W_{x}x_{T}+b)}\\\end{array}

求损失对 Wh 的倒数更新参数时:Wh 在每个时间步都被重复使用,这意味着损失 LT 对 Wh 的梯度来源于所有时间步的贡献。

LTWh=t=1TLThthtWh\frac {\partial L_{T}}{\partial W_{h}}=\sum _{t=1}^{T}\frac {\partial L_{T}}{\partial h_{t}}\cdot \frac {\partial h_{t}}{\partial W_{h}}

而其中:

公式1:

LTht=LThThTht\frac {\partial L_{T}}{\partial h_{t}}=\frac {\partial L_{T}}{\partial h_{T}}\cdot \frac {\partial h_{T}}{\partial h_{t}}

公式2:

LTht=LThThThT1hT1hT2ht+2ht+1ht+1ht\frac {\partial L_{T}}{\partial h_{t}}=\frac {\partial L_{T}}{\partial h_{T}}\cdot \frac {\partial h_{T}}{\partial h_{T-1}}\cdot \frac {\partial h_{T-1}}{\partial h_{T-2}}\cdot\cdot\cdot \frac {\partial h_{t+2}}{\partial h_{t+1}}\cdot \frac {\partial h_{t+1}}{\partial h_{t}}

两个公式左侧相同,通过右侧可以得出:

公式3:

hTht=k=tT1hk+1hk\frac {\partial h_{T}}{\partial h_{t}}=\prod _{k=t}^{T-1}\frac {\partial h_{k+1}}{\partial h_{k}}

最后LT对Wh的求导可以写成:

LTWh=t=1TLThThThthtWh\frac {\partial L_{T}}{\partial W_{h}}=\sum _{t=1}^{T}\frac {\partial L_{T}}{\partial h_{T}}\frac {\partial h_{T}}{\partial h_{t}}\frac {\partial h_{t}}{\partial W_{h}}

这里知道LT对Wh的求导公式中包含雅可比矩阵:

hk+1hk=diag(σ(Whhk+))Wh\frac {\partial h_{k+1}}{\partial h_{k}}=\mathrm {diag}(\sigma ^{\prime }(W_{h}h_{k}+\cdots ))\cdot W_{h}

diag 是一个由激活函数倒数构成的对角矩阵。如果 Wh 权重(特征值)>1,导数连续相乘会指数级放大 → 梯度爆炸;反之则会梯度消失

基于RNN的语言模型

将文章输入语言模型时,一个字一个字进行串行输入。

作为语言模型时,预测下一个词或序列的出现概率有部分优势,因为可以考虑上文信息,使得预测概率更加准确。

P(wi+1w1:i)=P(wi+1wi,hi1)P(w_{i+1}|w_{1:i})=P(w_{i+1}|w_{i},h_{i-1})

预测第 i+1 个词的概率,与当前词 wi 和上一时刻隐藏状态 hi-1 有关,因为 hi-1 已经编码了 w1~wi-1 的相关信息。

基于 RNN 的语言模型中,输出是一个向量 oi,其中每一维代表词典中对应词的概率。oi[wi] 表示词典中词 wi 出现的概率:

P(w1:N)=i=1N1P(wi+1w1:i)=i=1Noi[wi+1]P(w_{1:N})=\prod _{i=1}^{N-1}P(w_{i+1}|w_{1:i})=\prod _{i=1}^{N}o_{i}[w_{i+1}]

损失函数较为简单:

lCE(oi)=d=1DI(w^d=wi+1)logoi[wi+1]=logoi[wi+1]l_{CE}(o_{i})=-\sum _{d=1}^{|D|}I(\hat {w}_{d}=w_{i+1})\log o_{i}[w_{i+1}]=-\log o_i[w_{i+1}]

其中,I(·)为指示函数,当wd^=wi+1\hat{w_d}=w_{i+1}时等于1。


基于 Transformer 的语言模型

注意力机制

将有限的认知资源集中在最相关的信息上(心理学上),根据 query 有偏向性的选择某些键值对。

初始原型:

f(x)=i=1nK(xxi)j=1nK(xxj)注意力权重α(x,xi)yif(x)=\sum _{i=1}^{n}\frac {K(x-x_{i})}{\underbrace {\sum _{j=1}^{n}K(x-x_{j})}_{\text {注意力权重}\alpha (x,x_{i})}}\cdot \underbrace {y_{i}}_{\text {值}}

其中:

  • query:x(想要预测的点)
  • key:xi
  • value:yi

K是核函数(相似度函数),衡量x与xi的相似度,常见的是高斯核。

将核函数值归一化得到注意力权重αi:

αi=K(xxi)jK(xxj)\alpha _{i}=\frac {K(x-x_{i})}{\sum _{j}K(x-x_{j})}

⚠️ 缺点:模型预测时需要存储所有的训练数据(xi,yi),且和函数K是固定的,不可学习

现代注意力机制改进

注意力分数是相似度函数(如上述的高斯核函数),注意力权重是注意力分数的归一化结果。为了使得注意力自己可学习——让模型自己学习什么是相似,提出了不同的相似度函数:

  1. 加性注意力(Additive Attention)

α(k,q)=vTtanh(Wkk+Wqq)\alpha (k,q)=v^{T}\mathrm {tanh}(W_{kk}+W_{qq})

相当于一个单隐藏层的 MLP(无偏置项),参数 Wk、Wq、v 都是可训练的。

  1. 缩放点积注意力(Scaled Dot-Product Attention)

α(q,ki)=qTkid\alpha (q,k_{i})=\frac {q^{T}k_{i}}{\sqrt {d}}

极大简化,提效,但是要求q和k同长度。虽然无参数,但是它的可学习性在生成Q和K的过程中。

假设输入序列X∈R^(N×d),n个token,每个token都是d维:

Q=XWQ, K=XWK, V=XWVQ=XW^{Q},\ K=XW^{K},\ V=XW^{V}

其中WQ、WK、WV都是可训练的。

多头自注意力机制:每个头关注不同方面的信息。

Transformer

序列转导模型:处理序列数据(具有顺序关系的数据,每个元素的顺序对于数据整体含义非常重要)的模型。

以往的模型:

  • FNN:输入是固定维度的,且将输入看作一个整体,无法理解顺序
  • RNN:输入输出不等长

编码器-解码器结构

注意力机制解决的问题:

  1. 模型处理长序列时的遗忘问题:随着序列长度增加,远距离依赖信息在传递过程中易被稀释,导致模型对长距离依赖关系建模能力减弱

  2. 不同时间步的输入对当前输出的重要性问题:所有时间步的输入在计算当前时刻的输出时被同等对待,忽略了不同时间步对当前时刻的重要性可能存在差异

模型架构(Model Architecture)

Input Embedding:将语言转化为机器可以理解的高维向量(eg: 512 维),通过向量间的距离等来表示 word 间的相似度。

Position Embedding:如果使用标量1 2 3…来表示位置编码,信息量较少。在注意力机制这种靠向量计算的方式里面,无法建立比较复杂的关系。而高维的位置向量包含的信息很多,能够让模型感受到不同位置之间的差异,甚至让模型捕捉到两个词之间的位置差等相对关系。

PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)P E_{(pos,2i)} = \sin (pos/10000^{2i/d_{model}}) \\P E_{(pos,2i+1)} = \cos (pos/10000^{2i/d_{model}})

其中:

  • pos:单词在序列中的位置,从0开始
  • d_model:模型维度,512
  • i:维度索引,从0到d_model/2-1

Token Embedding = Input Embedding + Position Embedding