日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

强化学习七日打卡营终极复现之flappy bird

發布時間:2024/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强化学习七日打卡营终极复现之flappy bird 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

7天的實戰很快就過去了,在調參調到懷疑人生時,“標準答案”卻出奇的簡單,另外每次訓練時間都非常長,要是有加快訓練的方法就好了。最后有一個終極復現可以自由發揮,這就來實現曾經想玩的flappy bird。

這里是目錄

  • 原理
    • 基本概念
    • Q學習
  • 環境
  • 實現過程
    • 模型選取
    • 圖像預處理
    • 調試與優化
  • 總結與展望

原理

基本概念

強化學習是一種在與環境交互過程中學習的方法。

通過動作施加影響 動作的收益 反饋環境的變化 智能主體 環境

比如在日常生活中,

  • 前方有一棵樹(環境)
  • 人向前走了一步(動作)
  • 撞到了樹(環境變化)
  • 并且覺得痛(收益)
  • 下次碰到樹換個方向走(更新策略)

強化學習的問題定義
給定馬爾可夫決策過程MDP= { S , A , P r , R , γ } \{S,A,Pr,R,\gamma\} {S,A,Pr,R,γ},尋找一個最優策略 π ? \pi^* π?,對任意 s ∈ S s\in S sS,使得價值 V π ? ( s ) 值 最 大 V_{\pi^*}(s)值最大 Vπ??(s)

Q學習

Q學習是基于價值的方法,即對價值函數進行建模和估計,以此為依據制定策略。它使用一個Q表格來記錄不同狀態下不同動作的價值。決策時根據狀態選擇價值最高的動作。
Q學習也是基于時序差分的方法 ,即基于時序差分進行價值函數更新。
具體過程如下

當狀態數非常多甚至連續分布時,有些狀態很難采樣到,也不可能用一張表來記錄q函數。
這時候可以使用值函數近似(將q函數參數化),用一個非線性模型來擬合它,比如說神經網絡,DQN就是這樣一種算法。

環境

深度學習框架

  • PaddlePaddle
  • PARL

Flappy Bird GYM環境

  • PyGame Learning Environment (PLE)
  • OpenAI PLE environment (gym-ple)

實現過程

模型選取

根據所學知識,有DQN和PG兩個方案,在PARL倉庫給的例子中有雅達利游戲DQN的例子,便以它為基礎修改和改進。模型為4層卷積池化加輸出層。

圖像預處理

原始圖像是288×512×3的圖像:

使用OpenCv庫將其變為80×80的灰度圖像:

最后進行歸一化,所有像素除以255。

調試與優化

最開始把每次動作后環境返回的1幀圖像作為輸入,跑了一晚上都沒有收斂,猜測是一幀圖像不足以表現當前狀態,比如說測不出速度和加速度。剛開始圖像預處理沒有歸一化也可能是一個原因。
游戲環境是輸入一個動作,運行1幀,為了得到多幀圖像,可以將一個動作作用多次,這里用的4次,即一個動作作用4次,得到4幀圖像作為狀態。
剛開始由于回放經驗池設的較大,跑到中途崩潰了,斷續跑了總共不到1000個episode,就得到了比較不錯的效果,最長一次測試跑了將近4分鐘。

奇怪的是,后面的測試小鳥都在同一個地方失利:
這里我覺得模型根據經驗做出了正確的動作,但是心有余而力不足,限于“手速”,而飛不上去。于是改小動作作用幀數,改為3之后,仍不能避免這個問題,還出現了一些極限操作:
猜測由于在極限上升上的失利,模型偏向于將狀態轉移到安全的極限下降。
為了進一步減小動作作用幀數,同時不減少狀態幀數,需要分離這兩個超參數,前者稱為“跳幀”,后者稱為“環境長度”,跳幀可以沿用之前寫的代碼,狀態幀數則使用一個數組記錄每個episode所有原始狀態,每次取最后”環境長度“個原始狀態作為狀態。
減小跳幀后訓練速度和效果都沒有達到之前的水平,這里我想到先用跳幀4訓練,然后改為跳幀1微調。
20000步左右,跳幀4模型給出了一次4分多鐘的測試結果,最后一個障礙前,小鳥選擇了直接放棄:
模型大概在說:“我能怎么辦?我也很絕望啊。”
跳幀1的微調仍然非常慢,訓練了80000多步,模型可以給出穩定30s以上的測試結果,可惜的是,最后仍不能通過這個極限上升障礙。

總結與展望

總的來說DQN在圖像輸入的flappy bird環境下表現非常不錯,在動作間隔和環境長度設為4時表現最好。對于最后一個不能越過的極限上升障礙,在增加訓練時間和增大探索概率重新訓練后仍然不能通過,大概率是游戲環境問題,查看源碼,得到管道間隔100,最大高度差168,x方向速度為4,有大約25幀時間用來上升,每次點擊加速度為9,小鳥上升速度個位置,但是每次點擊會讓速度變為0,所以最多只能以速度8勻速上升,用環境自帶的getGameState()函數測得,兩個管道內間距為85,這段距離大約能上升170個單位,可謂是極限操作,即只有完美操作才有可能通過。
另外,“你已經是一個成熟的AI了,要學會自己確定超參數了”,讓模型自適應步長,輸出跳幀數,可以讓模型不受“手速”限制,同時加快預測速度,為此需要加上一項速度獎勵,即與通過每個障礙用的操作次數負相關的獎勵。

預留的github地址:https://github.com/bnpzsx/DRL-FlappyBird

總結

以上是生活随笔為你收集整理的强化学习七日打卡营终极复现之flappy bird的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。