人工智能提纲式汇总+简要分析 可用于复习《人工智能——一种现代的方法》
作者:互联网
文章目录
- 人工智能
人工智能
第一章 什么是AI
- 像人一样思考
- 像人一样行动
- 合理的思考
- 合理的行动
两种AI
- turing test:人类能否识别一个机器的回答来自人类还是机器
- 理性 Ratinally:对每一个可能的感知序列.根据已知的感知序列提供的证据和Agent具有的先验知识,agent要选择使其measure最大化的行动;并且理性的AI应该能够学会收集信息,并从这些信息中尽可能的学习,从而改变或者增加自己的先验知识,从而变得更加具有“主动性”
发展,历史等等暂略
第二章 智能Agent
一个Agent通过传感器(sensor)感知周围的环境(environment),并且通过表现评估(performance)和行动器(actuator)做出反应:
agent的行为由agent的function决定,而agent的function则由program实现
PEAS:指的是以上几个单词的缩写
理性AI的任务环境的规范描述
(所谓rationally指的是使得performance measure最大)
任务环境的分类:
- 完全可观察的和部分可观察的:值得是环境的完整状态是否能够被获取
- 单Agent和多Agent(例如玩字谜游戏的Agent是单的,而国际象棋的Agent是多的:他必须考虑最小化对方的measure)
- 确定的和随机的:下一个状态是否完全被当前的状态和行动所决定
- 片段的和连续的:在片段式里一个片段不会影响下一个片段(即可以被切分成独立的小的片段)
- 静态的和动态的:如果环境会变化则是动态的,如果环境不变但是评价会变则是半动态的
- 离散的和连续的:国际象棋和出租车司机
- 已知的和未知的:指的是环境的“物理规则”或者说是某个环境的函数
Agent的represent:
-
Simple reflex Agent:if-else型AI,难以穷举所有的case,并且不能利用历史信息去学习
-
Model based型: 去表示环境,可以使用历史的信息
-
基于目标的Agent:附加目标为考量的因素,其目标函数是一个二值函数,即好或者不好
-
基于效用的utility-based Agent,他的目标函数不是二值函数,而是连续的效用函数
-
学习Agent:通过不断的和外界环境进行交互提升自己的性能
- 其中性能元件就是接受外部信息并且做出决策的元件,学习元件利用评判元件的反馈修改性能元件从而让其做的更好.最后一个问题产生器鼓励性能产生器做一些次优的决定从而达到全局的最优性.
第三章 通过搜索进行问题求解
我们可以把一个问题分为六个部分来看待:
- State:可能达到的状态
- initial state:问题的初始的状态
- action:在不同状态之间可以做出的行为
- transition model:每个行为会导致的结果的描述 RESULT(state,action)
- goal test:判断一个给定的状态是不是一个goal state(是不是完成了任务)
- path cost:每个path的cost
那么,假如我们能够搜索到所有的可能路径,是不是就可以直接得到“最优解”了呢?但是,事实上我们很多时候并不能搜索到所有的情况(搜索量太大等等),即搜索空间过大,这也是为什么我们需要学习一些naive的搜索方法。
Performance Metrics knwn as PF metrics
- completeness:是否总能找到一个解如果存在的话
- Optimality:是否总能找到最优解
- Time complexity
- space complexity
1.搜索树
什么是搜索树,实际上就是把搜索的过程用一颗树的形式表示出来,树上的一个branch就是搜索问题里的一个path
搜索树的空间和时间复杂度主要由:b 每个节点最大子节点数,d 最小花费解的深度,m 任意path的最大长度 确定。
BFS 宽度优先搜索
维护一个先进先出FIFO的队列,每次都去优先获取最浅的所有节点
最优性?否,最浅的节点并不一定是最优的节点,除非是相对深度的非递减树
完备性?如果b有限,总能找到一个解
时间复杂度:
空间复杂度:O(b(d+1))
UCS 一致代价搜索
维护一个按照path cost从低到高排序的队列,每次优先搜索更低cost的path,举个例子:
如果cost非负的话,可以找到最优解
如果每一步的cost都大于一个正整数e,那么可以找到解
时间和空间复杂度:引入C*表示最优解的总cost,那么复杂度是
,这比BFS的复杂度大得多
DFS 深度优先算法
维护一个后进先出LIFO的stack
PFmetrics:
完备性?不一定能找到一个解,就算d是有限的,如果树的深度无限会有可能陷入无限的循环
最优性?找到的目标点就会返回,这个解并不一定是最优的
时间O(bm)
空间O(bd) 只需要记录从根节点到当前节点路径上的所有节点以及路径上尚未扩展的节点即可,甚至可以优化到O(d)
DLS 深度受限搜索
通过限制搜索深度,解决DFS陷入无限的死循环的尴尬局面,但是更尴尬的是这使算法陷入了另一个局面:无论是算法的完备性,还是最优性都完全不能得到保证,应该最优解可能在更深的深度
IDS 迭代加深的深度优先搜索
用这种方式会经过很多次搜索,首先,限制搜索深度为d,当搜索完所有节点之后若没有发现最优解,就让d=d+1继续进行下一次搜索,直到获得最优解
完备性?是的,只要b不是无穷的
最优性?是的,只要path cost不会随着深度增加而减少
空间复杂度:O(bd)
时间复杂度:O(bd)
BSM 双向搜索
用一颗前向树和一颗后向树代替整颗树,一颗从起点展开,一颗从终点展开,当两颗树相交的时候,就是得到答案的时候
完备性?同时使用BFS树的时候是的。
最优性?不一定是最优解,除非每个路径有着uniform cost
复杂度,都是O(bd/2)
不是全部都适用这种方法,比如如果“目标”不明朗或者有非常多,或者某些不可逆的搜索情况等等
两种状态重复的情况
考虑拥有重复state的树如下
caseA和caseB对应这两种不同的重复情况,其中caseA会形成一个闭合的环,而B不会
caseA
这将是一个无限循环的环路,因此带有环的branch不会成为最优解,所以可以删除,因此当遇到一个和其祖先节点有着相同state的节点,我们将不会对这个节点做expend
caseB
当使用BFS的时候,右边的B节点会被先访问,因此我们在使用BFS遇到某个已经被访问过的状态的时候,我们就不再去expend这个节点。
当不是BFS的时候,左边的节点有可能先被访问到,这是侯在访问右边的节点的时候,我们就要判断这两条path哪一个cost更小了,如果右边的节点更小,我们才会继续expend这个节点。
总结
2.启发搜索
区别:普通的搜索没有domain knowlege(问题本身定义之外的知识,例如黑白棋AI中,不同棋盘位置的点有着不同的重要性),而启发式搜索有。
我们使用启发函数h(n)作为我们的cost去寻找最小的花费的路径,h(n)表示从节点n到目标节点的最小花费估计值。
- 如果n就是goal node,则h(n)=0
- h(n)非负
贪婪最佳优先搜索
在这个算法中,我们只使用启发信息,因此算法的评估函数f(n)=h(n)
完备性:否,可能会陷入死循环,哪怕节点有限
最优性:否,会陷入局部最优而不是全局最优
时间和空间复杂度: O(bm)好的启发函数可以有效降低复杂度(m是最大可能的深度)
A*搜索
不仅考虑了启发函数h(n),还考虑了g(n)即从开始节点到达此节点已经花费的代价
f(n)=g(n)+h(n)
完备性:是
最优性:需要启发函数满足admissible可采纳性(意思是f(n)不会超过这个解的实际代价,h(n)≤cost(n,goal)),和一致性(h(n)≤cost(n,n的邻居)+h(n的邻居)),其中满足一致性一定满足可采纳性。
如果启发函数是可采纳的,A*的树搜索是最优的,如果是一致的,那么图搜索也是最优的
proof:
时间和空间:O(bd)
其中,越大的启发函数效果越好,(越接近真实情况)。
3.深入探讨启发函数
对于可采纳的启发函数h1和h2,如果h1≥h2我们就说h1是一个更有效的启发函数
有效分枝因子
使用A星算法,从树的根节点到找到最优解的过程中,我们有以下函数:
其中b星就是我们所说的有效分枝因子,意思是平均意义下,一个节点的几个分支被使用了,其大小越接近1越好。
使用relaxed problem松弛问题来构建启发函数
提出一个观点:任意文图的松弛问题的最优解将会是原问题的启发函数
可能有一点点难以理解,做出说明:松弛问题指的是放宽限制,例如经典的八数码问题,如果我们把数字的移动改成可以任意一个位置移动到另一个位置,这个新的问题的确切最优解就可以当作启发函数用到原问题中去,因为放宽了限制之后,相当于给原问题引入了新的边,因为这个解是新问题的最优解,所以他一定满足一致性。
使用子问题构建启发函数
再次考虑八数码问题,如果把12345678都排好序这样的原问题改成只排序1234,这就是子问题。(即子问题的cost一定小于原问题),h(1234)就是子问题1234的开销。
如果我们简单的把只移动1,2,3,4和只移动5,6,7,8的启发函数相加,能不能得到原问题的可采纳启发函数呢?
不能,但是如果我们在子问题中,忽略其他棋子的移动,再把他们相加,得到的就是原问题的一个可采纳启发函数。
使用经验构建启发函数
假如我们对随机的10000种八数码棋局进行分析,算出他们的最优解,然后我们人为设定一些特征,例如特征x:不在位的棋子数,然后我们计算在这种特征下的平均最优解消耗,我们可以用加权的方式组合多种最优解:
但是我们不保证可采纳性或是一致性。
第三章 超越经典搜索
什么是超越经典?不再使用树来表示搜索过程,而是用其他的方式去表示.
一般搜索算法
通过这样的过程,不断的优化解决方案.
爬山法
是一种贪婪思想的算法,即找到当前状态下向着最优解前进最快的方向前进(以最快的方式上山).
缺点是容易陷入局部最优(不是最高的山顶),或者遇到困境(平原,没有出路,所有出路都一样).
模拟退火 simulated annealing
如果当前前进的方向,能够让解变好,则让他随着这个方向移动,如果当前行进的方向不能的话,则依概率向这个方向前进,而概率的大小取决于这个解有多好,以及T的大小.T会随着时间逐渐下降,而p也随着T的下降而降低.
局部束搜索 local beam search
维持k个状态而不是一个状态.
初识时,随机产生k个状态,然后选择k个最好的可选的后继状态去expend这些状态,k个并行的搜索会彼此交流,会把资源集中在发展的好的状态中,一旦有一个状态找到了最优解,则停止算法.
但是为了避免这些状态缺乏多样性,集中在一小个范围里,可以随机选取k个状态而不是选最好的k个节点.
进化算法 EA
举个简单的例子:
第四章 对抗搜索
不止一个agent,而是多个agent进行对抗的搜索算法,例如围棋AI.
游戏的定义:
- S0:游戏的初始状态
- PLAYER:轮到哪一方进行行动
- ACTIONS:一系列合法的移动
- RESULT:定义一个移动的结果
- TERMINAl-TEST:游戏是否结束
- UTILITY:效用(utility)函数,或目标函数或者收益函数,定义游戏者p在终止状态s下的数值.例如胜利可以是1,输可以是0,平可以是1/2.
博弈树 TIC TAC TOE Search Tree
1.博弈中的优化策略
Minimax算法
即每次假设对方下的棋会让自己的得分(UTILITY)变低
其中最后一层上的数字表示的是在终止状态下的效用函数的值,而中间节点的值则表示的是极大极小值,每一层的极大极小值都由下一层的节点的值决定.
2.Alpha-Beta Pruning
在算法中维护两个变量a,b分别记录当前节点往下的所有路径中,MAX节点做出的最优选择,和MIN节点做出的最优选择.
如果当钱某个节点的值比目前的MAX的a或者MIN的b值,更差的时候,则裁剪掉当前节点的其他分支.
alpha-bate pruning不会影响到最终结果,但是时间复杂度还是不低(O(m/2))
3.不完美的实时决策
因为有些时候,我们并不能搜索完整张博弈树,所以我们只能够用一个启发估计函数EVAL代替效用函数,这里的启发评估函数,返回的是对游戏期望效用值的估计.
第五章 约束满足问题
需要定义一个包含多个变量的state,和目标约束
变量的排序顺序不会影响输出结果
1.约束
- 节点约束,某个节点需要满足的约束
- Arc弧约束,某个变量需要满足所有的二元相容
- 路径相容,对于变量x1,x2每一对相容的赋值,x3都有合适的取值使得x1,x3和x3,x2这两对是相容的
- k-相容,对于k-1个相容的赋值,总存在第k个变量满足和前k-1个变量相容的赋值
- 全局约束:设计任意个约束变量的约束
2.回溯搜索
略 看题
3.局部搜索
将CSP重构成为一个约束优化问题,对于这个问题,我们有一个不满足约束有冲突的起始状态,我们的目标函数是经可能最小化约束违反.
任意选择一个有冲突的变量,对他进行某种操作,使得未来的冲突尽可能的小
第六章 逻辑Agent
1.基于知识的Agent
首先需要一个核心部件:知识库,这是一个语句的集合
Agent 可以TELL知识库自己感知到的内容,也可以ASK知识库自己该干什么.
简而言之,就是Agent将自己感受到的,学习到的知识储存起来,维护一个知识库
2.命题逻辑
先来了解几个定义
- 蕴含(entailment):某语句在逻辑上紧跟着另一个语句,比如说a蕴含b,那么当且仅当在每个使a为ture的模型中,b也是ture的.
- 我们说m是语句a的模型,如果a在m中是ture的
- M(a)是a的所有模型
- a能从KB中通过算法i导出
几种语法:
几种语义: 这里简单说明语义是用来判断特定模型中语句真值的规则
3.推理和可满足性(Satisfiability)问题
-
逻辑等价:两个语句是等价的如果他们在同样的模型集合中为真
-
有效性:一个语句是有效的如果他在所有模型中都为真
-
演绎定理(deduction theorem):KB蕴含a当且仅当KB可以推出a是有效的.
-
可满足性(satisfiable):如果一个语句在某些模型为真
-
不可满足性(unsatisfiable):如果在所有模型都为假
我们的目的是要证明某些问题是可满足的,当然这是历史上第一个被证明为NP完全的问题
我们想要知道某个语句是否被蕴含在KB中,通过枚举KB中的每一条语句的情况去推理固然简单,但是复杂度是很高的,因为每个变量有ture和false两种状态,固共有O(2n的复杂度)
CNF
归结规则只应用于子句(析取式),因此我们要把每个语句改写成子句的合取式.(即CNF)
过程如下:
- 消去等价词
- 消去蕴含词
- 否定词只能出现在文字而非括号或其他符号的前面
- 对嵌套的析取和合取符号进行分配
一个回溯算法 DPLL
和之前的回溯算法比较相似,但是加入了一些功能:
- 及早终止:如果一个子句中的任意文字为真则该子句为真,如果一个子句为假,则原语句为假
- 纯符号:如果某个文字在整个语句中,只存在正文字或负文字,则称之为纯符号,我们只需要对纯符号进行一次赋值,就能删掉所有包含纯符号的子句
- 单元子句:如果一个子句只包含一个文字,或者除了这个文字其他的问题都是false,则这个子句是单元子句
第七章 一阶逻辑
1.定义
比命题逻辑表达能力更强的逻辑.
我们考虑对象和关系:对象可以是任意的物体,关系则是对象之间的关系,有一些关系可能是函数:一个输入对应一个输出
2.创建一个知识库
- 确定任务
- 搜集相关知识
- 确定词汇表
- 对领域通用知识编码
- 对特定问题实例编码
- 把查询提交给推理过程并且获得答案
- 知识库调试
3.命题推理
退化到命题推理
略略略
第八章 规划
规划就是决定一系列的行动(解决办法)让agent去完成一个目标.规划的目标更多的在于一个目标被达到的过程和方法.
PDDL
动作模式 action schema
一组由动作,前提,效果组成的.前提和效果都是动作的合取
状态空间搜索规划算法
前向状态空间搜素
第九章 不确定性量化
Agent的环境可能是部分可观察或不确定的,agent需要处理不确定性.
- 给每个状态/动作一个效用
- 给每个状态一个不确定性
- 最大化期望效用
- 给每个状态用概率来表示
标签:提纲,函数,人工智能,Agent,搜索,最优,节点,启发,复习 来源: https://blog.csdn.net/qq_43210583/article/details/115191982