版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PAGEii基于機(jī)器學(xué)習(xí)的圍棋博弈系統(tǒng)設(shè)計(jì)摘要: 本次設(shè)計(jì)的課題名為——基于機(jī)器學(xué)習(xí)的智能博弈系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),主要通過處理SGF格式的圍棋棋譜、對(duì)圍棋數(shù)據(jù)進(jìn)行編碼與特征處理、使用TensorFlow機(jī)器學(xué)習(xí)框架構(gòu)建神經(jīng)網(wǎng)絡(luò)并進(jìn)行深度學(xué)習(xí)訓(xùn)練,以生成一個(gè)具有一定智能度的AI模型,可以進(jìn)行基礎(chǔ)的圍棋博弈。在機(jī)器學(xué)習(xí)模型的構(gòu)建過程中,訓(xùn)練數(shù)據(jù)是一切的開始,本次課程設(shè)計(jì)通過解析SGF格式的圍棋數(shù)據(jù),對(duì)行棋過程進(jìn)行矩陣式編碼,并且以棋子氣的狀態(tài)以及棋局劫爭狀態(tài)為特征,構(gòu)建多個(gè)特征平面,以棋盤當(dāng)前特征作為輸入,下一步的行棋位置作為輸入,組合作為機(jī)器學(xué)習(xí)的訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練學(xué)習(xí);而為了更加有效的擬合數(shù)據(jù),創(chuàng)建以多層卷積層為基礎(chǔ)的卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行初始的監(jiān)督學(xué)習(xí);然后通過價(jià)值網(wǎng)絡(luò)的構(gòu)建以及強(qiáng)化學(xué)習(xí)更新優(yōu)化之前的訓(xùn)練模型,使其具備更高的智能度,最終得到一個(gè)相對(duì)智能的圍棋機(jī)器人。關(guān)鍵詞: 圍棋;卷積神經(jīng)網(wǎng)絡(luò);蒙特卡洛樹搜索;監(jiān)督學(xué)習(xí);強(qiáng)化學(xué)習(xí)目錄摘要 PAGEREF摘要\*romaniTOC\o"2-3"\h\z\t"標(biāo)題1,1,次標(biāo)題,1"目錄 iii1 緒論 11.1 研究背景 11.2 研究意義 11.3 研究現(xiàn)狀 11.4 研究內(nèi)容 21.5 論文結(jié)構(gòu). 32 博弈基礎(chǔ)理論與方法 42.1 圍棋博弈基礎(chǔ)知識(shí) 42.1.1 圍棋起源與規(guī)則 42.1.2 圍棋的復(fù)雜度 42.2 基本樹搜索理論 42.2.1 極小-極大搜索 42.2.2 α-β剪枝搜索 52.3 蒙特卡洛樹搜索與圍棋 62.3.1 簡單蒙特卡洛方法 72.3.2 蒙特卡洛樹搜索(MCTS) 72.3.3 MCTS應(yīng)用于圍棋 83 博弈系統(tǒng)數(shù)據(jù)處理 93.1 SGF棋譜簡介與解析 93.1.1 SGF文件簡介 93.1.2 SGF文件解析 93.2 棋局編碼與特征構(gòu)建 93.2.1 常見數(shù)據(jù)編碼 93.2.2 圍棋數(shù)據(jù)編碼 103.3 特征平面構(gòu)建 114 計(jì)算機(jī)圍棋神經(jīng)網(wǎng)絡(luò)的構(gòu)建 134.1 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)理論 134.1.1 TensorFlow與Keras 134.1.2 卷積神經(jīng)網(wǎng)絡(luò) 144.1.3 神經(jīng)相關(guān)算法 154.2 監(jiān)督學(xué)習(xí)與圍棋 164.2.1 監(jiān)督學(xué)習(xí)與無監(jiān)督學(xué)習(xí) 164.2.2 監(jiān)督學(xué)習(xí)訓(xùn)練圍棋 164.2.3 監(jiān)督學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)構(gòu)建 174.3 計(jì)算機(jī)圍棋強(qiáng)化學(xué)習(xí) 224.3.1 強(qiáng)化學(xué)習(xí)概念 224.3.2 強(qiáng)化學(xué)習(xí)實(shí)現(xiàn) 235 總結(jié) 25參考文獻(xiàn) 27 PAGE10 緒論研究背景人工智能作為近些年的熱門話題,熱度一直高居不下,并且逐漸進(jìn)入了我們的生活。人工智能就是機(jī)器模擬人類的思維進(jìn)行學(xué)習(xí)工作。作為人工智能領(lǐng)域的核心——機(jī)器學(xué)習(xí)使機(jī)器模擬人類神經(jīng)網(wǎng)絡(luò)的工作原理進(jìn)行學(xué)習(xí),解決了機(jī)器無法適應(yīng)復(fù)雜環(huán)境的難題,使人工智能領(lǐng)域有了新的實(shí)質(zhì)性發(fā)展。2016年,基于神經(jīng)網(wǎng)絡(luò)和蒙特卡洛樹搜索實(shí)現(xiàn)的圍棋AI—AlphaGo橫空出世,并打敗了圍棋界傳奇冠軍選手李世石,代表人類智慧巔峰的圍棋宣告被計(jì)算機(jī)突破REF_Ref72182442\r\h[1]。對(duì)其圍棋領(lǐng)域本身而言,圍棋徹底進(jìn)入了AI時(shí)代,眾多圍棋選手以AI作為訓(xùn)練對(duì)手,開發(fā)出新的圍棋布局、圍棋定式等,而它帶來的深度學(xué)習(xí)算法,也極大地促進(jìn)了人工智能領(lǐng)域的發(fā)展。其使用的機(jī)器學(xué)習(xí)平臺(tái)——TensorFlow經(jīng)過多年的發(fā)展也逐漸方便成熟,便于我們構(gòu)建機(jī)器學(xué)習(xí)模型!研究意義機(jī)器學(xué)習(xí)是研究計(jì)算機(jī)如何模擬人類學(xué)習(xí)行為,以獲取新的知識(shí)或技能,重新組織已有的知識(shí)并使之不斷改善提高的一門科學(xué)。而要獲得一個(gè)更接近現(xiàn)實(shí)的機(jī)器學(xué)習(xí)模型,則必須要有大量的數(shù)據(jù)對(duì)機(jī)器進(jìn)行訓(xùn)練而趨近完美。而圍棋作為人類智慧的頂峰,因其19*19的龐大棋盤、對(duì)局中存在的打劫、吃子、倒撲等手段,變化極其復(fù)雜,數(shù)據(jù)統(tǒng)計(jì)圍棋的變化甚至遠(yuǎn)超宇宙原子總數(shù)。所以以圍棋作為機(jī)器學(xué)習(xí)的對(duì)象,不僅可以發(fā)現(xiàn)圍棋中潛在的定式和行棋手段,對(duì)擴(kuò)充圍棋理論研究有重要的意義,并且其中運(yùn)用的神經(jīng)網(wǎng)絡(luò)、算法、樹搜索等理論對(duì)人工智能領(lǐng)域的發(fā)展和理解也有重要的指導(dǎo)意義。DeepMind公司開發(fā)的圍棋程序——AlphaGo,于2016年以4勝1負(fù)的成績戰(zhàn)勝了圍棋世界冠軍李世石,并在之后多次更新升級(jí),最后迭代出AlphaGoZero、AlphaZero、MuZero等版本,此后人類棋手在AI上難求一勝,代表人類智慧頂峰的圍棋宣告被計(jì)算機(jī)突破。對(duì)其圍棋領(lǐng)域本身而言,圍棋徹底進(jìn)入了AI時(shí)代,眾多圍棋選手以AI作為訓(xùn)練對(duì)手,開發(fā)出新的圍棋布局、圍棋定式等。AlphaGo的出現(xiàn)不止對(duì)圍棋領(lǐng)域影響深遠(yuǎn),它帶來的深度學(xué)習(xí)算法、卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用,也大大地促進(jìn)了人工智能領(lǐng)域的發(fā)展。自此機(jī)器學(xué)習(xí)被應(yīng)用于生活中的各個(gè)領(lǐng)域,如語音識(shí)別、自動(dòng)駕駛、智能推薦、圖片識(shí)別、蛋白質(zhì)結(jié)構(gòu)解析等。本次設(shè)計(jì)從圍棋領(lǐng)域研究機(jī)器學(xué)習(xí),探究機(jī)器學(xué)習(xí)實(shí)現(xiàn)原理和核心算法,感受該領(lǐng)域的美妙之處。并通過編程實(shí)現(xiàn)機(jī)器學(xué)習(xí)在圍棋領(lǐng)域的突破,認(rèn)識(shí)機(jī)器學(xué)習(xí)對(duì)于模擬人類思考的正確性,為今后人工智能、機(jī)器學(xué)習(xí)領(lǐng)域相關(guān)的應(yīng)用開發(fā)打下基礎(chǔ)!研究現(xiàn)狀國外的發(fā)展與現(xiàn)狀:上世紀(jì)90年代基于神經(jīng)網(wǎng)絡(luò)和Temporaldifference進(jìn)行自對(duì)弈訓(xùn)練的西洋雙陸棋AI(TD-Gammon)以及采用經(jīng)過國際象棋規(guī)則和棋盤評(píng)估修正后的極大極小算法進(jìn)行博弈的國際象棋AI(深藍(lán))相繼戰(zhàn)勝人類,但圍棋領(lǐng)域一直未被計(jì)算機(jī)攻克。直到2016年,DeepMind開發(fā)的AlphaGo以4勝1負(fù)的成績戰(zhàn)勝韓國傳奇選手李世石,表明圍棋也逐漸被計(jì)算機(jī)攻克,第二年,當(dāng)時(shí)圍棋界排名第一的柯潔也輸給了升級(jí)后的AlphaGoMaster版本,圍棋也徹底從代表著人類獨(dú)有智慧的神壇上跌落,此后在圍棋領(lǐng)域人類面對(duì)AI再無勝績。但圍棋AI的發(fā)展并未止步,DeepMind之后更是發(fā)布了AlphaGoZero、AlphaZero、MuZero版本,依靠更強(qiáng)大的算法和神經(jīng)網(wǎng)絡(luò),完全拋棄人類知識(shí)進(jìn)行學(xué)習(xí),在圍棋、國際象棋等棋類西游都達(dá)到世界最強(qiáng)水平。此后,各種圍棋AI也相繼問世并有著不俗的表現(xiàn)。國內(nèi)的發(fā)展:國內(nèi)圍棋AI在AlphaGo問世后蓬勃發(fā)展,近些年來出現(xiàn)了星陣圍棋、KataGo、PhoenixGo等人工智能圍棋,目前這些圍棋AI都可以輕松戰(zhàn)勝頂級(jí)職業(yè)選手。近些年來舉辦的世界人工智能圍棋大賽中,國內(nèi)研發(fā)的圍棋AI在比賽中大放異彩,2020年的比賽中更是占據(jù)了四強(qiáng)中的三個(gè)席位,這標(biāo)志著我國相關(guān)領(lǐng)域的蓬勃發(fā)展。研究內(nèi)容本次畢業(yè)設(shè)計(jì)主要學(xué)習(xí)了機(jī)器學(xué)習(xí)與TensorFlow機(jī)器學(xué)習(xí)框架的相關(guān)知識(shí),了解機(jī)器學(xué)習(xí)的基本原理、相關(guān)算法的實(shí)現(xiàn)以及如何使用TensorFlow構(gòu)建神經(jīng)網(wǎng)絡(luò)并進(jìn)行機(jī)器訓(xùn)練,具體研究內(nèi)容為:1.SGF圍棋文件處理:在KGS圍棋服務(wù)器上獲取近些年的圍棋對(duì)弈棋譜,了解SGF文件的格式以及存儲(chǔ)內(nèi)容的方式,為后續(xù)解析數(shù)據(jù)做準(zhǔn)備。2.圍棋數(shù)據(jù)特征編碼:解析SGF文件格式的棋譜文件,對(duì)棋譜的基本狀態(tài)進(jìn)行編碼,并進(jìn)行特征平面的設(shè)計(jì)和編碼,構(gòu)造原始處理數(shù)據(jù)(以第n手的棋盤狀態(tài)為特征輸入,下一步的落子點(diǎn)為輸出標(biāo)簽)。3.基礎(chǔ)監(jiān)督學(xué)習(xí):構(gòu)建多分類模型的神經(jīng)網(wǎng)絡(luò),將上一步驟獲取的特征作為神經(jīng)網(wǎng)絡(luò)的基本特征、下一步落子點(diǎn)為標(biāo)簽,設(shè)計(jì)由多個(gè)卷積層構(gòu)成隱含層的神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)的最后一層由softmax函數(shù)激活,然后對(duì)這些數(shù)據(jù)進(jìn)行擬合訓(xùn)練,得到一個(gè)初始的機(jī)器模型,該模型能夠?qū)崿F(xiàn):輸入的一個(gè)棋局狀態(tài),推測下一步落子點(diǎn)。4.強(qiáng)化學(xué)習(xí):上一步驟得到的初始模型只是基于一定數(shù)量的人類棋譜下對(duì)行棋動(dòng)作做的一個(gè)基本預(yù)測,競技水平相對(duì)比較低且并不具備較大的創(chuàng)新過程。為了優(yōu)化機(jī)器模型,以上個(gè)步驟監(jiān)督學(xué)習(xí)得到的模型為基礎(chǔ),通過收集“經(jīng)驗(yàn)—訓(xùn)練—評(píng)估”的過程對(duì)基礎(chǔ)模型進(jìn)行強(qiáng)化學(xué)習(xí)訓(xùn)練,得到加強(qiáng)后機(jī)器模型。5.價(jià)值網(wǎng)絡(luò)的構(gòu)建:通過監(jiān)督學(xué)習(xí)產(chǎn)生的策略網(wǎng)絡(luò)生成棋招,之后由增強(qiáng)的策略網(wǎng)絡(luò)進(jìn)行自對(duì)弈,直到產(chǎn)生勝負(fù)結(jié)果。以最終的勝負(fù)作為價(jià)值判斷的依據(jù),由此生成一個(gè)價(jià)值網(wǎng)絡(luò),用于判斷行棋的輸贏概率。論文結(jié)構(gòu).全文按以下組織方式進(jìn)行:第1章為緒論部分,主要介紹本次設(shè)計(jì)的研究背景、研究意義、研究現(xiàn)狀、論文內(nèi)容和論文結(jié)構(gòu);第2章主要介紹博弈的基本理論和方法,包括與圍棋起源與規(guī)則、圍棋復(fù)雜度、博弈樹的概念和博弈樹常用搜索算法;第3章主要介紹本次博弈系統(tǒng)的設(shè)計(jì)過程中對(duì)圍棋數(shù)據(jù)的處理過程,包括圍棋文件解析、圍棋數(shù)據(jù)編碼以及圍棋特征平面設(shè)計(jì);第4章主要介紹本次系統(tǒng)設(shè)計(jì)過程的神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)部分,包括神經(jīng)網(wǎng)絡(luò)基礎(chǔ)理論、使用到的相關(guān)算法、監(jiān)督學(xué)習(xí)過程和強(qiáng)化學(xué)習(xí)過程設(shè)計(jì);第5章為結(jié)論部分,對(duì)本文所做的設(shè)計(jì)進(jìn)行總結(jié)與反思,并展望課題的發(fā)展前景。博弈基礎(chǔ)理論與方法圍棋博弈基礎(chǔ)知識(shí)圍棋起源與規(guī)則圍棋是一種二人棋類游戲,相傳由五千年前我國的黃帝所創(chuàng)。后來傳入東亞各國和歐美地區(qū)。圍棋使用方形棋盤及黑白兩種顏色的圓形棋子進(jìn)行游戲,棋盤被橫縱19條線段(正式比賽多為19*19的棋盤,也有9路、13路和21路圍棋)分成361個(gè)交叉點(diǎn),在交叉點(diǎn)上落棋,雙方交替走棋,當(dāng)一個(gè)交叉點(diǎn)或一條棋鏈最外圍都被對(duì)方的棋子包圍則為死棋,落子后除非為死棋(從棋盤上清除)否則不能移動(dòng),最后以圍地多者為勝。因?yàn)楹诜较刃杏袃?yōu)先布局的優(yōu)勢,因此人為規(guī)定黑方在棋局結(jié)束時(shí)要給白方貼目(即黑方減去一些領(lǐng)地進(jìn)行勝負(fù)結(jié)算),我國的貼目數(shù)為7.5目,日本為6.5目。圍棋的復(fù)雜度圍棋長期以來被成為人類博弈智慧的巔峰,在于其博弈過程變化多端、非常復(fù)雜,需要龐大地計(jì)算量對(duì)棋局進(jìn)行評(píng)估。僅從結(jié)果論講,一盤棋的結(jié)果為3的361次方,而其中蘊(yùn)含的打劫吃子等手段,使得棋局變化更加復(fù)雜,而宇宙原子總數(shù)也僅僅約為10的80次方,相比之下圍棋的變化遠(yuǎn)超宇宙原子總數(shù),所以以窮舉法算盡圍棋的規(guī)則以達(dá)到攻克圍棋的目的是非常困難的REF_Ref72182464\r\h[2]。下表為三種棋類的復(fù)雜度對(duì)比如表2.1所示:表2.1棋類游戲復(fù)雜度表游戲圍棋井字棋國際象棋State-spaceComplexity31010Game-treeSize361!≈9!10Game-treeComplexity2501010基本樹搜索理論極小-極大搜索極小-極大搜索方法是博弈樹搜索的基本方法。首先需要設(shè)計(jì)一個(gè)評(píng)價(jià)函數(shù)對(duì)棋局進(jìn)行局面評(píng)估。在博弈過程中,我們總是希望自己落子時(shí)候能夠?qū)悍嚼孀畲蠡鴶撤铰渥訒r(shí)總是落在對(duì)我們最不利的位置,極小-極大搜索算法便是根據(jù)這個(gè)思想設(shè)計(jì)而來。極小-極大搜索的具體過程如下所示,附圖2.1:1、輪到我方落子時(shí),搜索一定深度內(nèi)棋局的所有狀態(tài),計(jì)算所有葉節(jié)點(diǎn)下的棋局評(píng)估得分。然后從最深一層的節(jié)點(diǎn)開始逆向計(jì)算;2、對(duì)于我方的落子點(diǎn),選擇子節(jié)點(diǎn)中的最大值;3、對(duì)于對(duì)方的落子點(diǎn),選擇子節(jié)點(diǎn)中的最小值;4、循環(huán)2、3過程直至得出根節(jié)點(diǎn)的值,根節(jié)點(diǎn)取值的分枝為當(dāng)前的最佳走法。圖2.1極小-極大搜索過程極小-極大搜索是一種假設(shè)對(duì)手每次回應(yīng)都如預(yù)料的情況下,從中找出對(duì)我方最有利的行棋步驟的搜索方法。但實(shí)際博弈過程中對(duì)手往往不會(huì)如我們所預(yù)測的步驟行棋,所以在使用極小-極大搜索算法時(shí),不管設(shè)定的搜索深度是多少,只適用于當(dāng)前一步棋的行棋選擇,再次輪到我方行棋時(shí),需要重新對(duì)棋局進(jìn)行搜索,來重新決定下一步棋如何走。對(duì)于棋局較小的游戲(如井字棋)而言,計(jì)算機(jī)使用極小-極大算法遍歷所有可能會(huì)非常方便,但對(duì)于國際象棋或圍棋這種局面復(fù)雜的游戲而言,棋局本身的復(fù)雜度都是宇宙級(jí)別的,并且通過極小-極大搜索生成的博弈樹將會(huì)非常龐大,通過極小極大值搜索將會(huì)是一個(gè)非常漫長的過程,所以要在復(fù)雜的棋類游戲中進(jìn)行樹搜索,需要一種策略來減少樹的部分,這種減少搜索樹大小的策略稱之為剪枝。α-β剪枝搜索Alpha-beta剪枝是一種降低極小-極大算法搜索樹大小的搜索算法。該算法核心為:評(píng)估出某策略的后續(xù)走法比之前策略的還差時(shí),不再計(jì)算該策略的后續(xù)。該算法和極小-極大算法所得結(jié)論相同,但搜索時(shí)規(guī)避了不具搜索價(jià)值的分枝。Alpha-eta剪枝建立在兩個(gè)基礎(chǔ)上:1、整個(gè)博弈過程屬于零和博弈,即一方的收益必然對(duì)應(yīng)著另一方的損失;2、每一方在行動(dòng)時(shí)總會(huì)選擇使自己利益最大化的決策。在上述前提下,α-β剪枝算法的核心思想就是:有一個(gè)選擇A和選擇B,在得知B選擇不如A選擇好,那么就不需要再考慮B選擇的具體情況。以2.2.1中的樹形結(jié)構(gòu)圖為基礎(chǔ),進(jìn)行剪枝的過程如圖2.2所示:1、對(duì)于紅色方的第一個(gè)分支的5和1,選擇對(duì)自己最有利的5,并向前回溯,存入上一層的節(jié)點(diǎn)中;2、對(duì)于藍(lán)色方而言,選擇對(duì)自己最有利的,所以以目前的搜索情況看,需要選擇小于等于5的節(jié)點(diǎn);3、紅色方繼續(xù)搜索下一分支,發(fā)現(xiàn)有大于5的6,所以向前回溯的過程中,上層節(jié)點(diǎn)必然大于等于6;4、根據(jù)第一次的搜索情況,藍(lán)色方要小于等于5,此時(shí)6的節(jié)點(diǎn)對(duì)自己更不利,必然不會(huì)選擇,所以紅色方第二次搜索過程中之后的節(jié)點(diǎn)無需進(jìn)行,剪枝完成;5、循環(huán)以上過程,進(jìn)行回溯。圖2.2α-β剪枝搜索過程蒙特卡洛樹搜索與圍棋蒙特卡洛樹搜索又稱隨機(jī)抽樣方法,是以概率和統(tǒng)計(jì)理論方法為基礎(chǔ)的一種方法,是使用隨機(jī)數(shù)來解決計(jì)算問題的方法。傳統(tǒng)的經(jīng)驗(yàn)方法由于不能逼近真實(shí)的物理過程,難以得到滿意的結(jié)果,而蒙特卡洛樹搜索通過模擬采樣能夠真實(shí)地預(yù)測現(xiàn)實(shí)情況并且可以得到相對(duì)滿意的結(jié)果。蒙特卡洛方法通常將所求解的問題同一定的概率模型相聯(lián)系,用電子計(jì)算機(jī)實(shí)現(xiàn)抽樣模擬與統(tǒng)計(jì),以求得近似解REF_Ref72182519\r\h[3]。簡單蒙特卡洛方法簡單蒙特卡羅搜索基于一個(gè)強(qiáng)化學(xué)習(xí)模型Mv和一個(gè)模擬策略π.在此基礎(chǔ)上,對(duì)于當(dāng)前我們要選擇動(dòng)作的狀態(tài)St,對(duì)每一個(gè)可能采樣的動(dòng)作a{S_t,a,R_(t+1)^k,A_(t+1)^k,……S_t^k}k+1K對(duì)于每個(gè)(StQa
簡單蒙特卡羅搜索可以處理中等規(guī)模的問題。但是對(duì)于圍棋這種狀態(tài)動(dòng)作數(shù)量級(jí)非常大的問題,搜索過程會(huì)變得非常慢。同時(shí),由于使用蒙特卡羅法計(jì)算其動(dòng)作價(jià)值函數(shù),模擬采樣得到的一些中間狀態(tài)和對(duì)應(yīng)行為的價(jià)值就被忽略了。蒙特卡洛樹搜索(MCTS)MCTS不再對(duì)當(dāng)前狀態(tài)St每個(gè)動(dòng)作都要進(jìn)行K次模擬采樣,而是總共對(duì)當(dāng)前狀態(tài)St進(jìn)行K次采樣,這樣采樣到的動(dòng)作可能只是動(dòng)作全集的一部分。MCTS降低了采樣的數(shù)量和采樣后的搜索計(jì)算,而代價(jià)是動(dòng)作全集中的很多動(dòng)作可能沒有采樣到,會(huì)錯(cuò)失好的動(dòng)作選擇。在MCTS中,基于一個(gè)強(qiáng)化學(xué)習(xí)模型Mv和一個(gè)模擬策略π,當(dāng)前狀態(tài)S{S_t,a,R_(t+1)^k,A_(t+1)^k,……S_t^k}k+1K采樣完畢后,基于采樣結(jié)果構(gòu)建MCTS的搜索樹,然后近似計(jì)算QSt,aQaMCTS搜索的策略分為兩個(gè)階段:第一個(gè)是樹內(nèi)策略:為當(dāng)模擬采樣得到的狀態(tài)存在于當(dāng)前的搜索樹時(shí)使用的策略。樹內(nèi)策略可以使用??貪婪策略,隨著模擬的進(jìn)行策略可以得到持續(xù)改善,還可以使用上限置信區(qū)間算法UCT;第二個(gè)是默認(rèn)策略:如果當(dāng)前狀態(tài)不在搜索樹內(nèi),使用默認(rèn)策略完成整個(gè)狀態(tài)序列的采樣,并把當(dāng)前狀態(tài)納入到搜索樹中REF_Ref72182612\r\h[5]。MCTS應(yīng)用于圍棋在圍棋游戲中,一步棋只有在棋局結(jié)束才能得到真正的結(jié)果,一次采樣要到棋局結(jié)束然后把結(jié)果反饋到之前的所有節(jié)點(diǎn)中。對(duì)于MCTS的樹結(jié)構(gòu),在節(jié)點(diǎn)上保存狀態(tài)對(duì)應(yīng)的歷史勝負(fù)記錄,在每條邊上保存采樣的動(dòng)作。以圖2.3為例,MCTS的搜索共有四步:圖2.3蒙特卡洛樹搜索過程1、選擇:從根節(jié)點(diǎn)開始,每次都選一個(gè)價(jià)值最高的節(jié)點(diǎn),一般使用UCT選擇分?jǐn)?shù)最高的節(jié)點(diǎn),直到來到一個(gè)從未擴(kuò)展過的節(jié)點(diǎn),如圖中的3/3節(jié)點(diǎn),然后進(jìn)入第二步;2、擴(kuò)展:在這個(gè)未擴(kuò)展的子節(jié)點(diǎn)上加一個(gè)0/0的子節(jié)點(diǎn),表示沒有記錄參考,然后進(jìn)入第三步;3、仿真:從上面沒有試過的行棋法開始,使用監(jiān)督學(xué)習(xí)得到的快速走子策略至棋局結(jié)束,得出勝負(fù)結(jié)果??焖僮咦硬呗允且环N速度快但不是很精確的策略,之所以選擇這個(gè)策略,是因?yàn)槿绻x擇更具價(jià)值的策略,模擬的棋局質(zhì)量可能會(huì)有很大提高,但由于耗時(shí)增加,在單位時(shí)間內(nèi)的模擬次數(shù)減少,不一定會(huì)棋力更強(qiáng)。4、回溯:將最后得到的勝負(fù)結(jié)果回溯加到MCTS樹結(jié)構(gòu)上。新加入的節(jié)點(diǎn)也要加上一次勝負(fù)歷史記錄,如上圖第四圖所示。博弈系統(tǒng)數(shù)據(jù)處理SGF棋譜簡介與解析SGF文件簡介SGF(SmartGameFormat)全稱為智能游戲格式,開發(fā)于上世紀(jì)90年代,是一種基于文本的簡單格式,雖然存儲(chǔ)形式為文本,但是表達(dá)力很強(qiáng),可用于存儲(chǔ)多種棋類游戲的過程以及游戲的擴(kuò)充(如職業(yè)選手的評(píng)論)?,F(xiàn)代棋譜多用SGF格式進(jìn)行存儲(chǔ),圍棋的SGF棋譜從KGS圍棋服務(wù)器上下載得到。SGF文件解析SGF元數(shù)據(jù)的格式是用兩個(gè)大寫字母表示一個(gè)屬性名稱,然后再一個(gè)方括號(hào)內(nèi)指定它的值;對(duì)于落子點(diǎn),以W、B表示白子和黑子,落在第m行第n列的子,位置以第m個(gè)英文字母和第n個(gè)英文字母組合表示,如W[ab]表示落在第1行第1列的白子。以下列圍棋棋譜為例,文本前7行分別對(duì)應(yīng):當(dāng)前SGF版本(4)—圍棋的游戲編號(hào)(1)—棋盤尺寸(9*9)—讓子數(shù)(0)—貼目數(shù)(6.5)—使用日式規(guī)則(Japanese)—最終結(jié)果(白勝9.5目)。(;FF[4]GM[1]SZ[9]HA[O]KM[6.5]RU[Japanese]RE[W+9.5];B[ge];W[df];B[dg];W[eh];B[ct];W[be];B[eg];W[fh];B[de];W[ec];B[fb];W[eb];B[ea];W[da];B[fa];W[cb];B[bf];w[fc];B[gb];W[fe];B[gd];W[ig];B[bd];W[he])棋局編碼與特征構(gòu)建常見數(shù)據(jù)編碼對(duì)于機(jī)器學(xué)習(xí)來講,數(shù)據(jù)源的選取是非常重要的,以最簡單的一次函數(shù)為例,我們需要提供輸入變量x、輸出值y為訓(xùn)練數(shù)據(jù),通過機(jī)器訓(xùn)練擬合y關(guān)于x的函數(shù)式,最終得到一個(gè):y=a×x+b的關(guān)系式對(duì)未知的輸入x進(jìn)行輸出y的預(yù)測。而對(duì)于當(dāng)今機(jī)器學(xué)習(xí)應(yīng)用廣泛的分類問題來講,訓(xùn)練數(shù)據(jù)的選取則會(huì)復(fù)雜很多。以基礎(chǔ)的服飾分類問題為例,輸入數(shù)據(jù)為一定像素的圖片,輸出為服飾的類別,而神經(jīng)網(wǎng)絡(luò)不支持將圖片格式的數(shù)據(jù)傳入行進(jìn)訓(xùn)練,那么如何將圖片數(shù)據(jù)以及分類標(biāo)簽解析為能夠用做機(jī)器學(xué)習(xí)的訓(xùn)練數(shù)據(jù)呢?圖3.1α-β圖片編碼神經(jīng)網(wǎng)絡(luò)的輸入是張量(Tensor)形式的(image-height,image-width,color-channel),包含了圖像高度、寬度及顏色信息。不需要輸入batchsize。如果您不熟悉圖像處理,顏色信息建議您使用RGB色彩模式,此模式下,color-channel為(R,G,B)分別對(duì)應(yīng)RGB的三個(gè)顏色通道(colorchannel)。以圖3.1為例,我們構(gòu)建張量數(shù)據(jù)用來表征一張圖片的信息,張量的形狀為(28,28,3),可以簡單理解為大小為28*28*3的三維矩陣,參數(shù)分別對(duì)應(yīng)圖片的長度、高度、RGB色彩值,至于該一張圖片對(duì)應(yīng)的張量中具體的值為多少,由圖片本身以及數(shù)據(jù)歸一化處理后填入,圖片分類問題中的輸出值,即圖片的類別,也是不能直接用“鞋”、“襯衫”等字符串表示的,因?yàn)檫@些字符串并不具備數(shù)學(xué)特征,不能由輸入數(shù)據(jù)進(jìn)行運(yùn)算得來。原始數(shù)據(jù)集使用數(shù)字0~n用來分別表示不同類別,而為了數(shù)據(jù)能夠更好地進(jìn)行擬合,在機(jī)器訓(xùn)練開始之前,通常會(huì)把類別進(jìn)行獨(dú)熱編碼(One-Hot編碼)。獨(dú)熱編碼,又稱為一位有效編碼,主要是采用N位寄存器來對(duì)N個(gè)狀態(tài)進(jìn)行編碼,每個(gè)狀態(tài)都有獨(dú)特的寄存器位,并且在任意時(shí)候只有一位有效,寄存器利用0和1表示一些參數(shù),使用N位狀態(tài)寄存器來對(duì)N個(gè)狀態(tài)進(jìn)行編碼。對(duì)于上述圖片分類例子,假設(shè)有“鞋”、“襯衫”、“棉襖”三種類別,我們用三位數(shù)字表示其類別,分別用[0,0,1]、[0,1,0]、[1,0,0]表示。圍棋數(shù)據(jù)編碼在本次畢業(yè)設(shè)計(jì)的實(shí)例中,原始的SGF文件是不能直接用于機(jī)器訓(xùn)練的,需要解析后才能使用,回想圍棋的過程,簡單來說就是向棋盤上輪流落子,從計(jì)算機(jī)的角度來看,其實(shí)就是向一個(gè)數(shù)組賦值而已,不過這個(gè)數(shù)組是個(gè)二維數(shù)組,初值全為0,且后續(xù)賦值只有1和-1(分別代表黑方和白方),但是神經(jīng)網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù)為張量,所以我們不用數(shù)組而選擇一個(gè)二維矩陣進(jìn)行圍棋數(shù)據(jù)的編碼,并用多個(gè)19*19的矩陣表征不同的棋局特征。下列代碼描述了一個(gè)基本的根據(jù)棋盤字符串還原棋局的過程,結(jié)果如圖3.2所示:fromdlgo.gosgf.sgfimportSgf_gamefromdlgo.gosgf.goboard_fastimportGameState,Movefromdlgo.gotypesimportPointfromdlgo.utilsimportprint_boardsgf_content="(;GM[1]FF[4]SZ[9];B[ee];W[ef];B[ff]"+\";W[df];B[fe];W[fc];B[ec];W[gd];B[fb])"sgf_game=Sgf_game.from_string(sgf_content)game_state=GameState.new_game(19)foriteminsgf_game.main_sequence_iter():color,move_tuple=item.get_move()ifcolorisnotNoneandmove_tupleisnotNone:row,col=move_tuplepoint=Point(row+1,col+1)move=Move.play(point)game_state=game_state.apply_move(move)print_board(game_state.board)圖3.2棋盤狀態(tài)編碼還原特征平面構(gòu)建完成了圍棋數(shù)據(jù)的編后應(yīng)當(dāng)思考的問題是:訓(xùn)練數(shù)據(jù)應(yīng)該是什么結(jié)構(gòu)的呢?更具體來講,我們應(yīng)該輸入什么、輸出什么?首先我們假設(shè):將整個(gè)SGF棋譜解析全局解析后作為輸入數(shù)據(jù)傳入神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,那么輸出結(jié)果是什么?整個(gè)博弈過程結(jié)束后,能夠直觀地呈現(xiàn)在我們面前的是黑白雙方的輸贏、黑白雙方的目數(shù),思考一下,如果以這兩個(gè)參數(shù)作為輸出結(jié)果進(jìn)行機(jī)器訓(xùn)練,我們后續(xù)應(yīng)該如何對(duì)機(jī)器模型進(jìn)行機(jī)器測試?我們不難發(fā)現(xiàn),如果采用這樣的輸入輸出參數(shù)進(jìn)行訓(xùn)練,就算對(duì)于高度智能的模型,之后的檢驗(yàn)過程也將是:①輸入一個(gè)棋局狀態(tài);②機(jī)器模型通過分析得出當(dāng)前局面黑白雙方的目數(shù);③判斷當(dāng)前(僅當(dāng)前局面,不思考棋局深度)雙方誰更領(lǐng)先。如果采用上述的訓(xùn)練方法,很顯然,我們仿佛得到了一個(gè)點(diǎn)目機(jī)器,它并不具備深度思考并進(jìn)行博弈,僅僅是在數(shù)目而已。而我們真實(shí)的棋局過程是:①判斷當(dāng)前局面(包括劫爭、目數(shù)、活棋等);②思考如何解決當(dāng)下問題并考慮如何長遠(yuǎn)布局;③得出落子位置。我們所期待的最終的機(jī)器模型應(yīng)該具備以上的特點(diǎn),學(xué)習(xí)人的思路,最后通過數(shù)據(jù)訓(xùn)練與經(jīng)驗(yàn)累積成為一個(gè)高智能的博弈機(jī)器。基于上述過程,正確的數(shù)據(jù)應(yīng)當(dāng)是:以實(shí)時(shí)棋局狀態(tài)作為輸入,以下一步的落子點(diǎn)作為輸出。值得思考的是,表征棋局的狀態(tài)有很多,比如當(dāng)前棋局落子情況、劫爭、黑白子的氣等,這些都可以構(gòu)成特征平面并作為輸入數(shù)據(jù)進(jìn)行訓(xùn)練。本次設(shè)計(jì)分別進(jìn)行兩種特征構(gòu)建方式:第一種是構(gòu)建單一特征平面,該特征平面僅僅是當(dāng)前棋盤的落子情況,后續(xù)經(jīng)過訓(xùn)練發(fā)現(xiàn),以單一特征平面進(jìn)行機(jī)器訓(xùn)練,訓(xùn)練數(shù)據(jù)量大大減少、訓(xùn)練速度加快,經(jīng)過訓(xùn)練后對(duì)弈測試數(shù)據(jù)的預(yù)測率可達(dá)80%以上,可以仿照人的手法進(jìn)行下棋(比如開局星位布局、外圍作戰(zhàn)),但是博弈水平并不高,對(duì)于一些定式或者活棋的應(yīng)對(duì)并不理想。第二種特征構(gòu)建方式是構(gòu)建7個(gè)特征平面用來表征棋局狀態(tài),7個(gè)特征平面的構(gòu)建方式為:①黑方僅剩1口氣的子編碼為1,其余黑子為0②黑方僅剩2口氣的子編碼為1,其余黑子為0③黑方至少3口氣的子編碼為1,其余黑子為0④~⑤為白方進(jìn)行和黑方相同的編碼⑦由于劫爭不能落子的點(diǎn)標(biāo)記為1這種特征構(gòu)建方式更接近真實(shí)博弈過程中我們的思考方式,經(jīng)過訓(xùn)練后博弈水平比單一特征平面訓(xùn)練得出的模型要高一些,但是因?yàn)閿?shù)據(jù)量是單一平面的7倍,所以對(duì)于同樣的訓(xùn)練棋譜,需要更多的時(shí)間對(duì)所有數(shù)據(jù)進(jìn)行同次數(shù)的遍歷,并且需要更多次的數(shù)據(jù)遍歷才能達(dá)到比較高的預(yù)測率。以100份棋局為例,單一特征平面產(chǎn)生的數(shù)據(jù)全部數(shù)據(jù)大概為11000多,對(duì)全部數(shù)據(jù)進(jìn)行一次模擬過程大概需要30分鐘,每次模擬完成后使用訓(xùn)練數(shù)據(jù)進(jìn)行正確率檢驗(yàn),花費(fèi)的時(shí)間大約在5-10分鐘,進(jìn)行50次以上的全數(shù)據(jù)模擬即可達(dá)到85%以上的正確率;但是使用七個(gè)特征平面進(jìn)行訓(xùn)練,數(shù)據(jù)量翻倍,對(duì)全部數(shù)據(jù)進(jìn)行一次遍歷并進(jìn)行測試,大約需要花費(fèi)2.5~3個(gè)小時(shí)的時(shí)間,并且需要更多的全數(shù)據(jù)遍歷才能達(dá)到較高的正確率,對(duì)于電腦資源的消耗比較大。計(jì)算機(jī)圍棋神經(jīng)網(wǎng)絡(luò)的構(gòu)建神經(jīng)網(wǎng)絡(luò)基礎(chǔ)理論神經(jīng)網(wǎng)絡(luò)是一種計(jì)算模型,由大量的神經(jīng)元節(jié)點(diǎn)互聯(lián)形成。每個(gè)節(jié)點(diǎn)代表一種特定的輸出函數(shù),稱為激勵(lì)函數(shù)。每層的神經(jīng)元都由上層的多個(gè)神經(jīng)元加權(quán)運(yùn)算后得到。計(jì)算機(jī)神經(jīng)網(wǎng)絡(luò)是仿照生物神經(jīng)網(wǎng)絡(luò)工作原理所設(shè)計(jì)的一種學(xué)習(xí)模型,生物獲得的化學(xué)或物理信號(hào)通過神經(jīng)元的層層傳遞進(jìn)行工作,而計(jì)算機(jī)神經(jīng)網(wǎng)絡(luò)通過多層神經(jīng)元的加權(quán)計(jì)算,最終擬合出輸入值和輸出值存在的復(fù)雜關(guān)系,通過這種工作方式,計(jì)算機(jī)可以仿照人類思想進(jìn)行學(xué)習(xí),得到更逼近顯示的計(jì)算機(jī)模型。神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖4.1所示:圖4.1神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)TensorFlow與KerasTensorFlow是Google開發(fā)的開源機(jī)器學(xué)習(xí)平臺(tái),支持python、JavaScript以及C++程序開發(fā)語言,并且支持Windows、Mac、Linux以及移動(dòng)手機(jī)端等多種平臺(tái)。通過安裝TensorFlow,我們可以調(diào)度電腦資源進(jìn)行機(jī)器學(xué)習(xí)訓(xùn)練,TensorFlow可以使用GPU進(jìn)行硬件加速,往往可以比CPU運(yùn)算快很多倍。。Keras是基于TensorFlow和Theano的深度學(xué)習(xí)庫,是由python編寫而成的高層神經(jīng)網(wǎng)絡(luò)API。它是為了支持快速實(shí)踐而對(duì)TensorFlow的再次封裝,方便我們快速進(jìn)行模型構(gòu)建與訓(xùn)練,忽略神經(jīng)網(wǎng)絡(luò)的底層實(shí)現(xiàn)細(xì)節(jié)。顯卡支持Cuda的話,可以利用Cuda加速模型訓(xùn)練。(當(dāng)安裝TensorFlow-GPU后,電腦上有可用的GPU,代碼會(huì)自動(dòng)調(diào)度GPU進(jìn)行并行計(jì)算。)目前Keras已經(jīng)被TensorFlow收錄,成為其默認(rèn)的框架,是TensorFlow的高級(jí)APIREF_Ref72182626\r\h[6]。卷積神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)是指包含卷積層和稠密層的神經(jīng)網(wǎng)絡(luò),而卷積層的名稱來源于一種數(shù)學(xué)方法——卷積。卷積是一種數(shù)據(jù)過濾的方法,對(duì)于普通的矩陣運(yùn)算,卷積的操作為:將兩個(gè)矩陣相乘,然后將結(jié)果矩陣的所有元素相加得到一個(gè)標(biāo)量值。而對(duì)于實(shí)際應(yīng)用中更加復(fù)雜的卷積操作,比如檢測圖像中是否存在某種特殊標(biāo)記,具體的卷積操作為:①對(duì)于圖像矩陣N(尺寸為S*S),選取一個(gè)尺寸較小的矩陣a(稱為過濾器或卷積核),尺寸為s*s(s<S);②用過濾器a檢測圖像矩陣N中尺寸為s*s的所有分塊,生成一個(gè)新的矩陣R,新矩陣的大小為(S-s+1)*(S-s+1);③假設(shè)圖像中的某個(gè)特征,經(jīng)過過濾器檢驗(yàn)形成的新矩陣R存在某種特殊規(guī)律(比如矩陣R存在一行為全為1或其他特征),則可以將這個(gè)過濾器用于檢測圖像是否存在指定特征。如圖4.2所示:圖4.2α-β卷積運(yùn)算過程卷積被廣泛應(yīng)用于從圖像數(shù)據(jù)中抽取由價(jià)值的信息,在預(yù)測圍棋行棋位置正需要這個(gè)功能。在上面的例子中,我們需要選取一個(gè)特定的過濾器,但對(duì)于比較復(fù)雜的情況,這個(gè)過濾器是比較難以尋找的。不過在神經(jīng)網(wǎng)絡(luò)中,過濾器并不人為指定,而是通過方向傳播算法從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)出來。卷積層正是用于實(shí)現(xiàn)這個(gè)過程。在KerasAPI中,可以使用Conv2D()方法對(duì)二維的圍棋編碼數(shù)據(jù)進(jìn)行卷積運(yùn)算,以尋找圍棋中存在的復(fù)雜特征!一般為了更好的擬合數(shù)據(jù)或者特征比較模糊、難以尋找,實(shí)際神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)往往包含多個(gè)卷積層。通過卷積和池化,然后得到了眾多特征,稠密層的每一個(gè)節(jié)點(diǎn)都與這些特征節(jié)點(diǎn)相連構(gòu)成稠密層。稠密層的作用就是分類,每一個(gè)特征節(jié)點(diǎn)占有一定權(quán)重來決定輸入屬于那個(gè)分類,最終全部特征的加權(quán)共同決定了輸入所屬分類的權(quán)重或概率。在KerasAPI中,可以使用Dense()方法添加稠密層。神經(jīng)相關(guān)算法神經(jīng)網(wǎng)絡(luò)中的每個(gè)神經(jīng)元接受上一層神經(jīng)元的輸出值作為本神經(jīng)元的輸入值,并將輸入值傳遞給下一層。如果不使用激勵(lì)函數(shù),每一層節(jié)點(diǎn)的輸入都是上層輸出的線性函數(shù),無論神經(jīng)網(wǎng)絡(luò)有多少層,最終得到的輸入輸出模型都將是線性的。假設(shè)神經(jīng)網(wǎng)絡(luò)輸入為x,輸出為y,有多個(gè)隱藏層,每個(gè)隱藏層輸出為xi,權(quán)重和偏置項(xiàng)分別為ki、bi。第一層得出的輸入輸出關(guān)系為:x1=k1x+b1,之后的隱藏層得出的輸入輸出關(guān)系為:x而實(shí)際應(yīng)用中更多的是非線性的關(guān)系,所以需要使用非線性函數(shù)作為激活函數(shù),這樣每一層都可以得到更為復(fù)雜的函數(shù)關(guān)系,神經(jīng)網(wǎng)絡(luò)表達(dá)能力就更加強(qiáng)大,研究表明使用激活函數(shù)激活幾乎可以模擬任意函數(shù)。損失函數(shù)是用來評(píng)估模型的預(yù)測值與真實(shí)值的誤差程度,損失函數(shù)越小,模型的數(shù)據(jù)擬合能力越強(qiáng),神經(jīng)網(wǎng)絡(luò)中常用的損失函數(shù)有均方誤差損失函數(shù)、交叉熵?fù)p失函數(shù)等。Relu激活函數(shù)Relu函數(shù)又稱為線性整流函數(shù),一般解析式為fx=max?(0,x), 即在x>0時(shí)候y=x,x≤0時(shí)y圖4.3Relu函數(shù)圖Softmax激活函數(shù)Softmax激活函數(shù)將多個(gè)神經(jīng)元的輸出映射到(0,1)區(qū)間內(nèi),可以看成是當(dāng)前輸出是屬于各個(gè)分類的概率,因?yàn)閺V泛應(yīng)用于多分類問題,解析式為:Si=監(jiān)督學(xué)習(xí)與圍棋監(jiān)督學(xué)習(xí)訓(xùn)練圍棋AlphaGo的初代版本前期是基于監(jiān)督學(xué)習(xí)的實(shí)現(xiàn)過程,簡單來說,監(jiān)督學(xué)習(xí)就是一個(gè)有輸入且有對(duì)應(yīng)輸出的數(shù)據(jù)擬合過程,無監(jiān)督學(xué)習(xí)因?yàn)橛?xùn)練數(shù)據(jù)沒有輸出,而是更像是一種“聚類”過程。我們本次的設(shè)計(jì)也是采用監(jiān)督學(xué)習(xí)進(jìn)行初始模型的構(gòu)建:正如3.3中分析的過程一樣,以棋局狀態(tài)為輸入,以下一步落子點(diǎn)為輸出,二者作為訓(xùn)練數(shù)據(jù)進(jìn)行監(jiān)督學(xué)習(xí)訓(xùn)練。這個(gè)訓(xùn)練階段是通過分析近些年來的人類棋譜的特征,通過神經(jīng)網(wǎng)絡(luò)訓(xùn)練機(jī)器模型,使機(jī)器能夠根據(jù)棋局狀態(tài)對(duì)下一步的行棋動(dòng)作進(jìn)行預(yù)測。通過初期監(jiān)督學(xué)習(xí)訓(xùn)練出的機(jī)器模型可以稱為一個(gè)快速走子網(wǎng)絡(luò),它的作用是針對(duì)棋局狀態(tài),預(yù)測出下一步最有可能落子的幾個(gè)位置,這些行棋位置對(duì)于當(dāng)前的機(jī)器模型和棋局深度來講并不一定是較優(yōu)選擇,但是這些是根據(jù)人類棋譜進(jìn)行數(shù)學(xué)運(yùn)算后得出的“普遍”選擇,這里所說的“普遍”是指通過神經(jīng)網(wǎng)絡(luò)訓(xùn)練的機(jī)器認(rèn)為這些落點(diǎn)符合某種規(guī)律,所以選擇這些落點(diǎn)。以圖4.4的引征為例,下列藍(lán)色標(biāo)記點(diǎn)都可以作為征子進(jìn)行選擇,而當(dāng)前機(jī)器的模型通過訓(xùn)練可以得出這幾個(gè)落點(diǎn)概率較大可供選擇,但是并不能通過思考棋局深度來選出對(duì)后續(xù)行棋過程價(jià)值較高的點(diǎn),而只是根據(jù)監(jiān)督學(xué)習(xí)得來的公式計(jì)算出一個(gè)概率值,然后選擇概率最大的進(jìn)行落子。圖4.4圍棋引征圖所以當(dāng)前階段的模型是不具備思考深度的,無法對(duì)后續(xù)棋局進(jìn)行運(yùn)算。而這個(gè)初級(jí)模型得到的這些位置的選擇,也是為后續(xù)強(qiáng)化學(xué)習(xí)中蒙特卡洛樹搜索過程提供采樣依據(jù),使后續(xù)能夠高效地采樣模擬,模擬更加真實(shí)的博弈過程,構(gòu)建更有效的價(jià)值網(wǎng)絡(luò),以提高博弈機(jī)器人的智能度。監(jiān)督學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)構(gòu)建在第3章節(jié)我們已經(jīng)進(jìn)行了圍棋數(shù)據(jù)的處理,訓(xùn)練數(shù)據(jù)由兩部分組成:①表征棋局多個(gè)特征的19*19的矩陣②經(jīng)過獨(dú)熱編碼后的代表落子位置的長度為361的向量本次設(shè)計(jì)我們選擇構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行擬合,之所以選擇構(gòu)建卷積神經(jīng)網(wǎng)絡(luò),卷積層的參數(shù)通常比與其復(fù)雜度相似的稠密曾要少的多,在設(shè)計(jì)之初進(jìn)行了一次實(shí)驗(yàn),在同樣的數(shù)據(jù)量,當(dāng)使用卷積模型后,正確率提高3倍的同時(shí),參數(shù)數(shù)量僅僅是線性模型的75%左右,這大大提高了模型的訓(xùn)練速度。但是在計(jì)算上比稠密層所使用的常規(guī)矩陣乘法代價(jià)更高昂。本次博弈系統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)主要由多層卷積層和稠密層以及填零層組成,具體設(shè)計(jì)過程為:①使用填零層擴(kuò)充輸入數(shù)據(jù):輸入數(shù)據(jù)為19*19的矩陣,考慮到需要使用多層卷積層,而每次卷積之后會(huì)將上一層輸入圖像縮小,我們?cè)诿看问褂镁矸e層之前,首先需要對(duì)輸入圖像進(jìn)行擴(kuò)充,即在原輸入矩陣的外圍進(jìn)行多層的填0操作。KerasAPI提供了一個(gè)非常實(shí)用的填0層工具——ZeroPadding2D(填0層),所以我們?cè)诿看谓⒕矸e層前,都先使用填0層認(rèn)為地增加卷積層的輸入尺寸,以此來避免卷積操作過度地縮小輸入數(shù)據(jù),如下面代碼所示(神經(jīng)網(wǎng)絡(luò)的第一層需要指定輸入?yún)?shù)的形狀,我們?cè)诘谝粚泳褪褂昧颂?層,所以需要在第一個(gè)填0層指定input_shape參數(shù)):ZeroPadding2D((3,3),input_shape=input_shape,data_format='channels_first')ZeroPadding2D((2,2),data_format='channels_first'), ②卷積層設(shè)計(jì):通過查閱資料我們得知,在19*19的圍棋數(shù)據(jù)訓(xùn)練中,過濾器的大小為5~10相對(duì)比較合適,所以我們選擇5*5和7*7的卷積核,而對(duì)于過濾器數(shù)量的選擇,100以下相對(duì)比較合適。如果過濾器的數(shù)量選擇過多的話,構(gòu)建出的模型參數(shù)的數(shù)量將會(huì)非常龐大,當(dāng)然我們也可以選擇使用池化層(Pooling)縮減空間、減少模型的參數(shù): 池化層(Pooling)是在卷積深度學(xué)習(xí)中比較常用的一種技術(shù),他是通過將圖像的各個(gè)分塊合并成單個(gè)值,來對(duì)圖像進(jìn)行向下采樣,以此縮小輸入數(shù)據(jù)的尺寸,減少上一層的神經(jīng)元的數(shù)量。以一個(gè)8*8的矩陣為例,我們采用一個(gè)2*2的分塊、以最大池化策略進(jìn)行空間縮減,具體過程為:將8*8的矩陣分成16個(gè)2*2的塊,每一個(gè)塊級(jí)矩陣都取其中的最大值來代替當(dāng)前分塊,最終形成一個(gè)4*4的矩陣,原來的64個(gè)參數(shù)就被縮減為16個(gè)參數(shù)。 考慮到圍棋的變化非常復(fù)雜,可能需要更多的參數(shù)來對(duì)圍棋數(shù)據(jù)進(jìn)行擬合,所以本次設(shè)計(jì)并沒有采用池化層對(duì)每一個(gè)卷積層的輸出參數(shù)進(jìn)行縮減,對(duì)于每一個(gè)卷積層,使用ReLU激活函數(shù)進(jìn)行激活REF_Ref72182570\r\h[4],具體代碼如下:Conv2D(64,(7,7),padding='valid',data_format='channels_first'),Activation('relu'),Conv2D(64,(5,5),data_format='channels_first'),Activation('relu'), ③稠密層的設(shè)計(jì):經(jīng)過多個(gè)卷積層對(duì)輸入數(shù)據(jù)進(jìn)行處理后,我們可以得到多維的輸出參數(shù),但是Dense層的輸入為向量(一維數(shù)據(jù)),所以我們需要先將卷積操作后的數(shù)據(jù)展平到一維,之后再傳入一個(gè)或多個(gè)Dense層,所以卷積層之后首先使用KerasAPI的Flatten(),然后再傳入Dense層。關(guān)于Dense層,我們也使用ReLU激活函數(shù)進(jìn)行激活,并設(shè)置輸出參數(shù)為1024,代碼如下所示:keras.layers.Flatten(),keras.layers.Dense(1024),keras.layers.Activation('relu'), ④輸出層的設(shè)計(jì):對(duì)于整個(gè)機(jī)器模型,我們希望通過棋局狀態(tài)得到下一步的落子位置,基于這個(gè)思想,我們最后一層的輸出應(yīng)該是一個(gè)對(duì)全棋盤落子點(diǎn)的概率預(yù)測,最終又回到了分類問題上。所以最終我們?yōu)镈ense層添加一個(gè)softmax激活層,因?yàn)槠灞P大小為19*19,所以最終的輸出應(yīng)該是一個(gè)361的向量,表示落子概率分布,具體代碼如下所示:go_board_rows,go_board_cols=19,19num_classes=go_board_rows*go_board_colsmodel.add(keras.layers.Dense(num_classes,activation='softmax')) 至此監(jiān)督學(xué)習(xí)階段的神經(jīng)網(wǎng)絡(luò)已經(jīng)基本構(gòu)建完畢,核心層神經(jīng)網(wǎng)絡(luò)層代碼如下:from__future__importabsolute_importimporttensorflowastffromtensorflowimportkerasfromtensorflow.python.keras.layersimportZeroPadding2D,Conv2D,Activation,Flatten,Densedeflayers(input_shape):return[ZeroPadding2D((3,3),input_shape=input_shape,data_format='channels_first'),Conv2D(64,(7,7),padding='valid',data_format='channels_first'),Activation('relu'),ZeroPadding2D((2,2),data_format='channels_first'),Conv2D(64,(5,5),data_format='channels_first'),Activation('relu'),ZeroPadding2D((2,2),data_format='channels_first'),Conv2D(64,(5,5),data_format='channels_first'),Activation('relu'),ZeroPadding2D((2,2),data_format='channels_first'),Conv2D(48,(5,5),data_format='channels_first'),Activation('relu'),ZeroPadding2D((2,2),data_format='channels_first'),Conv2D(48,(5,5),data_format='channels_first'),Activation('relu'),ZeroPadding2D((2,2),data_format='channels_first'),Conv2D(32,(5,5),data_format='channels_first'),Activation('relu'),ZeroPadding2D((2,2),data_format='channels_first'),Conv2D(32,(5,5),data_format='channels_first'),Activation('relu'),keras.layers.Flatten(),keras.layers.Dense(1024),keras.layers.Activation('relu'),]input_shape=(encoder.num_planes,go_board_rows,go_board_cols)model=keras.Sequential()network_layers=layers(input_shape)forlayerinnetwork_layers:model.add(layer)model.add(keras.layers.Dense(num_classes,activation='softmax')) 然后調(diào)用Keras模型的summary()方法查看模型,如下圖4.5所示:model_save.summary()圖4.5神經(jīng)網(wǎng)絡(luò)各層詳情 然后使用KerasAPI的compile()方法對(duì)模型進(jìn)行編譯進(jìn)行模型編譯過程:①損失函數(shù)選擇:因?yàn)樵撃P褪怯糜谔幚矸诸悊栴},均方誤差在進(jìn)行連續(xù)范圍內(nèi)的數(shù)字預(yù)測問題上比較有效,所以使用分類交叉熵作為損失函數(shù);②優(yōu)化器選擇:另外在博弈過程中,棋局初始布局的幾步棋幾乎都在棋盤的星位附近,從來不會(huì)在最邊緣落子。而在棋局終盤階段,情況則相反。在深度學(xué)習(xí)模型中,最后一層都是尺寸和棋盤尺寸相同的稠密層。這一層的每個(gè)神經(jīng)元都對(duì)應(yīng)棋盤上的一個(gè)交叉點(diǎn)。如果使用SGD隨機(jī)梯度下降,所有神經(jīng)元的學(xué)習(xí)率都是一樣的。如果在選擇訓(xùn)練數(shù)據(jù)時(shí)做得不夠好,可能會(huì)導(dǎo)致學(xué)習(xí)率已經(jīng)下降了太多,以至于在終盤階段第1、2行上的動(dòng)作再也無法得到有用的更新,即再也沒有學(xué)習(xí)效果了。這正是全局設(shè)置學(xué)習(xí)率所帶來的問題。而要解決這個(gè)問題,可以利用采用了自適應(yīng)梯度方法的技術(shù)——Adagrad和Adadelta。當(dāng)擁有大量數(shù)據(jù),而數(shù)據(jù)中的模式出現(xiàn)頻率很低的時(shí)候,Adagrad和Adadelta的工作效果非常好。而當(dāng)前模型正具備這兩個(gè)條件:擁有大量的圍棋數(shù)據(jù),而且由于專業(yè)圍棋比賽極端復(fù)雜,以至于被專業(yè)人士認(rèn)為是標(biāo)準(zhǔn)定式的落子動(dòng)作組合在數(shù)據(jù)集中出現(xiàn)的頻率并不高。所以使用Adadelta優(yōu)化器優(yōu)化神經(jīng)網(wǎng)絡(luò);③評(píng)估條件的選擇:以accuracy評(píng)估模型實(shí)時(shí)訓(xùn)練過程的能力;具體代碼如下:pile(loss='categorical_crossentropy',optimizer='adadelta',metrics=['accuracy'])計(jì)算機(jī)圍棋強(qiáng)化學(xué)習(xí)通過監(jiān)督學(xué)習(xí)得到的圍棋機(jī)器人模型可以根據(jù)棋局狀態(tài)對(duì)下一步的行棋動(dòng)作進(jìn)行預(yù)測,但是這些預(yù)測只是根據(jù)人類棋譜的行棋動(dòng)作進(jìn)行的動(dòng)作模仿,機(jī)器模型只是歸納了眾多人類棋譜后,得出初步的行棋規(guī)律,確定行棋位置。但是機(jī)器人并不會(huì)像人類一樣通過計(jì)算之后幾手棋甚至幾十手棋評(píng)估棋局狀態(tài),進(jìn)行隨機(jī)應(yīng)變并下出具備“思考性”的棋,也就是說,此時(shí)的機(jī)器模型并不具備前瞻性預(yù)測。為了提高機(jī)器模型的博弈能力,我們需要對(duì)當(dāng)前模型進(jìn)行強(qiáng)化學(xué)習(xí)。強(qiáng)化學(xué)習(xí)概念強(qiáng)化學(xué)習(xí)是機(jī)器學(xué)習(xí)的范式和方法論,用于描述和解決智能體在與環(huán)境的交互過程中通過學(xué)習(xí)策略以達(dá)成回報(bào)最大化或?qū)崿F(xiàn)特定目標(biāo)的問題,通過強(qiáng)化學(xué)習(xí),可以對(duì)監(jiān)督學(xué)習(xí)得到的原始數(shù)據(jù)模型進(jìn)行提高,使原有模型可以遇到更多訓(xùn)練數(shù)據(jù)集中不存在的數(shù)據(jù),完善機(jī)器模型的擬合能力,使其更加完備。強(qiáng)化學(xué)習(xí)的常見模型是馬爾可夫決策過程(MarkovDecisionProcess,MDP)。MDP是一個(gè)代理采取行動(dòng)從而改變自己的狀態(tài)獲得獎(jiǎng)勵(lì)與環(huán)境發(fā)生交互的循環(huán)過程。求解強(qiáng)化學(xué)習(xí)問題所使用的算法可分為策略搜索算法和值函數(shù)算法兩類。深度學(xué)習(xí)模型可以在強(qiáng)化學(xué)習(xí)中得到使用,形成深度強(qiáng)化學(xué)習(xí)。不同于監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí),強(qiáng)化學(xué)習(xí)不要求預(yù)先給定任何數(shù)據(jù),而是通過接收環(huán)境對(duì)動(dòng)作的獎(jiǎng)勵(lì)獲得學(xué)習(xí)信息并更新模型參數(shù)。強(qiáng)化學(xué)習(xí)實(shí)現(xiàn)本次博弈系統(tǒng)的強(qiáng)化學(xué)習(xí)部分的具體實(shí)現(xiàn)過程為:價(jià)值網(wǎng)絡(luò)構(gòu)建本次設(shè)計(jì)選擇以棋局最終結(jié)果作為反饋進(jìn)行價(jià)值網(wǎng)絡(luò)的構(gòu)建,在博弈游戲中收獲只有兩種可能——贏或輸,而且都是在游戲結(jié)束時(shí)一次性獲得的,而且一局棋的勝利必定有一部分要?dú)w功于棋局早期的表現(xiàn),因此在構(gòu)建價(jià)值網(wǎng)絡(luò)的過程中,必須將最終收獲回溯到之前的每一次動(dòng)作,并且要計(jì)算一次行動(dòng)的回報(bào),應(yīng)該將這次行動(dòng)之后的所有收獲累加起來。計(jì)算行動(dòng)回報(bào)的部分代碼如下所示:forexp_indexinrange(exp_length):total_return[exp_index]=reword[exp_index]forfuture_reword_indexinrange(exp_index+1,exp_length):total_return[exp_index]+=reword[future_reword_index] 另外在博弈游戲中,一手棋對(duì)未來n個(gè)回合的影響是不一樣的,一般情況下,越遠(yuǎn)離某一次行動(dòng),受到這手棋的影響應(yīng)當(dāng)越小,所以在計(jì)算回報(bào)的過程中,應(yīng)當(dāng)對(duì)每次行動(dòng)進(jìn)行加權(quán)處理,行動(dòng)里的越遠(yuǎn),權(quán)重應(yīng)當(dāng)越小,這樣未來的收獲就會(huì)比近期的收獲影響小。我們可以采用收獲打折的技巧對(duì)行動(dòng)加權(quán),比如每一步行動(dòng)獲得下一步行動(dòng)的全部收獲,再下一步的行動(dòng)只獲得80%,以此進(jìn)行收獲加權(quán)處理。更改代碼如下所示:forexp_indexinrange(exp_length):discount=0.8total_return[exp_index]=reword[exp_index]forfuture_reword_indexinrange(exp_index+1,exp_length):total_return[exp_index]+=reword[future_reword_index]discount*=0.8 模型自對(duì)弈強(qiáng)化學(xué)習(xí)需要足夠多的經(jīng)驗(yàn)來進(jìn)行學(xué)習(xí)才能得到顯著提高,同時(shí)要考慮的是,如果一個(gè)初級(jí)模型以一個(gè)圍棋高手作為對(duì)手進(jìn)行強(qiáng)化學(xué)習(xí),因?yàn)樗竭^于低級(jí),最終可能甚至無法分辨自己的落子點(diǎn)哪個(gè)是正確的或者錯(cuò)誤的,而且由于對(duì)手遠(yuǎn)強(qiáng)于當(dāng)前模型,可能高手下錯(cuò)幾步也能取勝,因此難以從中學(xué)到經(jīng)驗(yàn),學(xué)習(xí)過程會(huì)比較緩慢;而當(dāng)機(jī)器模型選擇一個(gè)水平更低的模型進(jìn)行訓(xùn)練,可能會(huì)構(gòu)建出錯(cuò)誤的價(jià)值網(wǎng)絡(luò),出現(xiàn)“臭棋簍子越下越臭”的情況
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030細(xì)胞治療產(chǎn)品冷鏈運(yùn)輸要求分析報(bào)告
- 2025-2030細(xì)胞治療產(chǎn)業(yè)現(xiàn)狀與未來十年發(fā)展機(jī)遇分析
- 2025-2030細(xì)胞培養(yǎng)設(shè)備融資租賃模式與風(fēng)險(xiǎn)管理策略探討
- 2025-2030細(xì)胞培養(yǎng)肉監(jiān)管框架構(gòu)建與消費(fèi)者認(rèn)知度追蹤分析
- 2025-2030細(xì)胞培養(yǎng)肉技術(shù)突破與消費(fèi)者接受度調(diào)研報(bào)告
- 2025-2030細(xì)胞培養(yǎng)肉產(chǎn)業(yè)化進(jìn)程中的技術(shù)瓶頸與成本控制研究
- 2025-2030紙漿行業(yè)市場供需分析行業(yè)現(xiàn)狀投資潛力規(guī)劃研究報(bào)告
- 2025-2030系統(tǒng)增值電信業(yè)務(wù)創(chuàng)新發(fā)展啟示與行業(yè)技術(shù)演練改革
- 2025-2030知識(shí)產(chǎn)權(quán)服務(wù)中介機(jī)構(gòu)發(fā)展瓶頸突破與行業(yè)規(guī)范監(jiān)督研究
- 超市安全培訓(xùn)
- 安全事故案例-圖片課件
- 螺紋的基礎(chǔ)知識(shí)
- 九年級(jí)(初三)第一學(xué)期期末考試后家長會(huì)課件
- 蜂窩煤成型機(jī)課程設(shè)計(jì)說明書
- 創(chuàng)建魯班獎(jiǎng)工程工實(shí)施指南(word)
- DB31∕T 875-2015 人身損害受傷人員休息期、營養(yǎng)期、護(hù)理期評(píng)定準(zhǔn)則
- DBJ 33-T 1271-2022建筑施工高處作業(yè)吊籃安全技術(shù)規(guī)程(高清正版)
- 生物統(tǒng)計(jì)學(xué)(課堂PPT)
- 腫瘤內(nèi)科中級(jí)分章試題精選
- 衢州水亭門歷史文化商業(yè)街區(qū)運(yùn)營方案
- 劍橋少兒英語三級(jí)下最新期末試卷
評(píng)論
0/150
提交評(píng)論