深度强化学习 _Actor-Critic 王树森课程笔记

Actor-Critic Method

  • 一、 Value Netwok and Policy Network
    • 1. Policy network (Actor): π ( a ∣ s ; θ ) \pi(a|s;\bm\theta) π(as;θ)
    • 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:价值网络,用来给动作打分,可以看作裁判

学习的目的:让运动员的分数越来越高,并让裁判的打分越来越精准

深度强化学习 _Actor-Critic 王树森课程笔记_第1张图片

一、 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π(as)Qπ(s,a)aπ(as;θ)q(s,a;w)

策略函数 π ( a ∣ s ) \pi(a|s) π(as):用来计算动作的概率值从而控制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) π(as;θ)近似策略函数 π ( a ∣ s ) \pi(a|s) π(as)
  • θ \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) π(as;θ)

深度强化学习 _Actor-Critic 王树森课程笔记_第2张图片

  1. 输入:状态 s s s,即当前屏幕显示的画面或最近几帧的画面;
  2. 一个或几个卷积层把画面变成特征向量;
  3. 全连接层把特征向量映射到一个三维向量(因为有三个动作,所以维度是三);
  4. 用softmax激活函数输出概率分布,输出的是三维向量,每一个元素对应一个动作,值为动作的概率。

policy函数是概率密度函数,需满足 ∑ a ∈ A π ( a ∣ s ; θ ) = 1 \sum_{a\in A}\pi(a|s;\bm{\theta})=1 aAπ(as;θ)=1
使用softmax函数:让输出值都是正数且加和等于一。

2. Value network (Critic): q ( s , a ; w ) q(s,a;\textbf{w}) q(s,a;w)

深度强化学习 _Actor-Critic 王树森课程笔记_第3张图片

  1. 输入状态 s s s和动作 a a a
    a. 如果动作是离散的,可以用one-hot coding来表示动作,如向左为[1, 0, 0],向右为[0, 1, 0],向上为[0, 0, 1];
  2. 分别用卷积层和全连接层从输入中提取特征,得到特征向量;
  3. 将这两个特征向量拼接起来,得到更高的特征向量;
  4. 最后用全连接层输出一个实数,这个实数就是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π(as;θ)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) π(as;θ)的参数 θ \bm\theta θ:为了增加函数 V ( s ; θ , w ) V(s;\bm\theta,\textbf{w}) V(s;θ,w)的值。
    • 学习策略网络 π ( a ∣ s ; θ ) \pi(a|s;\bm\theta) π(as;θ)的时候,由价值网络 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;
    • 裁判(价值网络)一开始没有判断能力打分靠瞎猜,但会逐渐改进自己的水平使其接近真实打分情况。

训练步骤

  1. 观测到状态 s t s_t st
  2. s t s_t st作为输入,用策略网络 π \pi π计算概率分布,随机抽样得到动作 a t ∼ π ( ⋅ ∣ s t ; θ t ) a_t\sim\pi(\cdot|s_t;\bm\theta_t) atπ(st;θt)
  3. agent执行动作 a t a_t at,环境更新状态 s t + 1 s_{t+1} st+1并给出奖励 r t r_t rt
  4. 有了奖励 r t r_t rt,用TD算法更新价值网络的参数 w \textbf{w} w,即让裁判更准确;
  5. 用策略梯度算法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αwL(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π(as;θ)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π(as;θ)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

  1. 观测到状态 s t s_t st,用策略网络 π \pi π计算概率分布,随机抽样得到动作 a t ∼ π ( ⋅ ∣ s t ; θ t ) a_t\sim\pi(\cdot|s_t;\bm\theta_t) atπ(st;θt)
  2. agent执行动作 a t a_t at,环境更新状态 s t + 1 s_{t+1} st+1并给出奖励 r t r_t rt
  3. 将新状态 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只会做一次动作。
  4. 计算两次价值网络的输出,输入分别为 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)
  5. 计算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=预测 qtTD target (rt+γqt+1)
  6. 对价值网络关于参数 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=wq(st,at;w)w=wt
    a. 梯度 d w , t \textbf d_{w,t} dw,t的形状与参数 w \textbf w w完全一样,是同样大小的矩阵或张量。
  7. 用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αδtdw,t
  8. 对策略网络 π \pi π关于参数 θ \bm\theta θ求导,得到 log ⁡ π ( a t ∣ s t ; θ ) \log\pi(a_t|s_t;\bm\theta) logπ(atst;θ)关于参数 θ \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π(atst;θ)θ=θt
    a. 梯度 d θ , t \textbf d_{\theta,t} dθ,t的形状与参数 θ \bm\theta θ完全一样,是同样大小的矩阵或张量。
  9. 用梯度上升更新策略网络,让运动员的平均分更高(标准算法): θ 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+βqtdθ,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+βδtdθ,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的函数

每一轮迭代中只做一次动作观测一次奖励更新一次神经网络的参数。

你可能感兴趣的:(神经网络,深度学习,机器学习)