Actor-Critic Method
Actor:策略网络,用来控制agent运动,可以看作运动员
Critic:价值网络,用来给动作打分,可以看作裁判
学习的目的:让运动员的分数越来越高,并让裁判的打分越来越精准
一、 Value Netwok and Policy Network
State-value function:状态价值函数
V π ( s ) = ∑ a π ( a ∣ s ) ⋅ Q π ( s , a ) ≈ ∑ a π ( a ∣ s ; θ ) ⋅ q ( s , a ; w ) V_\pi(s)=\sum_a\pi(a|s)\cdot Q_\pi (s,a) {\color{d44d37}\approx\sum_a\pi(a|s;\bm\theta)\cdot q(s,a;\textbf{w})} Vπ(s)=a∑π(a∣s)⋅Qπ(s,a)≈a∑π(a∣s;θ)⋅q(s,a;w)
策略函数 π ( a ∣ s ) \pi(a|s) π(a∣s):用来计算动作的概率值从而控制agent做运动。
动作价值函数 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a):用来评价动作的好坏程度。
💡 π \pi π和 Q π Q_\pi Qπ均未知
用两个神经网络分别近似这两个函数,用Actor-Critic方法同时学习这两个神经网络。
Policy network (actor):
- 用神经网络 π ( a ∣ s ; θ ) \pi(a|s;\bm\theta) π(a∣s;θ)近似策略函数 π ( a ∣ s ) \pi(a|s) π(a∣s);
- θ \bm\theta θ:神经网络参数;
- 用策略网络控制agent做运动,即决策由策略网络做出。
Value network (critic):
- 用神经网络 q ( s , a ; w ) q(s,a;\textbf{w}) q(s,a;w)近似动作价值函数 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a);
- w \textbf{w} w:神经网络参数;
- 不控制agent运动,给动作打分
1. Policy network (Actor): π ( a ∣ s ; θ ) \pi(a|s;\bm\theta) π(a∣s;θ)
- 输入:状态 s s s,即当前屏幕显示的画面或最近几帧的画面;
- 一个或几个卷积层把画面变成特征向量;
- 全连接层把特征向量映射到一个三维向量(因为有三个动作,所以维度是三);
- 用softmax激活函数输出概率分布,输出的是三维向量,每一个元素对应一个动作,值为动作的概率。
💡 policy函数是概率密度函数,需满足 ∑ a ∈ A π ( a ∣ s ; θ ) = 1 \sum_{a\in A}\pi(a|s;\bm{\theta})=1 ∑a∈Aπ(a∣s;θ)=1;
使用softmax函数:让输出值都是正数且加和等于一。
2. Value network (Critic): q ( s , a ; w ) q(s,a;\textbf{w}) q(s,a;w)
- 输入状态
s
s
s和动作
a
a
a;
a. 如果动作是离散的,可以用one-hot coding来表示动作,如向左为[1, 0, 0],向右为[0, 1, 0],向上为[0, 0, 1]; - 分别用卷积层和全连接层从输入中提取特征,得到特征向量;
- 将这两个特征向量拼接起来,得到更高的特征向量;
- 最后用全连接层输出一个实数,这个实数就是Critic的打分,说明在状态 s s s下做出动作 a a a是好还是坏。
价值网络和策略网络可以共享卷积层参数,也可以各自独立。
二、 训练神经网络
💡 Actor-Critic Method:同时训练策略网络和价值网络
用
V
(
s
;
θ
,
w
)
V(s;\bm\theta,\textbf{w})
V(s;θ,w)近似状态价值函数(用策略网络近似策略函数,用价值网络近似动作价值函数)
V
(
s
;
θ
,
w
)
=
∑
a
π
(
a
∣
s
;
θ
)
⋅
q
(
s
,
a
;
w
)
V(s;\bm\theta,\textbf{w})=\sum_a\pi(a|s;\bm\theta)\cdot q(s,a;\textbf{w})
V(s;θ,w)=a∑π(a∣s;θ)⋅q(s,a;w)
函数 V ( s ; θ , w ) V(s;\bm\theta,\textbf{w}) V(s;θ,w)是对策略 π \pi π和状态 s s s的评价。
训练:更新神经网络参数 θ \bm\theta θ和 w \textbf{w} w
- 更新策略网络
π
(
a
∣
s
;
θ
)
\pi(a|s;\bm\theta)
π(a∣s;θ)的参数
θ
\bm\theta
θ:为了增加函数
V
(
s
;
θ
,
w
)
V(s;\bm\theta,\textbf{w})
V(s;θ,w)的值。
- 学习策略网络 π ( a ∣ s ; θ ) \pi(a|s;\bm\theta) π(a∣s;θ)的时候,由价值网络 q ( s , a ; w ) q(s,a;\textbf{w}) q(s,a;w)提供监督;
- 运动员(策略网络)靠裁判(价值网络)打的分数来改进自己的技术。
- 更新价值网络
q
(
s
,
a
;
w
)
q(s,a;\textbf{w})
q(s,a;w)的参数
w
\textbf{w}
w:为了让
q
(
s
,
a
;
w
)
q(s,a;\textbf{w})
q(s,a;w)的打分更精准,以更好地估计未来得到的奖励总和。
- 学习 q ( s , a ; w ) q(s,a;\textbf{w}) q(s,a;w)的时候,监督信号来自环境给的奖励reward;
- 裁判(价值网络)一开始没有判断能力打分靠瞎猜,但会逐渐改进自己的水平使其接近真实打分情况。
训练步骤
- 观测到状态 s t s_t st;
- 将 s t s_t st作为输入,用策略网络 π \pi π计算概率分布,随机抽样得到动作 a t ∼ π ( ⋅ ∣ s t ; θ t ) a_t\sim\pi(\cdot|s_t;\bm\theta_t) at∼π(⋅∣st;θt);
- agent执行动作 a t a_t at,环境更新状态 s t + 1 s_{t+1} st+1并给出奖励 r t r_t rt;
- 有了奖励 r t r_t rt,用TD算法更新价值网络的参数 w \textbf{w} w,即让裁判更准确;
- 用策略梯度算法Policy gradient更新策略网络的参数 θ \bm\theta θ,即让运动员技术更好(更新策略网络的参数要用到裁判对 a t a_t at的打分)
1. 用TD算法更新价值网络
- 用价值网络分别给动作
a
t
a_t
at和动作
a
t
+
1
a_{t+1}
at+1打分:计算
q
(
s
t
,
a
t
;
w
t
)
q(s_t,a_t;\textbf{w}_t)
q(st,at;wt)和
q
(
s
t
+
1
,
a
t
+
1
;
w
t
)
q(s_{t+1},a_{t+1};\textbf{w}_t)
q(st+1,at+1;wt);
- 动作是根据策略网络 π \pi π随机抽样得到的。
- 计算TD target:
y
t
=
r
t
+
γ
⋅
q
(
s
t
+
1
,
a
t
+
1
;
w
)
y_t=r_t+\gamma\cdot q(s_{t+1},a_{t+1};\textbf{w})
yt=rt+γ⋅q(st+1,at+1;w);
- γ \gamma γ:折扣率;
- TD target y t y_t yt 比预测值 q ( s t , a t ; w t ) q(s_t,a_t;\textbf{w}_t) q(st,at;wt) 更接近真实值。
- 损失函数Loss:
L
(
w
)
=
1
2
[
q
(
s
t
,
a
t
;
w
t
)
−
y
t
]
2
L(\textbf{w})=\frac{1}{2}[q(s_t,a_t;\textbf{w}_t)-y_t]^2
L(w)=21[q(st,at;wt)−yt]2;
- 损失函数鼓励 q ( s t , a t , w t ) q(s_t,a_t,\textbf{w}_t) q(st,at,wt)尽量接近 y t y_t yt。
- 梯度下降:
w
t
+
1
=
w
t
−
α
⋅
∂
L
(
w
)
∂
w
∣
w
=
w
t
\textbf{w}_{t+1}=\textbf{w}_t-\alpha\cdot \frac{\partial L(\textbf{w})}{\partial\textbf{w}}|_{\textbf{w}=\textbf{w}_t}
wt+1=wt−α⋅∂w∂L(w)∣w=wt;
- α \alpha α:学习率;
- 梯度下降让损失函数 L ( w ) L(\textbf{w}) L(w)变小。
2. 用策略梯度算法更新策略网络
💡 状态价值函数 V ( s ; θ , w ) = ∑ a π ( a ∣ s ; θ ) ⋅ q ( s , a ; w ) V(s;\bm\theta,\textbf{w})=\sum_a\pi(a|s;\bm\theta)\cdot q(s,a;\textbf{w}) V(s;θ,w)=∑aπ(a∣s;θ)⋅q(s,a;w)相当于运动员所有动作的平均分。
- 策略梯度:函数 V ( s ; θ , w ) V(s;\bm\theta,\textbf{w}) V(s;θ,w)关于参数 θ \bm\theta θ的导数;
-
g
(
a
,
θ
)
=
∂
log
π
(
a
∣
s
;
θ
)
∂
θ
⋅
q
(
s
t
,
a
;
w
)
\textbf{g}(a,\bm\theta)=\frac{\partial\log\pi(a|s;\bm\theta)}{\partial\bm\theta}\cdot q(s_t,a;\textbf{w})
g(a,θ)=∂θ∂logπ(a∣s;θ)⋅q(st,a;w);
- q ( s t , a ; w ) q(s_t,a;\textbf{w}) q(st,a;w)为裁判对动作的打分。
-
∂
V
(
s
;
θ
,
w
t
)
∂
θ
=
E
A
[
g
(
A
,
θ
)
]
\frac{\partial V(s;\bm\theta,\textbf{w}_t)}{\partial\bm\theta}=\Bbb E_{\color{d44d37}A}[\textbf{g}({\color{d44d37}A},\bm\theta)]
∂θ∂V(s;θ,wt)=EA[g(A,θ)],用蒙特卡洛近似期望求梯度;
- 把策略网络 π ( ⋅ ∣ s t ; θ t ) \pi(\cdot |s_t;\bm\theta_t) π(⋅∣st;θt)作为概率密度函数,用它随机抽样得到一个动作 a {\color{d44c47}a} a;
- 由于 a {\color{d44c47}{a}} a是根据概率密度函数 π \pi π随机抽样得到的,所以 g ( a , θ ) \textbf{g}({\color {d44c47}{a}},\bm\theta) g(a,θ)是策略梯度 ∂ V ( s ; θ ) ∂ θ \frac{\partial V(s;\bm\theta)}{\partial\bm\theta} ∂θ∂V(s;θ)的无偏估计;
- 由于 g ( a , θ ) \textbf{g}({\color {d44c47}{a}},\bm\theta) g(a,θ)是策略梯度 ∂ V ( s ; θ , w t ) ∂ θ \frac{\partial V(s;\bm\theta,\textbf{w}_t)}{\partial\bm\theta} ∂θ∂V(s;θ,wt)的无偏估计,可以用 g ( a , θ ) \textbf{g}({\color {d44c47}{a}},\bm\theta) g(a,θ)来近似策略梯度 ∂ V ( s ; θ , w t ) ∂ θ \frac{\partial V(s;\bm\theta,\textbf{w}_t)}{\partial\bm\theta} ∂θ∂V(s;θ,wt)(蒙特卡洛近似)。
- 做梯度上升更新策略网络参数:
θ
t
+
1
=
θ
t
+
β
⋅
g
(
a
,
θ
t
)
\bm\theta_{t+1}=\bm\theta_t+\beta\cdot \textbf{g}({\color{d44c47}a},\bm\theta_t)
θt+1=θt+β⋅g(a,θt);
- β \beta β:学习率;
- 由于梯度是函数 V ( s ; θ , w ) V(s;\bm\theta,\textbf{w}) V(s;θ,w)关于 θ \bm\theta θ的导数,梯度上升可以增加 V V V函数的值。
三、 Actor-Critic Method
- 观测到状态 s t s_t st,用策略网络 π \pi π计算概率分布,随机抽样得到动作 a t ∼ π ( ⋅ ∣ s t ; θ t ) a_t\sim\pi(\cdot|s_t;\bm\theta_t) at∼π(⋅∣st;θt);
- agent执行动作 a t a_t at,环境更新状态 s t + 1 s_{t+1} st+1并给出奖励 r t r_t rt;
- 将新状态
s
t
+
1
s_{t+1}
st+1作为输入,用策略网络
π
\pi
π计算新的概率分布,随机抽样得到动作
a
~
t
+
1
∼
π
(
⋅
∣
s
t
+
1
;
θ
t
)
\tilde{a}_{t+1}\sim\pi(\cdot|s_{t+1};\bm\theta_t)
a~t+1∼π(⋅∣st+1;θt);
a. a ~ t + 1 \tilde a_{t+1} a~t+1为假象动作,只用于计算 q q q值,agent并不会真正执行该动作;
b. 算法的每一轮循环里agent只会做一次动作。 - 计算两次价值网络的输出,输入分别为 s t , a t s_t,a_t st,at和 s t + 1 , a ~ t + 1 s_{t+1},\tilde a_{t+1} st+1,a~t+1,输出裁判打分 q t = q ( s t , a t ; w t ) q_t=q(s_t,a_t;\textbf{w}_t) qt=q(st,at;wt)和 q t + 1 = q ( s t + 1 , a ~ t + 1 ; w t ) q_{t+1}=q(s_{t+1},\tilde a_{t+1};\textbf{w}_t) qt+1=q(st+1,a~t+1;wt);
- 计算TD error: δ t = q t ⏟ 预测 − ( r t + γ ⋅ q t + 1 ) ⏟ TD target \delta_t=\underbrace{q_t}_{\text{预测}}-\underbrace{(r_t+\gamma\cdot q_{t+1})}_{\text{TD target}} δt=预测 qt−TD target (rt+γ⋅qt+1);
- 对价值网络关于参数
w
\textbf w
w求导,得到价值网络关于参数
w
\textbf w
w的梯度:
d
w
,
t
=
∂
q
(
s
t
,
a
t
;
w
)
∂
w
∣
w
=
w
t
\textbf d_{w,t}=\frac{\partial q(s_t,a_t;\textbf{w})}{\partial\textbf w}|_{\textbf w=\textbf w_t}
dw,t=∂w∂q(st,at;w)∣w=wt;
a. 梯度 d w , t \textbf d_{w,t} dw,t的形状与参数 w \textbf w w完全一样,是同样大小的矩阵或张量。 - 用TD算法更新价值网络,让裁判打分更精准: w t + 1 = w t − α ⋅ δ t ⋅ d w , t \textbf w_{t+1}=\textbf w_t-\alpha\cdot\delta_t\cdot\textbf d_{w,t} wt+1=wt−α⋅δt⋅dw,t;
- 对策略网络
π
\pi
π关于参数
θ
\bm\theta
θ求导,得到
log
π
(
a
t
∣
s
t
;
θ
)
\log\pi(a_t|s_t;\bm\theta)
logπ(at∣st;θ)关于参数
θ
\bm\theta
θ的梯度:
d
θ
,
t
=
∂
log
π
(
a
t
∣
s
t
;
θ
)
∂
θ
∣
θ
=
θ
t
\textbf d_{\theta,t}=\frac{\partial\log\pi(a_t|s_t;\bm\theta)}{\partial\bm\theta}|_{\bm\theta=\bm\theta_t}
dθ,t=∂θ∂logπ(at∣st;θ)∣θ=θt;
a. 梯度 d θ , t \textbf d_{\theta,t} dθ,t的形状与参数 θ \bm\theta θ完全一样,是同样大小的矩阵或张量。 - 用梯度上升更新策略网络,让运动员的平均分更高(标准算法):
θ
t
+
1
=
θ
t
+
β
⋅
q
t
⋅
d
θ
,
t
\bm\theta_{t+1}=\bm\theta_t+\beta\cdot q_t\cdot\textbf d_{\theta,t}
θt+1=θt+β⋅qt⋅dθ,t。
a. 有些书和论文使用 δ t \delta_t δt而非 q t q_t qt;
b. Policy gradient with baseline: θ t + 1 = θ t + β ⋅ δ t ⋅ d θ , t \bm\theta_{t+1}=\bm\theta_t+\beta\cdot {\color{d44d37}\delta_t}\cdot\textbf d_{\theta,t} θt+1=θt+β⋅δt⋅dθ,t;这里的baseline是TD target: r t + γ ⋅ q t + 1 r_t+\gamma\cdot q_{t+1} rt+γ⋅qt+1;
c. 用好的baseline可以降低方差,让算法收敛更快,baseline可以是任何接近 q t q_t qt的数,但不能是动作 a t a_t at的函数
每一轮迭代中只做一次动作,观测一次奖励,更新一次神经网络的参数。