前言:這篇筆記的內容按照強化學習部分正常的Learning Map來說,是應該放在PPO、Q-Learning等演算法前面的,所以在標題這里加了一個(補),代表這篇筆記是后來補發的(學習的時候把筆記記到紙質本子上了…現在相當于謄寫一遍,當然也有些當時沒想到的或者手寫起來不方便的內容)
文章目錄
- 強化學習的應用場景
- Outline of RL
- Policy-based 方法
- 定義函式集合:NN as actor
- 定義函式的好壞
- 選擇最優的Function
強化學習的應用場景
以下內容來自: LeeML-Notes.(這個網站上面也是關于李宏毅老師這門課程的相關筆記,但關于強化學習這里就只有一節課的內容,我在這一節的個人筆記也加入了一些自己聽課的時候遇到的一些問題和關于課程的內容的個人理解)
在Reinforcement Learning里面會有一個Agent跟一個Environment,這個Agent會有Observation看到世界種種變化,這個Observation又叫做State,這個State指的是環境的狀態,也就是你的machine所看到的東西,所以在這個Reinforcement Learning領域才會有這個XXX做法,我們的state能夠觀察到一部分的情況,機器沒有辦法看到環境所有的狀態,所以才會有這個partial of state 這個想法,這個state其實就是Observation,machine會做一些事情,它做的事情叫做Action,Action會影響環境,會跟環境產生一些互動,因為它對環境造成的一些影響,它會得到Reward,這個Reward告訴它,它的影響是好的還是不好的,
以游戲Space Invader為例,游戲的目標是操縱螢屏下方的飛船,開火擊殺螢屏上方所有的外星艦艇,現在我們讓一個machine來玩這個游戲,需要注意的是,在玩游戲這個任務中,machine看到的observation就是游戲畫面 (images or pixels) ,
如圖所示,游戲有一個初始畫面,我們將這個Observation稱為 s 1 s_1 s1?,machine看到這個畫面,決定要采取的Action,它在整局游戲中能采取的Action只有三個:
- Left(向左移動)
- Right(向右移動)
- Fire(開火)
machine得到的Reward即為游戲螢屏左上角的分數,現在假設它采取的Action是Right(這個Action稱為
a
1
a_1
a1?),由于采取這個Action它沒有擊殺任何艦艇,故得到的Reward
r
1
=
0
r_1=0
r1?=0,Action會影響環境,故machine又看到了一個新的Observation,稱其為
s
2
s_2
s2?,假設machine看到
s
2
s_2
s2?采取的Action
a
2
a_2
a2?是Fire,再假設它的這次開火成功地擊殺了一架外星艦艇,那此時他就得到了Reward
r
2
=
5
r_2=5
r2?=5,并看到了一個新的Observation
s
3
s_3
s3?,(需要注意的是,游戲中也有一些和machine完全無關的事件發生,如外星艦艇也會攻擊玩家操作的飛船,而這些事件的發生是完全隨機或者交由Environment決定的,即Environment本身也具有一些隨機性)

上述的這個程序一直進行下去,直到當machine采取了某個Action
a
T
a_T
aT?,獲得了Reward
r
T
r_T
rT?之后,游戲進入了一個最終狀態,即導致游戲結束的狀態(如未能躲避敵方艦艇的攻擊被擊殺),
我們稱這上述的整個從游戲開始到游戲結束的程序為一個Episode,顯然,我們希望machine能達到的目標是在每個Episode中獲得盡量大的cumulative reward(累計分數或者累計回報),這就需要machine不斷地玩這個游戲來學習如何在被擊殺之前擊殺掉足夠多的敵方艦艇,
強化學習的兩個難點:
- Reward Delay(延遲回報)
在Space invader這個游戲中,飛船開火擊殺敵方艦艇能夠得到reward,但開火之前的位置移動對于能夠擊殺獲得分數也是十分重要的,Left 和 Right 這兩個Action,雖然不能得到即時的Reward,但它們能夠決定將來的Fire Action能不能得到Reward, - Agent‘s actions affect the subsequent data it receives
Agent采取的Action會影響到它接下來看到的Observation,這告訴我們machine需要學會Exploration,比如如果一個machine只會Left和Right操作而從來不開火,它就永遠不知道Fire可能能夠拿到Reward,
Outline of RL
RL的方法統統都可以分為兩大類,一種是Policy-based方法,另一種是Value-based方法,在Policy-based方法中我們訓練的是一個主要完成任務的Actor;在Value-based方法中我們訓練的是不完成任務的一個Critic,兩種方法的交集被稱為Actor-Critic方法,
(下面的筆記內容都是Policy-based方法了,有關Value-based的內容在Q-Learning一節都介紹過了)

Policy-based 方法
Policy-based當中我們訓練的是完成任務的Actor,Actor實際上是一個function:
A
c
t
o
r
=
π
(
O
b
s
e
r
v
a
t
i
o
n
)
Actor = \pi(Observation)
Actor=π(Observation)
看到上面這個式子,顯然這個function的輸入就是machine看到的Observation,輸出則是Actor采取的Action
(有些文獻中也將Actor稱為Policy)

在學習DL的時候我們知道,解決DL問題一般都是三個步驟:定義函式集合、定義函式的好壞指標、根據對函式好壞的定義選擇最優的函式,現在我們同樣通過這三個步驟來剖析Policy-based方法,
定義函式集合:NN as actor
在Policy-based方法中,函式集合就是neural network,即Actor可以就是一個neural network,這個network的輸入是以vector或matrix表示的machine看到的Observation,輸出一般是一個n維的vector v v v(n為machine能夠采取的Action數), v v v 的每一個元素代表采取這個Action的概率(Probability of taking the action)
定義函式的好壞
在RL問題中,定義Actor好壞的步驟一般是這樣的:
給定一個包含引數
θ
\theta
θ 的網路作為actor,記為
π
θ
(
s
)
\pi_\theta(s)
πθ?(s) ,讓它去完成一個Episode,根據“強化學習的應用場景”一節當中的介紹,我們知道它會經歷如下的程序:

將它在整個Episode中得到的總回報記為
R
θ
R_\theta
Rθ?,顯然有
R
θ
=
∑
t
=
1
T
r
t
R_\theta = \sum\limits_{t = 1}^T {{r_t}}
Rθ?=t=1∑T?rt?
同樣顯然的是,我們希望這個
R
θ
R_\theta
Rθ?越大越好,
然而,由于游戲(或者說Environment)有隨機性的存在,即使用同樣的actor玩同一個游戲,每個Episode最后得到的
R
θ
R_\theta
Rθ?也不會是相同的,(其實還有另外一個原因,因為actor作為一個neural network,它的輸出是一個vector,這個vector代表actor在這一步采取每個Action的可能性,也就是說即使是同樣的actor,同樣的Observation,采取的Action也不會完全相同)
所以我們期望的不是某一個Episode的總Reward越大越好,而是將
R
θ
R_\theta
Rθ?視為一個隨機變數,在進行很多個Episode之后(或者說進行了容量很大的抽樣之后),得到的
R
θ
R_\theta
Rθ?的期望值越大越好,我們將這個期望值記作
R
ˉ
θ
{\bar R_\theta }
Rˉθ?,則
R
ˉ
θ
{\bar R_\theta }
Rˉθ?就是一個衡量function好壞的指標,
問題來了,如何計算
R
ˉ
θ
{\bar R_\theta }
Rˉθ??
假設一場游戲可以視為一個狀態-行動-回報序列(trajectory),我們將這個序列記為
τ
\tau
τ ,即
τ
=
{
s
1
,
a
1
,
r
1
,
s
2
,
a
2
,
r
2
,
.
.
.
,
s
T
,
a
T
,
r
T
}
\tau = \{{s_1},{a_1},{r_1},{s_2},{a_2},{r_2},...,{s_T},{a_T},{r_T}\}
τ={s1?,a1?,r1?,s2?,a2?,r2?,...,sT?,aT?,rT?}
且
R
(
τ
)
=
∑
n
=
1
N
r
n
R(\tau) = \sum \limits^N_{n=1} r_n
R(τ)=n=1∑N?rn?
接下來,我們就像理解
R
ˉ
θ
{\bar R_\theta }
Rˉθ?的定義那樣,將每個Episode都理解為一次抽樣(Sampling),但這次抽樣的個體不是
R
θ
R_\theta
Rθ? ,而是
τ
\tau
τ ,抽樣時每個個體
τ
\tau
τ 都有各自被抽取的可能性(可能相等,也可能不相等),而這個可能性是取決于actor的引數
θ
\theta
θ 的,我們將這個可能性記為
P
(
τ
∣
θ
)
P(\tau | \theta)
P(τ∣θ),表示當actor的引數為
θ
\theta
θ時,
τ
\tau
τ這個程序出現的幾率,
理解了上面這段話,我們就能將
R
ˉ
θ
\bar R_\theta
Rˉθ?重新表示為
R
ˉ
θ
=
∑
τ
R
(
τ
)
P
(
τ
∣
θ
)
\bar R_\theta = \sum \limits_\tau R(\tau)P(\tau|\theta)
Rˉθ?=τ∑?R(τ)P(τ∣θ)實際操作時要窮舉所有的
τ
\tau
τ是不可能的,所以一般的做法是讓actor
π
θ
\pi_\theta
πθ? 玩N場游戲,得到N個序列
τ
\tau
τ
{
τ
1
,
τ
2
,
.
.
.
,
τ
N
}
\{\tau^1,\tau^2,...,\tau^N\}
{τ1,τ2,...,τN}這相當于從
P
(
τ
∣
θ
)
P(\tau |\theta)
P(τ∣θ)這個可能性當中進行N次抽樣,當N足夠大的時候就可以認為
R
ˉ
θ
=
∑
τ
R
(
τ
)
P
(
τ
∣
θ
)
≈
1
N
∑
n
=
1
N
R
(
τ
n
)
\bar R_\theta = \sum \limits_\tau R(\tau)P(\tau|\theta) \approx {1 \over N}\sum\limits^N_{n=1} R(\tau^n)
Rˉθ?=τ∑?R(τ)P(τ∣θ)≈N1?n=1∑N?R(τn)這樣就完成了
R
ˉ
θ
{\bar R_\theta }
Rˉθ?的計算,
選擇最優的Function
在學習DL的時候我們知道選擇最優函式最簡單的方法就是Gradient Descent,當然這里由于我們期望的是最大值,故應該使用的是Gradient Ascent,大同小異,讓我們用數學語言重新描述現在的問題:
θ
?
=
arg
?
max
?
θ
R
ˉ
θ
{\theta ^*} = \arg \mathop {\max }\limits_\theta {\bar R_\theta }
θ?=argθmax?Rˉθ?
R
ˉ
θ
=
∑
τ
R
(
τ
)
P
(
τ
∣
θ
)
\bar R_\theta = \sum \limits_\tau R(\tau)P(\tau|\theta)
Rˉθ?=τ∑?R(τ)P(τ∣θ)
使用Gradient Ascent來解決這個問題,即
- 選擇初始值 θ 0 \theta^0 θ0
- θ 1 ← θ 0 + η ? R ˉ θ 0 \theta^1 \leftarrow \theta^0+\eta\nabla{\bar R_{\theta^0}} θ1←θ0+η?Rˉθ0?
- θ 2 ← θ 1 + η ? R ˉ θ 1 \theta^2 \leftarrow \theta^1+\eta\nabla{\bar R_{\theta^1}} θ2←θ1+η?Rˉθ1?
- …
其中,
θ
=
{
w
1
,
w
2
,
.
.
.
,
b
1
,
.
.
.
}
\theta = \{w_1,w_2,...,b_1,...\}
θ={w1?,w2?,...,b1?,...}
?
R
ˉ
θ
=
[
?
R
ˉ
θ
/
?
w
1
,
?
R
ˉ
θ
/
?
w
2
,
.
.
.
,
?
R
ˉ
θ
/
?
b
1
,
.
.
.
]
T
\nabla{\bar R_{\theta}} = [\partial{\bar R_\theta}/\partial{w_1},\partial{\bar R_\theta}/\partial{w_2},...,\partial{\bar R_\theta}/\partial{b_1},...]^T
?Rˉθ?=[?Rˉθ?/?w1?,?Rˉθ?/?w2?,...,?Rˉθ?/?b1?,...]T
梯度的具體計算程序如下:在
R
ˉ
θ
\bar R_\theta
Rˉθ?的計算式中,顯然
R
(
τ
)
R(\tau)
R(τ)是和
θ
\theta
θ 無關的,因此也不需要對它做微分,即:(下面的公式我能截圖就截圖了,公式編輯器用著太痛苦了)

為了讓
P
(
τ
∣
θ
)
P(\tau|\theta)
P(τ∣θ)出現在這個式子當中的分子位置(后面會講原因),需要做如下操作:

由于

故
?
R
ˉ
θ
\nabla{\bar R_{\theta}}
?Rˉθ?也可以與下面這個式子劃等號:

又因為當我們從
P
(
τ
∣
θ
)
P(\tau|\theta)
P(τ∣θ)這個可能性中進行足夠多的N次抽樣時
∑
τ
R
(
τ
)
P
(
τ
∣
θ
)
≈
1
N
∑
n
=
1
N
R
(
τ
n
)
\sum \limits_\tau R(\tau)P(\tau|\theta) \approx {1 \over N}\sum\limits^N_{n=1} R(\tau^n)
τ∑?R(τ)P(τ∣θ)≈N1?n=1∑N?R(τn),因此丄式約等于
接下來,問題的中心點就在于如何求解
l
o
g
P
(
τ
n
∣
θ
)
logP(\tau^n|\theta)
logP(τn∣θ)的梯度,根據對
τ
\tau
τ的定義可以知道

對上式兩端取對數,相乘變相加,即

顯然上式右端只有第二項和
θ
\theta
θ有關,故
我們將上述所有式子結合起來得到
?
R
ˉ
θ
\nabla{\bar R_{\theta}}
?Rˉθ?的表示式:

這個式子的意思是:
當在一個Episode的序列
τ
n
\tau_n
τn?中,若machine在狀態
s
t
n
s^n_t
stn?下采取了
a
t
n
a^n_t
atn?的Action,最終導致這個Episode的Reward
R
(
τ
n
)
R(\tau^n)
R(τn)為正,則要調整
θ
\theta
θ的值讓machine在狀態
s
t
n
s^n_t
stn?下采取Action
a
t
n
a^n_t
atn?的幾率提高;
反之,若machine在狀態
s
t
n
s^n_t
stn?下采取了
a
t
n
a^n_t
atn?的Action,最終導致這個Episode的Reward
R
(
τ
n
)
R(\tau^n)
R(τn)為負,則要調整
θ
\theta
θ的值讓machine在狀態
s
t
n
s^n_t
stn?下采取Action
a
t
n
a^n_t
atn?的幾率降低,
(怎么調整?當然通過
θ
n
e
w
←
θ
o
l
d
+
η
?
R
ˉ
θ
o
l
d
\theta^{new} \leftarrow \theta^{old}+\eta\nabla{\bar R_{\theta^{old}}}
θnew←θold+η?Rˉθold?調整啦~)
需要注意的是,雖然在
?
R
ˉ
θ
\nabla{\bar R_{\theta}}
?Rˉθ?的最終表示式里的最后一項是在某一個時間點t的狀態采取對應Action的概率,但前面相乘的還是整個Episode的Reward,而不是這一步Action所得到的即時Reward,(這個問題也很好理解,如果相乘的是即時Reward的話,因為只有開火能得到即時Reward,最后訓練出來的Actor就是一個不會左右移動的無情開火機器)
Q:為什么對幾率的對數取梯度?不能直接對幾率去梯度嗎?
(待解決)
Tips:Baseline的使用
Q:我們最后是根據
R
(
τ
n
)
R(\tau^n)
R(τn)的正負來調整
θ
\theta
θ,但如果在某個游戲當中,所有的Reward都是正數該怎么解決?(Space invader其實就屬于這種情況,因為這個游戲的分數永遠不會是負值)
A:使用如下的式子來計算
?
R
ˉ
θ
\nabla{\bar R_{\theta}}
?Rˉθ?:

除了給
R
(
τ
n
)
R(\tau^n)
R(τn)減去一個b以外沒有其他的不同,這個b讓
R
(
τ
n
)
R(\tau^n)
R(τn)的值有正有負,我們將它成為Baseline,Baseline的值是自己定義的)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/227155.html
標籤:AI

