<label id="jgr5k"></label>
    <legend id="jgr5k"><track id="jgr5k"></track></legend>

    <sub id="jgr5k"></sub>
  1. <u id="jgr5k"></u>
      久草国产视频,91资源总站,在线免费看AV,丁香婷婷社区,久久精品99久久久久久久久,色天使av,无码探花,香蕉av在线
      您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
      此為臨時鏈接,僅用于文章預覽,將在時失效
      人工智能開發者 正文
      發私信給汪思穎
      發送

      0

      AlphaZero 實戰:從零學下五子棋(附代碼)

      本文作者: 汪思穎 2018-01-15 09:41
      導語:通過自己動手從零訓練一個 AI

      雷鋒網 AI 科技評論按,本文作者一縷陽光,本文首發于知乎專欄強化學習知識大講堂,雷鋒網 AI 科技評論獲其授權轉載。

      AlphaZero 實戰:從零學下五子棋(附代碼)

      2 個多月前,AlphaGo Zero 橫空出世,完全從零開始,僅通過自我對弈就能天下無敵,瞬間刷爆朋友圈,各路大神分分出來解讀,驚嘆于其思想的簡單、效果的神奇。很快就有大神放出了開源版的 AlphaGo Zero,但是只有代碼,沒有訓練出來的模型,因為據大神推算,在普通消費級的電腦上想訓練出 AlphaGo Zero 的模型需要 1700 年!然而 DeepMind 在 AlphaGo Zero 的論文里只強調運行的時候需要 4 個 TPU,而完全沒有提及訓練過程的最大計算需求在于生成 self-play 數據,還引起了一點小爭議。

      還好,過了不到兩個月,在 12 月初,DeepMind 就在 Arxiv 上低調放出了更加通用的 AlphaZero 的論文。AlphaZero 幾個小時就征服圍棋、國際象棋和日本將棋的壯舉再次驚嘆世人,但同時 DeepMind 大方公開的 self-play 階段使用的 5000 個 TPU 也讓大家紛紛感嘆,原來是“貧窮限制了我們的想象力”!

      扯得有點遠了,讓我們回到這篇文章的正題:AlphaZero 實戰,通過自己動手從零訓練一個 AI,去體會 AlphaZero 自我對弈學習成功背后的關鍵思想和一些重要技術細節。這邊選擇了五子棋作為實踐對象,因為五子棋相對比較簡單,大家也都比較熟悉,這樣我們能更專注于 AlphaZero 的訓練過程,同時也能通過親自對陣,來感受自己訓練出來的 AI 慢慢變強的過程。

      經過實踐發現,對于在 6*6 的棋盤上下 4 子棋這種情況,大約通過 500~1000 局的 self-play 訓練(2 小時),就能訓練出比較靠譜的 AI;對于在 8*8 的棋盤上下 5 子棋這種情況,通過大約 2000~3000 局自我對弈訓練(2 天),也能得到比較靠譜的 AI。所以雖然貧窮,但我們還是可以去親身感受最前沿成果的魅力!完整代碼以及 4 個訓練好的模型已經上傳到了 github:https://github.com/junxiaosong/AlphaZero_Gomoku

      我們先來看兩局訓練好的 AI 模型(3000 局 self-play 訓練得到)對弈的情況,簡單感受一下:

      AlphaZero 實戰:從零學下五子棋(附代碼)

      每一步棋執行 400 次 MCTS 模擬

      AlphaZero 實戰:從零學下五子棋(附代碼)

      每一步棋執行 800 次 MCTS 模擬


      從上面的對局樣例可以看到,AI 已經學會了怎么下五子棋,知道什么時候要去堵,怎么樣才能贏,按我自己對陣 AI 的感受來說,要贏 AI 已經不容易了,經常會打平,有時候稍不留神就會輸掉。

      這里有一點需要說明,上面展示的兩局 AI 對弈中,AI 執行每一步棋的時候分別只執行了 400 次和 800 次 MCTS 模擬,進一步增大模擬次數能夠顯著增強 AI 的實力,參見 AlphaZero 論文中的 Figure 2(注:AlphaZero 在訓練的時候每一步只執行 800 次 MCTS simulations,但在評估性能的時候每一步棋都會執行幾十萬甚至上百萬次 MCTS 模擬)。

      下面,我結合 AlphaZero 算法本身,以及 github 上的具體實現,從自我對局和策略價值網絡訓練兩個方面來展開介紹一下整個訓練過程,以及自己實驗過程中的一些觀察和體會。

      自我對局(self-play)


      AlphaZero 實戰:從零學下五子棋(附代碼)
      self-play過程示意圖


      完全基于 self-play 來學習進化是 AlphaZero 的最大賣點,也是整個訓練過程中最關鍵也是最耗時的環節。這里有幾個關鍵點需要說明:

      1. 使用哪個模型來生成 self-play 數據?

      在 AlphaGo Zero 版本中,我們需要同時保存當前最新的模型和通過評估得到的歷史最優的模型,self-play 數據始終由最優模型生成,用于不斷訓練更新當前最新的模型,然后每隔一段時間評估當前最新模型和最優模型的優劣,決定是否更新歷史最優模型。

      而到了 AlphaZero 版本中,這一過程得到簡化,我們只保存當前最新模型,self-play 數據直接由當前最新模型生成,并用于訓練更新自身。直觀上我們可能會感覺使用當前最優模型生成的 self-play 數據可能質量更高,收斂更好,但是在嘗試過兩種方案之后,我們發現,在 6*6 棋盤上下 4 子棋這種情況下,直接使用最新模型生成 self-play 數據訓練的話大約 500 局之后就能得到比較好的模型了,而不斷維護最優模型并由最優模型生成 self-play 數據的話大約需要 1500 局之后才能達到類似的效果,這和 AlphaZero 論文中訓練 34 小時的 AlphaZero 勝過訓練 72 小時的 AlphaGo Zero 的結果也是吻合的。

      個人猜測,不斷使用最新模型來生成 self-play 數據可能也是一個比較有效的 exploration 手段,首先當前最新模型相比于歷史最優模型一般不會差很多,所以對局數據的質量其實也是比較有保證的,同時模型的不斷變化使得我們能覆蓋到更多典型的數據,從而加快收斂。

      2. 如何保證 self-play 生成的數據具有多樣性?

      一個有效的策略價值模型,需要在各種局面下都能比較準確的評估當前局面的優劣以及當前局面下各個 action 的相對優劣,要訓練出這樣的策略價值模型,就需要在 self-play 的過程中盡可能的覆蓋到各種各樣的局面。

      前面提到,不斷使用最新的模型來生成 self-play 數據可能在一定程度上有助于覆蓋到更多的局面,但僅靠這么一點模型的差異是不夠的,所以在強化學習算法中,一般都會有特意設計的 exploration 的手段,這是至關重要的。

      在 AlphaGo Zero 論文中,每一個 self-play 對局的前 30 步,action 是根據正比于 MCTS 根節點處每個分支的訪問次數的概率采樣得到的(也就是上面 Self-play 示意圖中的  AlphaZero 實戰:從零學下五子棋(附代碼) ,有點類似于隨機策略梯度方法中的探索方式),而之后的 exploration 則是通過直接加上 Dirichlet noise 的方式實現的( AlphaZero 實戰:從零學下五子棋(附代碼) ,有點類似于確定性策略梯度方法中的探索方式)。在我們的實現中,self-play 的每一步都同時使用了這兩種 exploration 方式,Dirichlet noise 的參數取的是 0.3,即 AlphaZero 實戰:從零學下五子棋(附代碼) , 同時 AlphaZero 實戰:從零學下五子棋(附代碼) .

      3. 始終從當前 player 的視角去保存 self-play 數據

      在 self-play 過程中,我們會收集一系列的 AlphaZero 實戰:從零學下五子棋(附代碼) 數據, AlphaZero 實戰:從零學下五子棋(附代碼) 表示局面, AlphaZero 實戰:從零學下五子棋(附代碼) 是根據 MCTS 根節點處每個分支的訪問次數計算的概率, AlphaZero 實戰:從零學下五子棋(附代碼) 是 self-play 對局的結果,其中 AlphaZero 實戰:從零學下五子棋(附代碼)AlphaZero 實戰:從零學下五子棋(附代碼) 需要特別注意從每一步的當前 player 的視角去表示。比如 AlphaZero 實戰:從零學下五子棋(附代碼) 中用兩個二值矩陣分別表示兩個 player 的棋子的位置,那么可以是第一個矩陣表示當前 player 的棋子位置,第二個矩陣表示另一個 player 的棋子位置,也就是說第一個矩陣會交替表示先手和后手 player 的棋子位置,就看 AlphaZero 實戰:從零學下五子棋(附代碼) 局面下誰是當前 player。 AlphaZero 實戰:從零學下五子棋(附代碼) 也類似,不過需要在一個完整的對局結束后才能確定這一局中每一個 AlphaZero 實戰:從零學下五子棋(附代碼) 中的 AlphaZero 實戰:從零學下五子棋(附代碼) ,如果最后的勝者是 AlphaZero 實戰:從零學下五子棋(附代碼) 局面下的當前 player,則 AlphaZero 實戰:從零學下五子棋(附代碼) ,如果最后的敗者是 AlphaZero 實戰:從零學下五子棋(附代碼) 局面下的當前 player,則 AlphaZero 實戰:從零學下五子棋(附代碼) ,如果最后打平,則 AlphaZero 實戰:從零學下五子棋(附代碼) .

      4. self-play 數據的擴充

      圍棋具有旋轉和鏡像翻轉等價的性質,其實五子棋也具有同樣的性質。在 AlphaGo Zero 中,這一性質被充分的利用來擴充 self-play 數據,以及在 MCTS 評估葉子節點的時候提高局面評估的可靠性。但是在 AlphaZero 中,因為要同時考慮國際象棋和將棋這兩種不滿足旋轉等價性質的棋類,所以對于圍棋也沒有利用這個性質。

      而在我們的實現中,因為生成 self-play 數據本身就是計算的瓶頸,為了能夠在算力非常弱的情況下盡快的收集數據訓練模型,每一局 self-play 結束后,我們會把這一局的數據進行旋轉和鏡像翻轉,將 8 種等價情況的數據全部存入 self-play 的 data buffer 中。這種旋轉和翻轉的數據擴充在一定程度上也能提高 self-play 數據的多樣性和均衡性。

      策略價值網絡訓練


      AlphaZero 實戰:從零學下五子棋(附代碼)
      策略價值網絡訓練示意圖


      所謂的策略價值網絡,就是在給定當前局面 AlphaZero 實戰:從零學下五子棋(附代碼) 的情況下,返回當前局面下每一個可行 action 的概率以及當前局面評分的模型。前面 self-play 收集到的數據就是用來訓練策略價值網絡的,而訓練更新的策略價值網絡也會馬上被應用到 MCTS 中進行后面的 self-play,以生成更優質的 self-play 數據。兩者相互嵌套,相互促進,就構成了整個訓練的循環。下面還是從幾個點分別進行說明:

      1. 局面描述方式

      在 AlphaGo Zero 中,一共使用了 17 個 AlphaZero 實戰:從零學下五子棋(附代碼) 的二值特征平面來描述當前局面,其中前 16 個平面描述了最近 8 步對應的雙方 player 的棋子位置,最后一個平面描述當前 player 對應的棋子顏色,其實也就是先后手。

      在我們的實現中,對局面的描述進行了極大的簡化,以 AlphaZero 實戰:從零學下五子棋(附代碼) 的棋盤為例,我們只使用了 4 個 AlphaZero 實戰:從零學下五子棋(附代碼) 的二值特征平面,其中前兩個平面分別表示當前 player 的棋子位置和對手 player 的棋子位置,有棋子的位置是 1,沒棋子的位置是 0。然后第三個平面表示對手 player 最近一步的落子位置,也就是整個平面只有一個位置是 1,其余全部是 0。 第四個平面,也就是最后一個平面表示的是當前 player 是不是先手 player,如果是先手 player 則整個平面全部為 1,否則全部為 0。

      其實在最開始嘗試的時候,我只用了前兩個平面,也就是雙方的棋子的位置,因為直觀感覺這兩個平面已經足夠表達整個完整的局面了。但是后來在增加了后兩個特征平面之后,訓練的效果有了比較明顯的改善。個人猜想,因為在五子棋中,我方下一步的落子位置往往會在對手前一步落子位置的附近,所以加入的第三個平面對于策略網絡確定哪些位置應該具有更高的落子概率具有比較大的指示意義,可能有助有訓練。同時,因為先手在對弈中其實是很占優勢的,所以在局面上棋子位置相似的情況下,當前局面的優劣和當前 player 到底是先手還是后手十分相關,所以第四個指示先后手的平面可能對于價值網絡具有比較大的意義。

      2. 網絡結構

      在 AlphaGo Zero 中,輸入局面首先通過了 20 或 40 個基于卷積的殘差網絡模塊,然后再分別接上 2 層或 3 層網絡得到策略和價值輸出,整個網絡的層數有 40 多或 80 多層,訓練和預測的時候都十分緩慢。

      所以在我們的實現中,對這個網絡結構進行了極大的簡化,最開始是公共的 3 層全卷積網絡,分別使用 32、64 和 128 個 AlphaZero 實戰:從零學下五子棋(附代碼) 的 filter,使用 ReLu 激活函數。然后再分成 policy 和 value 兩個輸出,在 policy 這一端,先使用 4 個 AlphaZero 實戰:從零學下五子棋(附代碼) 的 filter 進行降維,再接一個全連接層,使用 softmax 非線性函數直接輸出棋盤上每個位置的落子概率;在 value 這一端,先使用 2 個 AlphaZero 實戰:從零學下五子棋(附代碼) 的 filter 進行降維,再接一個 64 個神經元的全連接層,最后再接一個全連接層,使用 tanh 非線性函數直接輸出 AlphaZero 實戰:從零學下五子棋(附代碼) 之間的局面評分。整個策略價值網絡的深度只有 5~6 層,訓練和預測都相對比較快。

      3. 訓練目標

      前面提到,策略價值網絡的輸入是當前的局面描述 AlphaZero 實戰:從零學下五子棋(附代碼) ,輸出是當前局面下每一個可行 action 的概率 AlphaZero 實戰:從零學下五子棋(附代碼) 以及當前局面的評分 AlphaZero 實戰:從零學下五子棋(附代碼) ,而用來訓練策略價值網絡的是我們在 self-play 過程中收集的一系列的 AlphaZero 實戰:從零學下五子棋(附代碼) 數據。

      根據上面的策略價值網絡訓練示意圖,我們訓練的目標是讓策略價值網絡輸出的 action 概率 AlphaZero 實戰:從零學下五子棋(附代碼) 更加接近 MCTS 輸出的概率 AlphaZero 實戰:從零學下五子棋(附代碼) ,讓策略價值網絡輸出的局面評分 AlphaZero 實戰:從零學下五子棋(附代碼) 能更準確的預測真實的對局結果 AlphaZero 實戰:從零學下五子棋(附代碼)

      從優化的角度來說,我們是在 self-play 數據集上不斷的最小化損失函數: AlphaZero 實戰:從零學下五子棋(附代碼) ,其中第三項是用于防止過擬合的正則項。既然是在最小化損失函數,那么在訓練的過程中,如果正常的話我們就會觀察到損失函數在慢慢減小。

      下圖展示的是一次在 AlphaZero 實戰:從零學下五子棋(附代碼) 棋盤上進行五子棋訓練的過程中損失函數隨著 self-play 局數變化的情況,這次實驗一共進行了 3050 局對局,損失函數從最開始的 4 點幾慢慢減小到了 2.2 左右。

      AlphaZero 實戰:從零學下五子棋(附代碼)

      在訓練過程中,除了觀察到損失函數在慢慢減小,我們一般還會關注策略價值網絡輸出的策略(輸出的落子概率分布)的 entropy 的變化情況。

      正常來講,最開始的時候,我們的策略網絡基本上是均勻的隨機輸出落子的概率,所以 entropy 會比較大。隨著訓練過程的慢慢推進,策略網絡會慢慢學會在不同的局面下哪些位置應該有更大的落子概率,也就是說落子概率的分布不再均勻,會有比較強的偏向,這樣 entropy 就會變小。

      也正是由于策略網絡輸出概率的偏向,才能幫助 MCTS 在搜索過程中能夠在更有潛力的位置進行更多的模擬,從而在比較少的模擬次數下達到比較好的性能。

      下圖展示的是同一次訓練過程中觀察到的策略網絡輸出策略的 entropy 的變化情況。

      AlphaZero 實戰:從零學下五子棋(附代碼)

      另外,在漫長的訓練過程中,我們最希望看到的當然是我們訓練的 AI 正在慢慢變強。所以雖然在 AlphaZero 的算法流程中已經不再需要通過定期評估來更新最優策略,在我們的實現中還是每隔 50 次 self-play 對局就對當前的 AI 模型進行一次評估,評估的方式是使用當前最新的 AI 模型和純的 MCTS AI(基于隨機 rollout)對戰 10 局。

      pure MCTS AI 最開始每一步使用 1000 次模擬,當被我們訓練的 AI 模型 10:0 打敗時,pure MCTS AI 就升級到每一步使用 2000 次模擬,以此類推,不斷增強,而我們訓練的 AlphaZero AI 模型每一步始終只使用 400 次模擬。在上面那次 3050 局自我對局的訓練實驗中,我們觀察到:

      • 經過 550 局,AlphaZero VS pure_MCTS 1000 首次達到 10:0

      • 經過 1300 局,AlphaZero VS pure_MCTS 2000 首次達到 10:0

      • 經過 1750 局,AlphaZero VS pure_MCTS 3000 首次達到 10:0

      • 經過 2450 局,AlphaZero VS pure_MCTS 4000 取得 8 勝 1 平 1 負

      • 經過 2850 局,AlphaZero VS pure_MCTS 4000 取得 9 勝 1 負。

      OK,到這里整個 AlphaZero 實戰過程就基本介紹完了,感興趣的小伙伴可以下載我 github 上的代碼進行嘗試。為了方便大家直接和已經訓練好的模型進行對戰體驗,我專門實現了一個純 numpy 版本的策略價值前向網絡,所以只要裝了 python 和 numpy 就可以直接進行人機對戰啦,祝大家玩的愉快!^_^

      參考文獻:

      1. AlphaZero: Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm

      2. AlphaGo Zero: Mastering the game of Go without human knowledge

      雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

      AlphaZero 實戰:從零學下五子棋(附代碼)

      分享:
      相關文章

      編輯

      關注AI學術,例如論文
      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 人妖精品视频在线观看| 欧美肥胖老妇bbw| 久久久受www免费人成| 欧美亚洲另类自拍偷在线拍 | 在线观看亚洲欧美日本| www.熟女| 国产成人精品无码片区在线观看| 亚洲综合区小说区激情区| 中文字幕无码av波多野吉衣| 午夜福利理论片在线观看| 午夜福利影院不卡影院| 日本丰满老熟妇乱子伦| 国产精品秘?久久久久久| 伊人久久久| 精品久久久久久| 亚洲无码网| 高清欧美性猛交XXXX黑人猛交 | 人妻少妇精品| 窝窝午夜看片| 激情六月丁香婷婷四房播| 台南县| 日本不卡一区二区高清中文| 亚洲欧美成人综合| 亚洲成av人片在一线观看| 日韩在线视频观看免费网站| 中文字幕熟女人妻偷伦| 影音先锋男人在线资源资源网| 欧美日本在线一区二区三区| 女人扒开腿让男人桶到爽| 精品久久久中文字幕人妻| 91丝袜在线| 99精产国品一二三产区| 一根材综合成网| 国产亚洲精品久久久久蜜臀| 国产精品久久久久aaaa| 亚洲国产合集| 97在线视频人妻无码| 在线免费播放av观看| 动漫av网站免费观看| 台湾佬中文娱乐网址| 亚洲AV成人无码久久精品四虎|