電腦是如何下棋的

圍棋起源於中國,是最古老的棋類運動之一,我們常說的“琴棋書畫”中的“棋”就是指圍棋。喜歡下棋嗎?有沒有和計算機下過?現在,弈棋計算機的棋藝日益高強。讓我們通過分析以圍棋和國際象棋爲代表的弈棋計算機,對人工智能的研究有一個更爲深入的理解。

電腦是如何下棋的

  弈棋計算機

弈棋自古被視爲一種關乎智力的高級挑戰。和其他智力測試相比,弈棋具有直接對抗的特點,沒有什麼比在緊張的對局中看到對手一手精妙兇狠的棋招更 能讓人感覺到一種智力上的刺激和挑戰了。弈棋相比於其他牌類遊戲而言,隨機和不可控因素更小,因此對局雙方的決策能夠更直接地控制整個局面的走勢,這進一步增強了智力的對抗性。

毫不意外,在國際象棋更加流行的西方國家,人工智能領域自創建之初就在考慮如何製造一個會下國際象棋的機器。幾乎所有人工智能先驅,包括信息論 創始人香農、“人工智能”之父約翰·麥卡錫(John McCarthy)、計算機科學創始人圖靈,都曾嚴肅思考過製造國際象棋機器的問題。20世紀80年代初,貝爾實驗室的工程師們(其中包括著名操作系統 Unix的聯合創作者肯·湯姆森)開發出歷史上第一個具有人類大師級水平的國際象棋機器“Belle”。到80年代末,卡內基梅隆大學的許峯雄博士在 “Bella”的思路基礎上(將在後面詳細介紹)進一步改進,研製出了第一個特級大師水平的國際象棋機器,取名“深思”(源自《銀河系漫遊指南》中的超級 計算機)。隨後,許博士加入IBM研究院,在那裏和其他幾個團隊成員一起研製出了實力更強的弈棋機器“深藍”,並最終於1997年的一場歷史性的人機大戰 中以3.5:2.5的比分戰勝了人類國際象棋冠軍卡斯帕羅夫(卡斯帕羅夫不但是當時的人類冠軍,同時也是人類歷史上國際象棋等級分最高的職業選手)。

在圍棋更加流行的東方,圍棋大師的頭銜同樣是智力超羣的象徵。自從計算機在國際象棋上挑戰人類成功之後,所有人的目光就聚焦在了圍棋這項古老的 東方棋類運動上。然而對計算機來說,圍棋似乎是個比國際象棋更“難”的東西。1985年,企業家應昌期先生懸賞一百萬美金尋找能夠打敗人類職業棋手的計算 機,可時至30年後的今日仍然沒有一臺計算機能夠做到。20世紀90年代,以我國陳志行教授開發的“手談”程序以及著名開源軟件組織GNU開發的“GNU Go”程序爲代表的“計算機圍棋冠軍”們,棋力尚且不及人類的業餘初段。進入21世紀之後,研究者們開始探索一套被稱爲“蒙特卡洛樹搜索”的全新思路(將 在後面詳細介紹),並終於在2006年在9×9的“小棋盤”上率先產生突破。以法國的MoGo和CrazyStone爲代表的新一代圍棋程序在9路圍棋上 基本已經達到人類職業棋手的水平,甚至曾在公開場合戰勝過職業棋手周俊勳九段。另一方面,在真正的19路圍棋棋盤上,以日本的ZEN(天頂圍棋)和法國的 CrazyStone爲代表的一流圍棋程序沿着“蒙特卡洛方法”的思路不斷改進,在和人類頂尖職業棋手進行的一系列讓子棋比賽中屢有佳績,而近些年人類棋 手能“讓”計算機的子數也越來越少。最有趣的是在2013年,計算機程序CrazyStone在受讓四子的情況下戰勝被稱爲“人腦計算機”的日本棋手石田 芳夫九段,並被認爲已有業餘五~六段的水平。

截至目前,儘管計算機在公平的圍棋比賽中還不足以直接抗衡人類職業棋手,但相關的研究熱度卻很高,大家普遍對近期前景持較爲樂觀的態度。“深藍之父”許峯雄博士甚至在2007年10月的一期《IEEE Spectrum》雜誌上表示,相信10年內超級計算機將能挑戰世界冠軍級別的人類棋手。

  計算機下棋的思考模式

現在主流弈棋計算機的基本“思考模式”很簡單,就是對當前局面下的每一種合法走法所直接導致的局面進行評估,然後選擇“獲勝概率”最高的局面所 對應的那個走法。也就是說,“準確評估給定局面的勝率”是主流弈棋計算機的核心問題,同時也是主要難點所在。在進一步深入討論這一核心技術問題之前,我們 先在基本思考模式層面簡單比較一下計算機棋手與人類棋手的異同。

可以說,計算機的基本策略是所有“人類有可能採用”的.策略中最原始最簡單的一種。毫無疑問,人類的思考模式中必然也包含“局面評估”的部分,然而人類至少還同時擁有另一個重要的思考模式——戰略性思考,也就是把一個基本目標有效分解成一系列“子目標”。

以圍棋爲例,“獲勝”是圍棋的最終目的,而勝的定義是“結束比賽時擁有更多棋子和空”(中國規則)。但是人類棋手在對弈時顯然並不是每時每刻都 在基於這個“勝”的定義進行思考的——通常我們只在棋局進入中後期時才經常性地“數目”。在對弈的大部分時間裏我們是在思考諸如“如何藉助右上角黑棋的毛 病擴張”、“如何做活”、“如何侵消對手的模樣”、“如何在劫爭中轉換”、“如何分斷”等等一系列具體問題。我們注意到,每一個這樣的“具體問題”實際上 是改變了思考的目標,把一個“求勝”的問題轉化成了一系列“分斷”或者“做活”之類的子問題。這樣的一個“戰略計劃”,其背後的邏輯當然是,我們的大腦相 信在當前情況下“分斷對手大龍”是最有可能導致最終贏棋的子目標。一旦確立了子目標,人類棋手便集中精力考慮具體戰術走法來完成這個子目標,而不是“贏 棋”這個最終目標。與之不同的是,目前主流的弈棋計算機從基本思考模式上並不依賴於“生成並確定子目標”的戰略能力。在大多數時刻,這些弈棋計算機只關心 一個問題,就是按照“勝”的基本定義來贏得比賽*1。“在當前局面下,我走在x點的話最終能贏几子”,計算機就是通過不停地重複問自己這個問題來完成對弈 的。儘管這聽起來很“原始”,但正如前面所說,這樣思考的計算機卻已經在很多棋類中達到了相當令人驚訝的水平!