close
前陣子在觀望平價手機推薦【HTC 福利品】One M9 32G 5吋八核心智慧型手機網路上評價滿好,雖然價格讓我有點卻步

可我爬文才知道原來這類的商品優惠起來也是很優惠的

↓↓↓限量折扣的優惠按鈕↓↓↓





我開始找各大商城我才知道有很多地方有賣福利品(便宜很多)

後來找到兩家商城有在賣而且有現貨~除了可以便宜買到還可以符合 我的需求真是太棒了

因為是商城東西當然非常琳瑯滿目而且不用自己想辦法去運送

只要上網點點點【HTC 福利品】One M9 32G 5吋八核心智慧型手機就可以在網站上選要送到家

真的太方便了所以我買的【HTC 福利品】One M9 32G 5吋八核心智慧型手機也在下週會送來囉~(先看看照片期待)





後來我去店面看的時候才發現【HTC 福利品】One M9 32G 5吋八核心智慧型手機在網路上買真的比較便宜

而且因為只有在網路上販售並沒有在實體店面所以直接回饋價格給網民


這次剛好跟上折扣所以價格真的挺優惠的,所以我就在網路上買了~~

如果在購物商城買的話,除了有詳細的介紹以外,更有保障!!而且速度也很快~on09







  • 品號:3889160


  • 2000 萬像素鏡頭
  • ROM 3GB記憶體
  • 八核心處理器








本商品為福利品,說明如下:

1.福利品-機身有較明顯刮傷,部分商品螢幕可能有較大亮點或黑點(不影響使用功能)

2.保固 - 此商品原廠(或代理商)不保固 ! 由出貨供應商保固三個月。

此商品出貨前均已拆封檢測 ,可能有以下情況 , 購買前請特別注意 :

1.部分配件在檢測過程中可能有磨損。

2.主商品於檢測過程中若有瑕疵均會先行維修排除問題。

3.部分商品外盒&機身為與新品區隔 , 仍有可能秀出福利品(或refurbished),機身已打上原廠辨識用代碼。

4.部分商品因外盒破損嚴重,出貨前均已更換外盒(非原廠外盒),避免運送過程中商品磨損。

5.此商品無法參與原廠活動。

6.相關手機經銷商切勿購買此商品後去除相關辨識標籤以新機價格轉售,或謊稱新機轉送原廠維修站意圖更換為新機,以上兩種行為均已涉及法律問題,切勿以身試法!!

以上幾點請消費者於購買前務必詳閱!可接受者再購買。








全金屬的優雅風格



目前提供三種鮮明的色彩選擇,而且全部為雙色拋光處理:耀眼金、金鑽銀,以及靚絲灰。



HTC One M9

優質設計搭配精選軟體:位置感知式軟體可依據您當下的所在位置提供相關資訊。無可匹敵的雙色調設計與鏡面邊角。一生只有一回,您值得優雅的生活。





吸引眾人豔羨目光



雙色全金屬機身,搭配人體工學修邊設計的鏡面邊角,讓您一手輕鬆掌握。圓弧形一體機身背蓋充分展現了典型 HTC One 系列智慧型手機的簡約外觀與質感。



樂音繚繞



HTC One M9 與 Dolby 合作,以 5.1 環繞音響效果重現真正的左/右兩聲道音效,帶給您劇院般的體驗。搭載 Dolby Audio 的 HTC BoomSound™ 音響可提供完美的音效,就算是來自多聲道線上來源也能呈現最完美的音質。同時提供 HTC BoomSound 劇院及音樂模式,讓您不管是看電影還是玩遊戲,都能享受前所未有的音效震撼。



讓眾人讚嘆



2000 萬像素主相機搭配 UltraPixel 前相機,提供您前所未見的相片與影像控制功能。HTC Eye™ Experience 軟體可讓您進行前後拍攝、語音自拍以及套用即時美顏等。此外,您還可使用 Zoe 應用程式,分別將您與好友們的相片與影片組合起來,完成多重觀點的影像記錄。HTC One M9 的前後雙鏡頭帶給您驚喜連連的影像效果。



輕鬆存取相片



HTC One M9 搭載直覺式One 相片集,讓您透過簡易的組織與搜尋控制項將相片與影片分類整理。您可以搜尋儲存在本機的影片,以及存放在社交媒體及線上網站的相片及影片。有了 HTC One M9 One 相片集,輕鬆點幾下就能將一切回憶歸位存放。



令人驚艷的自拍照



HTC One M9 前相機內建 UltraPixel 技術,不管是白天還是夜晚都能增加進光量,讓您拍攝出畫質細膩無比的自拍照。搭載的廣角鏡頭可提供更寬廣的拍攝視野,讓您的每張照片都不會漏失任何一位好友。



輕鬆一覽



HTC One M9 內建增強的 BlinkFeed 首頁功能,能夠依據您的位置提供您相關建議與連結。無論您身在何方,都能獲得所在區域的用餐時間特惠資訊。



引人豔羨



為達到精簡尺寸要求,HTC One M9 以令人讚嘆的設計將所有內部元件堆疊在一起,搭配 5 吋螢幕,讓您一手輕鬆掌握。內建的藍寶石相機鏡頭具備耐刮特性,歷久彌新。



















品牌名稱
儲存容量
  • 32G




















【HTC 福利品】One M9 32G 5吋八核心智慧型手機

2017單眼相機推薦,2017相機推薦,最新 相機推薦,最新相機2017,拍攝技巧,單眼價格,2017手機品牌,2017新手機推薦,2017手機推薦,最新手機推薦,最新手機2017,使用教學,空機價格


↓↓↓現在馬上點擊購買↓↓↓



另外在推薦我平時會使用的平台可以比較價格找便宜~~

寶貝用品購物網推薦

Hotels.com

法貝兒嬰兒用品

專門賣寶寶天然的清潔用品~~

Agoda訂房網

MOTHER-K Taiwan

韓國首選婦幼產品,既時尚又實用

Agoda訂房網

MamiBuy媽咪拜

適合給新手爸媽的嬰兒購物網,一應俱全!

各大購物網快速連結

東森購物網 東森購物網 性質大多相同
建議每一家搜尋要購買的品項後
比對出能折價卷能扣最多的一家來消費
保養品、化妝品我比較常在momo購物網買,切記是"購物網"才有正品保障!!
森森購物網 森森購物網
udn買東西
MOMO購物網 MOMO購物網
MOMO購物網 瘋狂麥克 有時候新鮮貨我都在瘋狂麥克找,基本上想找的,瘋狂賣客都會賣~












AlphaGo 的棋局,與人工智能有關,與人生無關

編者註:本文作者系出門問問 NLP 工程師李理,他在這篇文章詳細敘述瞭AlphaGo 人工智能背後的細節。

前言:人生如棋

回顧一下我的人生,似乎和棋是2017手機評價有一些關聯的。編者註:本文作者出門問問

1997 年中考後的暑假在姑父公司的機房第一次接觸電腦,當時應該是 80386 的微機。學習電腦就是學習 DOS 命令和打字,完全不懂幹什麼用的,打字尤其是五筆字型,更是學得頭疼 王旁青頭戔五一,土士二幹十寸雨 唯一的樂趣就是趁姑父不在的時候鍵入 CCH,和電腦下一盤象棋(本文象棋特指中國象棋,如果是國際象棋不會簡稱象棋)。這個軟件的棋力挺強的,至少對於我這樣業餘水平來說是這樣的。總共下來估計有一二十盤,我贏的次數也隻有一兩盤,其餘的都是輸瞭。我第一步一般走中炮,電腦第一步總是走馬,而當第二步我上馬的時候,電腦不是走常見的屏風馬,而是起橫車,另外一側的馬都不動。從棋理的角度說,這種佈局是有問題的,中路很空虛。但是我卻找不到什麼破綻,原因可能是中局計算能力相差太遠。

當時就覺得挺神奇的,電腦竟然會下棋,而且還這麼厲害,心想我以後能不能做一個比它還厲害的軟件。

同年,IBM 的深藍擊敗瞭國際象棋世界冠軍卡斯帕羅夫,不過我知道這個消息應該是在讀大學之後瞭。

2000 年,由於高三最後半年沉迷於電腦遊戲,高考考得不好,而且還想離傢遠一點去闖蕩,就去瞭北京科技大學。陰差陽錯地選擇瞭電子信息工程專業。這個專業在我之前隻有兩屆學生,課程設計挺混亂的,有一部分電子系的課程,如數電模電等,也有部分通信的課程,如信號與系統。但是我對這些課程都不感興趣,自學瞭很多計算機的課程。

大概是在 2003 年的時候在書店看到瞭王小春寫的《PC 遊戲編程 人機博弈》,如獲至寶,學著寫過一個黑白棋的軟件。也改過光盤裡附帶源碼的象棋程序,不過發現要寫一個超過自己水平的象棋並不容易。

2006 年考研,填報的是計算機系的人工智能實驗室,不過分數不夠高,後來調劑到瞭智能系的聽覺實驗室,做自然語言處理方向。

同年,MCTS 第一次被提出並在圍棋上卻得極大的突破;而 Hinton 通過 DBN 讓深度神經網絡重新進入人們的視野。不過當時 NLP 還不流行 Deep Learning ,當時更多的還是 structured SVM、CRFs 和 Graphical Model。當時還打印過《Learning CRFs with Hierarchical Features: An Application to Go》這篇論文。

2016年,Google DeepMind 的文章被 Nature 發表,AlphaGo 擊敗歐洲冠軍樊麾並且將要在3月份挑戰李世石。

圍棋和深度學習再次大規模高熱度地出現在世人眼前。

象棋與圍棋的比較 俗與雅

如果你在公園或傢門口看到一群人圍成一團,圍觀的比下棋的還多,並且出謀劃策指手畫腳,那一定是象棋。同樣在路邊攤上擺 祖傳 殘局的也一定是象棋。圍棋則 高雅 的多,所以琴棋書畫裡的棋必然是圍棋。象棋下得好,也隻能在民間擺擺路邊攤。而圍棋專門有個官職叫 棋待詔 ,陪皇帝下棋的。當然伴君如伴虎,陪皇帝下棋可沒有與路邊的大爺下棋輕松,贏瞭皇帝肯定不行,但老是輸或者輸得太假瞭也不行。要像賈玄那樣讓皇帝每次都覺得自己棋差一著,可不是簡單的事情。喜歡下圍棋的皇帝很多,比如傳說中 一子定乾坤 的李世民,《西遊記》裡魏征夢斬涇河龍王時也是在和李世民下棋。即使圍棋下不到國手的水平能陪皇帝下棋,還是有很多達官貴人也附庸風雅的。比如《紅樓夢》裡的賈政老爺,那麼無趣的人,也是要下下圍棋的,因此很多詹光這樣的門客。賈府四位大小姐的丫鬟是琴棋書畫,迎春的丫鬟是司棋,按說迎春下棋應該很厲害,不過在書中並沒有寫迎春下棋,倒是寫惜春和妙玉下棋,惜春在角上被倒脫靴。另外探春和寶琴下棋, 探春因一塊棋受瞭敵,算來算去,總得瞭兩個眼,便折瞭官著兒,兩眼隻瞅著棋盤,一隻手伸在盒內,隻管抓棋子作想 ,因此林之孝傢的來請示也未聽到。

孰難孰易

圍棋似乎更 平等 一些,每個棋子除瞭顏色沒有什麼不同,它的重要性取決於它的位置以及整個棋盤其它棋子(包括自己和對手)的整體分佈。而象棋似乎不同,車一般都要比馬有價值,將帥的價值無窮大,雖然它沒有什麼大作用。偶爾在某些特殊情況下,虎落平陽被犬欺,車的價值可能比不上一個馬,但大部分情況下車都超過兩個馬的價值,真是 王侯將相確有種乎 !

從理想主義的角度,我更喜歡圍棋,每個棋子都是同樣的可塑性,它的重要性取決於它的位置。但是每個棋子的位置又是它自己能決定的嗎?也許在開始一盤對局之前它的位置就大致確定瞭!放在棋罐裡最上面的棋子當然最可能被選擇,另外位置好壞更由下棋的棋手決定,棋子本身沒有什麼決定權。

而且從現實的角度來說個體的差異確實是存在的,打籃球的話姚明就生來比其他人有優勢。

從入門的角度說,象棋的估值函數相對簡單,因此入門應該更容易一些。

MiniMax 搜索/Alpha-Beta 剪枝和象棋

這個算法最早是馮諾依曼提出來的。其實每一個下棋的人可能都在不自覺的使用這個算法,隻不過沒有形式化的語言描述出來而已。

第一次下棋的時候,我們很可能嘗試當前局面下所有的可能走法,然後選擇最 好 的一個局面。拿象棋來說, 好 可以比較簡單的用雙方棋子的分值來表示,一個車的價值大致相當於兩個炮,馬和炮差不多,相當於兩個士或者相,兵的價值最低。那麼很可能我們第一次走棋時就是看哪步走法能 吃 到對方的棋子,然後就走這一步。可惜下棋是兩個人的博弈,你用車吃對方一個兵,對方可能用馬把你的車吃瞭,這樣算下來,用一個車換一個兵,明顯是虧瞭。通過這樣的例子,你學到對手是在和你 作對 ,你有很多走法,如果你隻考慮一步,選擇最好的局面,那麼對手會在這個局面走對他有利的局面,有可能這個局面對你非常不利。所以你覺得應該要考慮兩步也就是一個回合,首先你嘗試所有的可能(當然也可能做一些裁剪,濾掉明顯不好的走法,比如沒事走動自己的老將),比如用車吃對手的卒,然後站在對手的角度選擇對手最好的走法(用馬吃你的車),然後評估一下這個局面,發現局勢對你並不有利。接著再嘗試用兵吃對手的馬,接著對手選擇用車吃你的兵,這個結果明顯對你有利。

當然隨著你計算能力的增強,你可能把搜索的深度從 2 擴展到 4 或者更多。

上面的 算法 用上圖來說明。圓形的節點表示 你 面對的局面,而方塊的節點表示對手面對的局面。這裡是 4 層兩個回合的搜索樹。

我們從最下層第 4 層開始,這一層是葉子節點,不再展開,你需要評估局面的 好壞 ,比如前面描述的 簡單 算棋子分數的算法(其實也不那麼簡單,想想第一次下棋的人怎麼知道?這是幾千年來前人總結出來的經驗!)計算出得分。

接著第 3 層對手從這些局面中選擇他最好的局面(也就是你最壞的局面),也就是得分最少的局面(因為計算得分是從你的角度計算的)。

接著你在第 2 層選擇得分最多的局面。

接著對手在第 1 層選擇得分最少的局面。

最後你在第 0 層選擇得分最多的局面。

這裡忽略或者說假設瞭一個非常重要的東西 估值函數。也就是之前說的怎麼評估一個局面的好壞。

對於一個遊戲來說,局面可以分為兩類:結束局面和非結束局面。比如對於象棋來說,結束局面就是一方的將/帥被吃瞭(實際的規則是一方的將/帥沒有 合法 的走法瞭。但是我們總是可以假設將帥是可以走不能走的位置,然後被 吃 掉,或者將帥碰面也可以看成被吃,我小時候學下象棋的時候就是這麼認為的),其它的所有合法局面都是非結束局面(現代象棋還有一些規則為瞭避免重復局面或者 無賴 的長將長打長捉指定瞭一些規則約束,高手過招時甚至會 合理 地利用這樣的規則,另外在某些特殊的殘棋裡這些規則也會決定勝負)。

對於很多遊戲來說,結束局面的好壞一般是遊戲規則規定的。比如象棋的結束一般是某方的將帥被吃瞭,那麼被吃的一方就輸瞭,可以認為這個局面的得分是負無窮大,而相對的另一方得分是無窮大。當然實際比賽中也有和棋,也就是雙方都沒有辦法吃掉對方的將帥或者超過自然限著的回合數。

從理論上來說,如果我們的計算能力足夠,我們可以搜索到遊戲的結束局面,那麼我們就可以說完全 解決 瞭這個遊戲。但是從上面的搜索過程我們可以發現,搜索的節點數是隨著層次的增加指數級增加的(後面我們討論的 alph-beta 剪枝能減少部分不必要的搜索,但是並不影響總的復雜度)。一般認為中國象棋的分支因子在 40-50 之間(也就是平均每步有這麼多種合法的走法),那麼搜索 20 步就需要 40 的 20 次方需要多久呢?我們假設計算機每秒可以搜索 1G 個節點(1GHz,時間一個 CPU 時鐘周期肯定不能搜索一個節點),那麼也需要 3486528500050735 年!

因此,我們隻能搜索有限的深度,這就帶來一個問題,非結束局面的得分的計算問題。也就是給定一個局面,怎麼計算 好壞 ?

首先,我們需要定義這個 好壞 。定義其實非常簡單,這個得分就是把這個局面搜索到結束局面的得分,基本上三種可能:勝/負/和。當然這個理論得分是不知道的,那麼我們怎麼近似它呢?一種最簡單而且實際上我們人類一直在使用的方法就是統計的方法:我們看以往對弈的結果,如果這個局面下瞭 100 局,我方勝瞭 60 局,輸瞭 40 局,那麼我可能認為這個局面還不錯,反之如果我方勝瞭 30 局輸瞭 70 局,那麼就不太好。

當然,我們統計的是 高手 的對局,如果是隨機的對局,可能沒有統計意義。這裡其實有個雞生蛋蛋生雞的過程。類似於 EM 算法。我們首先有一個還 不錯 的估值函數(人類高手),然後不停的模擬對局(下棋),然後統計新的局面得分,然後用這些局面得分更新我們的估值函數。

這樣一代一代的積累下來,人類的下棋水平越來越高。這其實和下面我們要討論的強化學習和 MCTS 有類似的思想!我們下面會再討論這個問題。

比如我們有瞭一個基本的估值函數:計算棋子的靜態得分,將 10000 分,車 10 分,馬和炮 5 分,相士 2 分,兵卒 1 分。然後我們不斷下棋,發現有些局面從棋子看雙方都一樣,但是棋子的不同位置會導致最終勝負的差距很大。因此我們會更新我們的估值函數:比如兵卒過河要變成兩分。棋子的行動力越大分越高,越靠近中間分越高,不同的棋子如果有保護或者攻擊關系,我們會增加一些分數,另外一些特殊的局面,比如空頭炮,三子歸邊會有很高的勝率,我們也會增加分數,從而出現棋子攻殺。

因此一個棋手的棋力除瞭計算能力(這個更多是天賦,當然也能通過訓練提高),另外一個很重要的能力就是評估局面的能力,這個就更多的靠後天的訓練。而一個遊戲是否 有趣 / 好玩 ,其實也跟評估函數有關。如果一個遊戲很容易評估,那麼基本不需要搜索,看一個回合就知道最終的結果瞭,就沒有什麼意思。最有 意思 的局面是 看 起來很差但 其實 很好的棋,或者看起來某個局面很平穩,但其實某方優勢很明顯,所謂的 妙手 是也。什麼叫 看 起來很差?就是搜索很淺的層次評估或者不搜索直接評估得分很差(比如走窩心馬或者被架空頭炮),但是搜索很深之後發現這是當前局面下最好的走法,甚至是反敗為勝的唯一招法。高手和低手的差別也在於此,對於那種很明顯的好壞,大傢都能看得出來;而有些局面,對於低手來說可能覺得局面雙方還差不多,但是在高手看來勝負早已瞭然於胸瞭。

Alpha-Beta 剪枝

(from https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning)

假設 minimax 是 4 層的深度優先搜索,並且是如圖的從左到右的順序。那麼有些子樹是不用搜索,可以被剪枝掉的。

比如下面這棵子樹:

第 0 層是 MAX 操作,第一個孩子返回瞭 5,現在我們正準備搜索第二個孩子(4 的那個,當然現在還不知道)。我們知道它的隻至少是 5 瞭, =5。

它是一個 MIN 操作,首先搜索到 7,所以它的取值 =7,接著搜索到 4,所以它的取值 =4,這個時候就可以停止瞭,為什麼? 因為第 0 層的節點的值已經 =5瞭,而第 1 層的右邊那個節點已經 =4瞭,所以不管它的第三個孩子得分多少,第 0 層都不會選擇瞭,所以可以把它剪枝掉瞭。max(5, ( =4))=5。 搜索完兩個孩子之後,第 0 層的值已經 =6瞭,然後搜索第 1 層(5)的那個節點,它的第一個孩子已經返回 5 瞭,所以它的值必然 =5瞭,所以它的第二個孩子(8)也沒有必要搜索瞭。因為 max(6, ( =5))=6。 類似的,對手在 MIN 的時候也可以剪枝,min(3, ( =4))=3。

當然上面是非常形式化的描述,其實在實際的下棋過程中我們可能自覺不自覺的使用瞭 alpha-beta 剪枝。

比如,我們有這樣的推理:我可以走車吃對手一個兵而且對手吃不瞭我任何子(得分+1);也可以走馬吃對手的卒,走馬後對手有很多走法,其中一個走法是吃掉我的馬而且我還吃不瞭他任何棋子(得分-4),那麼這個時候我就不會走馬瞭,因為不管其餘的走法怎麼樣(也許對手還有更好的走法,比如吃我一個車得 10 分;當然也有更差的走法不吃我的子讓我得+1 分,但他不會這麼走),這個走法下我 至少 損失一個馬瞭,那麼我現在有一個得分+1 的走法,我就不要考慮對手其它的走法瞭,直接剪枝掉瞭。用形式化的語言描述 max(1, ( =-5))=1。

alpha-beta 能否剪枝非常依賴於搜索的順序,如果把最優的走法先搜索,那麼能得到最大程度的剪枝。所以這個樹的展開順序非常重要。一般會使用很多啟發式規則來排序。比如吃對方的棋子很可能是比較好的走法,而沒事走動老將不是什麼好的走法。

要下好象棋,計算能力和評估局面的能力缺一不可。因為人的計算能力有限(計算機也是一樣),所以搜索到一定層次之後需要停下來評估局面。當然人的搜索不是固定的,而是和評估函數一起工作的,對於 簡單 的局面(比如明顯很差或者很好的),就不要搜索很深,而對於 復雜 的局面,則會盡可能深的搜索下去。所以好的評估局面的能力對於下象棋很重要,這個容易理解。

那麼計算能力(搜索深度)的重要性呢?這個似乎更加顯而易見,棋經雲: 多算勝,少算不勝,況乎無算。

不過仔細思考一下,有似乎沒有那麼明顯。為什麼搜索深比搜索淺好呢?除非你能搜索到遊戲結束,否則都得提前結束使用估值函數。搜索深比搜索淺好的一個隱含假設就是越深的局面越容易評估。對於象棋來說這是很明顯的,因為象棋的特定是越下棋子越少,局面也就更容易評估。而圍棋就不一樣,棋子越到後來越多,局面的評估難度並沒有明顯的下降(甚至可能上升,我個人圍棋水平也就是會簡單規則的程度,所以很可能不是這樣)。當然圍棋的評估局面比象棋也復雜很多(至少我是這麼覺得的)。

當然一個人的計算能力是有限的,所以 離線 的計算對於職業棋手也很重要。很多棋手對於某些佈局有非常細致的研究,他們 離線 研究瞭各種可能的變化,因此你如果走到瞭他熟悉的佈局,你基本上很難戰勝他。因此殘局庫和開局庫的研究和記憶是一個職業棋手努力的方向。

要設計一個好的象棋程序也是一樣,首先是計算(搜索)能力,這個對於相對於人類來說是它的強項。因此更關鍵的就是評估局面的函數。由於象棋的局面特征還是比較明顯的,靜態的棋子分值估計能解決 80%的局面,再加上一下位置特征(比如棋子在不同的位置有不同的加減分),棋子的行動力,棋子之間的保護關系等等,就能解決大部分的局面。那些非常復雜的局面可以通過更深的搜索層次來解決。另外像開局庫,殘局庫這些對於計算機都不是問題,它的記憶能力遠超人類。

有瞭這些重要的特征,可以人工設計估值函數,也可以用機器學習的方法學習更加準確的估值函數。所以解決象棋應該是 比較 容易的(相對於圍棋)。所以現在國際象棋人類的水平和計算機差距越來越大,人類幾乎沒有獲勝的可能瞭。

圍棋為什麼不能用類似的方法

國際象棋解決之後,大傢把註意力放到瞭圍棋上。用類似的方法效果很差,比如 GnuGo 的棋力大概在 13 級(kyu)。

13 級什麼概念呢?從下圖中可以看到是非常差的水平。

(from https://en.wikipedia.org/wiki/Go_ranks_and_ratings#Kyu_and_dan_ranks)

為什麼對於象棋非常有效的方法用在圍棋上就不行呢?我們需要分析兩種棋的差別。不過由於我本人下棋水平一般,圍棋更是剛入門的水平,所以更多的是從程序員的角度來分析兩種棋的差異。

分支因子和深度

國際象棋的分支因子是 35,而圍棋是 250(https://en.wikipedia.org/wiki/Branching_factor)。這個數值隻是估計,但可以看出大致的差別。從這個角度來說圍棋要比國際象棋復雜。但如果隻是這一個因素的差別不可能導致最好的國際象棋程序超過人類而圍棋隻有 13k 的水平。

估值函數

前面我們分析的是中國象棋,國際象棋和中國象棋類似,所以它的估值函數是相對容易和準確的。而圍棋就比較困難,數棋子的個數明顯是沒有任何用處的。

圍棋難的地方在於它的估值函數非常不平滑,差一個子盤面就可能天翻地覆,同時狀態空間大,也沒有全局的結構。這兩點加起來,迫使目前計算機隻能用窮舉法並且因此進展緩慢。但人能下得好,能在幾百個選擇中知道哪幾個位置值得考慮,說明它的估值函數是有規律的。這些規律遠遠不是幾條簡單公式所能概括,但所需的信息量還是要比狀態空間本身的數目要少得多(得多)。

(http://www.almosthuman.cn/2016/01/12/ebfzg/)

後面我討論用深度學習(CNN)來評估局面時會分析這兩個因素哪個更重要,至少從個人感覺來看,第二個更加重要一些。

圍棋和象棋的差別還是挺大的,比如 MCTS 搜索,在圍棋中效果不錯,但是用到象棋裡就沒有什麼效果。

MCTS 多臂老虎機(Multi-Arm Bandits) 和 UCB(Upper Confidence Bounds)

這是強化學習裡最簡單的一個問題,在很多地方都有應用,比如互聯網廣告(https://support.google.com/analytics/answer/2844870?hl=en),遊戲廳有一個 K 臂的老虎機,你可以選擇其中的一個投幣,每個手臂都是一個產生一個隨機的獎勵,它們的均值是固定的(也有 Nonstationary 的多臂老虎機,我這裡隻考慮 Stationary 的)。你有 N 次投幣的機會,需要想辦法獲得最大的回報(reward)。

當然如果我們知道這個 K 個手臂的均值,那麼我們每次都選擇均值最大的那個投幣,那麼獲得的期望回報應該是最大的。

可惜我們並不知道。那麼我們可能上來每個都試一下,然後接下來一直選擇最大的那個。不過這樣可能也有問題,因為獎勵是隨機的,所以一次回報高不代表真實的均值回報高。當然你可以每個都試兩次,估計一下獎勵的均值。如果還不放心,你可以每個都試三次,或者更多。根據大數定律,試的次數越多,估計的就越準。最極端的一種做法就是每個手臂都投一樣多的次數;另外一種極端就是碰運氣,把所有的機會都放到一個手臂上。後一種如果運氣好是最優的,但是很可能你抽到的是回報一般的甚至很差的手臂,期望的回報其實就是 K 個手臂的平均值。前一種呢?回報也是 K 個手臂的平均值!我們實際的做法可能是先每個手臂都試探幾次,然後估計出比較好的手臂(甚至幾個手臂),然後後面重點嘗試這個(些)手臂,當然偶爾也要試試不那麼好的手臂,太差的可能就不怎麼去試瞭。但這個 度 怎麼控制就是一個很復雜的問題瞭。這就是 exploit-explore 的困境(dilemma)。利用之前的經驗,優先 好 的手臂,這就是 exploit;嘗試目前看不那麼 好 的手臂,挖掘 潛力股 ,這就是 explore。

一種策略(Policy)的 Regret (損失)為:

(from A Survey of Monte Carlo tree Search Methods)

我覺得 mu_j 應該放到求和符號裡面的。

不要被數學公式嚇到瞭,用自然語言描述就是:最理想的情況是 n 次都試均值最大的那個手臂(mu star),不過我們並不知道,E[Tj(n)] 是這個策略下選擇第 j 個手臂的期望。那麼 R 就是期望的損失,如果我們的策略非常理想,這個策略隻嘗試最好的手臂,其它不試,那麼 R 就是 0。

但是這樣的理想情況存在嗎?很明顯不太可能存在(存在的一種情況是k個手臂的均值一樣)。那麼我們的策略應該盡量減少這個損失。

Lai and Robbins 證明瞭這個損失的下界是 logn,也就是說不存在更好的策略,它的損失比 logn 小(這類似於算法的大 O 表示法)。

所以我們的目標是尋找一種算法,它的損失是 logn 的。

UCB 就是其中的一種算法:

每次決策之前,它都用上面的公式計算每個手臂的 UCB 值,然後選中最大的那個手臂。公式右邊的第一項是 exploit 項,是第 j 個手臂的平均回報的估計。這個值越大我們就越有可能再次選中它。第二項是 explore 項,n_j 是第 j 個手臂的嘗試次數,n_j 越小這個值就越大,也就是說嘗試次數越少的我們就越應該多嘗試。當 n_j=0 時,第二項為無窮大,所以這個算法會首先嘗試完所有的手臂(explore),然後才會選擇回報最大的那個(exploit),試瞭之後這個手臂的平均值可能變化,而且 n_j 增加,explore 值變小,接著可能還是試最大的那個,也可能是第二大的,這要看具體情況。

我們來分析一些極端的情況,一種情況是最好的(假設下標是 k)比第二好的要好很多,那麼第一項占主導,那麼穩定瞭之後大部分嘗試都是最好的這個,當然隨著 n_k 的增加 explore 項在減少(其它手表不變),所以偶爾也試試其它手臂,但其它手臂的回報很少,所以很快又會回到第 k 個手臂。但是不管怎麼樣,即使 n 趨於無窮大,偶爾也會嘗試一下其它的手臂的。不過因為大部分時間都在第 k 個手臂上,所以直覺上這個策略還是可以的。

另一種極端就是 k 個手臂都差不多(比如都是一樣的回報),那麼 exploit 項大傢都差不多,起決定作用的就是 explore 項,那麼就是平均的嘗試這些手臂,由於 k 各手臂回報差不多,所以這個策略也還不錯。 出於中間的情況就是有一些好的和一些差的,那麼根據分析,大部分嘗試都是在好的手臂上,偶爾也會試一試差的,所以策略的結果也不會太差。

當然這個隻是簡單的直覺的分析,事實上可以證明這個算法的 regret 是 logn 的,具體證明細節請參看論文《Finite-time Analysis of the Multiarmed Bandit Problem》。

MCTS(Monte Carlo tree Search)和 UCT(Upper Confidence Bound for trees)

(from A Survey of Monte Carlo tree Search Methods)

MCTS 算法就是從根節點(當前待評估局面)開始不斷構建搜索樹的過程。具體可以分成 4 個步驟,如上圖所示。

1. Selection

使用一種 Policy 從根節點開始,選擇一個最 緊急 (urgent)的需要展開(expand)的可以展開(expandable)的節點。

說起來有點繞口,可以展開的節點是非葉子節點(非遊戲結束局面),而且至少還有一個孩子沒有搜索過。比如上圖展示的選擇過程,最終選擇到的節點不一定是葉子節點(隻有它還有沒有搜索過的孩子就行)。具體的選擇策略我們下面會討論。

2. Expansion

選中節點的一個或者多個孩子被展開並加入搜索樹,上圖的 Expansion 部分展示瞭展開一個孩子並加入搜索樹的過程。

3. Simulation

從這個展開的孩子開始模擬對局到結束,模擬使用的策略叫 Default Policy。

4. Backpropagation

遊戲結束有個得分(勝負),這個得分從展開的孩子往上回溯到根節點,更新這些節點的統計量,這些統計量會影響下一次迭代算法的 Selection 和 Expansion。

經過足夠多次數的迭代之後(或者時間用完),我們根據某種策略選擇根節點最好的一個孩子(比如訪問次數最多,得分最高等等)。

上面的算法有兩個 policy:tree policy 和 default policy。tree policy 決定怎麼選擇節點以及展開;而 default policy 用於 simulation(也有文獻叫 playout,就是玩下去直到遊戲結束)

在討論 MCTS 和 UCT 之前,我們來分析一下人在下棋時的搜索過程。

首先人的搜索肯定不是之前的固定層次的搜索的,很多 明顯 不 好 的局面可能就隻搜索很淺的層次,而不那麼 明顯 的局面可能需要搜索更深的層次(之前我們討論過這裡隱含瞭一個假設:深的局面比淺的局面容易評估,對於象棋這是比較明顯的), 好 的局面也需要多搜索幾層確保不會 看走眼 。

MCTS 其實有類似的思想:我們著重搜索更 urgent 的孩子,所謂 urgent,就是更 promising 的孩子。當然偶爾也要看看那些不那麼 promising 的孩子,說不定是潛力股。這其實就有之前討論的 exploit 和 explore 的平衡的問題。

另外 MCTS 直接 Simulation 到對局的結束, 回避 瞭局面評估的難題(不過這個問題最終還是繞不過去的,我們下面會再討論)。

既然是 exploit 和 explore 的問題,那麼之前我們討論的 UCB 就可以直接用上瞭,把 UCB 用到 MCTS 就是 UCT 算法(註意: MCTS 其實是一族算法的統稱,不同的 tree Policy 和 Default Policy 就是不同的 MCTS 算法).

UCT 算法

Selection 和 Expansion 的公式如上,和 UCB 很類似,隻是多瞭一個常量 Cp,用來平衡 exploit 和 explore。

每個節點 v 都有兩個值,N(v) 和 Q(v),代表 v 訪問過的次數(每次迭代都是從 root 到結束狀態的一條 Path,這條 Path 上的每個點都被 visit 一次)和 v 的回報,如果這次 simulation 己方獲勝,則 Q(v)+1,否則 Q(v)-1。(1,3,5 層代表自己, 2,4,6 代表對手,如果最終我方獲勝,1,3,5 都要加一而 2,4,6 都要減一)。

具體的計算公式如上,每次選孩子時都用上面的公式計算得分。第一項就是這個節點的平均回報 (exploit term) 和第二項就是 explore term,訪問次數少的節點更應該被 explore。當 N(v)=0 時第二項值為無窮大,所以如果某個節點有未展開的孩子,總是優先展開,然後才可能重復展開回報高的孩子。

UCT 算法的特點如下:

1.Aheuristic:不2017新手機推薦需要估值函數,因此也就不需要各種啟發式規則,領域知識,從而 回避 瞭圍棋估值函數難的問題。

2.Anytime:可以任何時候結束,迭代的次數越多就越準確。

3.Asymmetric:前面我們也分析過瞭,和人類的搜索類似,搜索樹是不對稱的,不是固定層次的,而是 重點 搜索 promising 的子樹。

UCT 的變種和改進

這裡主要關註圍棋領域的一些變種和改進。

All Moves As First(AMAF)和 Rapid Action Value Estimation(RAVE)

這是很多開源 MCTS 圍棋使用的一個變種。

首先通過 UCT 的 tree Policy 我們選擇瞭 C2 和 A1,然後 Default Policy 我們選擇瞭 B1 A3 C3 最終黑棋獲勝。

普通的 MCTS 會更新 C2 和 A1 的 N(v) 和 Q(v),而 AMAF 認為:既然在 simulation 的過程中黑方選擇瞭 B1 和 C3,在 root 節點時也可以選擇 B1 和 C3,那麼這次模擬其實也可以認為 B1 和 C3 對獲勝是有幫助的,那麼 root 節點的 B1 和 C3也 有貢獻(標志為),也應該更新統計量,讓下次選擇它的概率大一點。同理白棋在 simulation 的時候選擇瞭 A3,在 C2 也可以選擇 A3(有的那個),那麼 C2 對於白棋失敗也是有責任的,那麼下次在 C2 的時候白棋應該避免選擇 A3。這樣一次迭代就能多更新一些節點(那些沒有直接 Selection 的也有一些統計量)。

這個想法對於圍棋似乎有些道理(因為不管哪個順序很可能導致一樣的局面,前提是沒有吃子),而且實際效果也不錯。但是在別的地方是否應該使用就需要看情況瞭。

這裡有兩類統計量:直接 selection 的節點的統計量 (A1,C2) 和間接 selection 的節點 (B1,C3, A3)。這兩種權重應該是不一樣的。

所以比較直觀的想法是給它們不同的權重 A+(1 )U 這就是 -AMAF。

這個權重 是固定的,RAVE 認為隨著模擬次數的增加 應該減少才對(沒有真的模擬是可以用這些間接的統計量,如果有瞭真的更準確的估計,這些間接的統計量就應該降低權重,這個想法也很自然)。

RAVE 使用上面的公式動態調整 ,隨著 v(n) 的增加, 的值不斷下降。

Simulation 的改進

默認的 default policy 隨機的選擇走法模擬到結束,這在沒有任何先驗知識的時候是可以的。但是像我們之前分析的人類在 探索 未知局面時不是隨機的 探索 的,也是用一個估值函數指導的,去探索那些更 promising 的局面。

具體方法很多,比如 Contextual Monte Carlo Search,Fill the Board 以及各種基於 Pattern 的方法。細節就不再展開討論瞭。

MCTS 的並行搜索

(1) Leaf Parallelisation

最簡單的是 Leaf Parallelisation,一個葉子用多個線程進行多次 Simulation,完全不改變之前的算法,把原來的一次 Simulation 的統計量用多次來代替,這樣理論上應該準確不少。但這種並行的問題是需要等待最慢的那個結束才能更新統計量;而且搜索的路徑數沒有增多。

(2) Root Parallelisation

多個線程各自搜索各自的 UCT 樹,最後投票。

(3) tree Parallelisation

這是真正的並行搜索,用多個線程同時搜索 UCT 樹。當然統計量的更新需要考慮多線程的問題,比如要加鎖。

另外一個問題就是多個線程很可能同時走一樣的路徑(因為大傢都選擇目前看起來 Promising 的孩子),一種方法就是臨時的修改 virtual loss,比如線程 1 在搜索孩子 a,那麼就給它的 Q(v) 減一個很大的數,這樣其它線程就不太可能選擇它瞭。當然線程 1 搜索完瞭之後要記得改回來。

《A Lock-free Multithreaded Monte-Carlo tree Search Algorithm》使用瞭一種 lock-free 的算法,這種方法比加鎖的方法要快很多,AlphaGo 也用瞭這個方法。

Segal [195] investigates why the parallelisation of MCTS across multiple machines has proven surprisingly difficult. He finds that there is an upper bound on the improvements from additional search in single-threaded scaling for FUEGO, that parallel speedup depends criti- cally on how much time is given to each player, and that MCTS can scale nearly perfectly to at least 64 threads when combined with virtual loss.

Segal 研究瞭為什麼多機的 MCTS 算法很難,並且實驗得出結論使用 virtual loss 的多線程版本能比較完美的 scale 到 64 個線程(當然這是單機一個進程的多線程程序)。後面我們討論 AlphaGo 的 scalable 的時候會用到這些結論。

使用瞭 UCT 算法之後,計算機圍棋的水平能提高到 KGS 2d 的水平(估計是 1k 的水平?)。

CNN 和 Move Prediction

之前我們說瞭 MCTS 回避瞭局面估值的問題,但是人類下圍棋顯然不是這樣的,所以真正要下好圍棋,如此從模仿人類的角度來說,這個問題是繞不過去的。人類是怎麼學習出不同局面的細微區別的呢?當然不能由人來提取特征或者需要人來編寫估值函數,否則還是回到之前的老路上瞭。我們的機器能自動學習而不需要領域的專傢手工編寫特征或者規則來實現估值函數呢?

眼下最火熱的深度學習也許可以給我們一條路徑(當然可能還有其它路徑,但深度學習目前看起來解決 feature 的自動學習是最 promising 的方法之一)。

深度學習和 CNN 簡介

在機器學習流行之前,都是基於規則的系統,因此做語音的需要瞭解語音學,做 NLP 的需要很多語言學知識,做深藍需要很多國際象棋大師。

而到後來統計方法成為主流之後,領域知識就不再那麼重要,但是我們還是需要一些領域知識或者經驗來提取合適的 feature,feature 的好壞往往決定瞭機器學習算法的成敗。對於 NLP 來說,feature 還相對比較好提取,因為語言本身就是高度的抽象;而對於 Speech 或者 Image 來說,我們人類自己也很難描述我們是怎麼提取 feature 的。比如我們識別一隻貓,我們隱隱約約覺得貓有兩個眼睛一個鼻子有個長尾巴,而且它們之間有一定的空間約束關系,比如兩種眼睛到鼻子的距離可能差不多。但怎麼用像素來定義 眼睛 呢?如果仔細想一下就會發現很難。當然我們有很多特征提取的方法,比如提取邊緣輪廓等等。

但是人類學習似乎不需要這麼復雜,我們隻要給幾張貓的照片給人看,他就能學習到什麼是貓。人似乎能自動 學習 出 feature 來,你給他看瞭幾張貓的照片,然後問題貓有什麼特征,他可能會隱隱預約的告訴你貓有什麼特征,甚至是貓特有的特征,這些特征豹子或者老虎沒有。

深度學習為什麼最近這麼火,其中一個重要的原因就是不需要(太多)提取 feature。

從機器學習的使用者來說,我們以前做的大部分事情是 feature engineering,然後調一些參數,一般是為瞭防止過擬合。而有瞭深度學習之後,如果我們不需要實現一個 CNN 或者 LSTM,那麼我們似乎什麼也不用幹。

Deep Neural Network 能自動學習出層次化的 feature

CNN 最早是 Yann Lecun 提出用來解決圖像識別的問題的一種深度神經網絡。由 Yann LeCun 提出,通過卷積來發現位置無關的 feature,而且這些 feature 的參數是相同的,從而與全連接的神經網絡相比大大減少瞭參數的數量。

CNN 深度神經網絡

因此 CNN 非常適合圍棋這種 feature 很難提取問題,比如圖像識別。用 CNN 來嘗試圍棋的局面評估似乎也是很自然的想法。

Move Prediction using CNN

之前也分析過瞭,圍棋搜索如果不到遊戲結束,深的局面並不比淺的容易評估,所以我們不需要展開搜索樹,而可以直接評估一個局面下不同走法的好壞。這樣做的好處是很容易獲得訓練數據。我們有大量人類圍棋高手的對局(海量中等水平的對局),每一個局面下 好 的走法直接就能夠從高手對局庫裡得到,認為他們的對局都是 好 的走法。但是要得到一個局面的 絕對 得分卻很難,因為我們隻知道一盤對局最終的結果。一盤遊戲最終的勝負可能是因為佈局就下得很好,也可能是因為最後的官子階段下得好,中間具體某個局面的好壞是很難判斷的(當然強化學習試圖解決這個問題,但是還是很難的,下面在討論 AlphaGo 的時候會有涉及)。對於一個局面,如果能知道這個局面下最好的走法(或者幾個走法),那麼我們對弈時就直接選擇這個走法(當然這個最好的走法可能得分也很差,比如敗局已定的情況下怎麼走都是輸)。

所以大部分研究都是用 CNN 來預測一個局面下最好的走法。【預測走法比估值一個局面容易,如果我們能夠準確估值局面,那麼最佳走法就是從走之後的局面中選擇對自己最有利的走法。或者用我們做問答系統常用的比喻,預測走法是搜索引擎,局面評估是問答系統。搜索引擎隻要把好的排前面就行瞭(甚至不一定要求排在第一,排在第一頁也就差不多瞭),而問答不僅要把好的排前面,而且還要知道這個最 好 的結果是否足夠 好 ,因為排序的好是相對 好 ,問答的好必須是絕對的 好 ,是唯一正確答案】。

Van Der Werf 等(2003)

最早用 CNN(當然還有用其它機器學習方法)來預測走法是 2003 年 Van Der Werf 等人的工作,他們用瞭很多手工構造的 feature 和預處理方法,他們取得瞭 25%的預測準確率。沒有細看論文,在 2006 年 Deep Learning 火之前,所以估計網絡的層次很淺。

Sutskever Nair(2008)

之後在 2008 年,這個時候 Deep 的神經網絡已經逐漸流行瞭。Sutskever Nair 用來 2 層的 CNN,第一層有 15 個 7*7 的 filter,第二層用瞭 5*5 的 filter,最後用瞭一個 softmax 層,輸出 19*19,表示每個可能走法的概率(當然需要後處理去掉不合法或者不合理的走法,比如違反棋規的打劫局面立即提回,或者在自己的眼裡下棋)。他們得到瞭 34%的預測準確率。不過有一點問題就是他們出來使用當前局面,還用瞭上一步走法(這個走子導致瞭當前局面,也就是對手的上一步走子),這個可能是有問題的,因為實際對局時對手的水平是不能確定的,用這個 feature 當然能提高 數字 上的準確率,但是對於下棋水平是否有負面影響是很難說的。

Clark Storkey(2015)

到瞭 2015 年,計算機的計算能力更強,深度神經網絡的層次也越來越深,在圍棋領域也能看到這種趨勢。Clark Storkey 使用瞭 8 層的 CNN,用的特征包括最原始的棋子(用瞭 3 個 feature plane,表示 361 個點是黑棋/白棋/空白),ko(劫)的約束,一個 group(塊)的氣。包括使用很多 trick 來保證 symmetries(因為圍棋的局面旋轉 90/180/270/360 度後以及做 180 度的鏡像之後應該是一樣的)。他們在 GoGoD 數據上的預測準確率達到瞭 41.1%,在 KGS 數據上的準確率達到 44.4%。GoGoD 上大部分是職業選手的對局,而 KGS 數據有很多業餘高手的對局。

Maddison 等(2015)

光是預測準確率,並不能說明下棋的水平。因此 Maddison 等人的工作把 Move Prediction 用到瞭實際的對弈當中。

他們的 CNN 增加到瞭 12 層,feature 也有所增加,下面是他們使用的 feature。

第一組 feature 是棋子(Stone)的顏色,和之前一樣。

第二組是棋子(所在 group)的氣,用 4 個 plane 來表示,分別是 1,2,3 =4 口氣。

第三組是走瞭這步棋之後的氣,用瞭 6 個 plane,代表 1,2,3,4,5, =6 口氣。

第四組表示這個走法在當前局面是否合法。

第五組表示這個棋子距離當前局面的輪次,比如上一步對手走的就是 1,上上一步自己走的就是 2。因為圍棋很多都是局部的戰役,所以這個 feature 應該是有用的。

第六組就是表示走這這後能吃對方多少個棋子。

第七組表示走這能否征子成功。

第八組 feature 比較有趣,按照作者的說法就是因為 KGS 的對弈水平參差不齊,如果隻留下高手的對局數據太少,所以用這個 feature。

他們在 KGS 數據上的預測準確率達到 55%。相對於 Clark 等人的工作,Maddison 的工作除瞭增加瞭 CNN 的層次(8 到 12),增加的 feature 應該是很有幫助的,比如 Turns Since,Capture Size 和 Ladder Move。尤其是 Ladder Move,下過圍棋的都知道征子能否成功對應是否要走這步棋已經局部的計算非常重要。

根據他們的使用,人類 6d 的預測準確率也隻有 52%,所以從預測走法的角度來說,CNN 的水平已經達到瞭 6d 的水平。

另外他們還做瞭實驗,證明 Clark 那些用來保證 symmetry 的 tricky 並沒有什麼卵用,直接簡單粗暴的把數據做 symmetric 變換後訓練就行瞭。

完全不用搜索直接用 Move Prediction 的結果下棋,能 97%的比率戰勝 GnuGo(這個是完全基於 alpha-beta 搜索的),作者並沒有說明隻用 Move Prediction 的絕對水平,而隻是和很差的 GnuGo 比較,所以應該水平不怎麼樣。

加上 MCTS 之後他們的水平能達到主流 MCTS 的開源軟件如 Pachi 和 Fuego 的水平。當然 CNN 的預測相對於 Simulation 來說是很慢的,他們的 GPU(4 個GeForce GTX Titan Black)評估 128 個局面需要 0.15s,而 CPU(16 Intel Xeon E52643 v2 3.5GHz)每秒可以 simulation 47,000 個局面。所以他們使用瞭異步的策略,先用先驗知識給出一個節點的 N(v),Q(v),先搜索著,等 GPU 運算完瞭再用 CNN 預測的勝率更新這些統計量。因此 CPU 和 GPU 的速度需要能大致匹配。

Yuandong Tian Yan Zhu(2015)

和 Google DeepMind 進行圍棋競賽的主要就是 Facebook Tian yuandong 他們瞭。在 Google 宣佈文章在 Nature 發表的前一天,他們在 arxiv 上發表瞭自己的工作(https://www.zhihu.com/topic/20038840)。

下面我們來看看他們的工作(《Better Computer Go Player with Neural Network and Long-Term Prediction》)。

使用的 feature:

除瞭使用之前工作的標準 feature 之外,他們增加瞭一些 feature,比如是否邊界,距離中心的遠近,是否靠近自己與對手的領土(不清楚怎麼定義領土的歸屬的)。此外對於之前的 feature 也進行瞭壓縮,之前都把特征分成黑棋或者白棋,現在直接變成己方和對手,這樣把模型從兩個變成瞭一個(之前需要給黑棋和白棋分別訓練一個模型)。此外的一個不同地方就是類似於 Multi-task 的 learning,同時預測未來 3 步棋的走法(而不是 1 步棋走法)。

為瞭與 Maddison 的工作比較,這裡隻用瞭標準的 features,比較的也是未來 1 步棋的準確率,可以發現這個方法還是有效的(不過我個人覺得作者應該自己復現 Maddison 的結果而不是直接用他的結果)

隻使用 DCNN 的圍棋軟件(不用 MCTS 搜索)

darkforest: 標準的 feature,一步的預測,使用 KGS 數據

darkforest1:擴展的 feature,三步預測,使用 GoGoD 數據

darkforest2:基於 darkforest1,fine-tuning 瞭一下參數。

把它們放到 KGS 上比賽,darkforest 能到 1k-1d 的水平,darkforest1 能到 2d 的水平,darkforest2 能到 3d 的水平【註:KGS 的 3d 應該到不瞭實際的業餘 3 段】,下面是具體的情況。

因此作者認為加入 3 步預測的訓練是有效的。

MCTS+DCNN

tree Policy: 走法首先通過 DCNN 排序,然後按順序選擇,除非累計的概率超過 0.8 或者超過一定次數的 top 走法。Expansion 使用的 UCT 算法。

Default Policy:參考的 Pachi 的 tree policy,有 3*3 的 pattern,對手打吃的點(opponent atari point),點眼的檢測(detection of nakade points)等。

這個版本的軟件叫 darkforest3,在 KGS 上能到 5d 的水平。

弱點

DCNN 預測的 top3/5 的走法可能不包含局部戰役的一個關鍵點,所以它的局部作戰能力還比較弱。

對於一些打劫點即使沒用,DCNN 還是會給高分。

當局面不好的情況下,它會越走越差(這是 MCTS 的弱點,因為沒有好的走法,模擬出來都是輸棋,一些比較頑強的抵抗的走法不能走出來)。

從上面的分析可以看出:DCNN 給出的走法大局觀還是不錯的,這正是傳統的方法很難解決的問題。局部的作戰更多靠計算, MCTS 會有幫助。但是我個人覺得 MCTS 搜索到結束,沒有必要。一個局部的計算也許可以用傳統的 alpha-beta 搜索來解決,比如征子的計算,要看 6 線有沒有對手的棋子,另外即使有對手的棋子,也要看位置的高低,這樣的計算 DCNN 是沒法解決的,需要靠計算。

AlphaGo

終於輪到主角上陣瞭,您可能不耐煩瞭。不過有瞭前面的基礎,理解 AlphaGo 就容易多瞭,這裡我們主要分析 AlphaGo 的創新點。

Policy Network Value Network

上圖是 AlphaGo 所使用的兩個網絡以及訓練過程。和之前的工作比,除瞭 Policy Network 之外,AlphaGo 多瞭一個 Value Network。

Policy Network 我們通過之前的介紹以及瞭解到瞭,它的作用是 tree Policy 時候的 Node Selection。(rollout 階段不能使用 Policy Network,因為 DCNN 的計算速度相對於 Simulation 來說太慢,所以 AlphaGo 又訓練瞭一個簡單的 Rollout Policy,它基於一些 local 的 pattern 之類的 feature 訓練瞭一個線性的 softmax)。

那麼 Value Network 又是做什麼用的呢?這個 Value Network 就是我們之前說的很多工作都 回避 的問題 給一個局面打分,就是之前在象棋和 minimax 部分討論的局面的估值函數,隻不過 AlphaGo 是使用深度強化學習 (deep reinforcment learning) 學習出來,而不是像 Deep Blue 或者其它象棋程序那樣是人工提取的 feature 甚至手工調整權重(當然 Deep Blue 是很多年前的工作瞭,現在也有用深度強化學習來搞國際象棋的,比如這篇論文《Giraffe: Using Deep Reinforcement Learning to Play Chess》)。

前面在討論 Tian 等人的工作時我們也分析過瞭,光用 Move Prediction 的軟件大局觀還不錯,但是局部的戰術就比較差,因為局部的戰術更多靠計算,人類也是這樣。圍棋由於估值函數比較困難,所以大都是用 MCTS 搜索到遊戲結束。但是 MCTS 如果盲目搜索(使用隨機的 default policy 去 rollout/playout)肯定不好,使用各種領域知識來縮小 rollout 的范圍就非常重要。前面我們也看到,傳統的 MCTS 隻能到 2d 的水平,而用 DCNN 的 tree policy 的 MCTS 就能到 5d 的水平(如果 default policy 如果能用 DCNN 指導肯定更好,可惜 DCNN 的速度太慢)。















【HTC 福利品】One M9 32G 5吋八核心智慧型手機拍攝技術【HTC 福利品】One M9 32G 5吋八核心智慧型手機怎麼拍才好看 【HTC 福利品】One M9 32G 5吋八核心智慧型手機 光源佈置【HTC 福利品】One M9 32G 5吋八核心智慧型手機心得分享價格比較【HTC 福利品】One M9 32G 5吋八核心智慧型手機PPT評價【HTC 福利品】One M9 32G 5吋八核心智慧型手機機型推薦 您或許有興趣的東西:

台灣電動床工廠 電動床

台灣電動床工廠 電動床

AUGI SPORTS|重機車靴|重機車靴推薦|重機專用車靴|重機防摔鞋|重機防摔鞋推薦|重機防摔鞋

AUGI SPORTS|augisports|racing boots|urban boots|motorcycle boots

arrow
arrow

    rpx197vt77 發表在 痞客邦 留言(0) 人氣()