此外,还有其它的一些搜索算法,如SSS*[4]、B*[5]、Probcut[6],这些算法和我们讨论的算法多少有些不同(或在局面的评价上、或在剪枝上、或在搜索的次序上),在这里就不再论述,有兴趣的读者可以自行参阅文献,进行研究。
4. 电脑棋手的学习
机器学习技术的发展为电脑下棋水平的提高带来了新的希望。各种各样的学习技术都被试图应用于博弈的某一个部分。文献[7]综述了机器学习在计算机象棋对弈中的应用。
在此,我将展示一个典型的方案:对形势判断函数进行学习。
4.1 监督学习
回顾一下第2部分中的内容,一个一般的形势判断函数(或称估价函数)具有如下的形式:
| f(G)=W1*X1+W2*X2+...+WiXi=S(i=0 to n)WiXi
|
其中,xi表示局面的某一个因素(或特征),而wi是这个特征在形势判断中所起的重要程度(即相应的分值),通常被称为权重。如果当这个因素是子力时,在中国象棋或国际象棋中,还是比较容易给出一个相对准确的值,而当这个因素是某些局面性的优势时,如何准确地估价这些优势,可能令有经验的大师都会感到烦恼。
虽然大师们很难对于一个孤立的局面因素给出具有普遍性的估计,例如在中国象棋中,一个处于巡河位置的车具有多大的分值,但对于一些特定的局面,大师们还是可以较为准确地给出综合评价。这为学习形势判断函数提供了可能。
一个很简单的方法就是找出许多局面,然后请大师为每一个局面作出自己的形势判断。然后把大师们给出的形势判断作为标准答案,训练形势判断函数。这种学习方式被称为监督学习(或称有师学习),因为这种学习就如在老师的监督指导下进行。
例如现在有k个局面G1, G2, …, Gk。第j个局面Gj的n个特征用X1j,X2j,...,Xnj表示。对这k个局面,大师给出的形势判断为h1, h2, …, hk。现在的任务是找出合适的权重w1, w2, …, wn,使得以下的方程组尽可能地得到满足:
| j=1 W1X1j+W2X2j+...+WnXnj=h1
| j=2 W1X1j+W2X2j+...+WnXnj=h2
| j= ... M
| j=k W1X1j+W2X2j+...+WnXnj=hk
注意,之所以说是尽可能得到满足,是因为以上关于w1, w2, …, wn的方程组不一定有解,我们所希望的是实际形势判断结果f1, f2, …, fk与大师给出的结果h1, h2, …, hk尽可能接近。
当形势判断函数非常复杂时,这个问题实际上是一个优化问题。解决这个问题的通用方法是梯度下降法(有兴趣的读者可以参阅有关最优化的书籍)。由于现在的形势判断函数非常简单,也可以应用许多其它方法(如最小二乘)。下面仅仅给出梯度下降方法在这个简单的实际问题上的应用。
首先对所有的权重w1, w2, …, wn赋以随机的数值。然后反复进行以下的迭代:在时刻t,对局面G1, G2, …, Gk计算形势判断结果f1, f2, …, fk,依照下式得到下一时刻(即t +1时刻)的权重为
| wi(t+1)=wi(t)+H*S(j=1 to k)(hj-fj)*xij
以上对权重的更新过程反复进行,直到形势判断的结果不能再改善为止。式子中的H被称为学习速率,当取值较大时,学习速度较快(即需要迭代的次数变少),但学习的精度较低(准确地说,在最后阶段会产生振荡),当取值较小时精度提高,但学习速度变慢。
如果哪位读者对人工神经网络有一定的了解,也可以将以上的过程看作是一个连续型感知器的学习过程。
4.2 强化学习
监督学习并不是一个令人满意的学习方法(虽然在某些情况下是不可替代的)。毕竟,当这样的“老师”也是很累的,很难想像去请一个大师对数百个甚至数千个局面给出自己的形势判断。
强化学习是监督学习的一个特例。这时,“老师”不再每次都给出准确的答案,他(她、它)只是对电脑的计算结果给出一个好或不好的评价,或者是告诉电脑究竟好到何种程度,作为一个带有模糊性的判断。在下棋中,这种“老师”是随处可得的。电脑棋手和每一个对手的对局都有可能成为这种“老师”,对局的胜负就可以看作是“老师”对电脑棋手的评价。当然,如何有效地利用这种评价是学习技术的关键。
以中国象棋或国际象棋为例,在一局棋的进行过程中,一个形势判断函数的结果往往时好时差。这是因为在形势判断函数中的权重w1, w2, …, wn中,有些比较准确(比如子力因素的权重),而其它的一些并不准确(如一些表示局面优势因素的权重)。在棋局的进行中,经常出现的状况是一方首先取得了局面优势,随后转化成了子力的优势,最后取胜,或者更一般地说,一方首先取得了一些潜在的优势,随后将这些潜在的优势转化为实在的优势。一般地说,电脑棋手对潜在的优势往往不能给出准确的判断,而对较为实在的优势(例如子力优势或者直接构成的杀局)则判断正确。于是我们可以得到一个基本准确的结论,电脑棋手在其对局的后期(更特殊的状况是对局结束的时刻),得到的形势判断往往是比较正确的。同时,我们可以设想,在对局的前面的一些时刻,正确的形势判断应该和对局后期的形势判断较为接近。如果计算机能够有效地参考对局后期正确的形势判断,就有可能自行给出对局前期的一些局面的相对准确的形势判断,作为在前一节所提到的监督训练中的标准答案h1, h2, …, hk。
TD( )就是一个实用的强化学习技术。TD(Temporal Difference)即瞬时差异,就是指在一个对局中相邻两个时刻的局面的形势判断之差。如果这个形势判断函数比较准确,则这个差(即瞬时差异)应该接近于0。假设G1, G2, …, Gk, Gk+1是在一个对局中,从某一时刻到对局结束的连续的k+1个局面。这时根据前面的假设,在对局结束时的形势判断是准确的,即对于第k+1个局面,形势判断的标准答案hk+1=f(Gk+1)。现在我们利用这个值来形成前k个局面的形势判断标准答案:从对局结束开始,向前一步步倒退,在每一个时刻,其形势判断标准答案为
|.......h =(1-y)f(G )+y*k
|........i i+1 i+1
从这个式子中可以看到,当y=0时,第i个局面的形势判断标准答案应该接近于在此之后的局面的形势判断;当y=1时,所有局面的形势判断标准答案都接近于hk+1,即对局结束时刻的形势判断。于是,当y取介于0和1之间的某一个数值时,形势判断的标准答案将成为以上两者的折中。经过了学习之后的形势判断函数将在对局中的一系列连续的局面中,相邻局面的判断结果相似,并逐渐逼近终局时的结果。
TD( )被应用于多个计算机博弈程序之中。在文献[8]中,一个应用了该技术(稍作了一些改变,有兴趣的读者请自行查阅文献)的国际象棋程序在国际互联网上进行了300多局对局后,其等级分从1650分(一般水平)上涨到了2110分(美国大师水平)。
5. 智能与否
当深蓝首次在对局中战胜卡斯帕罗夫的时候(1996年的对抗赛中),当时的国际象棋世界冠军(我姑且这么称呼他,虽然这个称呼的合法性早在卡斯帕罗夫和国际棋联决裂时就遭到了怀疑)曾经在《时代》杂志上说:“我可以感受、可以嗅察到来自棋盘对面的一种新的智能。”
他的话中阐述了两个观点。首先,不论哲学家们如何看待这个问题,至少在卡斯帕罗夫看来,深蓝具有智能。在此,我将一如既往地回避这个哲学性质的讨论,而将精力集中到他的第二个观点——这是一种新的智能,即不同于人的智能。
3# lzxgz