人工智能期末复习

人工智能绪论

人工智能定义

人工智能是研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统的一门新技术科学。

人工智能、基因工程、纳米科学被认为是21世纪的3大尖端技术。

人工智能发展历史

  1. 1956,达特茅斯会议中,AI一词诞生
  2. 1970-1980,大规模数据和复杂任务不能完成,计算能力无法突破(低谷)
  3. 1982后,神经网络+5代计算机(专家系统)
  4. 1990-2000,DARPA无法实现,政府投入缩减(低谷)
  5. 2006-至今,突破性进展,进入发展热潮(深度学习)

人工智能数学基础

导数

假设函数 y = f(x) 在某个区间上的导数存在,则在此区间上某点x1

导数是用于研究函数在某一点附近的局部性质,用以刻画曲线或曲面的弯曲程度。

复合计算:

高阶导数:导数 y’=f’(x) 仍是 x 的函数,可对导函数再次求导。

函数f(x)的泰勒展开式:

image-20231127143046876

常用的泰勒展开

概率论基础

矩阵基础

搜索

搜索技术是问题求解的主要手段之一

搜索问题定义:可以用6个组成部分来形式化描述:

  • 状态空间S:所有可以的状态集合
  • 初始状态S0:系统的初始状态
  • 动作状态A:可用的动作集合
  • 转移函数T(s,a): 确定在状态s下执行动作a后到达的状态
  • 损耗函数c(s,a,s’): 在状态s通过动作a到达状态s’的损耗
  • 目标测试函数G(s): 判断给定的状态s是否为目标状态

解:将系统由初始状态到目标状态的一系列动作称为解。取得最小总损耗的解为最优解。

搜索策略

盲目搜索

没有先验知识,按照事先确定的排序搜索

  • 深度优先搜索(选择当前最深的节点,先进后出)
  • 宽度优先搜索(选择当前最浅的节点,先进先出)
深度优先搜索
初始化栈Z,令其为空;
初始化访问表V,令其为空;
将初始节点s放入栈z;
while(栈Z非空)
弹出栈顶节点n;
if(n为目标节点)
返回成功;
if(节点n不在访问表v中);
扩展节点n, N是当前节点n所有动作能够转移到的后继节点的集合;
将节点n加入访问表V中;
for m in N:
将m放入栈顶;
返回失败;

宽度优先搜索
初始化先入先出队列Q , 令其为空;
初始化访问表V , 令其为空;
将初始节点s 放入先入先出队列Q ;
while(队列Q 非空)
弹出队列Q 的队首节点n ;
if(n 为目标节点)
返回成功;
if(节点n 不在访问表V 中)
扩展节点n ,N 是当前节点n 所有动作能够转移到的后继节点的集合;
将节点n 加入访问表V 中;
for m in N ;
将 m 放入队列Q 的队尾;
返回失败;

深度优先搜索 宽度优先搜索
数据结构 队列
优点 可以不存访问表,节省空间 不存在死循环,单位耗散下最优
缺点 如果不用访问表,可能存在死循环 需要空间较大
共同点 均会形成搜索树,只是扩展节点的顺序不同

复杂度分析:????

启发式搜索

根据先验知识,按照动态确定的排序搜索

  • 贪婪搜索
  • A^*^ 搜索
贪婪搜索

选择当前代价估计h值最小的节点,用优先队列数据结构存储候选节点

 初始化以启发函数h 为键值的优先队列Q , 令其为空;
初始化访问表V , 令其为空;
将初始节点s 放入优先队列Q ;
while(优先队列Q 非空)
弹出优先队列Q 中h 值最小的节点n ;
if(n 为目标节点)
返回成功; //从目标节点n 由父节点指针回溯到初始节点s 的路径即为所得路径
if(节点n 不在访问表V 中)
扩展节点n , 并设 N = 当前节点n 所有动作能够转移到的节点的集合;
将节点n 加入访问表V 中;
for 节点 m in N :
if(m 不在优先队列Q 中)
将 m 放入优先队列Q , 将后继节点 m 的父节点指针指向n ;
返回失败;

缺点:找到的解可能不是最优的,贪婪搜索没有考虑到到达当前节点已有的代价

A^*^ 搜索

实际代价函数 g(s):起始节点到达节点s的代价值

总代价函数f(s)=g(s)+h(s)

A搜索:选择当前代价估计f值最小的节点,用优先队列数据结构存储候选节点

初始化以启发函数h为键值的优先队列Q , 令其为空;
初始化访问表V , 令其为空;
将初始节点s 放入优先队列Q, g(s) = 0, f(s) = h(s);
while(优先队列Q 非空)
弹出优先队列Q 中f 值最小的节点n ;
if(n 为目标节点)
返回成功; //从目标节点n 由父节点指针回溯到初始节点s 的路径即为所得路径
if(n 不在访问表 V 中)
扩展节点n , 并设 N = 当前节点n 所有动作能够转移到的节点的集合;
将节点n 加入访问表V 中;
for 节点m in N :
new_g = g(n) + c(n, m);
new_f = new_g + h(m);
if(m 在优先队列Q 中)
if(new_f < Q 中的f(m))
将后继节点m 的父节点指针指向n;
更新Q 中的f(m) =new_f, g(m) = new_g;
else
f(m) = new_f ;
g(m) =new_g ;
将m 放入优先队列Q , 将后继节点m 的父节点指针指向n ;
返回失败;

image-20231207200530422

证明:

1.假设njni的后继节点,根据一致性可得f(nj )≥f(ni),节点总是比后继节点代价小

2.其次沿着任意路径上的节点f(n)值是非递减的

3.A搜索扩展到**ni时,到达ni**的最优路径已经找到(反证法)

​ a)假设尚未找到,则最优路径上必有一点ni‘未扩展

​ b)由于ni最优路径的终点,由2f(ni )≥f(ni′ ),那么ni应先于**ni**扩展,与假设矛盾(即若是有其它未发现的节点到ni更优,那么按照算法来说这个节点应当先于ni 被找到)

贪婪搜索 A^*^ 搜索
数据结构 优先队列 优先队列
理论保证 若h是可许的,那么找到的解是最优的,若h 具有一致性,那么找到的解是最优的

局部搜索

在许多问题中,我们只关心搜索算法返回的状态是否达到目标,而不关心从初始状态开始到达目标的路径。

优点:不需要维护搜索树;占用内存少(不用存储路径);在连续的并且状态空间很大的问题中,通常都可以找到足够好的解;以时间换精度

局部搜索算法

  • 爬山法
  • 模拟退火
  • 遗传算法
爬山法

核心:不断移动至邻域内的最优点

当前解 ← 初始解
repeat:
L ← 当前解的邻域
新解 ← L中评估值最高的解
if 新解的评估值 > 当前解的评估值:
当前解 ← 新解
else
结束循环

特点

避免了遍历全部节点,但往往只能找到一个局部最优解

解决方式:多次随机初始化

模拟退火

在爬山法的基础上,用温度控制搜索的随机程度。每一个解都被赋予一个能量函数E(i),并要求目标状态处于最低能量状态。

  • 温度较高时,此时解的能量几乎没有作用,“粒子”的行为比较“活跃”,选择下一状态的策略更接近随机游走
  • 温度逐渐降低时,会更加偏向与能量小的解。能量下降,“粒子”的热运动逐渐减弱,故选择下一状态的策略更倾向于选择更优的解
当前解 ← 初始解
for t = 1 to ∞ do:
T ← 第t次迭代的温度
L ← 当前解的邻域
新解 ← L中随机选择一个解
if 𝐸(𝑗)≤𝐸(𝑖):
接受新解:当前解 ← 新解
else
转移接受概率P ← exp(−(𝐸(j)−𝐸(i))/𝐾𝑇)
以P的概率接受新解

在温度足够高时,概率几乎为1,每一个状态都有可能被访问。当温度逐渐降低,能够被访问到的状态将逐渐收敛到几个能量最小的状态中,从而找到局部最优解。

物理退火过程 模拟退火算法
对象 物理系统的某一状态 组合优化问题的某一个解
评估 状态的能量 解的评估函数值
目标 能量最低的状态 优化问题的最优解
控制变量 温度 搜索控制参数T
遗传算法

模拟生物种群基因的变异,交叉融合,自然选择等算子

实现对最优化问题解的参数空间进行高效的搜索的过程

初始化:随机生成 N 个个体的种群
计算种群中每个个体的适应度函数
生成一个新的种群:
选择:根据适应度函数有放回的选择N对父母个体
交叉:每一对父母个体用交叉算子生成下一代个体
变异:每一个生成的个体执行变异算子
判断是否找到最优解个体,如果否,则继续生成下一代种群
image-20231208134857642
三种算法对比
  • 爬山法从初始解开始,对领域内的局部空间进行有限的探索,并移动到邻域内的最优解,算法一直循环该过程,直到达到局部最优解时终止。优点在于简单直观,容易实现,缺点是容易陷入局部最优解的问题,对于存在多个局部最优解的问题,可能无法找到全局最优解
  • 模拟退火将爬山法与随机游走结合起来,在随机游走阶段,可随机地选择邻域内的一个状态作为下一个状态,有利于摆脱局部最优。该算法在一定程度上避免困在局部最优,同时也提高了搜索的效率
  • 遗传算法的思想来源于自然界的生物演化,通过模拟生物种群基因的变异、交叉融合、自然选择等算子,实现对最优化问题解的参数空间进行高效的搜索过程。该算法能够在求解较为复杂的组合优化问题时,通常能够在有效时间内获得较好的结果。

对抗搜索

Agent环境,其中每个Agent需要考虑到其他Agent行动及其对自身的影响,其他Agent的不可预测性可能导致该Agent问题求解过程中的偶发性。

竞争环境:每个Agent的目标之间有冲突

博弈:有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏

确定的、完全可观察的环境中两个Agent必须轮流行动,在游戏结束时效用值总是相等且符号相反

博弈要求具备在无法计算最优决策情况下也要做出决策。

  • 智能体P :={1, …, N} (通常轮流玩)
  • 状态空间S :所有可能的状态集合
  • 初始状态s_0 :系统的起始状态
  • 动作空间A :可用的动作集合
  • 转移函数T(s,a) :确定在状态s下执行动作a后到达的状态
  • 终止函数G(s) :判断给定的状态s是否为终止状态
  • 收益函数U(p) :在终止状态p的收益
  • 目标是找到一个策略:状态到动作的映射
极大极小搜索

基本思想:使用一个收益评估函数v(p) 对给定的中间节点p 进行评估,并通过搜索找到使收益评估函数最大(或最小)的动作

if(节点p 是终止节点)            //收益函数中的第一种情况
返回节点p 的收益函数𝑈(𝑝)
if(节点p 是极大方) //收益函数中的第二种情况
𝑣 :=−∞
for x in 子节点集合
𝑣 :=max⁡(𝑣 , 极小极大搜索(𝑥 , 否))//递归计算极小方节点的收益函数
返回v
else //收益函数中的第三种情况
𝑣 :=+∞
for x in 子节点集合
𝑣 :=min⁡(𝑣 , 极小极大搜索(𝑥 , 是)) //递归计算极大方节点的收益函数
返回v

优点: 能找到最优策略

缺点:需要展开整个搜索树

alpha-beta 剪枝搜索

Alpha-Beta 剪枝搜索通过避免不必要的节点搜索来提高算法的运行效率,是对极大极小搜索算法的优化。

基本思想:如果当前节点已知对手存在一个策略是自己获得的收益少于之前某个节点能够获得的收益,那玩家一定不会选择当前节点,故无需继续搜索当前节点的剩余子节点。

引入alpha,beta 两个变量

alpha: 表示到目前为止的路径上发现的max玩家当前的最优值

beta:表示到目前为止的路径上发现的min玩家当前的最优值

如果在某一个节点有alpha>=beta, 则说明该玩家当前的最优策略Beta 劣于之前已有的最优策略alpha,故无需搜索当前节点的剩余子节点,可以进行剪枝操作(象棋举例:已知当自己下a 时对面吃掉自己的马是最坏的情况,但当自己下b 时会知道对面最少可以吃掉自己的车,所以这个时候就知道没有必要再去思考下b 还会带来的更坏的后果了,因为此时已经比下a的情况更糟糕了)

image-20231208151901768

初始化: alpha = -inf , beta = inf

if(节点 p 是终止节点)          //收益函数中的第一种情况
返回 节点p 的收益函数 𝑈(𝑝)
if(节点 p 是极大方) //收益函数中的第二种情况
𝑣 :=−∞
for x in 节点 p 的子节点集合
𝑣 :=max⁡(𝑣, AlphaBeta搜索(𝑥 ,𝛼,𝛽, 否))//递归计算极小方节点的收益函数
𝛼:=max⁡(𝛼,𝑣)
if (𝛼≥𝛽) //剪枝, 降低搜索量
break
返回𝑣
else //收益函数中的第三种情况: 节点 p 是极小方
𝑣 :=+∞ ;
for x in 节点 p 的子节点集合
𝑣 ≔min⁡(𝑣, AlphBeta搜索(𝑥, 𝛼, 𝛽, 是))//递归计算极小方节点的收益函数
𝛽:=min⁡(𝛽, 𝑣)
if (𝛼≥𝛽) //剪枝, 降低搜索量
break
返回𝑣
蒙特卡洛树搜索(MTCS)

一种概率和启发式驱动的搜索算法,将经典的树搜索实现与化学习的机器学习原理相结合

树搜索中存在当前最佳动作实际上不是最佳动作的可能性

“**探索-**开发权衡”策略:学习阶段通过定期评估其他备选方案,而不是当前感知的最佳策略

探索扩展树的宽度,有助于确保 MCTS 不会忽略任何可能更好的路径,大量重复时变得低效

开发扩展树的深度,坚持具有最大估计值的单一路径

对比

  • 盲目搜索,没有利用问题定义本身之外的知识,而是根据事先对比好的某种固定排序,依次调用动作,以探求得到目标。
  • 启发式搜索,利用问题定义本身之外的知识来引导搜索,主要通过访问启发函数来估计每个节点到目标点的代价或损耗
  • 局部搜索,用在当前解的领域内来寻找更优解
  • 对抗搜索,出现在多个智能体的对抗性博弈中,在其它智能体通过搜索寻找它们的最优解的情况下寻找最优策略

机器学习

监督学习

本质是上根据数据中的例子学习image-20231208160606508

通过损失函数来评价结果的好坏

过拟合与欠拟合

image-20231208160930307

过拟合:函数表达能力强,使得模型在训练集上损失很少,但在测试集上损失很大泛化能力差

欠拟合:函数表达能力弱,使得模型在训练集和测试集上损失都很大。

无监督学习与半监督学习

一个经典算法 k means 算法

确定好𝑘
随机选择𝑘 个中心
将每个点与离它最近的中心相连(归属于此聚类)
将每个聚类的点求平均,算作新的中心
重复第3&4步,直到收敛

谱聚类

邻接矩阵A:第(i,j) 位置存放的是i,j 之间的相似度

对角度数矩阵D:第(i,i)位置存放的是所有与i相连的边权和。非对角位置为0

拉普拉斯矩阵定义为 : L = D - A

优化和泛化的区别:优化是寻找损失函数最小的f的过程,泛化是使f 在没有见过的数据也有很好的表现能力。总的来说,优化是使f 在见过的数据表现更好,泛化是使f 在没有见过的数据上表现也很好

线性回归方法

特点:解释性强,简单,泛化能力稳定

应用领域:经济学,社会领域

优化方式

梯度下降法

二分类

激活函数使用:Sigmoid 函数

123g(z)=1/(1+e^(-z) )∈(0,1)

多分类

激活函数使用: softmanx函数

yi=e^(u_i)^/(∑(j=1)^k^e(uj ) )≥0

(i=1)^k^yi =1

岭回归

基本思想:针对普通的损失函数1/2N ∑i(w^T xi-yi )^2^ ,希望在使它结果最小的同时,w^2^的大小也能够限制,即满足w^2^ <= C ,这样可以限制解的空间,帮助解决过拟合问题。(L2 正则,当超参数λ越大,约束越强)

image-20231209211023902

套索回归

基本思想:在优化1/2N ∑i(w^T xi-yi )^2^的同时,满足 |w| <= c,即希望解比较稀疏(因为现实中存在很多特征是无用的),其非0 项不超过c个,在实际中,往往使用 |w| <= c 作为替代品。(L1正则)

image-20231209211225034

支持向量机方法(SVM)

image-20231209211600567

image-20231209213149466 当 ai 不等于 0 的数据才会被称为支持向量,这些数据点其实就是距离分割平面最近的那些点,所以比较少。支持向量机就相当于是由支持向量计算分隔方案的算法。

支持向量机解的稀疏性: 训练完成后, 大部分的训练样本都不需保留, 最终模型仅与支持向量有关

对于数据不是线性可分的,可以把约束放松

image-20231209214152921

对于不存在一个能正确划分两类样本的超平面的方案:

将样本从原始空间映射到一个更高维的特征空间**,** 使得样本在这个特征空间内线性可分.

如果最后算出有 r 个 ai ≠ 0 ,那么只需要计算 r 次核函数的内积操作,就可以判断出点 x 的类别。

决策树模型

定义

一个树结构的每个中间节点对数据的某一个特征进行判断,根据判断结果的不同指向相应的子节点。每一个叶子节点,代表的是对符合所有从根节点到该叶子节点路径上判断条件的数据给出的一个预测值。这种树称为决策树

训练过程

  1. 初始化一个根节点,对应所有的训练数据
  2. 选择一个特征,设置一个分割条件
  3. 依据该条件构造根的两个叶子,每个叶子对应一部分数据
  4. 重复以上步骤,直到到达一定的终止条件
如何选择最优划分属性

一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,结点的纯度越高越好

属性划分方法
信息增益

image-20231205133948308信息增益越大,则意味着使用属性 a 来进行划分所获得的纯度提升越大

示例:

image-20231205135711675该数据集包含17个训练样本,|y|=2,其中正例占p**1=8/17 ,反例占p2=9/17 ,计算得到根结点的信息熵为:image-20231205135749888

image-20231205140658747

存在的问题:信息增益对可取数目较多的属性有所偏好(因为可取的数目越多,划分的就越细,子集合也越多,子集也就更纯,但这样的决策树不具有泛化能力)

增益率

image-20231205144722527

image-20231205144734402

IV(a) 称为属性 a 的“固有值” ,属性 a 的可能取值数目越多,那么 IV(a)通常越大

存在的问题:对可取值数目较少的属性有所偏好

基尼指数

数据集D的纯度可用“基尼值”来度量

image-20231205150827763Gini(D) 越小,数据集 D 的纯度越高

image-20231205150946971选择使划分后基尼指数最小的属性作为最优划分属性

在ID3决策树中以信息增益作为准则来划分属性

在 C4.5 中使用的是先从候选划分属性中找出信息增益高于平均水平的属性,再从中选取增益率最高的

CART采用“基尼指数”来选择划分属性(减少对数运算)

过拟合处理方法:剪枝

预剪枝

在决策树的训练过程中加入限制条件,避免违反这些条件的分割

准则
  • 限制树的最大深度
  • 限制树的最大叶子数目
  • 限制每片叶子最少的样本数
后剪枝

先训练一个规模足够大的决策树,然后再删去多余树的分支

准则
  • 该子树没能使验证集上的误差有所减少
  • 该子树不包含有足够大分割增益的分割

优缺点

模型相对简单,具有较好的解释性,但是预测效果比不上更高级的模型

集成学习

集成学习思想:是集合一系列弱模型的预测结果,从而实现更稳定,表现更好的模型

两种集成方式

平行的集成方式

引导聚集方法(Bagging( bootstrap aggregating))

image-20231202193428587

例子:随机森林

训练多个决策树,为避免在训练中多个决策树给出相同的预测,随机森林在训练每个决策树时会引入一定的随机性

特点:

  • 训练每个决策树时,随机选取部分训练数据进行训练(子树之间独立)
  • 在每次分割叶子节点时,随机选取特征的一个子集,从该子集中选取最优的分割条件

预测结果选择:

  • 回归问题:预测输出为所有决策树预测的均值
  • 分类问题:对所有决策树的预测类别进行投票,得票最高的类别作为输出结果
关于随机性的探讨
  • 特征/数据集采样会降低单个决策树的效果,但这样能增加不同决策树之间的独立性与差异性
  • 将许多这样的决策树以这种方式组合起来,通常能够得到比不引入随机性更好的单个决策树效果。差异较大的模型互相弥补了各自的短板

关于为什么要采取有放回的采样

  • 引入多样性: 允许同一样本在不同的子集中出现,这导致了每个决策树都是在略有不同的数据子集上训练的。这增加了每个决策树的多样性,有助于防止过拟合。如果使用无放回抽样,每个子集的样本都是独立的,可能导致每个决策树过度拟合于特定的子集。
  • 减小方差: 由于每个决策树的训练集都是通过有放回抽样生成的,因此每个树都是在略微不同的数据集上训练的。当多个决策树组成随机森林时,它们的预测会取平均值,从而减小了预测的方差,提高了整体模型的稳定性。
  • 处理大量特征: 随机森林通常应用于高维数据,有放回抽样可以使每个决策树使用不同的特征子集进行训练。这有助于每个树专注于不同的特征,提高了整体模型对于特征的利用效率。
串行的集成方式

提升算法 (Boosting)

image-20231202193502462

基础模型是一个一个训练的,后一个的训练依赖以前基础模型的训练结果

例子:梯度提升决策树(GBDT)

基本思想:不断训练新的决策树,以弥补已经训练好的决策树的误差

和随机森林的区别:各个子模型之间存在更强的依赖关系

特点
  • 新子树拟合已有子模型的结果相对于数据标签的残差或负梯度,子树间不独立
  • 多颗子树不断提升集成模型总体的效果
  • 目前针对表格数据最有竞争力模型之一,使用非常广泛

理解集成学习的优势

  • 特征会存在冗余性
  • 可以从多个视图挖掘信息
  • 集成学习中的每个基础模型可以充分挖掘分给它的那部分特征,然后一起整合预测结果

bagging(bootstrap aggregating) 和boosting 的区别

  • bagging是将训练样本从数据集中多次抽取,构建多个弱学习器,每个学习器给与的权重是一样的,而boosting 是在训练期间迭代构建强学习器,对于误差小的学习器给与更大的权重
  • bagging随机抽取多组样本集合,分别训练不同的模型,采取并行模式,多个模型同时运行,对于回归任务输出结果采取平均值,对于分类任务采取投票
  • boosting 使用多个模型,采用串行模式,每次迭代都对上一次的模型进行改进。boosting 会根据错误率不断调整样例的权重,错误率越大则权重越大

神经网络

选择relu 不选择sigmoid :sigmoid 函数在远离0 点的时候导数非常小,影响优化,relu 的梯度十分好求,对于优化是十分方便的

计算机视觉

自然语言处理

语言模型

概念:用来评估一个句子或短语有多“像”是一个自然语言的工具。如果一个句子或短语更符合自然语言的表达方式,那么该句子或短语在语言模型的打分就应该更高;反之,则更低。

语言模型可以用到许多实用的场景,如文本纠错、翻译、语言生成等

概率模型:n-gram 模型

用字符序列代表句子,该字符序列的概率越大,则该序列更像自然语言。通常采用链式法则计算概率:P(c1c2c3)=p(c1)*p(c2|c1)*p(c3|c1c2)

链式法则的优点:

  • 条件独立性
  • 无后效性

但这存在一个问题,对于很长的句子,越靠后的词的条件概率就会非常复杂,它对应的子序列在一个文章出现的概率也就越低,需要搜集更多的文章才能准确估计这个子序列的出现频率。所以一般采用n-gram 模型来解决这个问题。

目的:简化条件概率计算

近似假设 P(ci│c1…ci-1 )≈P(ci|ci-n+1…ci-1)

条件概率仅依赖前n-1个字符

对于固定n=k,称之为k**-gram**模型

k=1**: unigram model ** P(c1…cN )=∏iP(ci), 即每一个字相互独立,又称背包模型,bag-of-words)

举例:P(清华大学)≈P(清)P(华)P(大)P(学)

k=2**: Markov model** (马尔可夫模型), bi-gram model

k越大,n**-gram**方法越精确

词序列随着k指数变多,需要更多的语料才能准确估计概率

最大似然估计MLE

用语料中的频率来近似概率。显然,搜集的语料越多,得到的概率就会越准确。从统计学角度可以证明,当语料有限时,是最“精准”的概率估计方式,这种方式就叫作最大似然估计。

困惑度(preplexity)

困惑度越低的语言模型生成语言的句子质量越高

PP(c1…cN)=P(c1…cN )^(-1/N)^

对数困惑度

log⁡PP(c1…cN)=-1/N ∑ilog⁡P(ci|c1…ci-1)

字模型和词模型

字模型:

  • 常见汉字约2500字;建模与计算简单
  • 相对不精确,需要比较复杂的模型

词模型:

  • 相对精确
  • 词量巨大(海量专业名词),新词不断产生,需要分词

中文和英文的差别

英文更关注的是词性的区别,没有分词困扰

英文和中文的主要区别:

  • 英文中有大量的特定名词
  • 英文中存在缩写与连写
  • 英文中有不同的词性变换

向量语义

分布假设

单纯基于频率计算的模型忽略了词的语义信息。所以人们想到了分布假设。分布假设认为,两个词的词义越相似,那么它们在自然语言中出现的分布会越相近。以青菜白菜举例,二者都会经常出现在有关吃饭、菜谱等有关话题的句子中。

从分布假设角度来说,如果要表达一个词的意义,可以利用上下文的分布作为该词的特征。

词向量

用向量(一些实数)来表达一个词的语义

近义词则对应向量空间距离近

相似度
image-20231208165126665

词义相近的词则夹角小(相似度大)

词义差距大的词则夹角大(相似度低)

word2vec

思路:采用机器学习方式,把词向量作为参数进行优化求解

连续词袋模型CBOW

给定词的上下文,推断该词出现的概率

P(w│c(-k)…ck )=∏1≤|i|≤k P(w|ci) 将联合分布分解为每一个上下文词Ci与当前词w的条件概率的乘积。在这种独立假设的情况下,上下文中的每一个词的先后关系并不被模型考虑。

这种忽略词出现顺序只在乎是否出现的方法称为词袋模型。

对于CBOW来说,给定一个上下文,输出对于整个词表所有词的概率分布,我们希望对于候选词的概率要大一点。

余弦相似度cos⁡<w,ci> ≈ w^T^ ci

P(+│w,ci ):特定词适合和上下文一起出现的概率

P(-│w,ci): 其它词不适合和上下文一起出现的概率

P(-│w,ci)+P(+│w,ci )=1

P(+│w,ci )=σ(w^T^ci )=1/(1+e^ (-w^T^ ci ) )

P(-│w,ci )=1-σ(w^T^ ci)=e^ (-w^T^ ci ) /(1+e^ (-w^T^ ci ) )

最后的结果:P(+│w,c(-k)…ck )=∏_(1≤|i|≤k )P(+|w,ci)

一般为了数值稳定,优化对数概率

L(w,c)=∑_((w,ci )∈D^+) log⁡P(+|w,c_i)

跳字模型skip-gram

给定一个词,推断其上下文词出现的概率,计算P(c-k…ck|w),也采用独立假设。

word2vec 只考虑得到的词向量,并不在意得到的结果,词向量是word2vec的参数。需要注意到,skip-gram 比CBOW 更不容易过拟合。

基于神经网络的语言模型

能够在计算条件概率时将每个词的语义信息考虑进去。

采用神经网络表示条件概率P(w|w(i-1))

基于神经网络的bigram模型

找到一个函数,给定一个词表L={w^1^,w^2^,w^3^,…,w^n^},以及当前词wi-1作为输入,输出一个长度为 v 的向量 o = (o1,o2,…,on),其中oi,表示词表中第i 个词出现在wi-1之后的概率。

损失函数

L(θ;w(i-1),wi )=-log⁡P(wi |w(i-1))=log ywi=log⁡(∑(k∈L) exp⁡(βk ) )-βwi

为什么此时不需要构造负例进行训练了?

多分类问题的softmax输出自然包含了负例

基于神经网络的ngram 模型

与bigram 模型的不同之处在于输入的不在是一个词,而是n 个词拼接在一起,其余部分相同。image-20231210165312862

基于LSTM 的语言模型

image-20231210165625275

基于神经网络的机器翻译

翻译问题本质上寻找一个函数f,给定某种语言的句子X,输出另一种语言中对应的句子

基于LSTM的seq2seq模型

image-20231210165922032

编码器将输入序列 x 编码为一个特征向量 h ,再通过解码器将 h 转化为完整的目标句子 y

保留k个贪心候选序列

对于每次时间步解码器的输出选择前k 个概率最大的词,然后作为下一个时间步的输入之一

image-20231210170400980

基于注意力机制的seq2seq模型

LSTM模型的缺点:

  • 对于固定维度的句子,LSTM模型都只会将其映射到一个固定维度的特征向量 h ,但这个固定维度是模型的瓶颈,会限制模型的表达能力

  • 输入词和输出词之间是有对应关系的,LSTM不能表达出这这关系

加上注意力机制,输出状态会更加和它相似的输入状态,对于相似的注意力更高,特征向量是由自身对于编码器的不同时间步的输出的不同权重和得到的,所以每一个输出词都有自己对应的特征向量h

Transformer 模型

对于输入序列的每一个词Xi,都有对应的 ki , qi ,vi ,代表的意思是关键字,询问和值,使用这三个变量是为了提取出输入向量xi 中的不同信息。

ki,qi,vi=[Wk xi,Wq xi,Wv xi]

αj=softmax(βj/√d) βj=qi^T^ kj

image-20231211142548287

输出的是值向量的加权求和

多头注意力机制

计算m个维度为d/m的独立自注意力分布和自注意力特征

αj^l^=softmax((βj^l^)/√(d/m)); βj^l^=qi^l^^T kj^l^;hSA^l^=∑j αj^l^ vj^l^

合并得到最终的维度为d的自注意力特征h_SA=concat(hSA^1^,…,hSA^m^)

多头注意力机制与原自注意力机制计算量相同

每个独立头维度降低,表达能力相对减弱

保证整体不消耗额外计算

可以完整使用矩阵运算完成

自注意力机制本质上为线性运算,所以还需要添加非线性层。

位置编码

自注意力机制有顺序不变性,所以需要添加位置编码来提供位置信息

pi表示xi所处的位置信息,以[xi,pi]作为自注意力模块的输入

image-20231211145359645

语言模型预训练

GPT (generative pretained Transformer )与BERT(bidirectional encoder representation from transformer)的区别和联系

联系

  • 二者都使用了transformer架构
  • 都采用预训练的策略,在大规模文本语料库上进行预训练,然后在特定任务上进行微调。

区别

  • GPT采用的是自回归的预训练模型。模型在预训练阶段通过预测下一个词的方式学习语言表示
  • bert 采用的是掩码语言模型的预训练目标。在输入序列中,随机掩盖一些词,并要求模型预测这些被掩盖的词
  • GPT采用的是单侧从左向右预测的方式,bert通过掩盖部分输入词,实现双向上下文理解,使得模型在预测缺失词时能够同时考虑左右两侧的信息
  • GPT是生成是模型,可以生成连续的文本序列,bert主要用于特征提取,通常在预训练后将其输出用于下游任务的任务特定模型