Actor-Critic Method
- 一、 Value Netwok and Policy Network
-
- 1. Policy network (Actor): π ( a ∣ s ; θ ) \pi(a|s;\bm\theta) π(a∣s;θ)
- 2. Value network (Critic): q ( s , a ; w ) q(s,a;\textbf{w}) q(s,a;w)
- 二、 训练神经网络
-
- 1. 用TD算法更新价值网络
- 2. 用策略梯度算法更新策略网络
- 三、 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的函数
每一轮迭代中只做一次动作,观测一次奖励,更新一次神经网络的参数。