怎麼在監督學習的基礎上做強化學習?

我參照alphago寫了個下五子棋的程序,先在預先準備的數據集上訓練一個策略網路(這步已基本完成,效果貌似還行,因為我有時後也玩不過它,當然我水平也很一般),然後想在這個基礎上通過self play提高棋力。

剛開始時,兩個AI的是一樣的,其中一個可訓練(REINFORCE),另一個不訓練,此時和棋的幾率很高。

但是,隨著不斷的對弈,這個做強化學習的AI的贏率會逐漸變低,然後有的演算法又會慢慢變強,強到一定的水平為止(但都沒超過原AI),但有的再也不會變強了。

訓練完後,再和我自己對弈,結果是它們都強化傻了。

請問大神們有沒有遇到過這種現象的?可能是什麼原因?有哪些方向值得一試?

感覺前面的監督學習很像"師傅領進門",後面的強化學習像"修行靠個人",可是為什麼就沒能在一個已有的基礎上進步呢?

GitHub - splendor-kill/ml-five


你說的問題其實是強化學習中比較重要的imitation Learning的問題

即,在一部分人工監督的情況下,能否讓強化學習模仿專家的行為

並能夠做得更好。

比較有趣的是,最早研究這個問題的一作竟然就是大名鼎鼎的Andrew Ng

(大家還以為他只會開公開課呢)

imitation learning的關鍵之一是,你的遊戲如何設置reward。imitation learning可以

根據專家的行為,來學得一個較好的reward函數。特別是對非終止(non-teriminal)

的狀態,能夠有更好的評估。而終止狀態直接沿用你原來的框架就可以

在學的reward的基礎上進一步學習更好的policy

----------------

不過五子棋的話,其實不一定要用imitation learning的框架

在谷歌的alpha-go方案中,同時混合了類似

actor-critic和Q-learning(或者TD)的方案

actor-critic即直接學習policy,對每個局面直接輸出可能下棋的概率

而局面評估的方法是對state給出近似的評估函數V

並且通過搜索的方法,得到一個更好的V估計

這樣就可以根據V來決定策略了

個人感覺AC和imitation learning是殊途同歸的

另外感覺寫個五子棋的RL代碼量不小。確實是個很好的練習。


除了走imitation learning的路線或者在actor-critic中pretrain actor之外,最近有一篇把Q-learning和supervised learning結合的文章:https://arxiv.org/pdf/1704.03732.pdf

具體思路是在Q-learning的objective里加一個基於ranking loss的supervised objective。這樣既可以用expert trajectory做pretrain,又可以在sample random trajectory的過程中混合一些expert trajectory。


首先你的問題和問題的描述並不一致,就按照問題的描述來。然後,描述說按照alphago,實際只是問強化學習。再然後說self play,其實只是固定對手。

為什麼沒有下過對手,可以檢查

1、特徵編碼不夠好,alphago也是用了先驗知識來設計特徵的

2、採樣的數據不夠多導致訓練不好

3、方差沒有控制好導致不收斂

另外關於selfplay,alphago中的方法是對弈前幾輪的自己。這其實超出了強化學習的範圍,進入了博弈。alphago的selfplay是啟發式的,並不收斂,不知道後來到master有沒有改過。


actor-critic 演算法已經實現了嗎?你可以先訓練一下value network


謝邀。 個人局限: 截止目前,我也沒有能力完全搞懂alpha-go的全部原理,更不能重複開發一個出來。對人工神經知識和能力也還是停留在紙上和幾個工具箱,我沒有自己寫過神經網路。目前自己的 RL 實踐,都是多維表或者線性高次多項式擬合來存儲(擬合)Q-value,也無處理高緯度State空間的能力,沒有任何的DQN reinforce learning實踐經驗。

希望未來1~3年內能達到作者水平吧。

===========正題===============

我沒有研究工RL五子棋。 做過一些桌游(Table Game Domain),State空間遠小於五子棋。

下棋,用一個Agent(有限狀態機,策略是固定死的)作為環境 和 RL agent交互。

問題1,RL agent 和另外的AI比,先輸後贏的解釋:

一開始 RL agent肯定輸的,第一次訓練,應為Qvalue初始都為0,RL 直接是隨機策略。

如果我們單認為Reward 是輸贏 +1 -1。 對手Agent策略(環境)不變的情況下,通過多次探索,可以達到Qvalue 收斂,最後表現優於有限狀態機Agent。

-------------------------

問題2. 和我自己對弈,結果是它們都強化傻

上述的RL,不會提高agent的棋藝,只是讓agent找到一套贏一個固定對手(環境)的策略(policy),這個策略(policy)是Qvalue來表達的。 你自己去和RL agent下棋,環境(對手)變化了。它策略不變,所以下不過人。

解決方案,訓練時和多個人或者不同策略agent下棋,要用隨機性。訓練出來的RL 策略有五指棋的一般性,而不是針對某個或者某類對手。

-----------------------------

問題3. 能在一個已有的基礎上進步

原始RL方法是從QValue全部為零開始,訓練周期長。 有研究在RL 過程中引入領域知識。agent既和環境交互得到反饋,也聽從專家指導。 alpha-go 的團隊放出的研討會視頻,有提到預訓練過程,大概是提問者提的「師傅領進門」。 通過先監督學習後再RL能加快QValue的收斂速度,我查過一些paper做這個研究,大家自己搜,我自己沒有詳讀過,就不列了。

====== 一些討論 ==============

如果RL框架中有注入領域知識的介面, 但是領域知識和實踐交互結果衝突怎麼處理(間接經驗和直接經驗衝突,行知不合一)? 這些都是值得研究和可能發文章點吧。

我也不知道如果加入監督的領域知識,收斂的Qvalue是有唯一的么?怎麼分配監督和增強的對策略的權重。

最後

================

如上匿名回答。 作者最好能夠github開源實驗過程,讓我們其他人也能參與討論和學習。

國內,中文社區能達到 遷移alpha-go到五指棋上的人很少,資料也很少。期待作者帶我們一起拉高水平。


第一次答題,因為頭次見到與我關係這麼密切的題目。AlphaGo框架在五子棋方面的嘗試我也做了幾個月,算是有點經驗,但同時也算是比較失敗的嘗試。我不知道題主的測試

這步已基本完成,效果貌似還行,因為我有時後也玩不過它,當然我水平也很一般

是在MCTS的框架下進行還是單純用神經網路提供概率分布再抽樣,甚至類似分類問題那樣直接取概率最大的那個點。這三種測試方式存在不小的差異,但我不在這裡展開。

self play以及結合MCTS的AI智能程度提升是我一直在進行嘗試的地方,但結果還是失敗了,我簡單闡述下這方面的過程及結果供題主參考

1、監督學習(SL)採用的數據集質量以及訓練後的網路的測試精度,對後續的強化學習(RL)有比較明顯的影響。我不了解題主的數據集是從哪裡獲得的,但我在整個實驗過程中在偶然的情況下先後採用了三種數據集,質量上也有非常明顯的差異,SL後再RL訓練結果完全不同。

第一次訓練時,我用的是RenjuNet Database。這是一篇五子棋相關文獻里提到的,那篇文獻只測試了AlphaGo的策略網路在五子棋方面的預測能力,算是一篇灌水文。這個數據集的樣本還算是比較多的,我一開始沒有關注它的質量,直接用於SL,然後上RL。訓練過程還蠻開心的,self play勝率一路飆升,結果可視化它的self play就傻眼了,開局階段就下在邊界上,連普通人的水平都達不到,完全沒有進一步測試的價值。之後我查看了下數據集才發現,至少其中有部分明顯是亂下的(開局下邊界這種),因此我放棄了這個數據集。

第二次訓練時,我在一個五子棋愛好者網站上找到了5000多局的比賽棋譜,都打包好了,用一個軟體處理後就能用。雖然質量上相對於之前的棋譜有明顯提高,但存在另一個問題:我研究的是無禁手的五子棋(Gomoku),但Gomoku的黑棋具有明顯的先手優勢,因此比賽時應該是採用有禁手的五子棋(Renju),這是我的推測。而禁手規則對黑白雙方的策略有非常明顯的影響(比如Renju的黑棋必勝策略可以套在Gomoku,反之不行)。因此儘管這個數據集的質量應該是極高的,但套在規則不同的五子棋上應該會大打折扣。由於我當時沒找到Gomoku的其他數據(前面的RenjuNet反而是Gomoku的棋譜),所以只能採用這些比賽棋譜。同樣先SL再RL,結果跟之前有所差別:self play的勝率雖然有所提升,但是幅度要小很多,並且在一段時間後無法進一步提升。此外,我可視化後發現,儘管勝率提高了,並且相對於沒有RL的網路有非常明顯的提升,但走法比較詭異,應該是發現了策略網路中的一些潛在bug,然後針對這些bug進行強化,我的理解是某種意義上的overfitting。

第三次的訓練是出於某種意外。當時我只在第二次訓練的數據集上嘗試各種方法,比如self play從棋譜的殘局開始,或者令某一手隨機下來嘗試解決overfitting,但效果不行,正絕望的時候我嘗試去了解五子棋本身及相關演算法以及引擎等。期間知道了奕心這個強悍的五子棋引擎以及一個標準化的測試平台,這個平台用來測試各類五子棋AI的能力,奕心是目前最強的,這方面我了解不多,不過知乎上有不少大佬對這個很了解 @愛麗絲欣 。奕心採用的是比較傳統一些的演算法,應該是pns和dbs演算法(根據作者官網提供的資料推測的),跟機器學習甚至AlphaGo都沒啥關係。而這個測試平台具有AI self play並且記錄棋譜的功能,所以我直接將奕心用來self play產生棋譜,期間還用了各式AI,比如pela等,這些知乎上都有大佬介紹,可以直接搜下五子棋AI方面的問題。由於奕心的能力很強,這次的棋譜質量非常高,我同樣用SL訓練。並且在SL訓練後就直接測試。由於我本人水平極菜,並且我用的是python編寫以及水平不夠無法將AI放在那個平台上測試,所以弄了個手機五子棋app來測試,避免打廣告就不說名字了,只是其中有很多難度分級,普通人介於初中級之間(找了幾個人測了下)。如果不採用MCTS,單純CNN的情況下我的AI也只是普通人的水平,不過開局很像奕心(畢竟SL了),但由於隨機性太強,無法跨越中級水平。但採用MCTS後,可以用黑棋打敗高級水平,白棋不行,往上還有兩個難度,AI黑棋都無法打敗,甚至平局都做不到。但RL的時候就悲劇了,我調了多組的訓練步長、batch size等參數,以及訓練演算法,勝率都在50%附近徘徊甚至還下降了,也就是從頭到尾都沒有提升AI性能。這可能是因為這種高質量的數據SL出來的網路bug極少或者說不明顯,無法在AlphaGo最早的RL框架中(李世石以及之後的不了解)提升。這甚至能得出結論,在簡單的編碼情況下(我上述過程的網路輸入編碼都只是三個plane即黑、白、空的one-hot),用比較樸素的policy gradient無法進一步提升高質量數據集SL後的策略網路。換句話說題主如果用的數據集質量不高的話,提升是可以的,但最終還是會處於某個局部最優點,甚至可能還不如用高質量數據集SL後的網路(這點我沒去驗證,算是猜測)。題主可以做個簡單實驗,直接RL訓練網路,不用SL,就會發現勝率提升巨快但也很快就卡住了。

2、以上過程中我沒有用到value網路,這是因為我一開始打算RL訓練成功後再根據論文里的建議,訓練value網路來提供policy gradient中的bias,然後循環訓練兩個網路提升,結果已經死在了RL上。不過我也另外嘗試直接用數據集SL value網路,但無法擬合,可能是編碼原因,當時沒有進一步嘗試。

3、只針對AI能力提升不考慮RL這些問題的話,題主可以嘗試下引入一些其他的五子棋演算法。比如奕心作者推崇的PNS和DBS,作者主頁AI EXP有介紹,知乎上也有五子棋AI設計相關問題下的回答有介紹。但我的建議是,嘗試將這些搜索併入RL和MCTS中,並且考慮下五子棋方面的一些知識,比如Victory of Continuous Threat(VCT)這類策略,根本目的是縮小整個五子棋的動作搜索空間。特別是VCT下,動作空間是非常小的,這樣至少解決訓練和MCTS測試過程中一些不必要的失誤,從整體提升AI水平,可能間接提升RL效果(這點我還無法確定)。我用PNS進行VCT的搜索並且自己設計了一種奇葩、效率一般的數構存儲這個過程的一些棋型(沒有時間和精力去深入了解棋類AI的高效數構)。在訓練上沒有明顯幫助,但MCTS效果卻有很大提升:加了VCT的搜索後,AI可以用黑棋下贏最高難度(比原先高兩個難度),白棋可以下贏高級,跟奕心可以僵持一會兒(沒有進一步測試)。只是這些測試是允許AI花費較多時間進行MCTS的情況下進行的,沒有應用價值。

4、我最近也在思考的提升RL效果的方法。一是像另外幾位答主提到的imitation Learning和actor-critic等RL方面直接入手。但我這幾個月的經驗讓我覺得也可以從網路結構以及網路參數更新策略本身入手,嘗試尋找特徵。五子棋雖不比圍棋複雜(複雜的定義不太嚴謹),但目前也沒有人開發出類似AlphaGo的引擎,這是因為這個問題本身並不簡單。首先,適合五子棋的網路輸入如何編碼就是一大問題,圍棋的網路輸入編碼本身經過一段時間的發展,在專業選手輔助下已經提出了比較成熟的編碼方式。但五子棋無人問津,並沒有這種成熟的編碼方式。其次,由於目前都是個人進行五子棋相關研究,對於AlphaGo那種深度網路進行訓練,個人是很難做到的,即使能訓練完,測試過程也很難跑得動,從硬體上就否定了嘗試深度網路的可能,所以我覺得應從淺層網路的設計以及預訓練中進行嘗試,比如先用數據集預訓練網路的前幾層再進一步SL,甚至結合一些無監督式的學習方法。預訓練方面,我嘗試過用GAN做預測棋局的生成作為預訓練再改變網路輸出進行SL,結果在value網路方面仍然沒有成功。最後,我個人的感覺是必須緊密結合五子棋本身來處理特徵才有可能突破,比如針對五子棋中的活四、沖四、活三、眠三等棋型進行網路設計,這方面我還沒有什麼頭緒,但目前因為研究方向有所變化只能暫停這方面的研究,希望題主可以進一步嘗試。


自我監督,自我強化。


第一次答題,以簡單扼要為主。

第一,監督學習的結果做為強化學習的初始化,參考alphaGo。

第二,監督學習作為輔助任務,參考deepmind的UNREAL。


沒有實現過AlphaGo,最近在一個遊戲環境中玩DQN,感覺DQN,A3C對參數都比較敏感,模擬環境中效果不錯,遊戲環境中就出現學到一點程度之後開始越學越差,Q值預測過大等等情況。調調參數能解決,但是問題空間變大之後死灰復燃。。。

也許題主可以多試試不同參數?交流一下~


tensorpack/examples/OpenAIGym at master · ppwwyyxx/tensorpack · GitHub


推薦閱讀:

生成對抗網路(GAN)相比傳統訓練方法有什麼優勢?
在機器學習的演算法中, 矩陣運算的效率總是優於for循環嗎?
應該如何理解No Free Lunch Theorems for Optimization?
Adaboost可不可以使用其他的損失函數?
怎麼從通俗意義上理解邏輯回歸的損失函數?

TAG:人工智慧 | 演算法 | 機器學習 | 有監督學習 | 強化學習ReinforcementLearning |