强化学习笔记:Policy-based Approach
主要內容來自李宏毅老師的視頻:【李宏毅】2020 最新課程 (完整版) 強化學習 - 71.作業十五 ML Lecture 23-1 - Deep Re_嗶哩嗶哩_bilibili
1 強化學習概念復習
?2 像深度學習一樣分析強化學習
2.1 深度學習三部曲
這是李宏毅教授之前在介紹深度學習的時候說提到的三部曲。
step1相當于是深度學習model,step2相當于是損失函數,step3相當于梯度下降等參數更新方法?
2.2 強化學習的“step1”
我們以一款類似于“雷霆戰機”的游戲為例
輸入是當前的游戲界面(被表示成一個向量或者一個矩陣)
輸出是我們執行每個動作的概率
2.3 強化學習的“step 2”
給定agent看到的狀態s,模型的參數θ,agent會做出一系列的決策
?
但是,就像2.2中說的那樣,我們模型返回的是選擇不同action的概率,所以即便是一個agent,選擇的action組成的路徑也很有可能是不同的
?所以我們認為Rθ的平均值是我們的衡量標準
某個軌跡出現的概率,這個的總獎勵。 對所有的按照出現的概率進行加權求和,這個就是平均的reward。
我們還可以寫成上式那樣,從這個分布采樣一個軌跡?,然后計算R(τ)?的期望值,就是你的期望的獎勵。 我們要做的事情就是最大化期望獎勵。?
?對于一個agent,“玩一遍游戲”過程中的status、action、reward,連起來就是軌跡
?如果我們選擇一個agent去“玩游戲”,那么每一種軌跡都有可能會被采樣到,只不過是概率問題。
?
而某一條軌跡出現的概率是:
?這個概率取決于兩部分:環境的行為和 agent 的行為
?
2.4 強化學習的“step 3”
同樣地,也是使用梯度下降(但這里我們希望R是越大越好,所以是梯度上升)
?
R(τ)?這個獎勵函數不需要是可微分的(differentiable),這個不影響我們解接下來的問題。
舉例來說,如果是在 GAN 里面,R(τ)?其實是一個 discriminator,它就算是沒有辦法微分,也無所謂,你還是可以做接下來的運算。
最右邊的一項(分式)就是logP的微分
這個在2.3中講過,我們通過采樣N次來近似這個求和操作
?注意這里是整個路徑的R,也就是說這里的的計算不涉及的微分。所以哪怕不可微也可以?
那么,怎么算呢?
我們假設路徑為
那么我們有:
兩個黃顏色的式子,是由environment決定的,只有紅顏色的一個是由agent決定
取log,我們有:
??
?對于梯度下降,我們有:
?
?
?
我們可以直觀地來理解上面這個式子,也就是在你采樣到的數據里面, 你采樣到在某一個狀態 st??要執行某一個動作at?, 這個 st??跟 at??它是在整個軌跡τ?的里面的某一個狀態和動作的對。
- 假設你在 st??執行at?,最后發現τ?的獎勵是正的, 那你就要增加這一項的概率,你就要增加在 st??執行 at??的概率。
- 反之,在 st??執行at??會導致τ?的獎勵變成負的, 你就要減少這一項的概率。
?3 基于策略的強化學習
?
?類似于SGD,每一我跑一些agent,然后用這些agent的結果(s,a的pair)更新模型。再用更新的模型跑另外的一些agent,再更新模型。。。。如此迭代
一般?policy gradient(PG) 采樣的數據就只會用一次。你把這些數據采樣起來,然后拿去更新參數,這些數據就丟掉了。接著再重新采樣數據,才能夠去更新參數
?
?這里用一種方式解釋了為什么前面我們梯度下降的時候需要加log
我們把強化學習看成一個分類問題,那么我們的損失函數就是交叉熵。(最小化交叉熵就是最大化對數似然)
上圖是一個分類問題的示意圖,假設我們最終希望是執行“left”選項,那么在分類問題中,就是這一個的item為1,其他的為0。
?
?對于梯度下降的式子,我們不妨這么看:先遮去R
那么這就是一個分類問題
?
?現在我們是強化學習問題,有了一個reward在里面。
我們假設路徑1的reward為2,路徑2的reward為1
那么可以想象成,選擇left的結果,我們會看到兩次;選擇fire的結果,我們會看到一次
所以大體框架和分類差不多,只不過加了一個權重罷了
?4 幾個tips
4.1 加一個baseline
?????????第一個 tip 是 add 一個 baseline。?如果給定狀態 s 采取動作 a 會給你整場游戲正的獎勵,就要增加它的概率。如果狀態 s 執行動作 a,整場游戲得到負的獎勵,就要減少這一項的概率。
?????????但在很多游戲里面,獎勵總是正的,就是說最低都是 0。比如說打乒乓球游戲, 你的分數就是介于 0 到 21 分之間,所以 R 總是正的。假設你直接套用這個式子, 在訓練的時候告訴模型說,不管是什么動作你都應該要把它的概率提升。
???????? 在理想上,這么做并不一定會有問題。因為雖然說 R 總是正的,但它正的量總是有大有小,你在玩乒乓球那個游戲里面,得到的獎勵總是正的,但它是介于 0~21分之間,有時候你采取某些動作可能是得到 0 分,采取某些動作可能是得到 20 分。
????????假設你在某一個狀態有 3 個動作 a/b/c可以執行。根據下式,
????????
????????
? ? ? ? 我們要把這 3 項的概率,對數概率都拉高。
???????? 但是它們前面權重的 R 是不一樣的。 R 是有大有小的,權重小的,它上升的就少,權重多的,它上升的就大一點。
???????? 因為這個對數概率是一個概率,所以動作 a、b、c 的對數概率的和要是 0。 所以上升少的,在做完歸一化(normalize)以后, 它其實就是下降的,上升的多的,才會上升。
????????這是一個理想上的狀況,我們做采樣理論上是希望求出 對所有可能的 s 跟 a 的pair 進行求和。?
? ? ? ? 實際上,我們真正在訓練的時候不可能是這么做的,只是采樣了少量的 s 跟 a 的pair而已。
????????因為我們做的是采樣,有一些動作可能從來都沒有采樣到。在某一個狀態,雖然可以執行的動作有 a/b/c,但你可能只采樣到動作 b,你可能只采樣到動作 c,你沒有采樣到動作 a。
????????但現在所有動作的獎勵都是正的,所以根據這個式子,它的每一項的概率都應該要上升。
????????會遇到的問題是,因為 a 沒有被采樣到,其它動作的概率如果都要上升,a 的概率就下降。?
????????所以 a 不一定是一個不好的動作, 它只是沒被采樣到。但只是因為它沒被采樣到, 它的概率就會下降,這個顯然是有問題的。
????????
????????要怎么解決這個問題呢?你會希望你的獎勵不要總是正的。
?????????為了解決獎勵總是正的這個問題,你可以把獎勵減掉一項叫做 b,這項 b 叫做 baseline。你減掉這項 b 以后,就可以讓?這一項有正有負。
????????所以如果得到的總獎勵?大于 b 的話,就讓它的概率上升。如果這個總獎勵小于 b,就算它是正的,也是不好的,你就要讓這一項的概率下降。
?4.2?給每一個動作合適的分數(credit)
????????我們原來會做的事情是,在某一個狀態,假設你執行了某一個動作 a,它得到的獎勵,它前面乘上的這一項。
????????這件事情顯然是不公平的,因為在同一場游戲里面 也許有些動作是好的,有些動作是不好的。 假設整場游戲的結果是好的, 并不代表這個游戲里面每一個行為都是對的。若是整場游戲結果不好, 但不代表游戲里面的所有行為都是錯的。
????????所以我們希望可以給每一個不同的動作前面都乘上不同的權重。每一個動作的不同權重, 它反映了每一個動作到底是好還是不好。
?????????舉個例子, 假設這個游戲都很短,只有 3~4 個互動。
????????在 sa??執行a1??得到 5 分。在sb??執行 a2??得到 0 分。在?sc??執行?a3??得到 -2 分。 整場游戲下來,你得到 +3 分。
????????那你得到 +3 分 代表在?sb??執行動作?a2??是好的嗎?
????????并不見得代表?sb??執行?a2??是好的。因為這個正的分數,主要來自于在?sa??執行了?a1?,跟在?sb??執行 a2??是沒有關系的,也許在?sb??執行?a2??反而是不好的, 因為它導致你接下來會進入?sc?,執行?a3??被扣分,所以整場游戲得到的結果是好的, 并不代表每一個行為都是對的。
????????
?????????如果按照我們剛才的講法,整場游戲得到的分數是 3 分,那到時候在訓練的時候, 每一個狀態跟動作的對,都會被乘上 +3。
????????在理想的狀況下,這個問題,如果你采樣夠多就可以被解決。因為假設你采樣夠多,在?sb??執行?a2??的這件事情,被采樣到很多。
????????就某一場游戲,在?sb??執行?a2?,你會得到 +3 分。 但在另外一場游戲,在?sb??執行?a2?,你卻得到了 -7 分。
????????
????????為什么會得到 -7 分呢? 因為在?sb??執行?a2??之前, 你在?sa??執行?a2??得到 -5 分,-5 分這件事可能也不是在?sb??執行?a2??的錯,這兩件事情,可能是沒有關系的,因為它先發生了,這件事才發生,所以它們是沒有關系的。
?????????假設我們今天采樣到這項的次數夠多,把所有發生這件事情的情況的分數通通都集合起來, 那可能不是一個問題。
????????但現在的問題就是,我們采樣的次數是不夠多的。在采樣的次數不夠多的情況下,你要給每一個狀態跟動作對合理的分數,你要讓大家知道它合理的貢獻。
????????怎么給它一個合理的貢獻呢?
????????一個做法是計算這個對的獎勵的時候,不把整場游戲得到的獎勵全部加起來,只計算從這一個動作執行以后所得到的獎勵。
????????因為這場游戲在執行這個動作之前發生的事情是跟執行這個動作是沒有關系的, 所以在執行這個動作之前得到多少獎勵都不能算是這個動作的功勞。
????????跟這個動作有關的東西, 只有在執行這個動作以后發生的所有的獎勵把它加起來,才是這個動作真正的貢獻。
????????所以在這個例子里面,在 sb??執行a2??這件事情,也許它真正會導致你得到的分數應該是 -2 分而不是 +3 分,因為前面的 +5 分 并不是執行?a2??的功勞。
????????實際上執行?a2??以后,到游戲結束前, 你只有被扣 2 分而已,所以它應該是 -2。
????????那一樣的道理,今天執行?a2??實際上不應該是扣 7 分,因為前面扣 5 分,跟在?sb??執行?a2??是沒有關系的。
?????????在?sb??執行?a2?,只會讓你被扣兩分而已,所以也許在?sb??執行?a2?, 你真正會導致的結果只有扣兩分而已。
如果要把它寫成式子的話是什么樣子呢?如下式所示:
?本來的權重是整場游戲的獎勵的總和,現在改成從某個時間?t開始,假設這個動作是在?t?這個時間點所執行的,從?t這個時間點一直到游戲結束所有獎勵的總和,才真的代表這個動作是好的還是不好的。
4.2.1 折扣回報
?????????接下來再更進一步,我們把未來的獎勵做一個折扣(discount),由此得到的回報被稱為?Discounted Return(折扣回報)
????????為什么要把未來的獎勵做一個折扣呢?
????????因為雖然在某一個時間點,執行某一個動作,會影響接下來所有的結果,有可能在某一個時間點執行的動作,接下來得到的獎勵都是這個動作的功勞。
????????但在比較真實的情況下, 如果時間拖得越長,影響力就越小。
???????? 比如說在第二個時間點執行某一個動作, 那我在第三個時間點得到的獎勵可能是在第二個時間點執行某個動作的功勞,但是在 100 個時間點之后又得到獎勵,那可能就不是在第二個時間點執行某一個動作得到的功勞。
????????所以我們實際上在做的時候,你會在 R 前面乘上一個?discount factor?γ, γ∈[0,1]?,一般會設個 0.9 或 0.99。?
? ? ?
- γ=0?: 只關心即時獎勵;
- γ=1?: 未來獎勵等同于即時獎勵。
?????????舉一個例子, 這是游戲的第 1、2、3、4 回合,假設你在游戲的第二回合的某一個st??執行at??得到 +1 分,在??執行得到 +3 分,在執行得到 -5 分,然后第二回合結束。at??的分數應該是:
總結
以上是生活随笔為你收集整理的强化学习笔记:Policy-based Approach的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NTU 课程 ERIC(5) 对社会的责
- 下一篇: NTU 课程笔记: 网络流