A3C(Asynchronous Advantage Actor-Critic)是由Google DeepMind 團隊於2016年提出的一種基於異步梯度的深度強化學習框架(Asynchronous Methods for Deep Reinforcement Learning),利用了多線程同時並行運行的特點,讓多個Actor(演員)並行訓練而定期與全局參數同步。該方法在Atari遊戲和3D迷宮等方面都有不錯的效果。
符號
符號
含義
s
∈
S
{\displaystyle s\in S}
狀態。
a
∈
A
{\displaystyle a\in A}
動作。
r
∈
R
{\displaystyle r\in R}
回報。
S
t
,
A
t
,
R
t
{\displaystyle S_{t},A_{t},R_{t}}
一個軌跡中第個時間步對應的狀態、動作以及回報。偶爾使用
s
t
,
a
t
,
r
t
{\displaystyle s_{t},a_{t},r_{t}}
代替。
γ
{\displaystyle \gamma }
折扣因子;用於懲罰未來回報中的不確定性。
G
t
{\displaystyle G_{t}}
累積回報;或者說累積折扣回報。
P
(
s
′
,
r
|
s
,
a
)
{\displaystyle P(s',r|s,a)}
在當前狀態下採取動作後轉移到下一個狀態並得到回報的概率。
π
(
a
|
s
)
{\displaystyle \pi (a|s)}
隨機策略(智能體行為邏輯);
π
θ
(
.
)
{\displaystyle \pi _{\theta }(.)}
代表由參數化的策略。
μ
(
s
)
{\displaystyle \mu (s)}
確定性策略;雖然也可以把確定性策略記為
π
(
s
)
{\displaystyle \pi (s)}
,但是採用一個不同的字母可以讓我們更容易分辨一個策略到底是確定性的還是隨機的。
π
{\displaystyle \pi }
或者
μ
{\displaystyle \mu }
都是強化學習算法要學習的目標。
V
(
s
)
{\displaystyle V(s)}
狀態-值函數衡量狀態的期望累積回報;
V
ω
(
.
)
{\displaystyle V_{\omega }(.)}
代表由ω參數化的狀態-值函數。
V
π
(
s
)
{\displaystyle V^{\pi }(s)}
當智能體遵循策略時狀態的期望累積回報;。
V
(
π
)
(
s
)
=
E
a
∼
π
[
G
t
|
S
t
=
s
]
{\displaystyle V(\pi )(s)=\mathbb {E} _{a\sim \pi }[G_{t}|S_{t}=s]}
Q
(
s
,
a
)
{\displaystyle Q(s,a)}
動作-值函數,與狀態-值函數類似,但是它衡量在狀態下採取動作後的期望累積回報;代表由參數化的動作-值函數。
Q
π
(
s
,
a
)
{\displaystyle Q^{\pi }(s,a)}
與
V
π
(
s
)
{\displaystyle V^{\pi }(s)}
類似,當智能體遵循策略
π
{\displaystyle \pi }
時,在狀態
s
{\displaystyle s}
下採取動作
a
{\displaystyle a}
後的期望累積回報;
Q
π
(
s
,
a
)
=
E
a
∼
π
[
G
t
|
S
t
=
s
,
A
t
=
a
]
{\displaystyle Q^{\pi }(s,a)=\mathbb {E} _{a\sim \pi }[G_{t}|S_{t}=s,A_{t}=a]}
。
A
(
s
,
a
)
{\displaystyle A(s,a)}
優勢函數,;
A
(
s
,
a
)
=
Q
(
s
,
a
)
−
V
(
s
)
{\displaystyle A(s,a)=Q(s,a)-V(s)}
可以認為優勢函數是加強版本的動作-值函數,但是由於它採用狀態-值函數作為基準使得它具有更小的方差。
[ 1]
優勢函數
由
A
(
s
,
a
)
=
Q
(
s
,
a
)
−
V
(
s
)
=
r
(
s
,
a
)
+
γ
E
s
′
∼
p
(
s
′
|
s
,
a
)
[
V
(
s
′
)
−
V
(
s
)
]
≃
r
(
s
,
a
)
+
γ
(
V
(
s
′
)
−
V
(
s
)
)
{\displaystyle A(s,a)=Q(s,a)-V(s)=r(s,a)+\gamma \mathbb {E} _{s'\sim p(s'|s,a)}[V^{(}s')-V^{(}s)]\simeq r(s,a)+\gamma (V(s')-V(s))}
。
當選取k步TD後,在A3C中由於有參數
θ
,
θ
v
{\displaystyle \theta ,\theta _{v}}
,優勢函數可改寫為:
A
(
s
t
,
a
t
;
θ
,
θ
v
)
=
∑
i
=
0
k
−
1
γ
i
r
t
+
i
+
γ
k
V
(
s
t
+
k
;
θ
v
)
−
V
(
s
t
;
θ
v
)
{\displaystyle A(s_{t},a_{t};\theta ,\theta _{v})=\sum _{i=0}^{k-1}\gamma ^{i}r_{t+i}+\gamma ^{k}V(s_{t+k};\theta _{v})-V(s_{t};\theta _{v})}
[ 2]
算法流程
異步優勢Actor-Critic - 每個Actor-Learner線程的偽代碼如下:
定義全局參數向量
θ
{\displaystyle \theta }
和
θ
v
{\displaystyle \theta _{v}}
以及全局計數器
T
=
0
{\displaystyle T=0}
定義線程自身參數向量
θ
′
{\displaystyle \theta '}
和
θ
v
′
{\displaystyle \theta '_{v}}
,初始化線程步數計數器
t
←
1
{\displaystyle t\leftarrow 1}
當
T
≦
T
m
a
x
{\displaystyle T\leqq T_{max}}
:
重置梯度:
d
θ
←
0
{\displaystyle d\theta \leftarrow 0}
和
d
θ
v
′
←
0
{\displaystyle d\theta '_{v}\leftarrow 0}
將線程自身的參數向量與全局參數向量同步:
θ
′
=
θ
{\displaystyle \theta '=\theta }
,
θ
v
′
=
θ
v
{\displaystyle \theta '_{v}=\theta _{v}}
令線程計數器
t
s
t
a
r
t
=
t
{\displaystyle t_{start}=t}
並隨機採樣一個初始狀態
s
t
{\displaystyle s_{t}}
當(
s
t
!
=
{\displaystyle s_{t}!=}
終止狀態)且
t
−
t
s
t
a
r
t
≦
t
m
a
x
{\displaystyle t-t_{start}\leqq t_{max}}
:
根據當前線程的策略選擇當前執行的動作
a
t
∼
π
θ
′
(
a
t
|
s
t
)
{\displaystyle a_{t}\sim \pi _{\theta '}(a_{t}|s_{t})}
執行動作後接受回報
r
t
{\displaystyle r_{t}}
並轉移到下一個狀態
s
t
+
1
{\displaystyle s_{t+1}}
。
更新t以及
T
:
t
=
t
+
1
{\displaystyle T:t=t+1}
並且
T
=
T
+
1
{\displaystyle T=T+1}
初始化保存累積回報估計值的變量:
R
=
{
0
,
if
s
=
s
t
e
r
m
i
n
a
l
V
(
s
t
,
θ
v
′
)
,
non-terminal
s
t
{\displaystyle R={\begin{cases}0,&{\text{if }}s=s_{terminal}\\V(s_{t},\theta '_{v}),&{\text{non-terminal }}s_{t}\end{cases}}}
對於
i
∈
{
t
−
1
,
.
.
.
,
t
s
t
a
r
t
}
{\displaystyle i\in \{t-1,...,t_{start}\}}
,執行:
R
←
r
i
+
γ
R
{\displaystyle R\leftarrow r_{i}+\gamma R}
累積關於參數
θ
′
{\displaystyle \theta '}
的梯度:
d
θ
←
d
θ
+
∇
θ
′
log
π
(
a
i
|
s
i
;
θ
′
)
(
R
−
V
(
s
i
;
θ
v
′
)
)
{\displaystyle d\theta \leftarrow d\theta +\nabla _{\theta '}\log \pi (a_{i}|s_{i};\theta ')(R-V(s_{i};\theta _{v}'))}
累積關於參數
θ
v
′
{\displaystyle \theta '_{v}}
的梯度:
d
θ
v
←
d
θ
v
+
∂
(
R
−
V
(
s
i
;
θ
v
′
)
)
2
∂
θ
v
′
{\displaystyle d\theta _{v}\leftarrow d\theta _{v}+{\partial (R-V(s_{i};\theta _{v}'))^{2} \over \partial \theta _{v}'}}
分別使用
d
θ
{\displaystyle d\theta }
和
d
θ
v
{\displaystyle d\theta _{v}}
異步更新
θ
{\displaystyle \theta }
和
θ
v
{\displaystyle \theta _{v}}
[ 3]
改進
在Asynchronous Methods for Deep Reinforcement Learning (頁面存檔備份 ,存於互聯網檔案館 )中作者還將熵(
H
(
π
(
s
t
,
θ
′
)
)
{\displaystyle H(\pi (s_{t},\theta '))}
)加到目標函數中以避免收斂到次優確定性解,這是由於在最大化熵的過程中會避免分佈過於集中,包含熵在內的完整目標函數梯度如下[ 4]
∇
θ
′
log
π
(
a
t
|
s
t
;
θ
′
)
(
R
t
−
V
(
s
t
;
θ
v
)
)
+
β
∇
θ
′
H
(
π
(
s
t
;
θ
′
)
)
{\displaystyle \nabla _{\theta '}\log \pi (a_{t}|s_{t};\theta ')(R_{t}-V(s_{t};\theta _{v}))+\beta \nabla _{\theta }'H(\pi (s_{t};\theta '))}
其中H為熵函數,
β
{\displaystyle \beta }
是用於控制熵正則化項的超參數。
論文
[1] (頁面存檔備份 ,存於互聯網檔案館 )
代碼實現
[2] (頁面存檔備份 ,存於互聯網檔案館 )
參考資料
^ 策略梯度方法 . Abracadabra. [2022-05-14 ] (英語) .
^ Asynchronous Methods for Deep Reinforcement Learning (PDF) . [2022-05-15 ] . (原始內容存檔 (PDF) 於2022-06-22).
^ 策略梯度方法 . Abracadabra. [2022-05-15 ] (英語) .
^ A3C - 搜索结果 - 知乎 . www.zhihu.com. [2022-05-15 ] . (原始內容存檔 於2022-05-15).