我們這里要簡要介紹一下增強學習(RL)——一種為了提高玩游戲效率的訓練程序的通用技術(shù)。我們的目標是解釋其實際實現(xiàn):我們講述一些基本理論,然后走馬觀花地看一下為玩《戰(zhàn)艦》游戲而訓練神經(jīng)網(wǎng)絡(luò)的最小python程序。
導言
增強學習[RL]技術(shù)是一種可用于提高效玩游戲效率的學習算法。與督導機器學習[ML]方法一樣,增強學習是從數(shù)據(jù)——這里是指過去玩游戲的數(shù)據(jù)——中進行學習。然而,盡管督導學習算法只是根據(jù)現(xiàn)有的數(shù)據(jù)進行訓練,但RL還挑戰(zhàn)如何在收集數(shù)據(jù)的過程中表現(xiàn)良好性能。具體地說,我們所追求的設(shè)計原則是
讓程序從過去實例中識別好的戰(zhàn)略,
通過連續(xù)地玩游戲快速地學習新的戰(zhàn)略。
我們在這里特想讓我們的算法快速學習的理由是在培訓數(shù)據(jù)有限或者戰(zhàn)略空間太大而難以進行窮盡搜索的情況下最富有成果地運用RL。正是在這種體制下督導技術(shù)面臨困境而RL則閃耀著光芒。
我們在本貼中要回顧一般性的RL培訓程序:策略梯度、深度學習方案。我們下一節(jié)要回顧一下這種辦法背后的理論。隨后,我們將粗略地演示一下培訓神經(jīng)網(wǎng)絡(luò)來玩戰(zhàn)艦游戲的 python 實現(xiàn)。
我們的python碼可以從我們的github網(wǎng)頁這里下載。它需要 jupyter, tensorflow, numpy, 和 matplotlib包。
策略梯度,深度RL
策略深度和深度RL有兩個主要構(gòu)件。下面我們要詳述二者并描述它們是如何協(xié)作訓練好的模型的。
策略網(wǎng)絡(luò)
一定深度RL算法的策略是一種神經(jīng)網(wǎng)絡(luò),它將狀態(tài)值ss映射為一定游戲行為 aa的概率。 換句話說,該網(wǎng)絡(luò)的輸入層接受環(huán)境的數(shù)字編碼——游戲在特定時刻的狀態(tài)。當輸入通過網(wǎng)絡(luò)饋送后,其輸出層的值對應(yīng)著我們現(xiàn)有每個行動可選的對數(shù)概率——我們可供選擇的每個可能的行動都有一個輸出節(jié)點。請注意如果我們肯定知道我們應(yīng)采取的步驟,只有一個輸出節(jié)點有一定的概率。但如果我們的網(wǎng)絡(luò)不能肯定哪種行動最優(yōu)時,那么就不只一個節(jié)點有一定的權(quán)值。
為了說明這一點,我們來圖示一下下面“戰(zhàn)艦”程序中所用的網(wǎng)絡(luò)。(要回顧“戰(zhàn)艦”的游戲規(guī)則請看注[1])簡明起見,我們只用一維戰(zhàn)艦網(wǎng)格。我們?nèi)缓髮ξ覀儗κ值拿總€網(wǎng)格位置用一個輸入神經(jīng)元將我們對目前的環(huán)境知識進行編碼。具體地說,我們對于每個神經(jīng)元/下標運用下列編碼:

在下面例圖中,我們有五個輸入神經(jīng)元,因此游戲盤的大小是五。前三個神經(jīng)元的值是−1−1 表明我們尚未轟炸這些網(wǎng)格點。最后兩個分別是+1+1 和 00, 意味著戰(zhàn)艦位于第四而不是第五的位置。

需要注意的是,在所顯示的策略網(wǎng)輸出層中,前三項值標為對數(shù)概率。這些值對應(yīng)著每個下標的下次轟炸的概率。我們不能再次轟炸第四和第五個網(wǎng)格點,所以,盡管網(wǎng)絡(luò)可能對這些神經(jīng)元輸出一些值,我們會忽略它們。
需要注意的是,在所顯示的策略網(wǎng)輸出層中,前三項值標為對數(shù)概率。這些值對應(yīng)著每個下標的下次轟炸的概率。我們不能再次轟炸第四和第五個網(wǎng)格點,所以,盡管網(wǎng)絡(luò)可能對這些神經(jīng)元輸出一些值,我們會忽略它們。 在我們繼續(xù)前,我們注意到我們對我們的策略運用神經(jīng)網(wǎng)絡(luò)的理由是進行有效地歸納:對于象圍棋這樣有大量狀態(tài)值的游戲來說,收集每個可能的游戲盤位置的數(shù)據(jù)并不可行。這正是ML算法所擅長的場合——根據(jù)過去的觀測進行歸納從而對新局面做出很好的預測。為了將注意力放在RL上,我們不想在本貼中回顧ML算法(但你可以看看我們的庫中的入門章節(jié))。我們只是提請注意——利用這些工具,我們通過只培訓游戲中有代表性的子集就能獲得良好的性能而不必研究會非常龐大的整個集合。
收益函數(shù)
為了訓練RL算法,我們必須反復地進行游戲/得分過程:我們根據(jù)當前的策略玩游戲,根據(jù)與該網(wǎng)絡(luò)輸出的概率成比例的頻率做出移動選擇。如果所采取的行動得到好的結(jié)果,我們就要在往后提高這些行動的概率。
收益函數(shù)是我們用于對我們以前游戲的結(jié)果進行正式打分的工具——我們將鼓勵我們的算法在游戲期間努力將該量最大化。它其實是RL算法的超級參數(shù):可以使用許多不同的函數(shù),并每個都得出不同的學習特征。對于我們的戰(zhàn)艦程序來說,我們用下列函數(shù)