- 深度強化學習算法與實踐:基于PyTorch的實現
- 張校捷編著
- 1989字
- 2022-05-06 17:08:30
1.6 蒙特卡洛梯度估計
在深度強化學習的模型中,為了能夠讓模型對價值函數的估計,或者模型對于策略的估計能夠使模型獲得更多的回報,需要得到最終的回報相對于模型的參數的梯度。由于模型的復雜性,在通常情況下這些梯度的解析求解過程往往非常復雜,甚至不能得到解析解。為了得到相對模型參數的梯度,需要引入蒙特卡洛梯度估計,對模型的輸出進行采樣,計算采樣輸出相對參數的梯度,然后用計算得到的梯度期望對參數的真實梯度進行估計。這個過程被稱為蒙特卡洛梯度估計(Monte Carlo Gradient Estimation)。為了方便讀者后續的理解,這里用一個簡單的例子,結合PyTorch來展示一下如何進行蒙特卡洛梯度估計。
首先明確一下我們面對的問題,這里會涉及一些簡單的數學公式推導,如果讀者覺得比較復雜,可以略過直接看結論。假設策略對應的是一個概率分布p(x|θ),其中θ是策略對應的模型的參數,x是策略輸出的隨機變量(比如在策略梯度算法里面可以是智能體的一個動作,該動作服從一定的概率分布)。需要研究的是策略輸出x的一個函數(比如在策略梯度算法中可以是回報函數),即f(x)的期望對模型參數θ的梯度,如式(1.10)所示。這里假設梯度和積分符號可以交換(涉及的數學需要函數的一致收斂性,這里不嚴謹地認為可以交換),可以把梯度記號放進積分符號里。由此,得到了式(1.11)的一系列操作,需要注意的一點是,為了得到式(1.11),中間的推導過程利用了自然對數的求導公式和微分鏈式法則,即?θlogg(θ)=?θg(θ)/g(θ)。

從式(1.11)可以得到一個結論,我們需要求的隨機變量相關函數f(x)的期望,相對于產生隨機變量的參數的梯度,等于隨機變量相關函數f(x)和該隨機變量的概率密度函數的自然對數的乘積,在該隨機變量分布下的期望。
有了上面的公式,我們繼續來看蒙特卡洛梯度估計的例子。在示例里,假設策略服從正態分布N(μ,σ2),也就是期望為μ、標準差為σ的正態分布。為簡單起見,假設f(x)=x2,也就是非常簡單的平方函數(在深度學習中,也可以稱為均方誤差,Mean Squared Error, MSE)。這是一個少數的可以解析求解其相對參數梯度的函數,把函數代入式(1.10),首先計算式中的積分部分,可以得到f(x)的積分值與期望μ和標準差σ有關,為μ2+σ2。
這樣,我們有這個梯度的解析解,期望相對于μ的梯度是2μ,相對于σ的梯度是2σ,如式(1.12)所示。

接下來對這個梯度進行數值上的驗證。把正態分布的密度函數代入式(1.11),可以得到式(1.13)。

其實到了式(1.10)已經可以用PyTorch求解了,因為PyTorch有對應的類torch.distributions.normal.Normal來自動進行采樣,并且可以利用PyTorch的自動求導法則,計算采樣得到的隨機變量相對于輸入參數的梯度。但是,假如沒有PyTorch這么方便的類和內部函數,需要自己手動寫相關的代碼怎么辦?這時需要的是一個變換,這個變換被稱為重參數化技巧(Reparameterization Trick)。為了使用這個技巧,我們需要一個標準正態分布產生器N(0,1),也即是一個隨機數產生器,能夠產生服從期望為0、標準差為1的隨機數,這樣隨機變量x與參數μ和σ的關系如式(1.14)所示。

在式(1.14)中,可以看到變量x的參數從正態分布變成了參數μ和σ,而標準正態分布在每次采樣過程中隨機產生,整個過程相當于變換了參數,也就是“重參數化”這個名字的來源。這樣,我們可以很簡單地得到隨機變量相對于參數μ和σ的梯度,即1和N(0,1)。同時,因為我們能得到任意函數g(x)相對于x的梯度,接下來只需要應用鏈式法則,即可得到任意函數g(x)相對于參數μ和σ的梯度,當然這里的g(x)也包含lnp(x|μ,σ)相對于參數μ和σ的梯度(讀者可以試著用這個技巧直接去估計?θEx~pf(x),可以得到同樣的結果,只是式(1.11)在強化學習的場景下用得更多,所以用這個技巧去估計式(1.11))。在PyTorch中可以利用rsample方法(如代碼1.1所示)使用重參數化技巧進行采樣,其中傳入的參數是輸出隨機張量的形狀。這里假定讀者對PyTorch深度學習框架有一定的了解,如果讀者需要初步了解PyTorch,可以參考PyTorch官網上的快速入門教程。
有了以上公式,下面來寫一段對應的PyTorch代碼驗證一下想法。為簡單起見,這里(任意的)設μ=1.0,σ=2.0。在筆者的計算機上,這段代碼運行的結果是μ的梯度為2.0189,而σ的梯度為4.1002??梢钥吹剑@個值很接近于之前得到的解析解(2μ,2σ)。于是代碼1.1從側面反映了前面推導的公式的正確性。
代碼1.1 使用PyTorch進行蒙特卡洛梯度估計。

最后,作為前面推導式(1.11)的一個補充,這里推導一個公式,如式(1.15),這個公式在后續的策略梯度里會有應用。這個可以看作式(1.11)的一個逆向變換,意思是概率分布的自然對數的期望相對于概率分布的參數的梯度為0。在強化學習中,這個結論意味著,當回報和模型的參數無關時(和模型輸出的隨機變量無關),參數的策略梯度為0,也就意味著無論如何調整模型的參數,對智能體的回報都沒有影響。有了式(1.15),就很自然地得到這個結論,也和日常經驗相符合。讀者也可以仿照代碼1.1,寫一段代碼(令xs_val=1)來驗證這個結論。
