人工智能基础——全局搜索方法

引言

这是最优化的内容,我们用状态(包含很多参数)描述一个对象。把这些参数作为坐标轴就会获得一个超空间(函数定义域)。超空间里的点分别对应了某个函数值,我们在空间里找函数的最大值。
后面会介绍各种算法,但是核心是找上一节课的h(n)——一个描述状态分数的函数。

局部搜索算法

所谓局部就是只关心状态,不关心路径,从一个点到其他点。

爬山法

类似梯度下降思想,只不过形式上反过来。就是找参数在状态空间临近区域的最优解。相信大家都会。请添加图片描述
显然有很多时候无法找到全局最优解。
比如到了一个平坦的区域,往哪个方向最大值都不会变化,这时候可以有随机爬山法,比如说随机选择后继直到上升。
但这样也不行,可能会被困在局部最优解。可以采用这样一种方式,随机生成一个初始点,爬山法找到解的概率为p,那么重复进行1/p次爬山法,基本可以找到最优解。也就是反复随机生成初始点进行爬山。

模拟退火

给一个初始点,在他周围随机找点,如果比他更优则更新到这个点,否则以概率p接收这个点,每次接受“更差”的点时,p的值以指数下降。
我这里记录一下我对这个算法的理解

如果使温度(接收概率)下降够慢,找到全局最优解的概率趋于1

我们考虑特殊情况,如果我的温度不下降,始终以百分之五十的概率接收,也就是存粹的随机算法,那么在时间趋于无穷时,一定会找到全局最优解。但是事实上我们并没有无限次尝试的机会,我们必须让结果收敛,这种操作会使得找到全局最优解的可能性降低,但是性能大大提高。
时间和精准程度处在一种矛盾的平衡当中,将这个概率从1降低到0.999,但是却可以使得时间消耗从无限变为有限。模拟退火可以说是完全随机的一种妥协。

局部束搜索

随机选择k个点,搜索所有k个点生成的状态,取最好的k个,重复此过程。这和遗传算法有点像,但是没有k个点之间的交叉,所以是无性繁殖。
局部束算法也存在爬山法局部最优的问题,很容易所有点都聚集到某个区域附近。而随机束算法则是为了解决这个问题,不再是选择最好的k个后继,而是随机选k个更好的后继。

遗传算法

随机生成k个状态,给状态编码,然后用某种算法(最简单交换一部分),然后会得到很多新的状态作为“孩子”,从这些“孩子”中选k个最好的,重复过程。
说得简单,具体比较复杂,但是思想比较容易理解。

连续空间中的局部搜索

连续空间的搜索难度在于每种状态接下来的分支是无限的。基本的思想还是梯度法,但是由于自变量多,方程的梯度=0无法求出封闭式解(就是列的方程没有通解,每次都要经过数值推理),但是可以使用局部梯度(对某个参数求导),然后沿着这个方向爬。
也有更快的爬法,这些可以去看最优化算法,什么牛顿法、共轭梯度法、拟牛顿法啥的,有空再整理一下。

使用不确定动作搜索

在同样的条件下,一个状态可能转移为多个状态。那么整个过程不再是一棵树,而是一个序列。
就像你开车,大路短但可能堵车,小路长但是比较通畅。你的决策产生的结果还依赖于你不可观测的外在条件。这种时候你的策略也被叫做应急策略。

通常来说,我们想要找的是一个稳定可以达到目标的解,我们最终的解应该是一棵树,无论在树的分叉路口如何走,最终都会到达满足的状态点。

还是普通的搜索,只不过一个需要抉择的节点,需要在所有子树中都找到解,这个点才能在最后的解答中。

由于搜索过程中会出现循环,你可以把它理解成一棵无限生长的树(或者一张有环图)。在搜索树的过程中把状态hash,如果遇到相同的状态就是遇到循环,也不需要再继续搜索了。

使用部分可观察信息搜索

  • 先是无观察信息搜索
    即便我根本不知道自己身处什么状态,也可以找出最好的决策。
    来波很不恰当的但是我相信很能说明问题的例子。你肚子疼,你应该去做身体检查,然后确定自己吃什么药。但是你怕检查完你直接痛死了,于是你吃了所有治疗肚子疼的药,然后你也不知道,总之有一个药让你肚子不疼了。
    这个例子当然是在胡说八道,但是却告诉我们,即便我们根本不知道处在什么状态,也可能做出走到目标点的决策。
    比如说状态(1,1,0)代表得了病1、2,没有病3,那么所有状态一共有8种,但是通过吃所有药都可以变为(0,0,0)的状态。

求解方法比较魔幻,因为状态太多了。可以先求解满足一个状态的路径,然后一个个看这些路是不是满足其他状态;也可以把这些状态统一打包编码不管内部情况;或者使用巧妙的动态状态描述,比如说一个药吃了能治疗某四种病,不用(0,0,0,0)表述,而是直接打包成一种某类病0。

  • 然后是可观察搜索/部分观察
    我慢慢觉得没啥好写的,无非是状态定义和转移的问题,我越来越觉得这本书只可意会不可言传。

联机搜索问题

失去上帝视角,走一步看一步。我(智能体)出生在了一个迷宫中,我现在要出去,我只有前后左右四个方向可以走,和一个标志和我位置的传感器,但我不知道迷宫长什么样子。
还是一棵树,但是只有到了某个节点才能看到之后的节点,那显然就是一个一直回朔的过程。最差情况每个点要走两次(dfs)

  • 随机行走算法
    爬山法,这回是真爬山,爬到了一个小坡上面(局部最优)。按之前的再随机一个出生点再爬,但是不行,因为这是真爬山。那我就随便走走,往右走走虽然变低了但是却可以看到一座可能更高的山(启发式函数h(n)这里我当作目测山高),那我就会往那里走。

总结

我发现这门课越来越玄学,真的全靠感受。给的都只是思想,细节实现要靠自己,也要根据实际问题。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值