AlphaGo实现论文阅读笔记一

根据作者的理解:

所有的游戏,如果存在函数,可以对当前的局势进行评估,并给出一个优解(可能是一个最优解或者多个最优解)

那么这样的游戏就可以通过一个树,来找到当前局面的下的最优下法路径。(可以递归的调用。首先估算当前的最优解,然后等待对手应对,接着再找一个最优解,如此循环,直到一方胜利)

只是这样的策略存在问题,对于围棋,这个树的规模在250的150次方,遍历并找到所有最优解基本是不可能的事情了。因此必须从树的广度(250)和深度(150)上面进行剪切,使得树缩小到一个合理的范围来。
深度的解决办法是在某个深度点上面将其子树用一个评估函数来模拟和估值。这需要通过机器学习来获取经验。所以必须有足够的经验,来支撑该函数的准确性。

广度的解决办法是采用蒙特卡洛树搜索算法。

蒙特卡洛方法有一个经典的应用,计算π。做一个箱子,在箱底画一个扇形(以箱子边长为半径),然后向里面投小豆子,记录豆子是否落在扇形内。只要豆子足够多,那么落在扇形内的豆子数比上总的豆子数的值正好为:π/4。

解决广度的方法就是类似这样。给定一个点,然后随机在该节点展开的树中进行遍历,然后计算胜负。多进行几次这样的评估,就可以估算出这个点的胜率,最后决定要不要走这一步,因为这样可以非常逼近这点的胜率。但是这样存在缺点:比如李世石第四局,下出了神手,导致计算机未能正确评估该点的胜率。(陷入了一个陷阱。如果李只有这一步才能胜利,导致对于促成该局面的落子胜率都被夸大了。)或者知道,但是没有好的应对办法。

点赞