目录
概述
以超级玛丽为例:多捕捉金币,避开敌人,向前走,直到通关。我们要做的是写一个算法控制agent。我们可以有下面的方式:
第一种做法是学习policy函数 π ( a ∣ s ) \pi(a|s) π(a∣s),这属于强化学习中的策略学习(Policy-Based Learning),当我们获得策略后,进行以下操作:
- 观测当前状态 s t s_{t} st;
- 随机抽样: a t ∼ π ( ⋅ ∣ s t ) a_{t}\sim\pi(\cdot|s_{t}) at∼π(⋅∣st)。
另一种做法是学习最优动作-价值函数(optimal action-value function) Q ∗ ( s , a ) Q^{*}(s,a) Q∗(s,a),这属于强化学习中的价值学习(Value-Based Learning),当我们获得价值函数后,进行以下操作:
- 观测当前状态 s t s_{t} st;
- 选择 Q ∗ ( s , a ) Q^{*}(s,a) Q∗(s,a)最大化对应的动作: a t = a r g m a x a Q ∗ ( s t , a ) a_{t}=argmax_{a}Q^{*}(s_{t},a) at=argmaxaQ∗(st,a)。
关于第二种做法,进行下面的补充:对于 t t t时刻,我们可以使用不同的policy,这就导致我们可以计算出不同的回报期望 Q π ( s t , a ) Q_{\pi}(s_{t},a) Qπ(st,a),但我们选择 t t t时刻回报期望最大的policy,得到该时刻下,对于不同policy,选择动作 a a a的最大回报 Q ∗ ( s t , a ) Q^{*}(s_{t},a) Q∗(st,a),我们统计所有 a a a对应的 Q ∗ ( s t , a ) Q^{*}(s_{t},a) Q∗(st,a),取回报最大的那个action作为最优动作 a t a_{t} at。
本篇将以深度学习的方式,获取策略函数,或者获取最优动作-价值函数,故称为深度强化学习。
价值学习
Deep Q Network
如果我们知道最优动作-价值函数 Q ∗ ( s , a ) Q^{*}(s,a) Q∗(s,a),我们可以获得最优动作: a ∗ = a r g m a x a Q ∗ ( s , a ) a^{*}=argmax_{a}Q^{*}(s,a) a∗=argmaxaQ∗(s,a)但问题是我们不知道这个函数,所以提出DQN(Deep Q Network),使用神经网络 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w)去近似函数 Q ∗ ( s , a ) Q^{*}(s,a) Q∗(s,a),其中 w w w是神经网络的参数。
解释:价值学习的想法就是学习一个函数近似 Q ∗ ( s , a ) Q^{*}(s,a) Q∗(s,a),理论上,我们不能找到一个函数可以像 Q ∗ ( s , a ) Q^{*}(s,a) Q∗(s,a)一样准确预测未来的回报,但以超级玛丽为例,如果我们进行游戏成千上万次,当我们面对某个状态,执行某个动作时,将会有一定把握判断未来的回报是怎样的。因此,我们可以相信,我们能够使用某个函数去近似这个"预言家"的功能。
不同的问题,DQN结构是不一样的,我们以超级玛丽这个问题为例,我们可以用卷积网络和全连接网络构造DQN:
我们只需从网络输出的结果中索引最优动作即可:
a
t
=
a
r
g
m
a
x
a
c
t
i
o
n
[
Q
(
s
t
,
l
e
f
t
;
w
t
)
,
Q
(
s
t
,
r
i
g
h
t
;
w
t
)
,
Q
(
s
t
,
u
p
;
w
t
)
]
a_{t}=argmax_{action}[Q(s_{t},left;w_{t}),Q(s_{t},right;w_{t}),Q(s_{t},up;w_{t})]
at=argmaxaction[Q(st,left;wt),Q(st,right;wt),Q(st,up;wt)]将DQN用于进行游戏时,可以得到以下轨迹:
从
t
t
t时刻开始说明:根据状态
s
t
s_{t}
st,输入DQN,对所有动作进行打分,选择得分最高的动作成为
a
t
a_{t}
at,当agent执行
a
t
a_{t}
at后,环境更新状态,用状态转移函数
p
p
p随机采样一个状态作为
s
t
+
1
s_{t+1}
st+1,环境还会返回奖励
r
t
r_{t}
rt,奖励是强化学习中的监督信号,DQN依据奖励进行训练。
DQN的训练:TD算法(Temporal Difference Learning)
DQN通过TD算法训练,TD算法是Temporal Difference Learning的简称。TD算法较难理解,所以先以例子说明;
假设我现在驾车从纽约前往亚特兰大,同时有一个函数 Q Q Q,参数是 w w w,它可以估计出行的时间开销,比如要1000分钟才能到达亚特兰大。
1000分钟是模型的初始解,但如果很多人都来使用模型,就可以把模型更新到能准确做出预测。那应该如何更新?
首先,我们使用初始模型进行预测: q = Q ( w ) q=Q(w) q=Q(w),得到 q = 1000 q=1000 q=1000;
然后我驾车到达亚特兰大,发现实际使用860分钟,我们把真实时间开销记为:
y
=
860
y=860
y=860;
自然地,估计与真实有差别,就产生损失: L = 1 2 ( q − y ) 2 L=\frac{1}{2}(q-y)^{2} L=21(q−y)2;
由此可以计算损失关于参数的梯度:
∂
L
∂
w
=
∂
q
∂
w
⋅
∂
L
∂
q
=
(
q
−
y
)
⋅
∂
Q
(
w
)
∂
w
\frac{\partial L}{\partial w}=\frac{\partial q}{\partial w}\cdot\frac{\partial L}{\partial q}=(q-y)\cdot\frac{\partial Q(w)}{\partial w}
∂w∂L=∂w∂q⋅∂q∂L=(q−y)⋅∂w∂Q(w)我们根据梯度更新参数(梯度下降):
w
t
+
1
=
w
t
−
α
⋅
∂
L
∂
w
∣
w
=
w
t
w_{t+1}=w_{t}-\alpha\cdot\frac{\partial L}{\partial w}|_{w=w_{t}}
wt+1=wt−α⋅∂w∂L∣w=wt这种更新方式对于DQN训练是不利的,因为我们必须进行完全路程(进行整个游戏)才能更新参数,我们想要的是只进行部分就能更新,比如我们不到亚特兰大,我们到中间的华盛顿DC就停下,再也不去亚特兰大。面对这种情况又该如何处理?
我们现在能够得到的信息有:
- 模型估计纽约到亚特兰大花费1000分钟;
- 纽约到DC实际花费300分钟;
- 模型估计DC到亚特兰大花费600分钟;
因此,我可以更新纽约到亚特兰大的估计为300+600=900分钟。在TD算法中,新的估计900被称为TD target,TD target虽然也是估计,但它比最初的估计1000更加可靠,因为其中有一定的实际成分。现在我们把TD target赋值到 y y y,所以得到损失(也称为TD error): L = 1 2 ( q − y ) 2 L=\frac{1}{2}(q-y)^{2} L=21(q−y)2,后续则计算梯度再更新参数。
把TD算法用于DQN的学习是一样的道理,我们不需要进行完整个游戏,也可以更新参数。
在前面驾车的例子中,我们有以下关系: T N Y C → A T L ≈ T N Y C → D C + T D C → A T L T_{NYC\rightarrow ATL}\approx T_{NYC\rightarrow DC}+T_{DC\rightarrow ATL} TNYC→ATL≈TNYC→DC+TDC→ATL其中, T N Y C → A T L T_{NYC\rightarrow ATL} TNYC→ATL和 T D C → A T L T_{DC\rightarrow ATL} TDC→ATL都是模型的估计值, T N Y C → D C T_{NYC\rightarrow DC} TNYC→DC是实际值。
对应到DQN,我们可以有如下关系:
Q
(
s
t
,
a
t
;
w
)
≈
r
t
+
γ
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
Q(s_{t},a_{t};w)\approx r_{t}+\gamma Q(s_{t+1},a_{t+1};w)
Q(st,at;w)≈rt+γQ(st+1,at+1;w)注意到折扣率
γ
\gamma
γ曾出现在折扣回报中,折扣回报可表示为:
所以有:
U
t
=
R
t
+
γ
U
t
+
1
U_{t}=R_{t}+\gamma U_{t+1}
Ut=Rt+γUt+1注意一个规范:大写字母代表随机变量,小写字母则代表随机变量的观测值。
DQN的输出
Q
(
s
t
,
a
t
;
w
)
Q(s_{t},a_{t};w)
Q(st,at;w)为
U
t
U_{t}
Ut的期望
E
[
U
t
]
E[U_{t}]
E[Ut]的估计值,
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
Q(s_{t+1},a_{t+1};w)
Q(st+1,at+1;w)为
U
t
+
1
U_{t+1}
Ut+1的期望
E
[
U
t
+
1
]
E[U_{t+1}]
E[Ut+1]的估计值,所以有:
Q
(
s
t
,
a
t
;
w
)
≈
E
[
R
t
+
γ
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
]
=
r
t
+
γ
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
Q(s_{t},a_{t};w)\approx E[R_{t}+\gamma Q(s_{t+1},a_{t+1};w)]=r_{t}+\gamma Q(s_{t+1},a_{t+1};w)
Q(st,at;w)≈E[Rt+γQ(st+1,at+1;w)]=rt+γQ(st+1,at+1;w)
下面我们开始训练DQN,以
t
t
t时刻为例:
- 首先,我们用网络预测回报 Q ( s t , a t ; w t ) Q(s_{t},a_{t};w_{t}) Q(st,at;wt),选择最优动作 a t a_{t} at;
- 然后执行动作 a t a_{t} at,获得奖励观测值 r t r_{t} rt,环境也更新状态为 s t + 1 s_{t+1} st+1,此时再次调用网络可以得到TD target: y t = r t + γ Q ( s t + 1 , a t + 1 ; w t ) = r t + γ ⋅ m a x a { Q ( s t + 1 , a ; w t ) } y_{t}=r_{t}+\gamma Q(s_{t+1},a_{t+1};w_{t})=r_{t}+\gamma\cdot max_{a}\left\{Q(s_{t+1},a;w_{t})\right\} yt=rt+γQ(st+1,at+1;wt)=rt+γ⋅maxa{Q(st+1,a;wt)}
- 然后我们计算损失TD error: L t = 1 2 [ Q ( s t , a t ; w t ) − y t ] 2 L_{t}=\frac{1}{2}[Q(s_{t},a_{t};w_{t})-y_{t}]^{2} Lt=21[Q(st,at;wt)−yt]2
- 我们计算梯度并更新参数: w t + 1 = w t − α ⋅ ∂ L t ∂ w ∣ w = w t w_{t+1}=w_{t}-\alpha\cdot\frac{\partial L_{t}}{\partial w}|_{w=w_{t}} wt+1=wt−α⋅∂w∂Lt∣w=wt
策略学习
Policy Network
在深度强化学习中,对于策略学习,我们使用神经网络去近似策略函数,在前面的内容中,我们知道,策略函数通常记为 π ( a ∣ s ) \pi(a|s) π(a∣s),它是一个概率密度函数PDF。
策略函数输入当前状态 s s s,再输出各个动作的存在概率: π ( l e f t ∣ s ) = 0.2 \pi(left|s)=0.2 π(left∣s)=0.2 π ( r i g h t ∣ s ) = 0.1 \pi(right|s)=0.1 π(right∣s)=0.1 π ( u p ∣ s ) = 0.7 \pi(up|s)=0.7 π(up∣s)=0.7agent将会根据这个概率分布进行随机抽样,从中采样出一个动作 a a a去执行。
我们使用神经网络去近似函数 π ( a ∣ s ) \pi(a|s) π(a∣s),因此提出策略网络 Policy Network π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ),其中, θ \theta θ是网络的参数。
以超级玛丽游戏为例,我们可以使用以下网络:
使用softmax函数的意义在于将全连接网络的得分转为概率分布。
接下来再次回顾一下折扣回报: U t = R t + γ R t + 1 + γ 2 R t + 2 + ⋅ ⋅ ⋅ U_{t}=R_{t}+\gamma R_{t+1}+\gamma^{2}R_{t+2}+\cdot\cdot\cdot Ut=Rt+γRt+1+γ2Rt+2+⋅⋅⋅其中, U t U_{t} Ut的随机性来自状态的随机变量 S t + 1 , S t + 2 , . . . S_{t+1},S_{t+2},... St+1,St+2,...和动作的随机变量 A t , A t + 1 , . . . A_{t},A_{t+1},... At,At+1,...,但在计算期望时,由于我们对后续不确定性的随机变量进行积分或求和,最终使得期望与初始观测值 s t s_{t} st和 a t a_{t} at,以及策略函数 π ( a ∣ s ) \pi(a|s) π(a∣s),状态转移函数 p ( s ′ ∣ s , a ) p(s'|s,a) p(s′∣s,a)有关。由于状态转移函数是环境决定的,故提出动作-价值函数action-value function并记作: Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q_{\pi}(s_{t},a_{t})=E[U_{t}|S_{t}=s_{t},A_{t}=a_{t}] Qπ(st,at)=E[Ut∣St=st,At=at]该函数的意义在于:给定当前状态 s t s_{t} st和策略函数 π \pi π,通过计算 Q π Q_{\pi} Qπ,我们可以得到agent执行 a t a_{t} at后的 U t U_{t} Ut的期望,从而可判断哪个动作可以获得更多回报。
状态-价值函数即state-value function,它是action-value function关于动作的期望: V π ( s t ) = E A [ Q π ( s t , A ) ] V_{\pi}(s_{t})=E_{A}[Q_{\pi}(s_{t},A)] Vπ(st)=EA[Qπ(st,A)]其中, A A A是动作的随机变量, A ∼ π ( ⋅ ∣ s t ) A\sim\pi(\cdot|s_{t}) A∼π(⋅∣st)。
状态-价值函数的意义在于: V π V_{\pi} Vπ可以反映当前状态的局势好坏,假设我们根据policy函数下围棋, V π V_{\pi} Vπ可以通过当前的棋盘状态告诉我们是快要胜利,还是快要失败。
如果动作是离散的,我们可以将state-value function表达为: V π ( s t ) = E A [ Q π ( s t , A ) ] = ∑ a π ( a ∣ s t ) Q π ( s t , a ) V_{\pi}(s_{t})=E_{A}[Q_{\pi}(s_{t},A)]=\sum_{a}\pi(a|s_{t})Q_{\pi}(s_{t},a) Vπ(st)=EA[Qπ(st,A)]=a∑π(a∣st)Qπ(st,a)如果动作是连续的,比如自动驾驶的方向盘角度(-90度到+90度之间的连续值),我们可以将state-value function表达为: V π ( s t ) = E A [ Q π ( s t , A ) ] = ∫ − 90 + 90 π ( a ∣ s t ) Q π ( s t , a ) d a V_{\pi}(s_{t})=E_{A}[Q_{\pi}(s_{t},A)]=\int_{-90}^{+90}\pi(a|s_{t})Q_{\pi}(s_{t},a)da Vπ(st)=EA[Qπ(st,A)]=∫−90+90π(a∣st)Qπ(st,a)da
策略网络训练:Policy Gradient算法
根据前面提到的状态-价值函数,并且我们用神经网络近似策略函数,所以可以得到状态-价值函数的表达: V ( s ; θ ) = ∑ a π ( a ∣ s ; θ ) ⋅ Q π ( s , a ) V(s;\theta)=\sum_{a}\pi(a|s;\theta)\cdot Q_{\pi}(s,a) V(s;θ)=a∑π(a∣s;θ)⋅Qπ(s,a)策略学习的目标就是使得状态-价值尽量大,所以可以学习参数 θ \theta θ最大化 V ( S ; θ ) V(S;\theta) V(S;θ)的期望 J ( θ ) J(\theta) J(θ): J ( θ ) = E S [ V ( S ; θ ) ] J(\theta)=E_{S}[V(S;\theta)] J(θ)=ES[V(S;θ)]策略网络越好,那么 J ( θ ) J(\theta) J(θ)将会越大。
假设当前观测到状态 s s s,由于要最大化 J ( θ ) J(\theta) J(θ),所以我们用梯度上升更新参数: θ = θ + β ⋅ ∂ V ( s ; θ ) ∂ θ \theta=\theta+\beta\cdot\frac{\partial V(s;\theta)}{\partial\theta} θ=θ+β⋅∂θ∂V(s;θ)其中, β \beta β是学习率,该更新过程中的梯度是随机梯度(被称为策略梯度),真正的梯度应该是目标函数 J ( θ ) J(\theta) J(θ)关于参数的梯度,随机性来源于 s s s。
通过计算推导,下面是策略梯度的两种表达形式: ∂ V ( s ; θ ) ∂ θ = ∑ a ∂ π ( a ∣ s ; θ ) ∂ θ ⋅ Q π ( s , a ) \frac{\partial V(s;\theta)}{\partial\theta}=\sum_{a}\frac{\partial\pi(a|s;\theta)}{\partial\theta}\cdot Q_{\pi}(s,a) ∂θ∂V(s;θ)=a∑∂θ∂π(a∣s;θ)⋅Qπ(s,a) ∂ V ( s ; θ ) ∂ θ = E A ∼ π ( ⋅ ∣ s ; θ ) [ ∂ l o g π ( A ∣ s ; θ ) ∂ θ ⋅ Q π ( s , A ) ] \frac{\partial V(s;\theta)}{\partial\theta}=E_{A\sim\pi(\cdot|s;\theta)}[\frac{\partial log\pi(A|s;\theta)}{\partial\theta}\cdot Q_{\pi}(s,A)] ∂θ∂V(s;θ)=EA∼π(⋅∣s;θ)[∂θ∂logπ(A∣s;θ)⋅Qπ(s,A)]理论上两种形式等价,第一种形式适合计算离散型动作,第二种形式适合计算连续型动作或者离散型动作。一般采用第二种形式。
在实际的梯度计算中,我们用蒙特卡洛随机抽样近似策略梯度:
- 从策略函数分布(神经网络输出)中随机抽样一个动作 a ^ \widehat{a} a : a ^ ∼ π ( ⋅ ∣ s ; θ ) \widehat{a}\sim\pi(\cdot|s;\theta) a ∼π(⋅∣s;θ)
- 计算: g ( a ^ , θ ) = ∂ l o g π ( a ^ ∣ s ; θ ) ∂ θ ⋅ Q π ( s , a ^ ) g(\widehat{a},\theta)=\frac{\partial log\pi(\widehat{a}|s;\theta)}{\partial\theta}\cdot Q_{\pi}(s,\widehat{a}) g(a ,θ)=∂θ∂logπ(a ∣s;θ)⋅Qπ(s,a )至此,我们用 g ( a ^ , θ ) g(\widehat{a},\theta) g(a ,θ)近似策略梯度 ∂ V ( s ; θ ) ∂ θ \frac{\partial V(s;\theta)}{\partial\theta} ∂θ∂V(s;θ)
蒙特卡洛就是从一个分布中抽一个或多个随机样本,通过随机样本近似期望
现在总结一下策略梯度更新策略网络的过程:
- 1.观测到状态 s t s_{t} st;
- 2.从策略网络的输出分布中随机抽样一个动作 a t a_{t} at: a t ∼ π ( ⋅ ∣ s t ; θ t ) a_{t}\sim\pi(\cdot|s_{t};\theta_{t}) at∼π(⋅∣st;θt);
- 3.计算: q t = Q π ( s t , a t ) q_{t}=Q_{\pi}(s_{t},a_{t}) qt=Qπ(st,at)
- 4.计算: g ( a t , θ t ) = q t ∂ l o g π ( a t ∣ s t ; θ ) ∂ θ ∣ θ = θ t g(a_{t},\theta_{t})=q_{t}\frac{\partial log\pi(a_{t}|s_{t};\theta)}{\partial\theta}|_{\theta=\theta_{t}} g(at,θt)=qt∂θ∂logπ(at∣st;θ)∣θ=θt
- 5.梯度上升更新参数: θ t + 1 = θ t + β ⋅ g ( a t , θ t ) \theta_{t+1}=\theta_{t}+\beta\cdot g(a_{t},\theta_{t}) θt+1=θt+β⋅g(at,θt)
注意到一个问题,第3步,我们还不知道 Q π Q_{\pi} Qπ,所以不能计算 q t q_{t} qt,关于 q t q_{t} qt的计算,有两个方法:
第一种方法叫做Reinforce:
- 先用策略网络去进行游戏,从开始一直到结束,记录轨迹: s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . , s T , a T , r T 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
- 根据轨迹计算折扣回报,对于任意的 t t t都计算: u t = ∑ k = t T γ k − t r k u_{t}=\sum_{k=t}^{T}\gamma^{k-t}r_{k} ut=k=t∑Tγk−trk
- 直接用 u t u_{t} ut近似 q t q_{t} qt: q t = u t q_{t}=u_{t} qt=ut
对于这种方法,要求进行完整个游戏才能更新策略网络。
为了解决这个问题,可以采用第二种方法:新增神经网络近似 Q π Q_{\pi} Qπ函数,这使得模型具有两个神经网络,一个用于近似 Q π Q_{\pi} Qπ,一个用于近似 π \pi π,这就是Actor-Critic Methods。
Actor-Critic Methods
两个网络结合
在Actor-Critic Methods中,Actor用于谋划动作,Critic用于评价动作。该方法是策略学习和价值学习的结合。
在状态-价值函数中: V π ( s ) = ∑ a π ( a ∣ s ) ⋅ Q π ( s , a ) V_{\pi}(s)=\sum_{a}\pi(a|s)\cdot Q_{\pi}(s,a) Vπ(s)=a∑π(a∣s)⋅Qπ(s,a)我们直接用策略网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ)近似策略函数,用价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w)近似动作-价值函数 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a),其中, θ , w \theta,w θ,w均是可学习参数。
以超级玛丽为例,策略网络(Actor)为:
价值网络(Critic)为:
策略网络输入状态,输出动作的概率分布(向量)。
价值网络输入状态和动作的编码(离散型动作可以用One-hot向量编码),输出动作-价值得分(标量),即 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a)。
训练Actor与Critic
同时学习两个网络,让执行动作的策略越来越合理,对动作的评价也越来越准确。
我们现在可以得到状态-价值的表达: V ( s ; θ , w ) = ∑ a π ( a ∣ s ; θ ) ⋅ q ( s , a ; w ) V(s;\theta,w)=\sum_{a}\pi(a|s;\theta)\cdot q(s,a;w) V(s;θ,w)=a∑π(a∣s;θ)⋅q(s,a;w)我们需要更新策略网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ)以使得 V ( s ; θ , w ) V(s;\theta,w) V(s;θ,w)更大。有趣的一点是,策略网络的目标实际是让agent的动作选择更优良,所以策略网络的监督信号来自价值网络;
我们也要更新价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w)以使得对价值的估计更精准。价值网络的目标是对动作做出更准确的评价,所以监督信号来自环境返回给agent的奖励。
更新参数的过程如下:
- 1.观测到状态 s t s_{t} st;
- 2.通过策略网络的概率分布进行随机抽样: a t ∼ π ( ⋅ ∣ s t ; θ t ) a_{t}\sim\pi(\cdot|s_{t};\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.用TD算法更新价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w)的参数 w w w;
- 5.用policy gradient更新策略网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ)的参数 θ \theta θ。
对于第4步,详细过程为(训练Critic):
- 随机抽样动作: a t + 1 ∼ π ( ⋅ ∣ s t + 1 ; θ t ) a_{t+1}\sim\pi(\cdot|s_{t+1};\theta_{t}) at+1∼π(⋅∣st+1;θt)
- 计算 q ( s t , a t ; w t ) q(s_{t},a_{t};w_{t}) q(st,at;wt)和 q ( s t + 1 , a t + 1 ; w t ) q(s_{t+1},a_{t+1};w_{t}) q(st+1,at+1;wt);
- 计算TD target: y t = r t + γ ⋅ q ( s t + 1 , a t + 1 ; w t ) y_{t}=r_{t}+\gamma\cdot q(s_{t+1},a_{t+1};w_{t}) yt=rt+γ⋅q(st+1,at+1;wt)
- 计算损失: L ( w ) = 1 2 [ q ( s t , a t ; w t ) − y t ] 2 L(w)=\frac{1}{2}[q(s_{t},a_{t};w_{t})-y_{t}]^{2} L(w)=21[q(st,at;wt)−yt]2
- 梯度下降更新参数: w t + 1 = w t − α ⋅ ∂ L ( w ) ∂ w ∣ w = w t w_{t+1}=w_{t}-\alpha\cdot\frac{\partial L(w)}{\partial w}|_{w=w_{t}} wt+1=wt−α⋅∂w∂L(w)∣w=wt
对于第5步,详细过程为(训练Actor):
- 使用第2步来自随机抽样的动作 a t a_{t} at
- 计算policy gradient的近似值: g ( a , θ t ) = ∂ l o g π ( a t ∣ s t ; θ ) ∂ θ ⋅ q ( s t , a t ; w t ) ∣ θ = θ t g(a,\theta_{t})=\frac{\partial log\pi(a_{t}|s_{t};\theta)}{\partial\theta}\cdot q(s_{t},a_{t};w_{t})|_{\theta=\theta_{t}} g(a,θt)=∂θ∂logπ(at∣st;θ)⋅q(st,at;wt)∣θ=θt实验发现,如果用以下式子代替 q ( s t , a t ; w t ) q(s_{t},a_{t};w_{t}) q(st,at;wt),最终的效果会更好,该式子为: q ( s t , a t ; w t ) − ( r t + γ q ( s t + 1 , a t + 1 ; w t ) ) q(s_{t},a_{t};w_{t})-(r_{t}+\gamma q(s_{t+1},a_{t+1};w_{t})) q(st,at;wt)−(rt+γq(st+1,at+1;wt))
- 梯度上升更新参数: θ t + 1 = θ t + β ⋅ g ( a , θ t ) \theta_{t+1}=\theta_{t}+\beta\cdot g(a,\theta_{t}) θt+1=θt+β⋅g(a,θt)
当训练结束后,将不再使用到价值网络,我们仅根据策略网络选择动作即可。