dqn在训练过程中loss越来越大_DQN算法实现注意事项及排错方法
在學(xué)習(xí)強(qiáng)化學(xué)習(xí)過(guò)程中,自己實(shí)現(xiàn)DQN算法時(shí),遇到了比較多的問(wèn)題,花了好幾天的時(shí)間才得以解決。最后分析總結(jié)一下,避免再走彎路。
有可能開(kāi)始實(shí)現(xiàn)出來(lái)的DQN算法,無(wú)論怎么訓(xùn)練總是看不錯(cuò)成果。需要注意的地方比較多,一步一步的來(lái)分析:
一、確定算法實(shí)現(xiàn)本身是否正確
算法學(xué)習(xí)的過(guò)程一般是:學(xué)習(xí)算法相關(guān)的資料,然后自己動(dòng)手實(shí)現(xiàn)算法來(lái)進(jìn)行訓(xùn)練。當(dāng)訓(xùn)練總是失敗時(shí),就去網(wǎng)上找別人對(duì)這個(gè)算法的實(shí)現(xiàn),然后對(duì)比自己的實(shí)現(xiàn)和別人實(shí)現(xiàn)的差異來(lái)糾錯(cuò)。
但這個(gè)時(shí)候比較容易遇到坑,因?yàn)閯e人的實(shí)現(xiàn)可能會(huì)有幾個(gè)問(wèn)題:
所以,就需要注意下面幾個(gè)方面:
1、確定算法實(shí)現(xiàn)必須有哪些部分。
如果確定呢?比如看算法論文的原文,或者看大學(xué)的公開(kāi)課等。
DQN算法的實(shí)現(xiàn)中應(yīng)該包含目標(biāo)網(wǎng)絡(luò)(target network)和經(jīng)驗(yàn)回放(Experience Replay)相關(guān)的代碼。因?yàn)檫@是算法論文中有提到的。
Playing Atari with Deep Reinforcement Learning?arxiv.org網(wǎng)絡(luò)上有很多DQN算法的實(shí)現(xiàn),但是有不少的實(shí)現(xiàn)是沒(méi)有目標(biāo)網(wǎng)絡(luò)(target network)的,搜到這種文章還是直接跳過(guò)吧。
2、留意算法實(shí)現(xiàn)的細(xì)節(jié)
在DQN算法中,done參數(shù)是需要使用。網(wǎng)絡(luò)上有不少DQN算法的實(shí)現(xiàn)是沒(méi)有使用done參數(shù)進(jìn)行訓(xùn)練的。
DQN算法經(jīng)過(guò)實(shí)際的對(duì)比測(cè)試發(fā)現(xiàn),DQN算法中不使用done參數(shù)有時(shí)甚至將導(dǎo)致算法不能收斂。完整的代碼和數(shù)據(jù)在這里。
DQN使用done參數(shù)與否(橙色使用done參數(shù),藍(lán)色未使用done參數(shù))3、區(qū)分算法本身和算法的變種
DQN算法有不少的變種,比如:Double-Q Learning,Dueling DQN等。如果你看的是權(quán)威算法的實(shí)現(xiàn),可以肯定算法本身是不會(huì)錯(cuò)的。但是實(shí)現(xiàn)細(xì)節(jié)又和學(xué)習(xí)到的算法原理不同,那么有可能你看到的不是原始算法的實(shí)現(xiàn),而是其變種。
二、了解不同環(huán)境對(duì)訓(xùn)練和算法收斂的影響
一般我們訓(xùn)練時(shí)使用的環(huán)境是gym,在測(cè)試DQN算法時(shí),常用的環(huán)境有兩個(gè):
1、CartPole
Gym的CartPole環(huán)境立桿子游戲CartPole的特點(diǎn)是:如果算法模型越差,那么每一個(gè)游戲回合(episode)的時(shí)間就會(huì)越短,因?yàn)闂U子倒下了游戲就馬上結(jié)束了。
2、MountainCar
Gym的MountainCar環(huán)境小車上山游戲MountainCar的特點(diǎn)是:如果算法模型越差,每一個(gè)游戲回合的時(shí)間就會(huì)越長(zhǎng),因?yàn)橛螒蚪Y(jié)束的條件是要么小車上山,要么移動(dòng)了200次。而開(kāi)始訓(xùn)練算法時(shí),小車是很難上山的,基本上都是移動(dòng)次數(shù)超過(guò)限制游戲結(jié)束的。
當(dāng)實(shí)現(xiàn)完算法需要驗(yàn)證算法的正確性時(shí),結(jié)合上面兩種環(huán)境的特點(diǎn),推薦使用第一種環(huán)境來(lái)驗(yàn)證算法。原因如下:
第一種環(huán)境的特點(diǎn)是模型越差,游戲回合時(shí)間越短。當(dāng)開(kāi)始訓(xùn)練算法時(shí),訓(xùn)練的速度就會(huì)比較快,如果算法正確收斂,那么會(huì)訓(xùn)練的越來(lái)越慢,比較好觀察。
與之對(duì)比的是第二種環(huán)境,模型越差,游戲回合時(shí)間越長(zhǎng)。訓(xùn)練開(kāi)始時(shí),因?yàn)槊總€(gè)回合的時(shí)間都比較長(zhǎng),在不借助其他工具的情況下,難以觀察算法是否在收斂。所以就可能會(huì)出現(xiàn)算法本身是正確且收斂的,但是因?yàn)槊炕睾蠒r(shí)間太長(zhǎng),訓(xùn)練太耗時(shí),所以短時(shí)間內(nèi)看不出趨勢(shì)就誤認(rèn)為算法是錯(cuò)誤的。
三、善用tensorboardX來(lái)記錄分析訓(xùn)練過(guò)程
訓(xùn)練過(guò)程中的數(shù)據(jù)對(duì)觀察算法是否收斂和對(duì)比算法或超參數(shù)有很大的幫助。
1、觀察算法是否收斂
最直觀的,訓(xùn)練過(guò)程獎(jiǎng)勵(lì)(reward)的變化過(guò)程直接表明了算法是否收斂。
在此基礎(chǔ)上,與環(huán)境相關(guān)的數(shù)據(jù),比如游戲每回合的步數(shù)(step)也能反映算法是否收斂,CartPole環(huán)境每回合的步數(shù)應(yīng)該慢慢增長(zhǎng),MountainCar環(huán)境每回合步數(shù)應(yīng)該慢慢減少。
和算法相關(guān)數(shù)據(jù),比如loss的值,在DQN算法中,loss的值應(yīng)該慢慢減少,直到趨于平穩(wěn)。
下圖是DQN算法訓(xùn)練MountainCar-v0環(huán)境過(guò)程的tensorboardX截圖,完整的代碼和數(shù)據(jù)在這里。
DQN算法訓(xùn)練MountainCar-v0環(huán)境過(guò)程2、對(duì)比算法或超參數(shù)
可以對(duì)比不同算法或同個(gè)算法不同超參數(shù)值對(duì)算法的收斂,有助于直觀的了解算法的性能和收斂的速度等。
下圖是Deep Q-Learing(橙色線條)算法和Double-Q Learning(藍(lán)色線條)訓(xùn)練MountainCar-v0環(huán)境過(guò)程的對(duì)比圖,完整的代碼和數(shù)據(jù)在這里。
Deep Q-Learing(橙色線條)算法和Double-Q Learning(藍(lán)色線條)訓(xùn)練MountainCar-v0環(huán)境過(guò)程的對(duì)比圖總結(jié)
以上是生活随笔為你收集整理的dqn在训练过程中loss越来越大_DQN算法实现注意事项及排错方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mapreduce mysql_MapR
- 下一篇: string类型比较_redis存jso