前言

一、强化学习的专有术语

1.1 state,agent,action

1.2 policy

1.3 reward

1.4 transition

1.5 return

二、价值函数

1.1 动作价值函数

1.2 状态价值函数

三、强化学习算法分类

1. 学习策略

2. 学习动作价值函数

3. 学习状态价值函数

4. 结合策略和价值函数的方法

总结


前言

        本人之前一直学的是监督学习,最近开始研究自动驾驶的决策规划,涉及强化学习,发现强化学习的概念相比之下很多,并且很乱,经常被一些Q函数,Value函数,on-policy,off-policy等概念弄得头昏脑胀。因此,从自动驾驶决策规划的角度出发,把强化学习涉及的概念和算法系统梳理一下,打算以系列的方式,边学边更新。(个人的理解都用加粗标出


一、强化学习的专有术语

        这一点是强化学习与监督学习等严重不同的地方,强化学习中的术语多且杂,而且很多中文翻译并不贴切,下面让我们从自动驾驶的角度,理解强化学习的各种术语。

1.1 state,agent,action

        state指的是环境的状态。那拓展到自动驾驶中,可以理解为周围交通参与者的状态(如车辆和行人的位置,速度,加速度等)以及道路信息(如车道线,红绿灯)。这些信息一般经过状态编码转变为状态向量

        agent则毫无疑问是当前自动驾驶的车辆。

        action指自动驾驶车辆的动作。一般会有两种形式。一种是离散指令,如左转,右转,停车另一种是连续指令,如将规划出的行驶轨迹(一系列坐标点)作为action。或者将油门,刹车,方向盘等作为action。

1.2 policy

        policy即是agent根据当前的state做出action的一个策略,其本质上是一个概率密度函数:

 \pi (a|s)

        当自动驾驶使用该策略时,就会根据这个概率密度函数做随机抽样,选出油门,刹车,方向盘等action。抽样时虽然最可能抽样到概率最大的动作,但是概率小的动作同样可能被抽到,这就为自动驾驶引入了一定的随机性,可以减少车辆决策失效,卡死在原地情况的发生。

1.3 reward

        reward可以理解为当前时刻车辆动作的好坏。例如,在时刻t,我想左转,车辆经过决策,输出了向左打方向盘的action,那这时的reward就是正的奖励,如果输出向右打方向盘的action,那么reward就是负的奖励。reward的具体数值由人为设计,这也是自动驾驶强化学习设计中最为关键的环节之一,在设计reward时,不仅可以考虑action是否符合导航命令,还可以考虑乘坐舒适性(如速度和加速度),安全性(与其他车辆,行人的距离)等等

1.4 transition

        transition其实可以直接理解为一个四元组 (s,a,r,s^{'} ) ,即给定状态s和动作a时,获得的奖励r以及新的状态s^{'}。在自动驾驶强化学习中,一般可以使用给定的策略\pi,让车辆行驶一段时间,得到一系列的transition四元组,并利用这些数据做进一步的训练。

        同时,transition也具有一定的随机性,即外部的车辆,行人等的动作是不确定的,因此强化学习的随机性一方面来自于策略\pi的随机采样,另一方面来自transition。但是transition一般是无法控制的,所以要想让强化学习随机性强(探索能力强),一般从策略\pi入手

1.5 return

        对于初学者,经常会把return和reward的搞混。其实只需要记住一个事情,即return又叫做“cumulative future reward”,累计未来奖励,所以说,reward是某一时刻t的回报,而return是从时刻t开始,直到未来的终点,累计下来的回报。自动驾驶中,reward可以理解为油门,方向盘等动作对当前的影响(比如会不会与其他车撞到),而return指的是当前的油门和方向盘,对能否到达目的地的影响。

        如果把reward记为 r_{t},return记为 u_{t},则两者的关系如下:

u_{t}=r_{t} + r_{t+1}+r_{t+2}+...+r_{t+end}

        那我们又经常见到 Discounted return(折扣回报)的概念,这个通俗一点说,就是重视当前的奖励,淡化未来的奖励,那总是需要一个公式淡化的吧?因此,就通过一个小于1的数字,每过一个时刻,加一次幂(也就是指数递减)来快速淡化未来的奖励。这个数字一般记作 \gamma ,则return如下:

u_{t}=r_{t} + \gamma r_{t+1}+\gamma^{2} r_{t+2}+...+\gamma^{end}r_{t+end}

二、价值函数

        价值函数也是强化学习中一个很重要的概念,可以分为动作价值函数和状态价值函数,可以简单理解为,动作价值函数是对回报 u_{t} 求期望,而状态价值函数是对动作价值函数求期望

1.1 动作价值函数

        动作价值函数Q_{\pi}定义如下:

Q_{\pi} (s_{t} ,a_{t} )=E[u_{t} |s_{t} ,a_{t} ]

        这里求期望的变量是r_{t+1}r_{t+2},···,而reward仅与状态和动作相关,所以其实是对状态s_{t+1},s_{t+2}···和动作a_{t+1},a_{t+2}···求期望。因此,Q_{\pi} (s_{t} ,a_{t} ) 代表用policy函数π,在t时刻的状态s_{t}下做a_{t}这个动作的价值是多少。(本质上是评估 (s_{t} ,a_{t} ) 状态-动作对的价值,只不过当前的状态s_{t}是已知的,才说成是动作价值函数

        这里不难看出,动作价值函数Q_{\pi}只适用于离散空间(连续空间时a_{t}无法构造出来)。在自动驾驶中只能输出左转,右转,停车这种离散指令。

        此外,还有一个最优动作价值函数的概念。其实本质上就是把动作价值函数Q_{\pi}中的策略\pi作为变量,找到所有\pi中可以使动作价值函数最大的\pi,此时得到的函数为最优动作价值函数。

Q^{*} (s_{t} ,a_{t} ) = \max_{\pi} Q_{\pi} (s_{t} ,a_{t} )

        这个其实就是动作价值函数的应用过程。当我们有了最优动作价值函数,就可以随机采样一些动作,交给它打分,执行分数最高的动作。

        那么问题来了,我们如何求得最优价值函数呢?实际应用中状态和动作空间可能非常大,甚至是连续的,直接枚举所有策略是不现实的。因此,大多数算法都是近似求解最优动作价值函数,之后的文章会详细介绍。

1.2 状态价值函数

        状态价值函数其实就是对动作价值函数再求一次期望,求期望的变量是动作a_{t},因此可以把Q_{\pi} (s_{t} ,a_{t} ) 中的a_{t}消掉,只保留 s_{t} ,此时只剩状态这一个变量,因此叫状态价值函数:

V_{\pi}(s)=E_{a}[Q_{\pi} (s ,a )]

        从通俗的角度理解,状态价值函数考虑了当前所有的动作才求出的期望,那么这个期望的大小就是当前状态的好坏,因此叫状态价值函数。

        和动作价值函数一样,考虑所有动作求期望是不现实的,因此也需要一定的近似方法来求解

三、强化学习算法分类

        想必大家都听过DQN,SAC,DDPG等算法,那他们学习的究竟是什么呢?是上述提到的策略\pi还是动作价值函数Q_{\pi}亦或是状态价值函数V_{\pi}?下面我们来详细分析一下这些学习的区别。

1. 学习策略

        只学习策略的方法通常被称为策略优化方法(Policy Optimization Methods),核心特点是直接优化策略(Policy)本身,而不依赖于显式的价值函数(如Q函数或V函数)。通过策略梯度或其他优化技术直接调整策略参数,以最大化累积奖励。

        使用这种学习方式的算法有TRPO和PPO。适用于连续动作空间。

2. 学习动作价值函数

        学习动作价值函数的方法通过估计每个状态-动作对的价值 Q(s,a),即从状态s采取动作 a 后的期望累计回报,从而间接推导出策略。不过该方法只适用于离散动作空间。

        常见的算法为Q-Learning和DQN

3. 学习状态价值函数

        学习动作价值函数的方法即学习V_{\pi}函数,最常用的是Temporal Difference (TD) Learning(其实单独应用这种学习方法的很少)。

4. 结合策略和价值函数的方法

        DDPG,SAC,  A3C等都是结合了学习策略和学习价值函数,用于连续动作空间。

总结

后续还会更新具体的算法学习,大家多多关注!

Logo

更多推荐