自动驾驶强化学习日记--入门篇
前言
本人之前一直学的是监督学习,最近开始研究自动驾驶的决策规划,涉及强化学习,发现强化学习的概念相比之下很多,并且很乱,经常被一些Q函数,Value函数,on-policy,off-policy等概念弄得头昏脑胀。因此,从自动驾驶决策规划的角度出发,把强化学习涉及的概念和算法系统梳理一下,打算以系列的方式,边学边更新。(个人的理解都用加粗标出)
一、强化学习的专有术语
这一点是强化学习与监督学习等严重不同的地方,强化学习中的术语多且杂,而且很多中文翻译并不贴切,下面让我们从自动驾驶的角度,理解强化学习的各种术语。
1.1 state,agent,action
state指的是环境的状态。那拓展到自动驾驶中,可以理解为周围交通参与者的状态(如车辆和行人的位置,速度,加速度等)以及道路信息(如车道线,红绿灯)。这些信息一般经过状态编码转变为状态向量。
agent则毫无疑问是当前自动驾驶的车辆。
action指自动驾驶车辆的动作。一般会有两种形式。一种是离散指令,如左转,右转,停车。另一种是连续指令,如将规划出的行驶轨迹(一系列坐标点)作为action。或者将油门,刹车,方向盘等作为action。
1.2 policy
policy即是agent根据当前的state做出action的一个策略,其本质上是一个概率密度函数:
当自动驾驶使用该策略时,就会根据这个概率密度函数做随机抽样,选出油门,刹车,方向盘等action。抽样时虽然最可能抽样到概率最大的动作,但是概率小的动作同样可能被抽到,这就为自动驾驶引入了一定的随机性,可以减少车辆决策失效,卡死在原地情况的发生。
1.3 reward
reward可以理解为当前时刻车辆动作的好坏。例如,在时刻t,我想左转,车辆经过决策,输出了向左打方向盘的action,那这时的reward就是正的奖励,如果输出向右打方向盘的action,那么reward就是负的奖励。reward的具体数值由人为设计,这也是自动驾驶强化学习设计中最为关键的环节之一,在设计reward时,不仅可以考虑action是否符合导航命令,还可以考虑乘坐舒适性(如速度和加速度),安全性(与其他车辆,行人的距离)等等。
1.4 transition
transition其实可以直接理解为一个四元组 ,即给定状态
和动作
时,获得的奖励
以及新的状态
。在自动驾驶强化学习中,一般可以使用给定的策略
,让车辆行驶一段时间,得到一系列的transition四元组,并利用这些数据做进一步的训练。
同时,transition也具有一定的随机性,即外部的车辆,行人等的动作是不确定的,因此强化学习的随机性一方面来自于策略的随机采样,另一方面来自transition。但是transition一般是无法控制的,所以要想让强化学习随机性强(探索能力强),一般从策略
入手。
1.5 return
对于初学者,经常会把return和reward的搞混。其实只需要记住一个事情,即return又叫做“cumulative future reward”,累计未来奖励,所以说,reward是某一时刻t的回报,而return是从时刻t开始,直到未来的终点,累计下来的回报。自动驾驶中,reward可以理解为油门,方向盘等动作对当前的影响(比如会不会与其他车撞到),而return指的是当前的油门和方向盘,对能否到达目的地的影响。
如果把reward记为 ,return记为
,则两者的关系如下:
那我们又经常见到 Discounted return(折扣回报)的概念,这个通俗一点说,就是重视当前的奖励,淡化未来的奖励,那总是需要一个公式淡化的吧?因此,就通过一个小于1的数字,每过一个时刻,加一次幂(也就是指数递减)来快速淡化未来的奖励。这个数字一般记作 ,则return如下:
二、价值函数
价值函数也是强化学习中一个很重要的概念,可以分为动作价值函数和状态价值函数,可以简单理解为,动作价值函数是对回报 求期望,而状态价值函数是对动作价值函数求期望。
1.1 动作价值函数
动作价值函数定义如下:
这里求期望的变量是,
,···,而reward仅与状态和动作相关,所以其实是对状态
,
···和动作
,
···求期望。因此,
代表用policy函数π,在t时刻的状态
下做
这个动作的价值是多少。(本质上是评估
状态-动作对的价值,只不过当前的状态
是已知的,才说成是动作价值函数)
这里不难看出,动作价值函数只适用于离散空间(连续空间时
无法构造出来)。在自动驾驶中只能输出左转,右转,停车这种离散指令。
此外,还有一个最优动作价值函数的概念。其实本质上就是把动作价值函数中的策略
作为变量,找到所有
中可以使动作价值函数最大的
,此时得到的函数为最优动作价值函数。
这个其实就是动作价值函数的应用过程。当我们有了最优动作价值函数,就可以随机采样一些动作,交给它打分,执行分数最高的动作。
那么问题来了,我们如何求得最优价值函数呢?实际应用中状态和动作空间可能非常大,甚至是连续的,直接枚举所有策略是不现实的。因此,大多数算法都是近似求解最优动作价值函数,之后的文章会详细介绍。
1.2 状态价值函数
状态价值函数其实就是对动作价值函数再求一次期望,求期望的变量是动作,因此可以把
中的
消掉,只保留
,此时只剩状态这一个变量,因此叫状态价值函数:
从通俗的角度理解,状态价值函数考虑了当前所有的动作才求出的期望,那么这个期望的大小就是当前状态的好坏,因此叫状态价值函数。
和动作价值函数一样,考虑所有动作求期望是不现实的,因此也需要一定的近似方法来求解。
三、强化学习算法分类
想必大家都听过DQN,SAC,DDPG等算法,那他们学习的究竟是什么呢?是上述提到的策略还是动作价值函数
亦或是状态价值函数
?下面我们来详细分析一下这些学习的区别。
1. 学习策略
只学习策略的方法通常被称为策略优化方法(Policy Optimization Methods),核心特点是直接优化策略(Policy)本身,而不依赖于显式的价值函数(如Q函数或V函数)。通过策略梯度或其他优化技术直接调整策略参数,以最大化累积奖励。
使用这种学习方式的算法有TRPO和PPO。适用于连续动作空间。
2. 学习动作价值函数
学习动作价值函数的方法通过估计每个状态-动作对的价值 Q(s,a),即从状态s采取动作 a 后的期望累计回报,从而间接推导出策略。不过该方法只适用于离散动作空间。
常见的算法为Q-Learning和DQN。
3. 学习状态价值函数
学习动作价值函数的方法即学习函数,最常用的是Temporal Difference (TD) Learning(其实单独应用这种学习方法的很少)。
4. 结合策略和价值函数的方法
DDPG,SAC, A3C等都是结合了学习策略和学习价值函数,用于连续动作空间。
总结
后续还会更新具体的算法学习,大家多多关注!
更多推荐

所有评论(0)