- 深度強(qiáng)化學(xué)習(xí)實(shí)踐(原書第2版)
- (俄)馬克西姆·拉潘
- 1509字
- 2021-08-18 17:39:34
8.4 噪聲網(wǎng)絡(luò)
下一個(gè)將要研究的改進(jìn)解決了RL的另一個(gè)問題:環(huán)境探索。我們要借鑒的論文為“Noisy Networks for Exploration”[4],它有一個(gè)非常簡(jiǎn)單的思想,即在訓(xùn)練過程中學(xué)習(xí)探索特征,而不是單獨(dú)定制探索的策略。
基礎(chǔ)DQN通過選擇隨機(jī)動(dòng)作來完成探索,隨機(jī)選取會(huì)依據(jù)特定的超參數(shù)epsilon,它會(huì)隨著時(shí)間的增長(zhǎng)慢慢地從1.0(完全隨機(jī)選擇動(dòng)作)降至一個(gè)小比例0.1或0.02。這個(gè)流程適用于片段較短的簡(jiǎn)單環(huán)境,在游戲過程中不會(huì)有太多不穩(wěn)定的情況,但是即使是在這樣簡(jiǎn)單的情況下,它也需要調(diào)優(yōu)參數(shù)來讓訓(xùn)練更高效。
在“Noisy Networks for Exploration”論文中,作者提出了一個(gè)非常簡(jiǎn)單的解決方案,但是效果很好。他們?cè)谌B接層中加入噪聲,并通過反向傳播在訓(xùn)練過程中調(diào)整噪聲參數(shù)。當(dāng)然了,不要將這個(gè)方法和“用網(wǎng)絡(luò)來決定在哪里進(jìn)行探索”相混淆,后者是一種更為復(fù)雜的方法,也得到了廣泛的支持(例如,請(qǐng)參見關(guān)于內(nèi)在動(dòng)機(jī)和基于計(jì)數(shù)的探索方法[5-6])。我們會(huì)在第21章討論高級(jí)探索技術(shù)。
論文作者提出了兩種添加噪聲的方法,根據(jù)他們的實(shí)驗(yàn)這兩種方法都有效,但是它們具有不同的計(jì)算開銷:
1)獨(dú)立高斯噪聲:對(duì)于全連接層中的每個(gè)權(quán)重,都加入一個(gè)從正態(tài)分布中獲取的隨機(jī)值。噪聲的參數(shù)μ和σ被存在層中并使用反向傳播訓(xùn)練,如同我們訓(xùn)練標(biāo)準(zhǔn)的線性層中的權(quán)重一樣。以與線性層相同的方式計(jì)算這種“噪聲層”的輸出。
2)分解高斯噪聲:為了最小化采樣的隨機(jī)數(shù)數(shù)量,作者提出只保留兩個(gè)隨機(jī)向量:一個(gè)和輸入的大小一樣,另一個(gè)和層的輸出大小一樣。然后,通過計(jì)算向量的外積來創(chuàng)建該層的一個(gè)隨機(jī)矩陣。
8.4.1 實(shí)現(xiàn)
在PyTorch中,兩種方法都可以以非常簡(jiǎn)單直接的方式來實(shí)現(xiàn)。我們需要做的就是創(chuàng)建一個(gè)和nn.Linear
層等價(jià)的層,并在每次forward()
被調(diào)用時(shí)隨機(jī)采樣一些額外的值。兩種噪聲層的實(shí)現(xiàn)在Chapter08/lib/dqn_extra.py
的NoisyLinear
類(獨(dú)立高斯噪聲)和NoisyFactorizedLinear
類(分解高斯噪聲)中。

在構(gòu)造函數(shù)中,我們創(chuàng)建了σ的矩陣。(μ值被存在從nn.Linear
繼承過來的矩陣中[1]。)為了讓σ可訓(xùn)練,需要將張量包裝在nn.Parameter
里。
register_buffer
方法在神經(jīng)網(wǎng)絡(luò)中創(chuàng)建一個(gè)張量,它在反向傳播時(shí)不會(huì)更新,但是會(huì)被nn.Module
的機(jī)制處理(例如,當(dāng)cuda()
被調(diào)用時(shí)它會(huì)被復(fù)制到GPU)。為了層中的偏差需要?jiǎng)?chuàng)建一個(gè)額外的參數(shù)和緩沖區(qū)。使用的σ的初始值(0.017)取自本節(jié)開頭引用的“Noisy Networks for Exploration”論文。最后,我們調(diào)用reset_parameters()
方法,它重寫了父類nn.Linear
的reset_parameters()
方法,用來支持層的初始化。

在reset_parameters()
方法中,參考論文對(duì)nn.Linear
的權(quán)重和偏差進(jìn)行了初始化處理。

在forward()
方法中,從權(quán)重和偏差緩沖區(qū)中隨機(jī)采樣噪聲,并以與nn.Linear
相同的方式對(duì)輸入的數(shù)據(jù)執(zhí)行線性轉(zhuǎn)換。
分解高斯噪聲的工作方式也類似,并且其結(jié)果相差不大,所以為了完整性這里只貼出代碼。如果你對(duì)這個(gè)方法好奇,可以在論文[4]中查找它的詳細(xì)信息和方程。

從實(shí)現(xiàn)的角度看,這就結(jié)束了。我們現(xiàn)在要做的就是將nn.Linear
(這是DQN神經(jīng)網(wǎng)絡(luò)中的最后兩層)換成NoisyLinear
層(如果需要,也可以替換成NoisyFactorized-Linear
),讓基礎(chǔ)DQN轉(zhuǎn)變成噪聲網(wǎng)絡(luò)版本。當(dāng)然,你必須要把ε-greedy策略相關(guān)的代碼都移除掉。
為了檢查訓(xùn)練時(shí)內(nèi)部的噪聲級(jí)別,我們可以顯示噪聲層的噪聲信噪比(Signal-to-Noise Ratio,SNR),表示成RMS(μ)/RMS(σ)的比,RMS是相應(yīng)權(quán)重的均方根。在本例中,SNR展示了噪聲層中的穩(wěn)定部分比注入的噪聲大多少倍。
8.4.2 結(jié)果
訓(xùn)練之后,TensorBoard的圖表展示了更好的訓(xùn)練動(dòng)態(tài)(見圖8.8)。模型可以在少于60萬幀的情況下達(dá)到18的平均分。

圖8.8 Noisy netwok和基礎(chǔ)DQN的對(duì)比
在檢查SNR圖(見圖8.9)之后,你可能注意到兩層的噪聲級(jí)別都下降得很快。第一層從1降到了1/2.5的噪聲比率。第二層則更有意思,它的噪聲級(jí)別從1/3下降到1/15,但是在25萬幀之后(基本和原始獎(jiǎng)勵(lì)提升至20分的時(shí)間差不多),最后一層的噪聲級(jí)別開始回升了,迫使智能體更多地探索環(huán)境。這很有道理,因?yàn)樵谶_(dá)到高分之后,智能體基本知道如何發(fā)揮出良好的水平,但還是需要“磨煉”它的動(dòng)作以進(jìn)一步提高分?jǐn)?shù)。

圖8.9 訓(xùn)練過程中噪聲級(jí)別的變化
[1]即nn.Linear.weight
和nn.Linear.bias
。
- 機(jī)器視覺自動(dòng)檢測(cè)技術(shù)
- 機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于Scikit-Learn、Keras和TensorFlow(原書第3版)
- 玩轉(zhuǎn)ChatGPT:秒變AI提問和追問高手
- 深度學(xué)習(xí)之人臉圖像處理:核心算法與案例實(shí)戰(zhàn)
- 機(jī)器學(xué)習(xí)算法評(píng)估實(shí)戰(zhàn)
- 智能化社會(huì):未來人們?nèi)绾紊睢⑾鄲酆退伎?/a>
- 解碼智能時(shí)代2021:前沿趨勢(shì)10人談
- 人工智能及其應(yīng)用
- 大模型項(xiàng)目實(shí)戰(zhàn):Agent開發(fā)與應(yīng)用
- AI會(huì)取代我們嗎?(The Big Idea 21世紀(jì)讀本)
- 人人都能懂的人工智能
- 人工智能極簡(jiǎn)編程入門:基于Python
- 智能工程
- 聊天機(jī)器人:對(duì)話式體驗(yàn)產(chǎn)品設(shè)計(jì)
- Manus極簡(jiǎn)入門:從0到1快速打造你的AI智能體