高级人工智能复习
Author: ZihaoWu
Date: 2023.2.11
Chp2 函数与复杂性
函数的评价指标:准确性,复杂性,完备性
函数的描述:语言描述,图像,列表,解析
列表法的行数表示复杂性
最小描述长度原则:最大压缩效果的最好
Chp3 问题求解:搜索
搜索问题五要素:状态空间,后继函数,初始状态,目标测试,路径耗散
搜索问题转化为状态图:解,最优解,无解(不连通)
搜索问题举例:华容道,数码游戏,8皇后/n皇后,数独
8皇后的状态空间:棋盘上的布局->按列依次放置:
路径规划问题形式化
- 网格化
- 扫描线方法:每个染色区域的重心作为代表
- 障碍物边界法:连接可视顶点作为后继函数
搜索
基准算法:宽度优先遍历
节点扩展:节点扩展是生成搜索树的关键操作。直观理解就是把一个节点用它的后继节点(集合替换)。扩展包括:评估节点的后继函数(考虑路径耗散),然后对后继函数返回的所有后继状态,在搜索树上分别产生一个子节点与之对应。注意节点扩展
边界:搜索树的边界(FRINGE)是未拓展的状态集合。对于宽度优先算法而言,可以理解为队列里待处理的节点。
搜索策略:定义FRINGE中节点优先顺序对策略
完备性:有解时,能保证返回一个解;无解是,能保证返回failure
最优性:能否找到最优解,返回最小cost
复杂性:搜索树的大小;时间复杂度;空间复杂度
Chp4 盲搜索
盲搜索(blind),对FRINGE中候选项对搜索次序是随机的
启发式(heuristic),根据某种规则选择更有希望的节点优先搜索
两个重要参数:
- 分支因子
:后继函数返回的最大状态数目 - 初态到目标状态的最小深度
:搜索树上离根最近的目标节点的深
1.基准算法:宽度优先搜索(BFS)
BFS是完备的
复杂度:
每条边的路径耗散相等时满足最优性,否则不一定。对复杂度的改进产生了下面的搜索算法。
2.双向搜索
分别从初态和终态启动两个宽度优先算法,维护两个未拓展节点集合,当两个集合有交集时算法结束。
时间和空间复杂度是
时空复杂度本质没有变化
3.深度优先搜索(DFS)
扩展节点时,新节点总是插入到队列的队头(“入栈”)
- 对于优先搜索树完备
- 不具备最优性
- 时间复杂度
,空间复杂度 , 为叶子节点的最大深度
4.回溯法
对DFS的改进,每次只扩展一个节点,同时最多保存
- 可能不完备,也可能得不到最优解
5.深度受限搜索
对DFS的改进,设置拓展节点深度阈值为
- 返回三种结果:解,无解,深度阈值
内无解
6.迭代深入搜索
使用不同的参数
-
时是完备的 -
边的路径耗散相等时满足最优性,否则不一定
-
时间复杂度
-
空间复杂度
对未知问题,解的深度未知,付出较小的代价,迭代深入搜索是首选的盲搜索算法。
7.代价一致搜索
每次在FRINGE中选择让目前获得的路径耗散最小的节点扩展,适用于单步路径耗散不同时的情形
当单步路径耗散相同时,代价一致搜索等价于基准算法BFS
要求单步耗散有下界,即
- 能保证最优性和完备性,一般来说时空复杂性较基准算法大
避免重复访问
- 设置标识数组
- OPEN/CLOSED表
图搜索和树搜索
在树搜索中,不同的节点可能表示相同的状态,但是图搜索中将相同状态都合并到同一个节点上。
图的宽度有限搜索就类似于树的层次遍历。
完备性
- 状态空间无限,一般不完备
- 状态空间有限,但是每个状态允许被无限次访问,搜索不完备
- 状态空间有限,访问重复的节点被丢弃,则搜索完备,但一般不是最优
Chp5 启发式搜索
最佳优先搜索:每次从FRINGE中选择最佳节点进行拓展,这里的“最佳”是局部贪婪的,并不一定是全局最佳。
设计评估函数
,完整解的路径耗散,对应A*算法 ,从当前节点N到目标节点的路径耗散,对应贪婪算法
A*算法
- 问题有解时,具备完备性和最优性,且对一致的
,A*算法拓展一个状态节点时到该状态的路径一定是最优的 - 状态空间无限/允许重复访问,A*算法的搜索不会停止。求解实际问题时通常给一个停止时间。
启发式函数 h(N) 是“可采纳的”,当且仅当
一致的(单调的)启发式函数
随着搜索的深度越来越深,对深处节点估计的启发式函数值越来越准确。
图搜索和树搜索
- 图搜索不允许状态重复访问->保证完备性(状态有限时)->不一定最优
- 树搜索允许状态重复访问->保证最优->无解时可能停不下来(不完备)
A*算法状态重复访问改进
当且仅当到该节点的新路径的耗散比以前访问该状态的路径耗散更大时,丢弃重复访问的这个状态节点。
对于两个可采纳的启发式函数
迭代深入A算法——IDA
思想:设置
步骤:(1)初始化
优点:
- 完备+最优
- 内存需求比A*少
- 避免未拓展节点集合的排序开销
不足:
- 无法充分利用内存,两次迭代之间只保留阈值
- 无法避免重复访问不再路径上的点
改进:SMA*算法——将内存用光直至不能保存节点,丢掉保存的一个高耗散,最旧的节点,再插入新的节点。
Chp6 优化问题
分为数值优化和组合优化
将优化问题建模为搜索问题,其解法分为两种:
梯度下降算法
n元实值函数
步骤:(1)设置超参数,e.g.学习率,停止准则;(2)初始化,初态
缺点:
- 不能保证全局最优
- 停止条件和学习率设置需要人工经验
改进:
- 不知道步长时可以多试几个步长来尝试
- 随机梯度下降,计算梯度时只用随机一个样本更新参数,而不是扫描整个训练集后更新参数,时间性能得到提升。
牛顿法
爬山法
爬山法找到局部最优解
两个关键因素:初始解和邻居算子
按策略
(1)best-found 选择目标函数最小的邻点
(2)first-found 随机选择一个(比当前点)更好的邻点。
(3)random walk 随机选择邻点(即使目标函数大于当前点)
爬山法与梯度下降的对应关系:
- best-found:离散版本的梯度下降
- first-found:随机梯度下降
改进:
- 用不同随机初始值重启算法
- 在局部最优点增加扰动,调整邻居算子
- 模拟退火(爬山+随机行走)
- LSB局部剪枝搜索
- 是爬山法的并行改进,在初始时准备k个初态,迭代中可能有两种策略:(1)假设每个解有l个后继,每步都在lk个后继中选择最优的k个解(2)所有lk个后继对应一个被选择的概率分布。
模拟退火
通过以一定概率接受“坏“移动来避免陷入局部最优,分类上介于全局搜索和局部搜索之间。
超参数
其中
Tabu搜索(禁忌搜索)
不是原子算法,而是一种策略,可以添加到其他的局部搜索算法中。
核心:维护一个长度优先(设为k)的最近历史解队列Tabu-list(队列实现),搜索过程中,发现新解出现在Tabu-list中,直接放弃。
优点:能够在一定程度上防止陷入局部最优
进化算法
爬山法的推广,使用全局邻居算子。
可以引入并行化。
一些EA算法的例子:一般进化算法,差分演化算法,估计分布算法EDA,粒子群算法,memetic算法,遗传算法(交叉、变异、选择)
蚁群算法
分布式策略来估计
n只蚂蚁在有限状态机上爬行,并留下信息素来标记爬行历史
在评价好的状态转移边上,会有更多蚂蚁经过,留下更多的信息素。
Chp7 CSP:约束满足问题
一般我们可以把CSP问题建模为搜索问题而不是优化问题。
形式化定义:CSP
CSP的例子:
- 3—SAT:使m个析取式(约束,或运算)构成的一个合取式(与运算)为真,其中每个析取式的变量数
。 - 地图着色:约束条件为任意两个相邻的区域(变量)色彩(取值)不一致
- 8皇后问题
有限和无限CSP:只要有一个变量取值范围无限,则CSP问题无限,否则有限。
有效赋值:前k个赋值,使得前k个变量相关的约束条件都满足
完全赋值:k=n,n个变量都被赋值,所有约束条件都满足
CSP问题的特点:可交换性,即变量赋值的次序和完全赋值的可达性无关,因此有如下的便利:
- 扩展节点时可以任选一个未赋值的变量
- 不需要存储路径,因此可以用回溯算法
改进:
- 前向检验,提前检测出冲突。以8皇后为例,一旦赋值了某个变量,那么按照约束也就可以把其他变量的某些取值从值域中去掉。
- 启发式地选择下一个赋值的变量
- 启发式函数一:选择残留值域最小的变量
- 启发式函数二:选择被约束最多的变量
- 启发式函数三:赋值后对其他未赋值的变量影响最小(删除值最少)的变量
- 以上三个启发式函数先使用启发式函数一选择变量,若有多个可选变量,再用启发式函数二选变 量,若还有多个变量可选,采用随机选择策略;在给变量赋值时,按照启发式函数三赋值
- 给残存的值域排序,对不同的
做前向检验 - 约束传播
Chp8 机器学习
定义:寻找
建模过程分为两步:选择模型和训练
评价
准确性:即h与f之间的差异。绝对误差,平方误差,计数误差
复杂性:h 的描述长度是多少
完备性:h 是否对 f 的每个输入都定义了一个响应
Chp9 线性回归
用简单的线性函数
在向量
表达式变为
损失函数:
- 绝对损失
- 平方损失
- 计数损失
最小化损失函数:
- 平方损失函数——近似寻找均值,综合所有样本影响
- 绝对损失函数——近似寻找中值,抵抗离群点的影响
平方损失衡量
梯度下降法->随机梯度下降
Chp10 线性分类
几何意义:找到一个超平面,将不同类的数据点在特征空间中分开。
符号函数sign
间隔:平面外点P到平面的距离的
间隔为负表示分类错误,越小表示错得越厉害。
基于间隔定义损失函数:
符号函数
软判决,使用logistic损失函数
关键部分梯度变为非0,hinge损失函数
SVM
线性SVM
每个样本都有一个约束条件,N个约束的二次凸优化问题。
拉格朗日乘子法,将有约束优化问题转化为无约束优化问题
因为SVM的主优化问题是凸优化问题,满足强对偶性,于是对偶问题与原问题等价。
转化为无约束优化问题的对偶问题后,分别对
所有满足
支持向量的
求解
可以使用SMO(Sequential Minimal Optimization)算法
Chp11 非线性处理
线性不可分的数据
非线性SVM
- 软间隔SVM,引入松弛变量
- 引入核函数,映射到高维空间,使线性可分
KNN
训练样本数目越多,分类精度越高
训练就是将所有样本存储。预测时计算新数据的K个最近(训练样本中的)邻居,以K个邻居占多数的类标号作为新数据类标号。
过拟合: 训练误差小而测试风险大
泛化能力:给定训练集误差,在测试集上降低误差的能力
正则化
决策树
树形结构,每个节点是一个简单的线性决策器,任意一层的所有节点的训练数据互不相交且并集为完整训练集。叶结点不包括任何数据,表示类标标签。
决策树的训练/构造:
- 初始时刻构建树根,拥有所有训练数据
- 对每个节点,选择数据的某属性来分裂剩余数据集
- 当某节点的所有训练数据都属于同一类时,划分结束,生成叶节点
- 如何选择分割的属性
信息熵,信息增益,信息增益比,Gini指数
- 使用信息增益大的属性来分类->ID3算法
- 使用信息增益比最大的属性来分类->C4.5算法
- CART算法
- 避免过拟合
- 先剪枝:提前停止构建决策树,设置信息增益的阈值。
- 后剪枝:生成决策树后再去掉某些分支(做法是训练时保留一部分作为剪枝集,用来把一个完全训练好的决策树剪枝)
连续值处理,缺失值处理,大型数据集
决策树的优点:简单,可解释性好;完备的;描述复杂性一般用节点数目来衡量
Chp12 神经网络
特征提取函数
作用:将输入变量空间映射到特征空间;实现某些非线性处理
设计特征提取函数的通用方法:
- 定义输入
的各个单项式构成的向量为特征 - 存在的问题:单项式的最高次数难以确定——高了过拟合,计算代价大;低了欠拟合,不能很好处理非线性
处理非线性:
都是值向量,它们做内积运算得到分数score是线性运算,非线性部分可以用非线性的特征提取函数来获得。
激活函数
对score做的非线性映射,常见的激活函数有Sigmoid/Tanh/ReLu
ReLu的优点:
- 稀疏激活性:激活少量的神经元
- 单侧抑制和相对宽阔的兴奋边界;降低梯度消失的影响
基本概念:
- 输入层/隐层/输出层/权值/单元/激活函数/训练样本/隐层输出/数据特征
反向传播更新权值——计算图的画法
深度学习
CNN、RNN、LSTM
神经网络的进展
Chp13 贝叶斯网络
约简:联合概率质量函数=网络结构+若干边缘分布+若干条件概率质量函数
网络结构写出联合概率质量函数的乘积表达式
条件独立性:1.同父结构;2.V型结构;3.顺序结构
两类特殊的贝叶斯网络:
朴素贝叶斯模型
除了最终的结果(类标签
隐马尔可夫模型
确定网络结构的方法:
- 专家建模
- 从数据集中自动学习
- 利用卡方/互信息等做相关性测试。
- 基于搜索-评分的方法
- 二者结果
求概率质量函数
描述:给定数据集和网络结构,求各边缘/条件概率质量函数/表
方法:利用蒙特卡洛逼近,将数据集视为“粒子”集,然后计算网络结构需要的各种边缘/条件概率质量函数/表
条件概率函数中出现大量0:采用拉普拉斯平滑解决,即统计每个值的出现次数时,将计数器的初始设为非0,一般初始值都设为1.
EM算法
Expection-maximum
估计隐变量
将隐变量
- E-step
对 的所有可能取值 ,计算PMF: ,选择能够使得 最大的 来更新 (——极大似然估计) - M-step
利用上一步E-step得到的 来更新PMF
两部分循环迭代直到收敛
例子:k-means聚类,贝叶斯网络推理
编码实现概率推理
例题13
Chp14 马尔可夫决策过程MDP
进一步理解:经典搜索问题是MDP在概率只能取值为0或1时的特例
MDP的解
- MDP的解被称为“策略”,映射表
- 通常会造成许多从初态到终态的随机路径
- 路径数目是状态数目的指数函数
如何评价MDP的解:策略评估
- 行动收益
- 路径收益
- 策略收益
如何计算策略收益:
- 枚举:枚举每个随机路径并计算收益和概率并加权求和。时空要求大,无法解决无限长路径问题
- 递推:找到递推公式后解之
通用的递推公式:- 初始化所有状态的策略价值
- Repeat:
对每个状态 ,利用递推方程循环更新,当相邻两次对 的更新足够小时停止。
- 初始化所有状态的策略价值
仅仅需要存储最近一次的
时间代价:O( 状态数目 × 循环次数 × 后继状态数目)
策略空间大小:
找到最优策略
引入Q-value
Q-value:
和
策略改进算法:输入策略
- 对任意状态
,执行下述操作- 对不同的行动
,计算 ; - 更新
- 对不同的行动
类似爬山法,把状态s所有可能行动都尝试一遍。
结合策略评估和策略改进,我们得到值迭代算法来计算最优策略:
- 对所有状态
初始化 :- 对每个状态
,执行:
- 对每个状态
折扣因子:在计算路径收益时,对未经历的路径的收益乘一个折扣因子
那么递推方程改为:
Chp15 强化学习
通常现实应用中我们并不知道状态转移概率和奖励的细节。
强化学习算法框架
- for t=1,2,...
- 选择行动
- 收集反馈奖励
,获得新状态 - 更新参数
- 选择行动
已知:
求:
蒙特卡洛方法:
这类方法被称为基于模型的蒙特卡洛算法。它们对数据量要求大,还要求样本数据满足独立性假设。
模型无关的方法
不去揣摩状态转移函数和奖励,直接评估策略。
定义
定义引入折扣因子的时刻
然后用
算法描述:
- 对任意时刻
,对应数据段 :- 计算
- 令:
=1/(更新次数+1) - 更新:
- 计算
Chp16 博弈和对抗性搜索
博弈的基本要素:参与者,策略集,收益
静态博弈
- 完美信息:每个参与者对博弈信息完美了解
- 静态博弈:所有参与者同时选择策略并行动
- 理性:所有人都追求自己利益最大化
- 独立:参与者之间不协商
- 占优策略:对其他参与者的所有策略组合而言的最佳应对(可以取等号即可能有多个策略达到最佳,不取等号时仅有一个策略到达最佳,称严格占优策略)
- 纳什均衡:参与者们选择的策略互相为最佳应对
博弈问题的求解可以如下(对于两名理性参与者):
- 若两人都有严格占优策略,那么两人均会采取该策略
- 若只有一人有严格占优策略,那么此人采用该策略,另一人采用此策略的最佳应对
- 两人都没有严格占优策略,寻找纳什均衡
若无纳什均衡,比如下面的情况:
零和博弈:参与者收益之和为零,即若有参与者收益增加,那么一定有其他参与者收益减少。
此时引入混合策略:预测对方采用策略的概率并据此确定自己策略,同时避免让对方了解自己采用不同策略的概率
动态博弈
参与者行动不是同时的(例如下棋)
MDP可以看作是完美信息下的动态博弈:每个参与者知道所有公共信息,将对手视为MDP建模中无法观察和了解的位置因素。
下棋(非完美信息下动态博弈)可以看作是强化学习: 不知道转移概率和每一步的奖励,需要逐步了解和学习。
博弈树
- 博弈树的构造
- 最小最大值算法
剪枝
- 蒙特卡洛树搜索
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库