最近因为科研的需要和个人的兴趣,打卡了百度的强化学习训练营。通过几日的学习,梳理了之前零零散散地学习的强化学习知识,让我对强化学习建立了更为系统的理解,从而能够更好地应用到自己的研究和学习中。
课程主体分为6个部分。分别是百度自研的PaddlePaddle介绍以及深度学习基础、强化学习的基本概念介绍、基于表格型方法求解强化学习、基于神经网络方法求解强化学习、基于策略梯度求解强化学习以及在连续动作空间上求解强化学习。
1.平台和框架介绍
课程所用到的平台和框架主要是百度自研的AI Studio和PaddlePaddle框架。因为之前学习用到的框架主要是pytorch、tensorflow和keras,对此了解并不是很多。但是如果之前有相关的研究基础的话,还是比较容易上手的。Paddle框架下也提供了各种定义好的神经网络,直接调用也就ok了。课程比较合理的地方在于,AI studio也提供了GPU的算力卡,如果用Paddle框架的话比较方便在上面调用。
另外值得一提的是所开发的Parl库,这个库里面提供了各种经典强化学习算法的代码实现,很多也可以直接调用。对于初学者来说也是比较容易上手的。
2.强化学习基础
该部分内容主要引入了强化学习的基本概念和应用场景。强化学习中的最重要的研究对象是 a g e n t agent agent和 e n v i r o n m e n t environment environment, a g e n t agent agent是需要控制的对象。基础部分研究的是单个 a g e n t agent agent的控制,当然在实际工程中很多也是多个 a g e n t agent agent交互的场景。 E n v i r o n m e n t Environment Environment是和 a g e n t agent agent交互的环境,当agent的动作产生之后,也会对 e n v i r o n m e n t environment environment进行一定的改变。实际上强化学习比较强调的是正是 a g e n t agent agent和 e n v i r o m e n t enviroment enviroment之间的交互。强化学习的三要素: s t a t e state state状态、 a c t i o n action action动作和 r e w a r d reward reward奖励。
3.基于表格型方法求解强化学习
这部分主要讲了强化学习中两种重要的value-based方法,Q-learning方法和sarsa。需要了解的是马尔科夫过程中的四元组<S,A,P,R>。value-based方法的核心在于把每个离散的状态的value进行了表征,从而在当前的状态下,可以利用每个状态对应的action到达下一状态下value最好的状态。
Sarsa算法是一种固定策略的方法,其估计的是动作值函数
q
(
s
,
a
)
q(s, a)
q(s,a), 即估计在策略\pi下对于任意状态s上所有可能执行动作a的动作值函数
q
π
(
s
,
a
)
q_{\pi}(s,a)
qπ(s,a)。其动作值更新的公式为:
q
(
s
t
,
a
t
)
←
q
(
s
t
,
a
t
)
+
α
[
r
t
+
1
+
γ
q
(
s
t
+
1
,
a
t
+
1
)
−
q
(
s
t
,
a
t
)
]
q(s_{t},a_{t})\leftarrow q(s_{t},a_{t})+\alpha [r_{t+1}+\gamma q(s_{t+1},a_{t+1})-q(s_{t},a_{t})]
q(st,at)←q(st,at)+α[rt+1+γq(st+1,at+1)−q(st,at)]
Q-learning算法是一种非固定策略的强化学习方法,其动作值更新公式如下:
q
(
s
t
,
a
t
)
←
q
(
s
t
,
a
t
)
+
α
[
r
t
+
1
+
γ
m
a
x
a
(
q
(
s
t
+
1
,
a
t
)
)
−
q
(
s
t
,
a
t
)
]
q(s_{t},a_{t})\leftarrow q(s_{t},a_{t})+\alpha [r_{t+1}+\gamma \underset{a}{max} (q(s_{t+1},a_{t}))-q(s_{t},a_{t})]
q(st,at)←q(st,at)+α[rt+1+γamax(q(st+1,at))−q(st,at)]
可以看到在动作值更新的过程中,选择动作进入下一个状态的时候,它选择的是使得下一个状态的reward最大的策略,而这显然不是固定的。这样导致的结果就是,q-learning是一种比较冒险和激进的算法,而sarsa算法是一种比较稳定和保守的算法,需要根据实际应用的需求选用。
4.基于神经网络方法求解强化学习
在基于表格型方法求解强化学习的过程中,当状态和动作的数量都比较有限的情况下是比较容易实现的。但是在下围棋,以及机器人的控制等问题中,显然状态数量是非常高的,动作的策略空间也非常高,在这样的情况下就可以引入神经网络对Q-表格进行近似。
使用值函数进行近似有两个优点,分别是:
(1)仅需存储有限的参数;
(2)状态泛化,相似的状态可以输出一样;
利用神经网络近似Q-表格的方法就被称作是DQN方法。需要注意的是,DQN算法引入了一个叫做replay-memory的网络,用于比较方便地从样本池中选取样本进行训练,这个技巧在后面的DDPG网络中也会用到。
5.基于策略梯度求解强化学习
基于策略梯度的方法和value-based方法不同之处在于,这是一种随机的策略。在输出的时候是每个策略的概率
π
θ
(
a
t
∣
s
t
)
\pi_{\theta}(a_t|s_t)
πθ(at∣st)。
需要注意的是在策略梯度算法中,计算策略梯度的两种方法分别是蒙特卡洛方法和时序差分方法。课程中详细介绍的是蒙特卡洛方法,其中计算公式如下。
∇
R
ˉ
θ
≈
1
N
∑
n
=
1
N
∑
t
=
1
T
n
G
t
n
∇
l
o
g
π
θ
(
a
t
n
∣
s
t
n
)
\nabla \bar{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1} ^{T_n} G_t^n \nabla log \pi _\theta(a_t^n|s_t^n)
∇Rˉθ≈N1n=1∑Nt=1∑TnGtn∇logπθ(atn∣stn)
6.在连续动作空间上求解强化学习
前述的 Q-learning、sarsa算法主要处理的是离散的动作空间上的强化学习,离散的动作空间意味着动作是离散的。而在实际的很多例子中,例如自动驾驶、四轴飞行器的控制等,需要处理的问题是连续的动作空间,这个时候传统的方法就不再适用了。因此本节主要讲述了DDPG(Deep Determined Policy Gradient)的强化学习方法。
DDPG也借鉴了DQN的思想,采用了神经网络的技巧在里面,也是一种确定性策略的方法。它主要采用了Actor-Critic的结构,一边学习Q-网络
Q
w
(
s
,
a
)
Q_w(s,a)
Qw(s,a)(DQN只学习Q-网络),一边学习策略网络
a
=
μ
θ
(
s
)
a=\mu_\theta(s)
a=μθ(s)。需要注意的是,为了稳定 Q_target,DDPG分别给Q-网络和策略网络分别设计了一个target_network,所以在实际应用中,DDPG算法一共有4个网络。
DDPG的算法实现其实还是比较复杂的,需要花一点时间才能够理解。但是提供的PARL库已经实现了相关的算法,可以直接对策略网络中的结构进行修改实现想要的功能,还是比较方便的。
7.总结和展望
课程主要是对强化学习中的一些比较基本的,当前比较热门的常见算法进行了讲解,强化学习的理论和方法还比较艰深,比如课程中提到的multi-agent的方法以及meta-learning等等,都需要在理解了基本的强化学习之后才能更好的尝试。而以电气行业为例,实际上multi-agent的方法等才是更加实用和面向实际的,因此本次课程也只是一个开始。后面还需要不断加深巩固RL方面的理解和学习。
最后,感谢科科老师的讲解和相关工作人员的组织,也感谢百度公司提供的这次机会。