講人話系列——DQN初探之2048

概述

強(qiáng)化學(xué)習(xí)也火了好久狸臣,最近才有空來(lái)充充電。老實(shí)說(shuō)昌执,最開(kāi)始強(qiáng)化學(xué)習(xí)的知識(shí)點(diǎn)還挺多的烛亦,看了好久也沒(méi)太弄清楚幾個(gè)算法的關(guān)系,所以本著實(shí)踐出真知的想法懂拾,找個(gè)案例做下煤禽。2048小游戲感覺(jué)本身復(fù)雜度還可以,又是個(gè)model-base的模型岖赋,檢查起來(lái)比較方便檬果,并且可以簡(jiǎn)化到2x2,3x3,所以感覺(jué)是個(gè)很不錯(cuò)的demo案例唐断。順便學(xué)習(xí)下傳統(tǒng)的DP那一套東西选脊,所以也做了一些很簡(jiǎn)單的實(shí)驗(yàn)來(lái)鞏固下知識(shí)。本文還是會(huì)參雜很多個(gè)人想法脸甘,很多想法來(lái)自一些實(shí)驗(yàn)測(cè)試結(jié)果恳啥。關(guān)于理論的東西網(wǎng)上講的已經(jīng)很多了。因?yàn)椴殚嗁Y料的時(shí)候丹诀,看到很多人在嘗試DQN on 2048的時(shí)候遇到了不少問(wèn)題钝的,所以和大家進(jìn)行下分享翁垂。

最終效果

  • 大概率能玩出2048
  • 最高可以玩3w多分
  • 均值1w多分
  • 仍有上升空間(可能有啥bug,跑久了容易掛硝桩,就沒(méi)繼續(xù)跑了)
  • 網(wǎng)上能查到的比較厲害的差不多到4096(AI)沮峡,比例也比較小。

實(shí)驗(yàn)過(guò)程

隨機(jī)測(cè)試:

定義:

  • max_tile:4x4格子中最大方塊數(shù)
  • max_score:n局下來(lái)最大總分?jǐn)?shù)(n in 50-100)
  • avg_score:n局平均分?jǐn)?shù)(n in 50-100)

4x4的游戲中隨機(jī)算法評(píng)測(cè):

  • max_tile:256
  • avg_score:700+
  • max_score:2k+

這里大概評(píng)估下隨機(jī)水平亿柑,方便后面評(píng)估。

DQN初探:

按照自己的想法構(gòu)建了一個(gè)最初版本的DQN

  • net:4*4直接reshape(-1,16) - dense_layer(128) - dense_layer_(4)
  • memory_sie:100w
  • lr:0.001(固定)
  • reward:每次運(yùn)行后得分
  • gamma(延遲衰減):1
  • e-greedy:指數(shù)衰減棍弄,最小0.1

結(jié)果:網(wǎng)絡(luò)到max_score:3000之后望薄,好像跑不動(dòng)了。這里一臉蒙呼畸,不知道有啥可以改的痕支。于是發(fā)現(xiàn)這個(gè)事情并不簡(jiǎn)單,就想簡(jiǎn)化問(wèn)題到2x2看看能不能有啥收貨蛮原,順便補(bǔ)習(xí)下傳統(tǒng)的一些RL算法卧须,驗(yàn)證下最優(yōu)原理。

值迭代儒陨、策略迭代花嘶、蒙特卡洛、Q-learning

值迭代:


值迭代

策略迭代:


策略迭代
  • 值迭代蹦漠、策略迭代椭员、蒙特卡洛、Q-learning:2*2上可以快速收斂笛园。
  • Q-learning感覺(jué)會(huì)稍微有點(diǎn)波動(dòng)隘击。

DQN 在2x2

當(dāng)用值迭代、策略迭代得到了理論最優(yōu)值之后研铆,又用DQN測(cè)試了一把埋同。發(fā)現(xiàn)DQN結(jié)果比最優(yōu)值總是差點(diǎn),這就說(shuō)明網(wǎng)絡(luò)和學(xué)習(xí)策略確實(shí)有點(diǎn)問(wèn)題棵红,但同時(shí)側(cè)面又反映了凶赁,2x2的時(shí)候能很接近最優(yōu)策略,4x4差的比較遠(yuǎn)窄赋,那么很大部分問(wèn)題可能來(lái)自參數(shù)化和探索方面哟冬。(空間變大會(huì)設(shè)計(jì)到的點(diǎn))

總結(jié)幾個(gè)提升慢原因:

  • 沒(méi)有找到足夠高分的點(diǎn)訓(xùn)練
    • e-greedy
    • 游戲本身隨機(jī)性
  • 找到高分點(diǎn)后,沒(méi)有訓(xùn)練到
    • 被訓(xùn)練數(shù)據(jù)淹沒(méi)-memory_size
    • lr和高分沒(méi)有匹配上,太小了
  • reward設(shè)計(jì)不合理

DQN-2013 + 網(wǎng)絡(luò)層迭代忆绰、bug修復(fù)

從2x2的地方看出浩峡,參數(shù)化有問(wèn)題,那么第一個(gè)想法就是優(yōu)化下網(wǎng)絡(luò)错敢,dnn還是太粗暴了翰灾,還是得cnn缕粹,這里就有幾個(gè)方案:

  • 原始值 + cnn
  • one-hot + cnn
  • emb + cnn
  • cur + next-step + cnn(github上看到別人的做法,借鑒的alphaGoZero)

新版本改進(jìn):修復(fù)了探索的bug纸淮,reward做了log變化平斩,網(wǎng)絡(luò)換成了emb+cnn,新結(jié)果如下:

  • max_score:6000
  • max_tile:1024

但是問(wèn)題也暴露的很明顯:

  • loss出現(xiàn)了非逞士椋夸張的發(fā)散問(wèn)題绘面,預(yù)測(cè)值過(guò)估計(jì)嚴(yán)重。如下圖侈沪,大概意思就是loss變得巨大無(wú)比之后揭璃,效果就開(kāi)始變差,loss也下來(lái)了亭罪。
    • loss圖

DDQN/DQN2015

一般講DQN的三個(gè)優(yōu)化:DDQN/Prioritized Experience Replay/dueling-DQN

  • DDQN/DQN2015的兩個(gè)方案在2048的案例中都沒(méi)有啥效果瘦馍,過(guò)估計(jì)仍然很?chē)?yán)重。
  • 后面兩個(gè)沒(méi)有提到對(duì)過(guò)估計(jì)的問(wèn)題应役,所以沒(méi)有嘗試情组。
  • dueling-dqn在別人的一篇文章中有測(cè)試,dueling-dqn比ddqn的上限要高箩祥,早期好像差別也不大院崇。

到這里,其實(shí)有點(diǎn)調(diào)不下去了袍祖,后來(lái)在網(wǎng)上翻到了一個(gè)代碼亚脆。能跑出2048,天吶盲泛,發(fā)現(xiàn)寶了濒持,做了很多測(cè)試,發(fā)現(xiàn)我和他的方案上差異還是蠻大的寺滚,然后就開(kāi)始了一點(diǎn)點(diǎn)比較的階段柑营。

復(fù)現(xiàn)Github方案

先提出別人和我方案的差異點(diǎn):

  • lr別人用了離散衰減,start-lr = 0.0005
  • reward:用了max_tile增量+合并單元數(shù)
  • memory_size:60004迨印9偬住!
  • 更新方案:dqn2013蚁孔,沒(méi)用target
  • gamma:0.9
  • egreedy:0.9 昌粤,10000步后快速收斂到0
  • net:一個(gè)比較定制化的one-hot + cnn


    image.png

我在他的方案上做了一系列實(shí)驗(yàn):

實(shí)驗(yàn)1:把e-greedy改成最小0.1
實(shí)驗(yàn)結(jié)果:

  • max_score到1w+后開(kāi)始增長(zhǎng)變得很慢姐仅,很久都沒(méi)有提升。說(shuō)明該任務(wù)本身具有比較強(qiáng)的前后相關(guān)性和隨機(jī)性,最終還保持較高的探索難以發(fā)現(xiàn)最佳值椒丧。

實(shí)驗(yàn)2:用數(shù)值網(wǎng)絡(luò)代替one-hot+cnn
實(shí)驗(yàn)結(jié)果:

  • 提升沒(méi)有之前快了商佛,這個(gè)實(shí)驗(yàn)沒(méi)跑完就掛了愁茁,但是raw的效果不如cnn。說(shuō)明網(wǎng)絡(luò)結(jié)構(gòu)影響比較大

實(shí)驗(yàn)3:reward改成每步獲取score

  • 監(jiān)控幾乎和之前差不多摆尝,說(shuō)明兩個(gè)reward設(shè)計(jì)都可行。

實(shí)驗(yàn)4:在原基礎(chǔ)上只用max_tile來(lái)作為回報(bào)因悲,拿掉合并分?jǐn)?shù)堕汞。

  • 無(wú)法達(dá)到2048,在1024前就好像不漲了晃琳。說(shuō)明reward也不能設(shè)計(jì)的太隨意讯检,要保持和訓(xùn)練方案比較高的協(xié)調(diào)性,只用max的話卫旱,reward會(huì)比較稀疏视哑。

在做完上述一系列實(shí)驗(yàn)后,我大致有了個(gè)數(shù)誊涯,然后對(duì)自己的實(shí)驗(yàn)進(jìn)行了優(yōu)化。
優(yōu)化方案:

  • lr設(shè)計(jì)成離散衰減
  • gamma:1 (沒(méi)變)
  • reward:score (沒(méi)變)
  • 更新方案:dqn-2013(沒(méi)變)
  • memory_size:6000
  • egreedy:0.9指數(shù)衰減蒜撮,10000步后快速收斂到0
  • net:emb+普通2*2的cnn2層 (不變)
    結(jié)果:
  • max_score:3.4w
  • max_tile:2048
  • avg_score:10000
  • 截張圖看下:
    • 2048

之后測(cè)試了下ddqn暴构,發(fā)現(xiàn)收斂比較。本身把memory_size設(shè)置小了之后段磨,過(guò)估計(jì)就沒(méi)有這么嚴(yán)重了取逾。這里簡(jiǎn)單分下,過(guò)估計(jì)本身在Q-learning中就存在苹支,回訪池過(guò)大之后砾隅,訓(xùn)練越多,過(guò)估計(jì)越嚴(yán)重债蜜,在沒(méi)有很好的高分?jǐn)?shù)據(jù)前晴埂,就給搞過(guò)估計(jì)了,所以后面就不好迭代了寻定。反而用小點(diǎn)的話儒洛,過(guò)估計(jì)不嚴(yán)重,在高分出現(xiàn)后也不會(huì)淹沒(méi)在數(shù)據(jù)中狼速,對(duì)于這個(gè)任務(wù)可能更好一點(diǎn)琅锻。很多結(jié)論可能都與這種需要長(zhǎng)期規(guī)劃的性質(zhì)相關(guān)。

蒙特卡洛樹(shù)搜索探索

出于對(duì)alphaGo的膜拜向胡,我也想過(guò)恼蓬,dqn很多時(shí)候不好訓(xùn)練,就是很難拿到高分訓(xùn)練數(shù)據(jù)僵芹,能不能和alphaGo一樣处硬,用個(gè)mcts,就簡(jiǎn)單做了下。結(jié)果如下:

  • 純蒙特卡洛樹(shù)搜索的方案:每步模擬100-200拇派,可以輕松到達(dá)2048郁油,均值2w+(這里測(cè)試數(shù)據(jù)不多本股,跑的很慢,所以想用mcts來(lái)訓(xùn)練dqn的方案也被pass了)桐腌。

需要監(jiān)控的點(diǎn)

  • loss:DQN過(guò)估計(jì)嚴(yán)重拄显,需要密切關(guān)注loss情況
  • max-label:如果沒(méi)有出現(xiàn)過(guò)大值,看看探索過(guò)程是不是有問(wèn)題案站。后期探索不能太大躬审。
  • e-greedy:關(guān)注探索程度
  • episode:關(guān)注大致進(jìn)度和速度
  • lr:這個(gè)和loss配合著看
  • 評(píng)估指標(biāo):avg/max score
    RL的任務(wù)感覺(jué)需要監(jiān)控的內(nèi)容更多,不光是監(jiān)督學(xué)習(xí)的部分蟆盐,探索的部分也很重要承边。

訓(xùn)練情況

  • 訓(xùn)練出2048,要2個(gè)小時(shí)左右石挂。大概2w episode這個(gè)樣子博助。

小結(jié)

到此,2048的探索可能就先告一段落痹愚,雖然很多事情并沒(méi)有研究太明白富岳。但是對(duì)于整個(gè)算法有了個(gè)基礎(chǔ)的認(rèn)識(shí)。并對(duì)算法中可能存在的優(yōu)化點(diǎn)有了一些了解拯腮。后續(xù)可能會(huì)嘗試下策略梯度那一趴的東西窖式。

資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市动壤,隨后出現(xiàn)的幾起案子萝喘,更是在濱河造成了極大的恐慌,老刑警劉巖琼懊,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阁簸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡哼丈,警方通過(guò)查閱死者的電腦和手機(jī)强窖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)削祈,“玉大人翅溺,你說(shuō)我怎么就攤上這事∷枰郑” “怎么了咙崎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吨拍。 經(jīng)常有香客問(wèn)我褪猛,道長(zhǎng),這世上最難降的妖魔是什么羹饰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任伊滋,我火速辦了婚禮碳却,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笑旺。我一直安慰自己昼浦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布筒主。 她就那樣靜靜地躺著关噪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乌妙。 梳的紋絲不亂的頭發(fā)上使兔,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音藤韵,去河邊找鬼虐沥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泽艘,可吹牛的內(nèi)容都是我干的欲险。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼悉盆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了馋吗?” 一聲冷哼從身側(cè)響起焕盟,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宏粤,沒(méi)想到半個(gè)月后脚翘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绍哎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年来农,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崇堰。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沃于,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出海诲,到底是詐尸還是另有隱情繁莹,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布特幔,位于F島的核電站咨演,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蚯斯。R本人自食惡果不足惜薄风,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一饵较、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遭赂,春花似錦循诉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至逆粹,卻和暖如春募疮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背僻弹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工阿浓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹋绽。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓芭毙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親卸耘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子退敦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348