
只要游戲日志完備,該函數(shù)考查在時間t0時所采取的行動a并返回命中值h(t)的加權(quán)和,以及該游戲所有未來步驟。在這里,如果我們在步驟t時命中,h(t)則為1,否則為0。
在到達(2)時, 我們承認并不對所有可能的收益函數(shù)集合進行仔細搜索。但我們肯定這一選擇會有很好的游戲效果,它們有良好的目的性:具體地說,我們注意到加權(quán)項(0.5)t−t0(0.5)t−t0 能強烈地激發(fā)當前步驟的命中率 (對于在t0時命中,我們得到的收益為11 ), 但在(t0+1)(t0+1)時命中的行為在 t0t0 時也有收益—— 其值為0.50.5。同樣,在 (t0+2)(t0+2) 時命中收益為0.250.25, 依此類推。 (2)的這種超前加權(quán)起到了鼓勵有效探索棋局的作用:它迫使程序顧及有利于未來命中的步驟。 (2) 中出現(xiàn)的其他要素是減去h(t)¯¯¯¯¯¯¯¯¯h(t)¯。 這是隨機網(wǎng)絡(luò)會獲得的預(yù)期收益。通過將該項除去,我們的網(wǎng)絡(luò)只有表現(xiàn)超過隨機選擇才有收益——該收益是這一學(xué)習(xí)過程的凈加速。
隨機遞減
為了訓(xùn)練我們的算法在游玩期間收益最大化,我們運用了遞減法。為了表現(xiàn)這一點,我們設(shè)想讓我們的網(wǎng)絡(luò)參數(shù) θθ 在游戲的某些特定步驟發(fā)生改變。對所有可能的步驟進行平均,于是有了預(yù)期收益的梯度公式,

這里, p(a)p(a) 的值是我們網(wǎng)絡(luò)行動的概率輸出。
不過,我們通常無法求得上述最后一行的值。但我們可以用抽樣值進行迫近:我們只是用我們當前網(wǎng)絡(luò)玩游戲,因此我們用在第 ii次移動時所獲得的實際收益取代上述的預(yù)期收益,

這里aiai 是所采取的行動, r(ai)r(ai)是獲得的收益,可以通過反向傳播求該對數(shù)的導(dǎo)數(shù)(對于那些熟悉神經(jīng)網(wǎng)絡(luò)的人來說:這是叉熵損失函數(shù)的導(dǎo)數(shù),當你處理類似督導(dǎo)學(xué)習(xí)訓(xùn)練事例的事件時,可以用所選擇行動 aiai 做為標記以應(yīng)用該函數(shù))。函數(shù)g^ig^i 提供理想梯度的噪聲估計,但步驟多了會導(dǎo)致“隨機”遞減,一般推動我們朝著正確的收益最大化前進。
訓(xùn)練過程總結(jié)
總之,RL訓(xùn)練是迭代進行:要起動迭代步驟,首先我們用我們當前的策略網(wǎng)絡(luò)玩游戲,隨機地根據(jù)網(wǎng)絡(luò)輸出選擇移動步驟。在游戲結(jié)束后,我們通過計算每次移動所獲得的收益來對結(jié)果打分,例如在戰(zhàn)艦游戲中,我們用(22)。 一旦完成這一步,我們就用 (44)來估計收益函數(shù)的梯度。最后,我們用αα小步長步驟參數(shù)更新網(wǎng)絡(luò)參數(shù) θ→θ+α∑g^iθ→θ+α∑g^i, 接著,我們用經(jīng)過更新的網(wǎng)絡(luò)繼續(xù)玩新的游戲,依此類推。
要明白這一過程實際上是鼓勵在練習(xí)中產(chǎn)生良好結(jié)果的行動,注意 (44) 與在步驟 ii中所獲收益成比例的。因此,我們在 (44)的方向上調(diào)整參數(shù),我們極力鼓勵那些產(chǎn)生很大收益結(jié)果的行動。另外,收益為負的步驟受到抑制。網(wǎng)絡(luò)按這種方式經(jīng)過一段時間后將學(xué)會考察這一系統(tǒng)并提出可能產(chǎn)生最佳結(jié)果的步驟。
這說的是深度策略梯度RL的基礎(chǔ)。我們現(xiàn)在回到我們戰(zhàn)艦python示例上來。
Python 代碼流程 — 戰(zhàn)艦 RL
加載所需的包。

定義我們的網(wǎng)絡(luò)——一個全面相聯(lián)的三層系統(tǒng)。下面代碼基本上是 tensorflow 標準本,通過了其第一教程就可得出。有一項非同凡響的事是我們已將(26)集的學(xué)習(xí)速度定為占位符值 (9) 。這將讓我們用下列所觀察到的捕獲收益改變我們的步長。

其次,我們定義了讓我們用我們的網(wǎng)絡(luò)玩游戲的方法。變量TRAINNING決定了我們是否采取理想步驟或選擇隨機步驟。請注意該方法返回一組記錄游戲過程的日志集。這些是訓(xùn)練所需要的。
