1. 机器学习

介绍机器学习的基本概念、朴素贝叶斯理论、信息熵、隐马尔可夫模型及Word2Vec等内容

一、概率分布

1.1 联合概率分布

  • 简单定义:两个事件共同发生的概率,即 $$ P(AB) $$ 或 $P(A,B)$ 或 $P(A\cap B)$

  • 严格定义:对于多维随机变量 $ X_1,\cdots,X_n $,可以用联合概率分布 $P(X_1,\cdots,X_n)$ 描述其各个状态的概率,即联合概率分布,是一个定义在所有变量状态空间的笛卡尔乘积上的函数:

    P(X1,,Xn):i=1nΩxi[0,1] P(X_1,\cdots,X_n):\oplus_{i=1}^n\Omega_{x_i}\rightarrow[0,1]
  • 且所有函数值之和为 1,即 $\sum_{X_1,\cdots,X_n}P(X_1,\cdots,X_n)=1$

1.2 边缘概率分布

  • 仅与单个随机变量有关的概率称为边缘概率

  • 边缘化(Marginalization):在联合概率中,在最终结果中将不需要的事件合并成该事件的全概率

    P(X=a)=bP(X=a,Y=b)P(X=a)=\sum_bP(X=a,Y=b)

1.3 条件概率分布

  • 在条件 $Y=b$ 成立的情况下,$X=a$ 发生的概率,记作 $P(X=a|Y=b)$ 或 $P(a|b)$

    P(X=aY=b)=P(X=a,Y=b)P(Y=b)aP(X=aY=b)=1P(X=a|Y=b)=\frac{P(X=a,Y=b)}{P(Y=b)}\\ \sum_aP(X=a|Y=b)=1

1.4 全概率公式

Pr(X=x)=yPr(X=x,Y=y)=yPr(X=xY=y)Pr(Y=y)Pr(X=x)=\sum_yPr(X=x,Y=y)=\sum_yPr(X=x|Y=y)Pr(Y=y)
  • 统计独立性:当且仅当 $P(A\cap B)=P(A)P(B)$ 时,$P(A|B)=P(A)$ 且 $P(B|A)=P(B)$

  • 条件独立性:若 $P(A|B\cap C)=P(A|C)$ 或者 $P(B\cap C)=0$

1.5 贝叶斯公式

P(AB)=P(A,B)P(B)=P(BA)P(A)P(B)P(A|B)=\frac{P(A,B)}{P(B)}=\frac{P(B|A)P(A)}{P(B)}
  • $P(Y)$ 称为先验概率,$P(Y|X)$ 称为后验(条件)概率,$P(X,Y)$ 称为联合概率

  • $P(A_i|B)=\frac{P(B|A_i)P(A_i)}{\sum_jP(B|A_j)P(A_j)}$,其中 $A_1,\cdots,A_n$ 为 $A$ 的完备事件组

  • $P(A|B,C)=\frac{P(A)P(B|A)P(C|A,B)}{P(B)P(C|B)}$

1.6 极大后验假设

hMAP=argmaxhHP(hD)=argmaxhHP(Dh)P(h)P(D)=argmaxhHP(Dh)P(h)h_{MAP}=\arg\max_{h\in H}P(h|D)=\arg\max_{h\in H}\frac{P(D|h)P(h)}{P(D)}=\arg\max_{h\in H}P(D|h)P(h)
  • 在候选假设集合 $H$ 中,找到给定数据 $D$ 时可能性最大的假设 $h$,$h$ 即称为极大后验假设(MAP)

    其中,$P(D)$ 是不依赖于 $h$ 的常量

  • 假设 $H$ 中每个假设有相同的先验概率,则简化为只考虑 $P(D|h)$,称为给定 $h$ 时数据 $D$ 的似然度,而称下列公式为极大似然假设

    hML=argmaxhHP(Dh)h_{ML}=\displaystyle\arg\max_{h\in H}P(D|h)

二、朴素贝叶斯理论

2.1 基本概念

  • 以文本分类任务为例

    • 形式化定义:给定文档空间 $X$,类别集合 $C={c_1,\cdots,c_j}$,则训练集 $D={\langle d,c\rangle \in X\times C}$,需要学习一个算法,得到分类器 $\gamma:X\rightarrow C$,确定文档 $d$ 最可能属于的类别

    • 文本的表示可以用 One-Hot 编码或 TF-IDF 表示

2.1.1 One-Hot 表示

  • 相互独立地表示语料中的每个词,将每个词表示为一个稀疏向量,其维度是词典大小

  • 不考虑单词之间的关联,不能表示词语的重要性,语义信息被全部丢失

2.1.2 TF - IDF

  • TF-IDF 全称为(Term Frequency-Inverse Document Frequency,词频 - 逆文档频率)

TFIDF(t,d,D)=TF(t,d)IDF(t,D)TF-IDF(t,d,D)=TF(t,d)\cdot IDF(t,D)
  • 衡量一个词语在文档中的重要性,来评估该词对于整个文档集合的区分能力

  • 缺点:忽略了词语的语义信息,不能捕捉上下文关系

  • 词频(TF,Term Frequency):一个词语在文档中出现的频率,表示词语在单个文档中的相对重要性,未考虑在整个文档集合中的普遍性

    TF(t,d)=ftNTF(t,d)=\frac{f_t}{N}
  • 逆文档频率(IDF,Inverse Document Frequency)

    • 一个词语在整个文档集合中的重要性,其中 $|d\in D:t\in d|$ 表示包含词语 $t$ 的文档数

    • 若一个词在多个文档中都频繁出现,其区分能力较低,其 IDF 值也较低

      IDF(t,D)=logD1+dD:tdIDF(t,D)=\log\frac{|D|}{1+|d\in D:t\in d|}

2.2 朴素贝叶斯分类器

  • 文档 $d$ 的类别是 $c$ 的概率公式是一个多项式模型

    P(cd)=P(dc)P(c)/P(d)P(dc)P(c)=P(c)1kndP(tkc) P(c\mid d)=P(d\mid c)P(c)/P(d)\propto P(d\mid c)P(c)=P(c)\prod_{1\leq k\leq n_{d}}P(t_{k}\mid c)

2.2.1 查询似然模型(Query Likelihood Model,QLM)

RSV(Q,D)=P(QD)=P(QMD)=P(q1q2qmMD)=P(q1MD)P(qmMD)=ΠwQP(wMD)c(w,Q) \begin{align} RSV(Q,D)&=P(Q|D)=P(Q|M_D)=P(q_1q_2\cdots q_m|M_D)\\ &=P(q_1|M_D)\cdots P(q_m|M_D)=\Pi_{w\in Q}P(w|M_D)^{c(w,Q)} \end{align}
  • 即需要估计文档 $D$ 的一元模型 $M_D$,即求 $P(w|M_D)$

  • 平滑技术

    • Jelinek-Mercer 平滑:$p(w|D)=\lambda P_{ML}(w|D)+(1-\lambda)P(w|C)$

    • $p(w|D)=\frac{c(w,D)+\mu P(w|C)}{|D|+\mu}$

    • $p(w|D)=\frac{max(c(w,D)-\delta,0)}{|D|}+\frac{\delta|D|_{\mu}}{|D|}p(w|C)$

  • 缺点:无法解决词语失配问题,如查询中用词和文档中用词不一致

2.2.2 基于翻译的语言模型

P(QD)=ΠiP(qiD)=ΠijP(qiwj)P(wjMD)P(Q|D)=\Pi_i P(q_i|D)=\Pi_i\sum_jP(q_i|w_j)P(w_j|M_D)
  • 其中,$P(q_i|w_j)$ 为翻译概率,可以通过同近义词构造

2.2.3 基于 KL 距离(相对熵)模型

  • KL 距离定义

    DKL(PQ)=xXP(x)logP(x)Q(x)D_{KL}(P\|Q)=\sum_{x\in\mathcal{X}} P(x)\log\frac{P(x)}{Q(x)}
  • 文档打分公式

    Score(Q,D)=logP(QMD)P(QMC)Score(Q,D)=\log\frac{P(Q\mid M_D)}{P(Q\mid M_C)}

    其中

    • $M_D$:文档 $D$ 的语言模型

    • $M_C$:集合语料的背景模型

    • $P(Q\mid M_D)$:文档 $D$ 的查询似然模型

  • 将查询视作词袋后的展开

    Score(Q,D)=qiQtf(qi,Q)P(qiMD)P(qiMC)Score(Q,D) =\sum_{q_i\in Q} tf(q_i,Q)\cdot \frac{P(q_i\mid M_D)}{P(q_i\mid M_C)}

    进一步可写成(使用查询模型 $M_Q$):

    Score(Q,D)qiQP(qiMQ)P(qiMD)P(qiMC)Score(Q,D)\propto \sum_{q_i\in Q} P(q_i\mid M_Q)\cdot \frac{P(q_i\mid M_D)}{P(q_i\mid M_C)}

    继续变形:

    =qiQP(qiMQ)P(qiMD)P(qiMQ)qiQP(qiMQ)P(qiMC)P(qiMQ)=KL(MQ,MD)+KL(MQ,MC)\begin{align} &=\sum_{q_i\in Q}P(q_i\mid M_Q)\cdot\frac{P(q_i\mid M_D)}{P(q_i\mid M_Q)} -\sum_{q_i\in Q}P(q_i\mid M_Q)\cdot\frac{P(q_i\mid M_C)}{P(q_i\mid M_Q)}\\ &=-KL(M_Q,M_D) + KL(M_Q,M_C) \end{align}
  • 与文档相关的部分

    KL(MQ,MD)=qiQP(qiMQ)logP(qiMD)qiQP(qiMQ)logP(qiMQ)-KL(M_Q,M_D) =\sum_{q_i\in Q} P(q_i\mid M_Q)\log P(q_i\mid M_D) -\sum_{q_i\in Q} P(q_i\mid M_Q)\log P(q_i\mid M_Q)
  • 去掉与文档无关的常数后,最终可用于排序的得分

    Score(Q,D)qiQP(qiMQ)logP(qiMD)Score(Q,D)\propto \sum_{q_i\in Q} P(q_i\mid M_Q)\log P(q_i\mid M_D)

2.2.4 朴素贝叶斯分类的目标

朴素贝叶斯分类的目标是找到具有最大后验概率的类别:

cmap=argmaxcCP^(cd)=argmaxcCP^(c)k=1ndP^(tkc)c_{\mathrm{map}} =\arg\max_{c\in\mathbb{C}} \hat{P}(c\mid d) =\arg\max_{c\in\mathbb{C}} \hat{P}(c)\prod_{k=1}^{n_d}\hat{P}(t_k\mid c)

利用对数将小概率连乘转为求和:

cmap=argmaxcC[logP^(c)+k=1ndlogP^(tkc)]c_{\mathrm{map}} =\arg\max_{c\in\mathbb{C}} \left[ \log\hat{P}(c)+\sum_{k=1}^{n_d}\log\hat{P}(t_k\mid c) \right]

利用极大似然估计法从训练数据估计参数:

  • 先验概率

    P^(c)=NcN\hat{P}(c)=\frac{N_c}{N}
  • 条件概率

    P^(tc)=TcttVTct\hat{P}(t\mid c)=\frac{T_{ct}}{\sum_{t'\in V}T_{ct'}}

其中

  • $T_{ct}$ 为类别 $c$ 中词 $t$ 的出现次数

  • 词的出现位置相互独立,即 $\hat{P}(t_{k_1}\mid c)=\hat{P}(t_{k_2}\mid c)$(若两者为相同词)

零概率问题:若词 $t$ 未出现在类别 $c$ 中,则 $\hat{P}(t\mid c)=0$

为避免此问题,引入加一平滑:

P^(tc)=Tct+1tV(Tct+1)\hat{P}(t\mid c)=\frac{T_{ct}+1}{\sum_{t'\in V}(T_{ct'}+1)}

词汇表大小为 $|V|=B$,分母等价于 $\sum_{t'\in V}T_{ct'} + B$

三、信息熵

3.1 信息量(Self-Information)

  • 度量事件所携带的信息多少

  • 信息量与事件发生概率成反比:概率越小,不确定性越高,信息量越大

  • 数学定义:

    I(x)=logp(x)I(x) = -\log p(x)

    事件越不可能($p(x)$ 越小),其 $I(x)$ 越大

3.2 信息熵(Entropy)

  • 度量随机变量总体平均不确定性。

  • 对离散型随机变量 $X$,信息熵是信息量的期望:

    H(X)=ExX[I(x)]=xXp(x)logp(x)H(X) = \mathbb{E}_{x\sim X}[I(x)] = -\sum_{x\in X} p(x)\log p(x)
  • 基本性质:

    • 单调性:概率越集中(不确定性越低),熵越小

    • 非负性:$H(X)\ge 0$

    • 累加性:独立随机变量的联合熵可分解为两者熵之和

3.3 联合熵(Joint Entropy)

若 $X,Y$ 为随机变量,则它们的联合熵为:

H(X,Y)=xXyYp(x,y)logp(x,y)H(X,Y) = -\sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x,y)\log p(x,y)

它描述同时观察两个变量的不确定性

3.4 条件熵(Conditional Entropy)

  • 度量在已知 $X$ 的条件下,$Y$ 仍然具有多少不确定性

    H(YX)=EX[H(YX=x)]=xXp(x)H(YX=x)=xXp(x)(yYp(yx)logp(yx))=xXyYp(y,x)logp(yx).\begin{align} H(Y|X)&=\mathbb{E}_{X}[H(Y|X=x)]\\ &=\sum_{x \in \mathcal{X}} p(x) H(Y|X=x)\\ &=\sum_{x \in \mathcal{X}} p(x) \left( -\sum_{y \in \mathcal{Y}} p(y|x) \log p(y|x) \right)\\ &=-\sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(y,x) \log p(y|x). \end{align}

若 $X$ 完全决定 $Y$,则 $H(Y|X)=0$

3.5 联合熵与条件熵的关系

联合熵可通过熵与条件熵分解:

H(X,Y)=xXyYp(x,y)log[p(x)p(yx)]=xXyYp(x,y)[logp(x)+logp(yx)]=xXyYp(x,y)logp(x)xXyYp(x,y)logp(yx)=xXp(x)logp(x)xXyYp(x,y)logp(yx)=H(X)+H(YX).\begin{align} H(X, Y) &= -\sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x, y) \text{log} [p(x) p(y|x)] \\ &= -\sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x, y) [\log p(x) + \log p(y|x)] \\ &= -\sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x, y) \log p(x) - \sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x, y) \log p(y|x) \\ &= -\sum_{x \in \mathcal{X}} p(x) \log p(x) - \sum_{x \in \mathcal{X}} \sum_{y \in \mathcal{Y}} p(x, y) \log p(y|x) \\ &= H(X) + H(Y|X). \end{align}

这说明:联合不确定性 = 单变量不确定性 + 额外的不确定性

3.6 交叉熵(Cross-Entropy)

  • 度量两个概率分布之间的差异

  • 在分类模型中常用作损失函数

若 $p$ 为真实分布,$q$ 为预测分布,则:

H(p,q)=i=1np(xi)log1q(xi)=i=1np(xi)logq(xi)\begin{align} H(p,q) &= \sum_{i=1}^n p(x_i)\log\frac{1}{q(x_i)} \\ &= -\sum_{i=1}^n p(x_i)\log q(x_i) \end{align}

当 $q$ 越接近 $p$ 时,$H(p,q)$ 越小

3.7 KL 散度(相对熵,Kullback–Leibler Divergence)

  • 度量两个分布 $p$ 与 $q$ 的差异

  • 不对称:$D_{KL}(p|q)\neq D_{KL}(q|p)$

定义:

DKL(pq)=i=1np(xi)logp(xi)q(xi)D_{KL}(p\|q)=\sum_{i=1}^n p(x_i)\log\frac{p(x_i)}{q(x_i)}

KL 散度为 0 当且仅当 $p=q$

3.8 交叉熵与相对熵的关系

KL 散度可以表示为信息熵与交叉熵之差:

DKL(pq)=i=1np(xi)log(p(xi)q(xi))=i=1np(xi)log(p(xi))1i=1np(xi)log(q(xi))=H(X)H(p,q)\begin{align} D_{KL}(p||q)&=\sum_{i=1}^np(x_i)*log(\frac{p(x_i)}{q(x_i)})\\ &=\sum_{i=1}^np(x_i)*log(p(x_i))-1*\sum_{i=1}^np(x_i)*log(q(x_i))\\ &=H(X)-H(p,q) \end{align}

其中 $H(p)$ 为常量,因此最小化 KL 散度等价于最小化交叉熵

3.9 互信息(Mutual Information)

  • 度量两个变量的相关性,即知道一个变量后另一个不确定性减少的程度。

  • 也可视为联合分布 $p(x,y)$ 与独立分布 $p(x)p(y)$ 的 KL 散度:

    I(X;Y)=x,yp(x,y)logp(x,y)p(x)p(y)I(X;Y)=\sum_{x,y} p(x,y)\log\frac{p(x,y)}{p(x)p(y)}

互信息的等价形式(基于熵,信息熵与条件熵之差 —— 知道其中一个,另一个不确定性减少的程度):

I(X;Y)=H(Y)H(YX)=H(X)H(XY)I(X;Y)=H(Y)-H(Y|X)=H(X)-H(X|Y)

展开可得:

I(x;y)=H(Y)H(YX)=H(X)H(XY)=xXp(x)logp(x)yYp(y)H(XY=y)=xX(yYp(x,y))logp(x)+yYp(y)xXp(xy)logp(xy)=xXyYp(x,y)logp(x)+yYxXp(x,y)logp(xy)=yYxXp(x,y)logp(xy)p(x)=yYxXp(x,y)logp(x,y)p(x)p(y)\begin{align} I(x;y)&=H(Y)-H(Y|X)=H(X)-H(X|Y) \\ & =-\sum_{x\in X}p(x)\log p(x)-\sum_{y\in Y}p(y)H(X\mid Y=y) \\ & =-\sum_{x\in X}\left(\sum_{y\in Y}p(x,y)\right)\log p(x)+\sum_{y\in Y}p(y)\sum_{x\in X}p(x\mid y)\log p(x\mid y) \\ & =-\sum_{x\in X}\sum_{y\in Y}p(x,y)\log p(x)+\sum_{y\in Y}\sum_{x\in X}p(x,y)\log p(x\mid y) \\ & =\sum_{y\in Y}\sum_{x\in X}p(x,y)\log\frac{p(x\mid y)}{p(x)} \\ & =\sum_{y\in Y}\sum_{x\in X}p(x,y)\log\frac{p(x,y)}{p(x)p(y)} \end{align}

互信息越大,代表两个变量的关联越强

四、隐马尔可夫模型

4.1 基本定义

隐马尔可夫模型(Hidden Markov Model, HMM)是用于描述带有隐含状态序列的随机过程的概率模型,其核心在于: 观察到的序列由未观测的隐状态序列生成,而隐状态之间满足马尔可夫性质。

4.1.1 HMM 的形式化定义(五元组)

一个 HMM 可表示为五元组 $\lambda = (Y, X, \Pi, A, B)$:

  • $Y$:隐状态集合(如词性标签)

  • $X$:观测值集合(如单词)

  • $\Pi$:初始状态分布

  • $A$:状态转移概率矩阵

  • $B$:观测概率矩阵(生成单词的概率)

联合概率可写为

p(y,x)=i=1np(yiyi1)p(xiyi)p(\vec{y}, \vec{x}) = \prod_{i=1}^n p(y_i|y_{i-1}) p(x_i|y_i)

4.1.2 三个核心假设

  • 马尔可夫性:$p(y_t|y_{1:t-1}) = p(y_t|y_{t-1})$

  • 齐次性(不动性):转移概率与时间无关

  • 输出独立性:$x_t$ 仅依赖 $y_t$

这些假设使模型可 tractable 地进行推断与训练

4.2 示例:词性标注任务中的 HMM

以句子 “Time flies quickly” 为例,目标是推断最可能的词性序列 $S = (\text{N}, \text{V}, \text{ADV})$

(1)初始状态概率 $\Pi$

句子开头每个词性的概率:

P(S1=N)=0.6,P(S1=V)=0.3,P(S1=ADV)=0.1P(S_1=N)=0.6,\quad P(S_1=V)=0.3,\quad P(S_1=ADV)=0.1

(2)状态转移概率 $A$

词性之间的转移概率:

P(St=VSt1=N)=0.5,P(St=NSt1=N)=0.3P(S_t = V \mid S_{t-1} = N)=0.5,\quad P(S_t = N \mid S_{t-1} = N)=0.3

(3)观测概率 $B$

隐藏状态生成观测单词的概率:

P(Ot="Time"St=N)=0.8,P(Ot="flies"St=V)=0.7P(O_t=\text{"Time"} \mid S_t=N)=0.8,\quad P(O_t=\text{"flies"} \mid S_t=V)=0.7

4.3 求最优词性序列:维特比算法(Viterbi Algorithm)

维特比算法通过动态规划求解最大概率的隐状态路径

(1)构建动态规划表

  • 行:各隐状态

  • 列:各观测词

  • 单元格:到当前位置的最佳路径概率及其前驱状态

(2)初始化

以 “Time” 为例:

V1(N)=π(N)B(N,"Time")=0.60.8=0.48V_1(N)=\pi(N)\cdot B(N,\text{"Time"}) = 0.6 \cdot 0.8 = 0.48

(3)递推

例如计算第二个词 “flies” 的动词状态:

V2(V)=maxS1[V1(S1)A(S1V)]B(V,"flies")V_2(V)=\max_{S_1}\big[V_1(S_1)\cdot A(S_1\to V)\big]\cdot B(V,\text{"flies"})

(4)回溯

根据记录的最优前驱状态重建整条最优路径,最终输出最可能的词性序列:

S=(N,V,ADV)S = (\text{N}, \text{V}, \text{ADV})

4.4 HMM 的三个基本问题

(1)评估问题

  • 目标:计算序列出现概率 $P(O\mid\lambda)$

  • 方法:前向算法 / 后向算法

  • 示例:给定音频序列,判断是否属于某个单词模型

(2)解码问题

  • 目标:找到概率最大的隐状态序列

    argmaxQP(QO,λ)\arg\max_Q P(Q\mid O,\lambda)
  • 方法:维特比算法

  • 示例:词性标注任务:给定一个句子的单词序列(如 "Time flies quickly"),找到对应的最可能的词性序列(如 "Noun, Verb, Adverb")

(3)学习问题

  • 目标:对于给定观察值序列 $O$,调整参数 $\lambda$,使得观察值出现的概率 $P(O|\lambda)$ 最大

  • 方法:Baum–Welch 算法(EM 方法的一种)

  • 示例:如 DNA 序列分析:给定一组 DNA 序列(观测序列),学习模型参数以区分不同的区域类型(隐藏状态,例如基因编码区和非编码区)

五、Word2Vec

5.1 基本概念

  • 词向量(Word Vector):对于词典 $D$ 中任意词 $w$,指定一个长度为 $m$ 的实值向量 $v(w) \in \mathbb{R}^m$,该向量即为单词 $w$ 的词向量,用于编码其语义和使用模式

  • 词嵌入(Word Embedding):将不可计算、非结构化的词转化为可计算、结构化的向量,将现实问题转化为数学问题

  • 早期词向量采用 One-Hot 编码,其特点包括:

    • 维度过高:向量维度等于词表大小,常为百万级。

    • 稀疏且无语义:不同词向量相互正交,无法反映语义距离。

为突破上述限制,分布式表示(Distributed Representation)提出以低维稠密向量替代高维稀疏编码,并通过训练使向量捕捉词语的语义与上下文关系

5.2 N-Gram 模型

  • N-Gram 模型是 Word2Vec 的理论基础之一,通过使用前 $n-1$ 个单词预测下一个单词来估计句子概率

  • N-Gram 是由连续 $n$​ 个词语或字符组成的序列

  • 利用链式法则与马尔可夫假设,可将句子概率近似为:

    P(w1,,wm)=i=1mP(wiwin+1,,wi1)P(w_1,\dots,w_m) = \prod_{i=1}^{m} P(w_i \mid w_{i-n+1},\dots,w_{i-1})
  • 马尔科夫假设:假设一个单词的概率仅取决于其前 $n-1$ 个单词,而非完整句子

    P(wiw1,,wi1)P(wiwin+1,,wi1)P(w_i | w_1, \dots, w_{i-1}) \approx P(w_i | w_{i-n+1}, \dots, w_{i-1})
  • 常见的 N-Gram 模型

    • Unigram (1-gram):假设每个单词的概率与上下文无关,即 $P(w_1, w_2, \dots, w_m) = \prod_{i=1}^m P(w_i)$

    • Bigram (2-gram):假设每个单词的概率仅取决于前一个单词,即 $P(w_i | w_{i-1})$

    • Trigram (3-gram):假设每个单词的概率取决于前两个单词,即 $P(w_i | w_{i-2}, w_{i-1})$

5.2 Word2Vec 的原理

word2vec原理
  • Word2Vec 是 Google 于 2013 年提出的词向量学习工具,其核心目标是将离散的单词映射到连续向量空间,从而以数学方式度量词语之间的语义关联。通过向量化表示,模型能够在低维空间中捕捉语义关系并降低计算复杂度

  • Word2Vec 是一个单隐层神经网络,用于学习词向量,其训练任务包括:

    • CBOW(Continuous Bag-of-Words):根据上下文预测中心词

    • Skip-Gram:根据中心词预测上下文

    • 其中,CBOW 在小语料中效果较好,而 Skip-Gram 更适用于大规模语料

  • 模型架构

    • 输入:One-Hot 编码词向量

    • 隐层:维度 N(可自定义,即词向量维度)

    • 输出:词表大小为 $V$ 的概率分布(Softmax)

    • 训练完成后:$\text{词向量} = \text{输入层到隐藏层权重矩阵 } W$​

  • 假如有一个句子 “There is an apple on the table” 作为训练数据,CBOW 的输入为(is,an,on,the),输出为 apple。而 Skip-gram 的输入为 apple,输出为(is,an,on,the)。

cbow_skip-gram

5.3 CBOW (Continuous Bag-of-Words)

cbow
  • 具体流程

    • 输入层:使用上下文单词的 One-Hot 编码表示,词汇表大小为 $V$,上下文窗口大小为 $C$。以句子 There is an apple on the table 为例,若 $C=4$,则输入为单词 (is, an, on, the) 的 One-Hot 向量

    • 嵌入层:初始化权重矩阵 $W \in \mathbb{R}^{V \times N}$,将每个输入 One-Hot 向量左乘 $W$ 得到 $N$ 维嵌入向量 $\omega_1, \omega_2, \dots, \omega_C$,其中 $N$ 为嵌入维度,可根据任务需求设定。

    • 隐藏层:对上下文向量求平均,得到隐藏层向量 $h = \frac{1}{C}\sum_{i=1}^{C} \omega_i$

    • 输出层:初始化权重矩阵 $W' \in \mathbb{R}^{N \times V}$,计算输出向量 $y = \text{softmax}(h W')$ 其中 $y \in \mathbb{R}^V$ 表示词汇表中每个单词的预测概率分布,$W'$ 是输出权重矩阵(N × V,V 是词表大小),而词表非常大(V ≥ 1M),每次训练样本都需要计算完整 softmax 和梯度 → 计算量巨大!

    • 预测与训练:取 $y$ 中概率最大的元素对应的单词作为预测目标词,与真实词的 One-Hot 向量计算误差,通过反向传播更新 $W$ 和 $W'$

  • 训练完成后,输入层每个单词与矩阵 $W$ 相乘得到的向量即对应的词向量(word embedding)

  • 由于 One-Hot 编码中只有一个元素为 $1$,其余为 $0$,第 $i$ 个单词与 $W$ 相乘结果就是矩阵 $W$ 的第 $i$ 行

  • 因此,$W$ 也称为 lookup table,在拥有 lookup table 后,可以直接通过查表获取单词的词向量,无需再次训练

5.4 Skip-gram

skip-gram
  • 与 CBOW 不同,Skip-Gram 模型是给定输入词(input word)预测其上下文词,结构如上图所示

  • Skip-Gram 的核心思想是:将目标词的上下文词作为输出,而目标词本身作为输入,即给定一个词,预测可能出现的上下文词。通过在大规模语料库上训练,得到从输入层到隐藏层的权重矩阵,作为词向量表示。例如,“apple” 的上下文词为 (there, is, an, on, the, table),则以 “apple” 的 One-Hot 向量作为输入,输出为上下文词的 One-Hot 向量。训练完成后,与 CBOW 模型类似,输入到隐藏层的权重矩阵即为每个词的向量表示

  • 具体流程

    • 选取输入词:从句子 There is an apple on the table 中选取中间词作为输入,例如 apple

    • 定义上下文窗口:设定参数 skip_window,表示从输入词左右各选取的上下文词数。例如 skip_window=2,则包含输入词左右各 2 个词,窗口为 ['is', 'an', 'apple', 'on', 'the'],窗口总跨度 span=2×2=4。另设 num_skips 表示每个输入词生成的输出词数量,例如 num_skips=2,则生成训练样本对:(apple, an) 和 (apple, on)

    • 概率分布学习:神经网络基于训练样本统计输入词与输出词同时出现的概率,输出对整个词典的概率分布。例如输入单词 “中国”,模型输出中 “英国”、“俄罗斯” 等相关词概率高,而 “苹果”、“蝈蝈” 等非相关词概率低。

    • 参数更新:通过梯度下降和反向传播更新输入层到隐藏层的权重矩阵 $W$

    • 词向量表示:$W$ 的行向量即为每个词的 Word Embedding 表示

  • 然而,直接计算完整 softmax 的训练开销非常大,实际应用中效率较低

  • 为提升训练效率,提出了两种改进方法:Hierarchical Softmax 和 Negative Sampling

5.5 Hierarchical Softmax

  • Hierarchical Softmax 对原模型的改进主要包括两方面:

    • 输入层到隐藏层的映射:不再使用原先将输入词向量与矩阵 $W$ 相乘再求平均的方法,而是直接对输入词向量求和。例如,若输入词向量为 $(0,1,0,0)$ 和 $(0,0,0,1)$,则隐藏层向量为 $(0,1,0,1)$

    • 输出层优化:使用 哈夫曼树 替代原始 softmax。哈夫曼树的叶节点对应词汇表中的单词,从根节点到叶节点的路径表示单词概率,从而将输出复杂度从 $O(V)$ 降低到 $O(\log V)$

  • 具体实现上,除根节点外,每个非叶节点包含一个由参数 $\theta$ 确定的 sigmoid 函数,不同节点的 $\theta$ 值不同

  • 训练时,隐藏层向量与节点的 sigmoid 函数运算,根据输出结果选择分类方向:分类为负类沿左子树传递(编码 0),分类为正类沿右子树传递(编码 1),直到到达叶节点获得目标单词的概率

5.6 Negative Sampling

  • 基本思想

    • 尽管哈夫曼树能够在一定程度上降低模型训练开销,但对于一些不常见或生僻词汇,计算其词向量仍需要大量运算

    • 而负采样是一种提高 Word2Vec 训练效率的策略,其核心思想是:在之前的神经网络训练过程中,每个样本都会更新网络中所有权重以提升预测精度。实际上,不必更新所有输出词的权重,只更新正样本 + 少量随机负样本

    • 直观上理解,教模型 “谁是邻居(上下文)”,顺便告诉它 “其他随机词不是邻居”

  • 从数学角度而言,Skip-gram 的目标函数原本是 softmax:

    p(wowi)=exp(vwovwi)w=1Vexp(vwvwi)p(w_o | w_i) = \frac{\exp(v_{w_o}^\top v_{w_i})}{\sum_{w=1}^V \exp(v_w^\top v_{w_i})}
    • $w_i$:输入(中心词)

    • $w_o$:输出(上下文词)

    • $v_w$:词向量

  • 以上公式的计算量大,因为分母是 V 项求和

  • 而 Negative Sampling 将 softmax 转换为二分类:

    • 正样本 $(w_i, w_o)$:中心词与上下文词对,应该让网络输出概率高,即希望模型预测为 1

    • 负样本 $(w_i, w_k)$:从词表随机抽取的词,不在上下文中,应该让网络输出概率低,即希望模型预测为 0

  • 目标函数变为:

    logσ(vwovwi)+k=1KEwkPn(w)[logσ(vwkvwi)]\log \sigma(v_{w_o}^\top v_{w_i}) + \sum_{k=1}^K \mathbb{E}*{w_k \sim P_n(w)} [\log \sigma(-v*{w_k}^\top v_{w_i})]
    • $\sigma(x) = \frac{1}{1+e^{-x}}$

    • $K$ = 负样本数量(一般 5~20)

    • $P_n(w)$​ = 抽负样本的概率分布(通常根据词频调整)

  • 举例

    • 例如,对于句子:There is an apple on the table

      • 中心词:apple

      • 上下文词:is, an, on, the

    • 训练时,只更新这几个输出的权重,不更新全词表:

      • 正样本: (apple, is)

      • 负样本:随机抽取 5 个词,例如 (apple, dog), (apple, car), …

六、机器学习概述

6.1 机器学习的基本概念

  • 机器学习

    • 本质:构建一个映射函数

    • $x\rightarrow f(x,\theta^*)\rightarrow y/p(y|x)$

  • 机器学习三要素

    • 模型

      • 线性:$f(x,\theta)=w^Tx+b$

      • 广义线性:$f(x,\theta)=w^T\Phi(x)+b$,当 $\Phi(x)$ 为可学习的非线性基函数,则 $f(x,\theta)$ 即为神经网络

    • 学习准则

      • 期望风险:$\mathcal{R}(f)=\mathbb{E}_{(\mathbf{x},y)\sim p(\mathbf{x},y)}[\mathcal{L}(f(\mathbf{x}),y)]$

      • 经验风险:$R(\theta)=\frac{1}{\mathrm{N}}\sum_{i=1}^{\mathrm{N}}L(y^{(i)},f(\mathrm{x}^{(i)}))$

      • 结构风险:$R(\theta)+\lambda|\theta|^2$

    • 优化:梯度下降

  • 机器学习的类型

    类别
    监督学习
    无监督学习
    强化学习

    训练样本

    训练集 ${(x^{(n)}, y^{(n)})}_{n=1}^N$

    训练集 ${x^{(n)}}_{n=1}^N$

    智能体和环境交互的轨迹 $\tau$ 和累计奖励 $G_T$

    优化目标

    $y = f(x)$ 或 $p(y\mid x)$

    $p(x)$ 或带隐变量 $z$ 的 $p(x\mid z)$

    期望总回报 $\mathbb{E}[G_T]$

    学习准则

    期望风险最小化、最大似然估计

    最大似然估计、最小重构误差

    策略评估、策略改进

  • 参数学习

    • 由于期望风险未知,利用经验风险近似

    • 在选择合适的风险函数后,寻找参数 $\theta^*$,使得经验风险函数最小化

      θ=argminθRDemp(θ)\theta^*=\underset{\theta}{\operatorname*{\arg\min}}\mathcal{R}_{\mathcal{D}}^{emp}(\theta)
    • 机器学习问题转化为最优化问题

  • 如何优化参数:梯度下降法

    • 批量梯度下降法

    • 随机梯度下降法

    • 小批量梯度下降法

  • 如何减少泛化错误

    • 优化:经验风险最小

    • 正则化(Regularization):降低模型复杂度,得到更稳定、泛化性更好的解

    • 所有损害优化的方法都是正则化

      • 增加优化约束(L1 / L2 约束,数据增强)

      • 干扰优化过程(权重衰减、随机梯度下降、早停)

  • 模型的选择

    • 拟合能力强的模型一般复杂度会比较高,容易过拟合

    • 如果限制模型复杂度,降低拟合能力,可能会欠拟合

    • 期望错误的分解(偏差与方差分解)

      R(f)=(bias)2+variance+ϵ\mathcal{R}(f) = (\text{bias})^2 + \text{variance} + \epsilon
      1. 偏差(Bias):

        Ex[(ED[fD(x)]f(x))2]\mathbb{E}_x \left[ \left( \mathbb{E}_D[f_D(x)] - f^*(x) \right)^2 \right]
      2. 方差(Variance):

        Ex[ED[(fD(x)ED[fD(x)])2]]\mathbb{E}_x \left[ \mathbb{E}_D \left[ \left( f_D(x) - \mathbb{E}_D[f_D(x)] \right)^2 \right] \right]
      3. 噪声项(Irreducible Error):

      E(x,y)pr(x,y)[(yf(x))2]\mathbb{E}_{(x,y) \sim p_r(x,y)} \left[ \left( y - f^*(x) \right)^2 \right]
    • 低方差、低偏差时模型最优

    • 有效降低方差:集成模型

      • 通过多个高方差模型的平均来降低方差

      • 集成模型的期望错误大于等于所有模型的平均期望错误的 $\frac{1}{M}$,小于等于所有模型的平均期望错误

6.2 线性模型

模型
函数 / 激活函数
损失函数
输出形式
优化方法

线性模型

$f(x)=w^Tx+b$

$(y-w^Tx)^2$

实数或类别

最小二乘、梯度下降

Logistic 回归

logistic 函数

交叉熵损失:$y\log\sigma(w^Tx)$

类别的概率值

梯度下降

Softmax 回归

softmax 函数

交叉熵损失:$y\log\text{softmax}(w^Tx)$

各类别的概率分布

梯度下降

感知机

阶跃函数

$\max(0,-yw^Tx)$

$+1/-1$

随机梯度下降

SVM

阶跃函数

$\max(0,1-yw^Tx)$

$+1/-1$

二次规划、SMO 等

  • Logistic 回归

    • 在线性模型基础上加入 Sigmoid 函数,使输出值限定在 $(0,1)$ 之间,即 $P(y=1|x)=\sigma(w^Tx+b)=\frac{1}{1+e^{-(w^Tx+b)}}$

    • 用于二分类任务,输出类别的概率值

  • Softmax 回归

    • 对 Logistic 回归的扩展,适用于多分类任务

    • 对于 $K$ 分类任务,$P(y=k|x)=\frac{e^{w_k^Tx}}{\sum_{j=1}^{K}e^{w_j^Tx}}$

    • 分类规则:选择概率最大的类别 $\arg\max_kP(y=k|x)$

  • 感知机

    • $f(x)=\text{sign}(w^Tx+b)$

    • 学习规则:通过误分类点的更新规则调整权重

      ww+ηyixibb+ηyi\begin{align} w &\gets w + \eta y_i x_i \\ b &\gets b + \eta y_i \end{align}
    • 用于线性可分的二分类任务

  • 支持向量机

    • 寻找最优决策边界(最大化分类间隔)的分类模型,适用于二分类问题

    • 找到一个超平面,使两类之间的间隔(Margin)最大化:$\max \frac{2}{|w|}$,同时满足:$y_i (w^T x_i + b) \geq 1, \quad \forall i$

    • 损失函数 —— 引入松弛变量(对于线性不可分问题)后,优化目标为:

      min12w2+Ci=1Nξi\min \frac{1}{2} \|w\|^2 + C \sum_{i=1}^N \xi_i

      其中 $C$ 控制间隔和误分类的权衡,$\xi_i$ 是松弛变量。

6.3 深度学习

  • 传统机器学习的步骤

    • 原始数据 $\Rightarrow$ 数据预处理 $\Rightarrow$ 特征提取 $\Rightarrow$ 特征转换 $\Rightarrow$ 预测识别 $\Rightarrow$ 结果

    • 第 2-4 步为特征处理,第 5 步为浅层学习

  • 深度学习 = 表示学习 + 浅层学习

    • 原始数据 $\Rightarrow$ 底层特征 $\Rightarrow$ 中层特征 $\Rightarrow$ 高层特征 $\Rightarrow$ 预测识别 $\Rightarrow$ 结果

  • 深度学习的核心思想:通过层次化的表征学习,从数据中自动提取特征

  • 尽管深度学习通常使用多层神经网络,但深度学习的范围实际上更广

  • 深度学习天然不是神经网络,但神经网络天然是深度学习

  • 正则化方法

    • L1 正则化

    • L2 正则化

  • 优化器(Optimizer)

  • 核心功能:计算梯度,并基于梯度信息调整模型参数

  • 通常,优化器通过梯度下降法来更新参数,即沿着损失函数的梯度方向,调整模型参数,以减少损失值

  • 基本步骤

    • 计算梯度: 计算损失函数相对于模型参数的梯度

      • 更新参数: 根据梯度的方向和大小,调整模型参数,使损失函数逐步减小

  • 常见优化器类型

    • 梯度下降法(GD, Gradient Descent)

      • 批量梯度下降(Batch GD):每次使用所有训练数据来计算梯度并更新参数,计算量大,适用于小型数据集

        • 随机梯度下降(SGD, Stochastic GD):每次使用一个样本来计算梯度并更新参数,计算效率高,但容易受噪声影响

        • 小批量梯度下降(Mini-batch GD):每次使用一小部分样本来计算梯度并更新参数,是大多数实际应用中最常用的方法,平衡了计算效率和稳定性

    • 动量法(Momentum):在每次更新时加入之前梯度的加权平均,能加速收敛并减少震荡,特别在处理有很多局部最小值的问题时表现较好

    • AdaGrad:自适应地调整每个参数的学习率,适用于稀疏数据(例如文本数据或推荐系统中的数据)

    • RMSprop:结合了动量法和 AdaGrad,适用于非平稳目标函数,通常用于训练深度神经网络

    • Adam(Adaptive Moment Estimation):结合了动量法和 RMSprop 的优点,计算每个参数的自适应学习率,且在训练过程中能够自动调整。Adam 广泛用于深度学习训练中,通常能提供较好的效果

6.4 前馈神经网络

  • 神经网络

    • 激活规则:神经元输入到输出之间的映射关系,一般为非线性函数

    • 网络结构:不同神经元之间的连接关系

    • 学习算法:通过训练数据来学习神经网络的参数

  • M - P 神经元模型

    • 神经元接受来自 $𝑛$ 个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,将神经元接收到的总输入值与神经元的阈值进行比较,然后通过 “激活函数”(activation function)处理产生神经元输出

    • $a=f(n)=f(\sum_{i=1}^n x_iw_i+b)=f(WX+b)$

  • 学习与优化

    • 将样本数据实际输出与神经元输出进行比较,计算模型偏差 / 损失,以自适应线性单元(无激活函数的线性层)为例,假设有 $n$ 个样本

    • 梯度下降

      • $E=\frac{1}{2}\sum_{i=1}^n(W^Tx^{(i)}-\tilde{y}^{(i)})$

      • 沿着损失函数的曲线下降,直到达到局部或全局的最小值点

        w:=w+ΔwΔw=ηE(w)Ewj=i(y(i)y^(i))xj(i)Δwj=ηEwj\begin{align} & w:=w+\Delta w \\ & \Delta w=-\eta\nabla E(w) \\ & \frac{\partial E}{\partial w_j}=-\sum_i(y^{(i)}-\hat{y}^{(i)})x_j^{(i)} \\ & \Delta w_j=-\eta\frac{\partial E}{\partial w_j} \end{align}
  • 前馈神经网络(Forward Nerual Network)

    • 各神经元分别属于不同的层

    • 整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示

    • 同一层神经元之间没有连接;前后两层所有神经元相连(即 full connected),前层神经元输出就是后层神经元输入;每一个连接都有一个权重

  • 通用近似原理:对于具有线性输出层和至少一个使用 “挤压” 性质的激活函数的隐藏层组成的前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意精度来近似任何从一个定义在实数空间中的有界闭集函数

6.5 反向传播

  • BP(Back Propagation)神经网络是前馈神经网络,但权重学习过程是 BP 过程

    • 第 $k$ 层共有 $p_k$ 个神经元

    • 第 $k$ 层第 $i$ 个神经元的输入线性加权和为 $u_i^k=\sum_{j=1}^{p_{k-1}}w_{ij}^ky_j^{k-1}-\theta_i=\sum_{j=0}^{p_{k-1}}w_{ij}^ky_j^{k-1}$,其中 $y_o^{k-1}=\theta_i,w_{i0}^k=-1$

    • 第 $k$ 层第 $i$ 个神经元的输出为 $y_i^k=f(u_i^k)=\frac{1}{1+e^{-s_i^k}}$

    • 一个三层的 BP 神经网络可以任意精度逼近任意连续函数 $Y = f(X)$(通过学习不断调整边权重)

    • 给定 $N$ 组输入样本 ${X_{si},Y_{si}}$,如何调整 BP 神经网络的权重,使得输入为 $X_{si}$ 时,输出为 $Y_{si}$

  • BP 学习算法的基本思想

    • 基本思想:目标函数为神经网络输出层每个神经元实际输出值 $y_j^m$ 与期望输出值 $d_j$ 之差的平方和,其中 $d_j$ 是向量 $Y_{si}$ 的第 $j$ 维分量

    • 如何不断调整权重:利用 “最快下降法” 使得权值沿着目标函数的负梯度方向改变(这样可以使得目标函数值迅速下降,接近 0)

    • 目标函数:$J=\frac{1}{2}\sum_{j=1}^{p_m}(y_j^m-d_j)^2$

    • 约束条件:$u_i^k=\sum_{j}w_{ij}^ky_j^{k-1}$,$y_i^k=f_k(u_i^k)$

    • 连接权重的修正量:$\Delta w_{ij}^k=-\epsilon\frac{\partial J}{\partial w_{ij}^k}$

    • 梯度:在单变量的函数中,梯度即为导数,也就是曲线上某点的斜率。但是在多维变量的函数中,梯度就是函数对每一维度变量求偏导得出的向量

  • BP 学习算法的步骤

    • 正向传播输入信息,产生输出

    • 反向传播误差,反向逐层计算偏导,调整网络权值(最快下降法,调整权值使得误差迅速减小)

      • 例如:$\frac{\partial E_{total}}{\partial w_5}=\frac{\partial E_{total}}{\partial y_{o_1}}\times\frac{\partial y_{o_1}}{\partial u_{o_1}}\times\frac{\partial u_{o_1}}{\partial w_5}$

      • 同样把其余所有的权值都进行更新迭代,然后再进行正向传播计算, 并且每次重新计算误差,根据误差再反向传播更新权重。

    • 直至达到损失函数的最小值,最后得到的就是具有正确权值的最佳模型

  • 优化问题

    • 在每一层都要乘以该层的激活函数的导数

    • 梯度消失问题

      • 激活函数求导过小(求导小于 1)前面的层比后面的层梯度变化更小,故变化更慢,从而引起了梯度消失问题

      • 在反向传播中,梯度通过链式法则传递,多个小于 1 的数相乘会使梯度指数级衰减

    • 梯度爆炸问题

      • 激活函数求导过大(求导大于 1),前面层比后面层梯度变化更快,会引起梯度爆炸问题

      • 在反向传播中,梯度通过链式法则传递,多个大于 1 的数相乘会使梯度指数级增大

6.6 激活函数

激活函数
数学表达式
导数表达式
特点

Sigmoid

$f(x) = \frac{1}{1 + e^{-x}}$

$f'(x) = f(x)(1 - f(x))$

输出范围为 (0, 1),常用于概率预测。容易导致梯度消失问题,特别是在深层网络中。

Tanh

$f(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$

$f'(x) = 1 - f(x)^2$

输出范围为 (-1, 1),比 Sigmoid 更常用。仍有梯度消失风险。

ReLU

$f(x) = \max(0, x)$

$f'(x) = \begin{cases} 1 & x > 0 \ 0 & x \leq 0 \end{cases}$

简单高效,避免梯度消失 / 爆炸问题。导数在 $x \leq 0$ 时为 0,可能导致 “死亡神经元”。

Leaky ReLU

$f(x) = \begin{cases} x & x > 0 \ \alpha x & x \leq 0 \end{cases}$

$f'(x) = \begin{cases} 1 & x > 0 \ \alpha & x \leq 0 \end{cases}$

解决 ReLU 的 “死亡神经元” 问题,$\alpha$ 是一个小的正常数(如 0.01)。

ELU

$f(x) = \begin{cases} x & x > 0 \ \alpha (e^x - 1) & x \leq 0 \end{cases}$

$f'(x) = \begin{cases} 1 & x > 0 \ f(x) + \alpha & x \leq 0 \end{cases}$

更平滑,输出范围更接近 0,增强训练稳定性。

Softmax

$f_i(x) = \frac{e^{x_i}}{\sum_{j} e^{x_j}}$

$f'i(x) = f_i(x)(1 - f_i(x))$(单一元素导数) $f'{ij}(x) = -f_i(x)f_j(x)$(交叉元素导数)

用于多分类问题,输出为概率分布。

Swish

$f(x) = x \cdot \sigma(x) = x \cdot \frac{1}{1 + e^{-x}}$

$f'(x) = f(x) + \sigma(x) \cdot (1 - f(x))$

平滑非线性,比 ReLU 表现更好,尤其在深层网络中。

GELU

$f(x) = x \cdot \Phi(x)$, 其中 $\Phi(x)$ 是标准正态分布的 CDF

无明确的闭式解,可近似为 $f'(x) \approx \sigma(x) \cdot (1 + x \cdot (1 - \sigma(x)))$

平滑近似,性能优于 ReLU 和 Swish,常用于 Transformer。

Linear

$f(x) = x$

$f'(x) = 1$

输出未受限,通常用于回归问题或最后一层。

  • 常见激活函数的曲线图

    激活函数曲线

七、卷积神经网络

7.1 基本概念

  • 传统神经网络的缺点

    • 不同层神经元连接方式为 “全连接”,对于大维度输入数据,权重和偏置参数量大,导致训练收敛缓慢

    • 特别是图像数据(数以百万像素),以单张黑白 28 × 28 的手写数字图片为例,输入层神经元就有 784 个

  • 卷积神经网络(Convolutional Neural Network, CNN)

    • 利用生物学上感受野的概念

    • 局部连接:卷积层的神经元只与前一层的部分神经元节点相连,即神经元之间的连接是非全连接的

    • 权重共享:同一层中某些神经元之间的连接的权重 $𝑤$ 和偏置 $𝑏$ 是相同的,大大减少了训练参数量

    • 降采样(池化):更进一步信息抽象和特征提取,减少数据处理量

7.2 卷积层

  • 卷积是一种线性的、平移不变的运算,其由在输入信号上执行局部加权的组合构成

    • 根据所选择的权重集合不同,揭示输入信号的不同性值

  • 卷积核(滤波器):在 CNN 中,与权重集合相关的是卷积核(kernel);

    • $c_i=f(\sum\omega\cdot x+b)$,其中 $\omega$ 即为卷积核

    • 在全连接神经网络中,隐藏层中的神经元的感受野足够大乃至可以看到上一层的所有特征

    • 而在卷积神经网络中,隐藏层中的神经元的感受野比较小,只能看到上一层的部分特征,其所能看到的大小即为卷积核大小

    • 卷积核中的每一项即为其权重值,选择合适的核,能从输入信号中提取最显著和最重要的特征

    • 通过一个带有卷积核的感受视野扫描生成的下一层神经元矩阵被称为一个 Feature Map(特征图)

  • 特征图大小的计算

    • 输入图像大小为 $H_{\text{in}} \times W_{\text{in}}$(高度 × 宽度)

    • 卷积核大小为 $K_h \times K_w$(高度 × 宽度)

    • 步幅(stride)为 $S_h$ 和 $S_w$(纵向步幅 × 横向步幅)

    • 填充(padding)为 $P_h$ 和 $P_w$(高度方向填充 × 宽度方向填充)

    • 则输出图像大小 $H_{\text{out}} \times W_{\text{out}}$ 可以计算为:

    Hout=Hin+2PhKhSh+1Wout=Win+2PwKwSw+1H_{\text{out}} = \left\lfloor \frac{H_{\text{in}} + 2P_h - K_h}{S_h} \right\rfloor + 1 \\ W_{\text{out}} = \left\lfloor \frac{W_{\text{in}} + 2P_w - K_w}{S_w} \right\rfloor + 1
    • 很多深度学习框架会采取向下取整的方式,放弃输入特征图的一部分边界数据

    • Caffe 和 PyTorch 会放弃输入特征图的左侧和上侧的一部分数据, 使得卷积核滑动窗恰好能到达最右下角的点

  • 如何增加输出单元的感受野

    • 增加卷积核大小

    • 增加卷积层数

    • 在卷积前进行汇聚操作

  • 卷积的变种

    • 分组卷积

    • 转置卷积

    • 空洞卷积:通过给卷积核插入 “空洞” 来变相地增加感受野的大小

    • 可变形卷积

  • 卷积核的深度

    • 卷积核(Kernel)的形状可以表示为 $K_h \times K_w \times C_{\text{in}}$:

      • $K_h$:卷积核的高度

      • $K_w$:卷积核的宽度

      • $C_{\text{in}}$:输入特征图的通道数(深度)

    • 特点

      • 卷积核的深度 $C_{\text{in}}$ 必须与输入特征图的通道数相等,因为每个卷积核需要对输入的每一通道进行逐元素卷积

      • 如果输入特征图是 RGB 图像(3 个通道),卷积核的深度 $C_{\text{in}}$ 就为 3

    • 卷积过程

      • 输入特征图的形状:$H_{\text{in}} \times W_{\text{in}} \times C_{\text{in}}$(高度 × 宽度 × 通道数)

      1. 卷积核的形状:$K_h \times K_w \times C_{\text{in}}$

      2. 每个卷积核的作用:

        • 对输入特征图的每一通道进行单独卷积

        • 将所有通道的卷积结果按元素相加(求和),生成一个二维特征图

      • 输出特征图:如果有 $C_{\text{out}}$ 个卷积核,则输出特征图的形状为 $H_{\text{out}} \times W_{\text{out}} \times C_{\text{out}}$

7.3 池化(Pooling)

  • 对图像进行 “有损压缩”

  • 最大值池化、最小值池化、平均池化、全局平均池化(Global Average Pooling)

  • 作用

    • 不变性,更关注是否存在某些关键特征而不是特征具体的位置;

    • 减少计算量和参数量;

    • 获得定长输出,例如:文本分类的时候输入是不定长的,可以通过池化获得定长输出;

    • 防止过拟合,但也有可能会带来欠拟合

7.4 局部响应归一化(Local Response Normalization, LRN)

  • 局部响应归一化是一种归一化技术,主要用于提高模型的泛化能力

  • 它最早出现在 AlexNet 中,用于对中间特征图进行归一化,灵感来自生物神经网络的 “侧抑制” 机制

  • 核心思想是对特定像素位置的值,使用其相邻通道的响应来进行归一化:

    • 计算当前像素位置在 通道维度 上的局部响应平方和

    • 根据平方和对当前通道的值进行归一化,抑制大的激活值,提升其他通道的响应

  • 对于给定的输入特征图,假设输入在某一位置的特征值为 $a_{i,x,y}$,表示第 $i$ 个通道在位置 $(x, y)$ 的值。LRN 的归一化计算如下:

    bi,x,y=ai,x,y(k+αj=max(0,in/2)min(N1,i+n/2)(aj,x,y)2)βb_{i,x,y} = \frac{a_{i,x,y}}{\left( k + \alpha \sum_{j=\max(0, i-n/2)}^{\min(N-1, i+n/2)} (a_{j,x,y})^2 \right)^\beta}
    • $b_{i,x,y}$:归一化后的值

    • $a_{i,x,y}$:原始输入值

    • $k$:一个常数,避免归一化分母为零(通常 $k = 2$)

    • $\alpha$:缩放因子,控制归一化的强度(常见值为 $10^{-4}$)

    • $\beta$:指数项,控制归一化的抑制程度(通常取 $0.75$)

    • $N$:输入特征图的通道数

    • $n$:归一化时考虑的通道范围(常见值为 5)

7.5 批归一化(Batch Normalization,BN,BatchNorm)

  • 对于一个神经网络层的输入 $x$,BN 的核心步骤如下:

    • 计算均值和方差:

      μB=1mi=1mxi,σB2=1mi=1m(xiμB)2\mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i, \quad \sigma_B^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2
    • 标准化:

      x^i=xiμBσB2+ϵ\hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}
    • 缩放和平移:

      yi=γx^i+βy_i = \gamma \hat{x}_i + \beta
      • $m$:当前批次的样本数

      • $\epsilon$:一个小常数,防止分母为零

      • $\gamma$ 和 $\beta$:可学习的参数,用于调整标准化后的分布

    • $y_i = \gamma \cdot \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} + \beta$

  • 通常用于非线性激活函数之前或之后,最常见的是放在激活函数之前:

    InputLinear/ConvBatchNormActivation (e.g., ReLU)\text{Input} \to \text{Linear/Conv} \to \text{BatchNorm} \to \text{Activation (e.g., ReLU)}
  • 瓶颈结构

  • 沙漏结构

7.6 正则化方法(Dropout)

  • Dropout 是一种常用的正则化方法,可以缓解网络的过拟合问题

  • Dropout 操作是指在网络的训练阶段,每次迭代时会从基础网络中随机丢弃一定比例的神经元,然后在修改后的网络上进行前向传播和反向传播

  • 注意:模型在测试阶段会恢复全部的神经元

7.8 TextCNN

  • 将卷积神经网络 CNN 应用到文本分类任务,利用多个不同 size 的卷积核(kernel)提取句子中关键信息(类似多窗口大小的 n-gram),从而能够更好地捕捉局部相关性

  • 输入层

    • 给定长度为 $l$ 的句子 $S = [w_1, w_2, \dots, w_l]$,每个单词 $w_i$ 使用词嵌入(如 Word2Vec 或 GloVe)转换为固定长度的向量

    • 输入矩阵 $X \in \mathbb{R}^{l \times d}$:$X = [v(w_1), v(w_2), \dots, v(w_l)]^T$,其中 $l$ 表示句子长度,$d$ 表示词向量的维度

  • 卷积层

    • 卷积核:

      • 使用多个不同大小的卷积核(如 $h = 2, 3, 4$)来捕捉不同长度的 n-gram 特征

      • 卷积核的大小为 $h \times d$,跨越词嵌入的整个维度

    • 卷积操作:对输入矩阵 $X$ 应用卷积,生成特征映射 $c$:$c_i = f(w \cdot X[i:i+h-1] + b)$

  • 池化层:使用 1-max pooling

    • 从每个特征映射中选择最大的值,表示该卷积核在整个输入中最显著的特征

    • 池化后的结果是一个固定长度的向量,每个值对应一个卷积核的输出

    • 特征的位置信息在池化层完全丢失

    • 最大池化会丢失同一特征的强度信息:强特征会出现多次,出现次数越多说明这个特征越强,但 Max Pooling 只保留一个最大值

    • 采用 Average Pooling、K-Max Pooling、Chunk-Max Pooling

  • 全连接层

    • 将池化层的输出拼接后传入全连接层

    • 最后通过 softmax(或 sigmoid)激活函数完成分类

八、循环神经网络

8.1 基本概念

  • FNN、CNN 处理序列数据的局限性

    • 只适合:图片分类、识别等任务

    • 不适合:连续数据处理,与时间有关数据(序列依赖关系)

      • 比如语音、文本、视频、金融数据(股票波动)

      • 整个数据由若干同类型单元组成,称为 “帧”,如音素、字词、每帧图像

      • 帧与帧之间存在相互依赖关系,不再满足独立性假设, 需要考虑数据前后位置关系

    • 无法处理变长度数据

      • 全部或者部分丧失数据之间前后依赖性

      • 单次处理数据长度不能过长,容易引起参数爆炸

8.2 循环神经网络(Recurrent Neural Network, RNN)

  • 给定输入序列 $X = [x_1, x_2, \dots, x_T]$,RNN 的计算过程为:

    • 输入层:序列中的每个时间步 $t$,输入 $x_t$

    • 隐藏层:每个时间步的隐藏状态 $h_t$ 根据当前输入 $x_t$ 和前一时间步的隐藏状态 $h_{t-1}$ 计算:

      ht=f(Whxxt+Whhht1+bh)h_t = f(W_{hx} \cdot x_t + W_{hh} \cdot h_{t-1} + b_h)
      • $W_{hx}$:输入到隐藏层的权重矩阵

      • $W_{hh}$:隐藏层到隐藏层的权重矩阵(时间共享)

      • $b_h$:隐藏层的偏置。

      • $f$:激活函数(如 tanh 或 ReLU)

    • 输出层:计算每个时间步的输出 $y_t$:

      yt=g(Whyht+by)y_t = g(W_{hy} \cdot h_t + b_y)
      • $W_{hy}$:隐藏层到输出层的权重矩阵

      • $g$:输出激活函数(如 softmax 或 sigmoid)

8.3 双向循环神经网络

  • 基本思想

    • 普通 RNN 只能利用序列的过去信息(即从 $t=1$ 到 $t=T$ 的顺序)

    • BiRNN 在同一时间步 $t$ 同时考虑:

      • 前向 RNN:从 $t=1$ 到 $t=T$ 的正向传播

      • 后向 RNN:从 $t=T$ 到 $t=1$ 的反向传播

    • 最终输出结合两种方向的信息

  • 每个时间步 $t$ 的隐藏状态为:$h_t = [h_t^f; h_t^b]$

    • $h_t^f$:前向隐藏状态

    • $h_t^b$:后向隐藏状态

    • 输出 $y_t$ 结合了前向和后向隐藏状态的信息

  • 给定输入序列 $X = [x_1, x_2, \dots, x_T]$

    • 前向 RNN:$h_t^f = f(W_{hx}^f \cdot x_t + W_{hh}^f \cdot h_{t-1}^f + b_h^f)$

    • 后向 RNN:$h_t^b = f(W_{hx}^b \cdot x_t + W_{hh}^b \cdot h_{t+1}^b + b_h^b)$

    • 输出层:每个时间步的输出 $y_t = g(W_{hy} \cdot [h_t^f; h_t^b] + b_y)$

  • 基本循环神经网络和双向神经网络:只有单个隐藏层,不能很好学习数据内部关系

  • Deep(Bidirectional)RNN:叠加多个隐藏层,即在每个时刻会有多个隐藏层,有更强学习能力,但需要更多训练数据

  • 循环神经网络训练算法 —— 基于时间的反向传播 BPTT(Back-Propagation Through Time)

  • 优化问题

    • RNN 循环神经网络在时间维度上非常深,导致在训练中很容易发生梯度爆炸和梯度消失问题

    • 训练时梯度不能在较长序列中一直传递下去,从而使 RNN 无法捕捉到长距离的影响

  • 正则化方法(Dropout)

8.4 RNN 的架构类型

架构类型
输入形态
输出形态
应用场景
特点

一对一

单一输入 $x$

单一输出 $y$

图像分类

无时间维度,类似传统神经网络

一对多

单一输入 $x$

序列输出 $[y_1, \dots, y_T]$

图像描述生成

单一输入扩展为序列输出,常结合解码器使用

多对一

序列输入 $[x_1, \dots, x_T]$

单一输出

情感分析、分类

将输入序列压缩为单一结果,依赖隐藏状态捕捉序列信息

多对多 (定长)

序列输入

序列输出

视频帧分类、同步时间序列处理

输入和输出长度相同,适合逐时间步预测

多对多 (变长)

序列输入

序列输出

机器翻译、对话生成

Encoder-Decoder/Seq2Seq;编码器提取上下文向量,解码器生成序列输出

长短期记忆网络 (LSTM)

序列输入

灵活

长期时间序列预测

通过记忆单元和门机制缓解梯度消失问题

门控循环单元 (GRU)

序列输入

灵活

长距离依赖建模

结构更简洁,效率更高,但效果与 LSTM 相近

8.5 LSTM

LSTM
  • 公式:假设当前输入为 $x_t$,前一时刻的隐藏状态和记忆单元状态分别为 $h_{t-1}$ 和 $c_{t-1}$

    • 遗忘门(Forget Gate):决定当前时刻哪些信息需要从记忆单元中删除

      ft=σ(Wf[ht1,xt]+bf)f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)
      • $f_t \in [0, 1]$:表示是否保留记忆单元中信息的比例

    • 输入门(Input Gate):决定当前输入信息的重要性,并选择性地将其添加到记忆单元

      it=σ(Wi[ht1,xt]+bi)i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)
      • $i_t \in [0, 1]$:表示当前输入的重要程度

    • 候选记忆单元状态:

      c~t=tanh(Wc[ht1,xt]+bc)\tilde{c}_t = \tanh(W_c \cdot [h_{t-1}, x_t] + b_c)
      • $\tilde{c}_t$:表示当前输入的候选记忆信息

    • 更新记忆单元状态(Cell State):用来存储长期的上下文信息

      ct=ftct1+itc~tc_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t
      • $c_t$:结合过去的记忆和当前的输入,更新记忆单元状态

    • 输出门(Output Gate):决定从记忆单元中读取哪些信息作为当前的隐藏状态输出

      ot=σ(Wo[ht1,xt]+bo)o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)
      • $o_t \in [0, 1]$:表示当前记忆单元中哪些信息用于生成隐藏状态

    • 隐藏状态:

      ht=ottanh(ct)h_t = o_t \odot \tanh(c_t)
      • $h_t$:作为当前时刻的输出信息

  • 综述所述,LSTM 公式可描述如下

    [c~totitft]=[tanhσσσ](xtht1)+bct=ftct1+itc~tht=ottanh(ct)\begin{align} \begin{bmatrix} \tilde{c}_t \\ o_t \\ i_t \\ f_t \end{bmatrix} &= \begin{bmatrix} \tanh \\ \sigma \\ \sigma \\ \sigma \end{bmatrix} \begin{pmatrix} \mathbf{x}_t \\ \mathbf{h}_{t-1} \end{pmatrix} + \mathbf{b} \\ c_t &= f_t \odot c_{t-1} + i_t \odot \tilde{c}_t\\ h_t &= o_t \odot \tanh(c_t) \end{align}

8.5 GRU

GRU
  • GRU 比 LSTM 网络更简单的循环神经网络

    • LSTM 中引入三个门函数控制输入值、记忆值和输出值,参数较多,训练起来比较困难

    • 遗忘门和输入门合并成更新门,另外多一个重置门

    • 不需要计算额外的内部状态 $c$,在当前状态 $h_t$ 和历史状态 $h_{t-1}$ 之间引入线性依赖关系

  • 公式:假设当前时刻的输入为 $x_t$,上一时刻的隐藏状态为 $h_{t-1}$

    • 更新门:控制当前时刻的隐藏状态中有多少信息需要从上一时刻传递,以及有多少新信息需要添加

      zt=σ(Wz[ht1,xt]+bz)z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z)
      • $z_t \in [0, 1]$:更新门的输出,表示上一时刻的隐藏状态与当前时刻的输入的权重

    • 重置门:决定丢弃多少过去的记忆,从而有选择性地 “重置” 上一时刻的隐藏状态

      rt=σ(Wr[ht1,xt]+br)r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r)
      • $r_t \in [0, 1]$:重置门的输出,控制当前时刻如何利用上一时刻的隐藏状态

    • 候选隐藏状态:将记忆直接集成到隐藏状态 $h_t$ 中,结构更为简单

      h~t=tanh(Wh[rtht1,xt]+bh)\tilde{h}_t = \tanh(W_h \cdot [r_t \odot h_{t-1}, x_t] + b_h)
      • $\tilde{h}_t$:基于当前输入和重置后的隐藏状态计算得到的候选隐藏状态

    • 隐藏状态更新:

      ht=ztht1+(1zt)h~t=ztht1+(1zt)tanh(Whxt+Uh(rtht1)+bh)\begin{align} h_t &= z_t \odot h_{t-1} + (1 - z_t) \odot \tilde{h}_t \\ &= z_t\odot h_{t-1}+(1-z_t)\odot\tanh(W_hx_t+U_h(r_t\circ h_{t-1})+b_h) \end{align}
      • $h_t$:结合上一时刻的隐藏状态(通过更新门的权重)和候选隐藏状态,更新当前隐藏状态

  • 当 $z_t=0$ 且 $r_t=1$ 时,隐状态 $h_t$ 退化为简单循环神经网络,即 $h_t=\tanh(W_hx_t+U_hh_{t-1}+b_h)$

8.6 Seq2Seq 模型

8.6.1 Seq2Seq(Sequence-to-Sequence)

  • 输入序列 → 输出序列的模型

  • 典型任务:机器翻译、文本摘要、对话生成

  • 核心特性:输入和输出长度不必相等

  • 公式表示:

Y=fθ(X)其中 X=(x1,...,xm),Y=(y1,...,yn) Y = f_\theta(X) \quad\text{其中 } X = (x_1,...,x_m), \quad Y=(y_1,...,y_n)
  • 特点:

    • 强调“序列映射”关系

    • 可以使用 RNN、LSTM、GRU 或 Transformer 实现

      • 不一定是端到端的(可以有特征工程或分阶段处理)

8.6.2 End-to-End(端到端)

  • 模型直接从原始输入到目标输出,不需要人工设计中间步骤

  • 核心思想:所有处理通过一个模型学习完成

  • 特点:数据驱动,最小人工干预

  • 例子:

    • 图片 → 描述(Image Captioning)

    • 语音 → 文本(ASR)

  • End-to-End 是训练方式或设计理念,而非具体网络结构

8.6.3 Encoder-Decoder(编码器-解码器)

  • 一种具体模型结构

  • 分两步:

    • Encoder:把输入序列编码成上下文向量(Context Vector 或一系列 hidden states)

    • Decoder:根据上下文生成输出序列

  • 公式表示:

  • Encoder:

    H=Encoder(X)其中 H=(h1,...,hm)H = \text{Encoder}(X) \quad\text{其中 } H=(h*1,...,h_m)
  • Decoder:

    yt=Decoder(y<t,H)y_t = \text{Decoder}(y_{*{<t}}, H)
  • 特点:

    • Encoder-Decoder 是 Seq2Seq 的典型实现方式

    • 可以支持 Attention(增强性能,解决长序列瓶颈)

九、Transformer 模型

9.1 注意力机制

  • 深度学习中的注意力机制本质上和人类的选择性视觉注意力机制类似

  • 核心目标也是从众多信息中选择出对当前任务目标更关键的信息,可以广义地解释为重要性权重的向量

  • RNN 是健忘的,前面的信息在经过多个时间步骤传播后会被逐渐消弱乃至消失;

  • RNN 的解码期间没有对齐操作,因此在解码每个元素的过程中,焦点分散在整个序列中;

9.1.1 注意力机制的核心步骤

  • 第一步:根据 Query 和 Key 计算权重系数

    • 根据 Query 和 Key 计算两者的相似性或者相关性

    • 对第一阶段的原始分值进行归一化处理

  • 第二步:根据权重系数对 Value 进行加权求和

  • 假设输入序列为 $X = [x_1, x_2, \dots, x_T]$,输出序列为 $Y = [y_1, y_2, \dots, y_{T'}]$

  • 计算注意力分数:对于每个时间步 $t$ 的输出 $y_t$,计算输入序列中每个元素 $x_i$ 的相关性(称为注意力分数)

    et,i=f(htdec,hienc)e_{t,i} = f(h_t^{\text{dec}}, h_i^{\text{enc}})
    • $h_t^{\text{dec}}$:解码器当前时间步的隐藏状态

    • $h_i^{\text{enc}}$:编码器中第 $i$ 个时间步的隐藏状态

    • $f(\cdot)$:相关性函数,常用的形式包括:

      • 点积:$e_{t,i} = h_t^{\text{dec}} \cdot h_i^{\text{enc}}$

      • 加法:$e_{t,i} = W[h_t^{\text{dec}}, h_i^{\text{enc}}] + b$

      • 缩放点积(用于 Transformer)

  • 归一化注意力权重:使用 softmax 函数将注意力分数归一化为概率分布,$\alpha_{t,i}$ 表示输入 $x_i$ 对生成 $y_t$ 的贡献权重

    αt,i=exp(et,i)j=1Texp(et,j)\alpha_{t,i} = \frac{\exp(e_{t,i})}{\sum_{j=1}^T \exp(e_{t,j})}
  • 加权求和生成上下文向量:用注意力权重对输入序列的隐藏状态进行加权求和,生成上下文向量 $c_t$

    ct=i=1Tαt,ihiencc_t = \sum_{i=1}^T \alpha_{t,i} h_i^{\text{enc}}
  • 生成输出:上下文向量 $c_t$ 和当前隐藏状态 $h_t^{\text{dec}}$ 结合,生成最终输出

    yt=g(ct,htdec)y_t = g(c_t, h_t^{\text{dec}})

9.1.2 自注意力(Self-Attention)

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

  • 自注意力是 Transformer 的核心机制,用于输入序列中每个元素与其他所有元素的交互

  • 减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性

  • 将输入单词转化成嵌入向量,根据嵌入向量得到 $Q,K,V$ 三个向量且 $Q=K=V$

  • 自注意力的权重矩阵计算:

    Attention(Q,K,V)=softmax(QKdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V
    • $Q$:查询矩阵

    • $K$:键矩阵

    • $V$:值矩阵

    • $d_k$:键向量的维度,用于缩放点积

9.1.3 多头注意力(Multi-Head Attention)

  • 将输入分为多个头(子空间),并行计算注意力,每个头独立学习不同的特征表示

  • 这些 “头” 的输出随后被合并(通常是拼接后再通过一个线性层),以产生最终的输出表示

  • 公式:

    MultiHead(Q,K,V)=Concat(head1,head2,,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \text{head}_2, \dots, \text{head}_h)W^O

其中,$\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$

9.2 Transformer 结构

Transformer 模型是一种序列到序列(Sequence to Sequence,Seq2Seq)架构的深度学习模型

  • 编码器结构:每个编码器由 N 层叠加的模块组成,每层包括

    • 多头自注意力机制:输入序列之间计算相关性,生成权重分布;

    • 前馈神经网络:每个时间步上的特征通过一个两层的全连接网络进行处理;

    • 残差连接与层归一化(Residual Connection & Layer Normalization):保留梯度流,提高模型训练的稳定性

      Z=Z+SubLayer(Z)LayerNorm(Z)=γZμσ+β\begin{align} Z' &= Z + \text{SubLayer}(Z)\\ \text{LayerNorm}(Z') &= \gamma \cdot \frac{Z' - \mu}{\sigma} + \beta \end{align}
  • 解码器结构:解码器与编码器类似,但增加了以下模块

    • 掩码自注意力(Masked Multi-Head Self-Attention):遮蔽未来的时间步,确保仅依赖已生成的部分;

      MaskedAttention(Q,K,V)=softmax(QKdk+M)V\text{MaskedAttention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}} + M\right)V
    • 交叉注意力(Encoder-Decoder Attention):将自己的隐藏状态作为查询 $Q$,编码器的输出作为键 $K$ 和值 $V$

  • 模型输入和位置编码

    • 输入嵌入:输入序列的每个词首先被嵌入到高维向量空间

    • 位置编码(Positional Encoding):

      • Transformer 不使用循环结构,因此需要位置编码提供序列位置信息

      • 位置编码公式(正弦和余弦):

        PE(pos,2i)=sin(pos100002i/dmodel)PE(pos,2i+1)=cos(pos100002i/dmodel)\begin{align} PE(pos, 2i) &= \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)\\ PE(pos, 2i+1) &= \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) \end{align}

9.3 GPT(Generative Pre-trained Transformer)

  • 单向 Transformer 编码器:

    • 输入序列仅能关注之前的上下文(从左到右),无法利用后续信息。

  • 预训练 - 微调范式:

    • 预训练阶段:在大规模无标签文本上进行自回归任务(如下一个词预测)

    • 微调阶段:在特定任务(如分类、生成)上微调模型

9.4 BERT(Bidirectional Encoder Representations from Transformers)

  • 双向 Transformer 编码器:

    • 每个词同时关注其左侧和右侧的上下文

  • 预训练目标:

    • 掩码语言模型(Masked Language Model,MLM):随机遮蔽部分词汇,通过上下文预测它们

    • 下一句预测(Next Sentence Prediction,NSP):判断两句子是否为连续句子

  • Embedding

    • Token Embedding

    • Segment Embedding 用于区分输入的句子对,间接在语言模型中建模出前后句子所属的不同类型;

    • Position Embedding 则不同于 Transformer 中的三角函数,BERT 中直接设定处理序列的最大长度为 512,并对每个位置的 Embedding 进行学习

9.5 T5(Text-to-Text Transfer Transformer)

  • 编码器 - 解码器结构:编码器处理输入,解码器生成输出文本

  • 任务统一化:例如,将分类任务表示为 "输入:文本,输出:标签"

  • 预训练目标:使用填空(Span Corruption)任务:随机遮蔽文本片段,模型学习恢复这些片段

9.6 RoBERTa(A Robustly Optimized BERT Pretraining Approach)

  • 改进点:

    • 移除了下一句预测(NSP)任务,专注于 MLM

    • 使用更大的数据集和更长的训练时间

    • 动态生成掩码:每次训练时重新生成遮蔽词

    • 增加批量大小和序列长度

Last updated

Was this helpful?