【信息科学与控制工程】
随着人工智能技术的不断发展,作为其重要分支之一的自动驾驶技术也广泛受到关注[1]。研究表明,在加强道路交通安全、缓解城市交通拥堵、减少因车辆尾气排放导致的空气污染等方面,自动驾驶技术将会带来颠覆性的改变[2]。随着自动驾驶技术的逐步成熟,自动驾驶车辆的安全性成为关注的焦点问题。
对于具有高度复杂系统的汽车而言,高安全性代表着低事故率。现阶段对于自动驾驶车辆安全性测试的主要手段是进行路面试验来采集车辆的安全性数据,这种方式所需的经济与时间成本十分高昂,且对于一些较为关键的极端工况(如碰撞、接近碰撞、复杂信号灯路口、环岛等),很难在现实世界中进行模拟并复制还原[3]。
虚拟现实技术的愈加成熟,使得将现实世界在虚拟世界重构并加以模拟成为可能。利用虚拟现实技术,在虚拟世界中进行路面试验[4],用自动驾驶车辆模型代替真实的自动驾驶车辆,不仅能够最大限度地降低自动驾驶汽车开发过程中的成本,还能极大地缩短研发周期。
由于自动驾驶车辆进行自主驾驶是建立在对周围环境中的目标对象进行识别和理解之上的,而交通场景中存在的目标对象种类繁多且变化较大,这就造成了目标检测与目标识别的任务变得极为复杂。为解决这一问题,一种全新的驱动自动驾驶的方法应运而生,这就是基于端到端深度学习的方法。
端到端深度学习自动驾驶技术的发展,在1988年到2017年具有五项较有代表性的成果。1988年,卷积神经网络(CNN)技术还没有得到充分的发展,卡耐基梅隆大学通过采用一个三层的较浅的反向传播神经全连接网络,使用仿真路面图对一台陆军军用救护车进行训练,通过输入单目相机数据和雷达数据,使得车辆能够沿着道路行驶[5]。虽然此时的系统构成还非常简单,但却首次证明了端到端学习形成自动驾驶系统的能力。
2005年,纽约大学的 Yann LeCun教授团队在ICCV会议上发表了基于端到端学习的野外避障车辆研究的成果[6],该研究通过使用CNN神经网络对人的驾驶行为进行学习,使得该自动驾驶系统可以在应对变化较大的复杂非道路环境时保持较好的鲁棒性,该研究通过采用深度学习的方法,直接将图像映射到行驶模式下,为自动驾驶技术的发展开辟了全新的思路。
2015 年的ICCV会议上,美国Princeton大学的研究团队提出了使用直接感知的深度自动驾驶算法进行自动驾驶研究并进行了试验[7],其思路是利用深度神经网络对驾驶操控过程进行直接感知,降低算法的复杂性,极大提升了自动驾驶算法的鲁棒性。
2016年,英伟达发布了DAVE2项目[8],该项目通过训练卷积神经网络,建立单个前置摄像头与驾驶命令之间的映射,使车辆在有无车道线的道路、高速公路、停车场、未铺砌的路面等区域行驶,并拥有30帧/秒的处理速度。该项目也是深度学习的方法首次被应用在实际可载人的自动驾驶车辆上的实例之一。
2017年,伯克利大学发布了Berkeley Deep Drive Video Dataset[9],该研究使用FCN-LSTM(全卷积-长短期记忆网络)架构,将大规模视频数据集输入到网络中去,通过对单目视觉的观察和以往车辆的运动状态来预测之后车辆运动状态的分布。
以上5个具有代表性的研究成果,均采用深度学习或深度强化学习的方法来驱动自动驾驶,使用神经网络或深度神经网络对驾驶这一人类技能进行学习,通过建立环境感知与驾驶决策之间的动作映射关系,实现车辆的自主驾驶,并且提高了自动驾驶算法的性能,但自动驾驶系统的鲁棒性尚不稳定。
本文通过对深度强化学习驱动的自动驾驶系统展开研究,设计并实现了一种端对端的深度强化学习驱动的自动驾驶算法,并以虚拟现实环境下自动驾驶仿真训练平台为基础,对其进行训练与测试,以增强自动驾驶系统的鲁棒性,使深度强化学习和端对端控制在自动驾驶领域的应用成为可能。
传统的机器学习包含了3个重要的要素:目标、表示、优化。目标层面的研究关注的是系统应该具备的学习模型的类型,而强化学习的输入是能使激励函数最大的模型[10]。表示层面研究的重点是输入数据的表示方法,数据的表示方法可以很大程度的影响消息效果。深度学习是近年来开始兴起的重要人工智能方法,尤其是在图像的表示方面有着很好的效果。深度强化学习则是将深度学习和强化学习二者相结合,使用深度学习方法来表征Markov决策过程的状态,使用强化学习方法对学习过程的方向进行把控[11]。
通常而言,深度强化学习算法可以分为三大类,分别是基于价值(Value Based)的深度强化学习算法,基于策略(Policy Based)的深度强化学习算法和基于模型(Actor Based)的深度强化学习算法。常见的是以DQN(Deep Q-Learning Network)为代表的基于价值的深度强化学习算法,此算法中仅有一个价值函数网络,没有策略函数网络[12],以及以DDPG,TRPO为代表的基于模型的深度强化学习算法,这些算法中既有价值函数网络,又有策略函数网络。
对于车辆来说,DQN是指在快速前进时获得奖赏,与墙壁、其他车辆、行人等发生碰撞时接受惩罚,学习如何将奖赏最大化的方法。以方向盘、加速踏板、制动踏板、换挡杆位置、车速、左右倾角等车辆自身信息以及与墙壁、其他车辆、行人、车道线距与角度等数据作为输入,通过七层神经网络对此加以学习。最初车辆将随意行驶并与墙壁或周边车辆发生碰撞,随后车辆会逐渐学习掌握向前行驶并回避障碍物,最终掌握为实现无碰撞行驶所需的转向、加速、制动等功能的操作方法。更进一步,在障碍物会随机出现的环境下,车辆如何进行无碰撞的行驶方法将得到充分学习,当加大发生碰撞的惩罚后,车辆间将保持充分的距离,最终实现在无信号灯的路口也可以不相互碰撞,顺利通过[13]。此外,即使突然增加障碍物,车辆在学习后也能充分应对,不与之发生碰撞。
通过对强化学习和深度学习的研究,本文提出一种如图1所示的基于端对端深度强化学习的自动驾驶方法,从理论上解释算法设计的各个要素,使用基于循环神经网络(Recurrent Neural Networks,RNN)的双向长短时间记忆网络(Bidirectional Long Short-term Memory,BLSTM)BLSTM-RNN的自动驾驶多模态行为预测模型,以实现长距离自治的自动驾驶,并增强系统的鲁棒性,融入了为提升训练效果和泛化能力而采用的网络训练及防止过拟合方法,利用Python编程完成算法模型的实现。
图1 基于端对端深度强化学习的自动驾驶方法示意图
本文将深度学习方法与强化学习方法进行有机结合,设计了基于端对端深度强化学习的自动驾驶方法,实现自动驾驶系统具备感知(Perception)和动作(Action)之间端对端学习的能力,并使用训练好的模型来控制车辆行驶。以下为算法的基本设计思路。
一个自动驾驶任务的完成,包含了一系列的动作(Action)、观察(Observation)和反馈值(Reward)。为了实现车辆的自动驾驶,需要设计一个可完成与环境之间进行交互的智能体。当智能体与环境进行交互后,环境会发生变化(如自动驾驶车辆的空间位置),此时智能体不一定能得到环境的所有信息,因而需要观察这一行为来表示智能体所获取的感知信息。交互过程如图2所示。
图2 智能体与环境间的交互过程示意图
在每个时间步长(time-step),智能体执行某一动作,如选择车辆的行驶方向或改变车辆的前进、转向和制动等驾驶动作,并将动作反映至环境中,环境的状态随之改变,并将此状态传递至智能体,同时对智能体进行反馈。在此基础上,任务目标转化为智能体如何从环境中得到更多的反馈。
反馈值的获取过程是进行量化的过程,反馈值越多代表所执行的动作越满足期望。在不考虑过拟合的情况下,如何找到一个最优的策略,以得到更多的反馈值是研究的目标。由于最优策略是未知的,求解过程的开始需要使用一个随机策略作为起点。通过建立智能体与环境之间的交互来进行试验,可得到最初的一组自身状态s1、动作a1及反馈值r1,即样本集合{s1,a1,r1},通过对样本不断地进行迭代求解便可以得到更优的反馈。
根据样本的采集过程可知,样本是具有时序的,因此在算法执行过程中,下一时刻的环境状态仅受到当前的状态和动作的影响。这就是马尔可夫决策过程,用数学方法可描述为如式(1)所示。
一个状态st是Markov当且仅当
P(st+1|st)=P(st+1|st,st-1,…,s1,s0)
(1)
式中: P为概率;s0,s1,…,st,st+1分别为起始时刻到t+1时刻的状态。
对于如何获取最优策略,常用的方法主要有两类,一是直接对策略进行优化,使回报值更高,这种方法被称为基于策略的方法(Policy-based Method);二是通过估计价值函数(Value-based Method)来间接获得最优策略。
通常由于迭代更新,基于策略的方法存在学习效率慢的缺陷,而基于价值函数的方法可能会导致空间维度过高的问题,因此选用融合了两种方法的Actor-Critic(Actor:策略,Critic:评价)算法,算法流程如图3所示。
图3 Actor-Critic算法流程示意图
此时,Actor部分会基于概率对行为进行选择,Critic 部分会基于 Actor 的行为与输入的状态对行为进行评判打分,并将结果反馈给Actor,之后Actor 再次根据 Critic 的打分对选择行为的概率进行修正,而Critic部分根据环境返回的回报值,通过价值函数不断调整自身的打分结构,由此构成带有反馈的闭环算法。
由于价值函数是无法准确得到的,因此需要估算价值函数。此时价值函数可被定义为期望值的回报,回报越高,价值就越大,越值得选择。利用Bellman方程进行迭代可估算价值函数:
v(s)=Ε[Gt|St=s]=
Ε[Rt+1+λRt+2+λ2Rt+3+…|St=s]=
Ε[Rt+1+λ(Rt+2+λRt+3+…)|St=s]=
Ε[Rt+1+λGt+1|St=s]=
Ε[Rt+1+λv(St+1)|St=s]
(2)
v(s)=Ε[Rt+1+λv(St+1)|St=s]
(3)
式中:Gt、St和Rt分别为t时刻的收获、状态及获得的奖励;λ表示衰减系数;v(s)为价值函数,v(St+1)为下一状态的价值;Ε表示价值。式(3)建立了当前状态的价值与下一状态的价值之间的关系,同时建立了当前状态的价值和当前反馈之间的关系,可计算出价值函数。
由于每一个状态,都存在多个可以选择执行的动作,而每个可能被执行的动作又会导致很多个可能出现的状态,因此需要通过评价每个可被选择执行动作的价值来指导动作的选择。为了能够得到价值最高的动作,需要对动作价值进行量化表示,这种量化表示动作价值的方法被称为动作价值函数
Qπ(s,a)=Ε[rt+1+λrt+2+λ2rt+3+…|s,a]=
Εs′[r+λQπ(s′,a′)|s,a]
(4)
式中:π为策略;Qπ(s,a)为动作价值函数;s′为下一个状态;a′为下一个动作。通过使用动作价值函数可以对最优策略进行求解。而要求得最优策略,首先需要求解最优动作价值函数
(5)
将式(4)代入式(5)可得
(6)
当取最大值时可以得到最优的Q值,因此等式右侧的Q值在取得最大值时,能够使a′值最大,即得到最高价值的动作。
使用策略进行迭代是为了通过使用迭代计算的方法使计算策略的过程最终收敛,从而得到策略的最优值。策略迭代一般分成两步,分别是策略评估(Policy Evaluation)和策略改进(Policy Improvement)。策略评估可以对价值函数进行更新并且能够更好地估算出迭代过程中当前的策略价值。而策略改进则是使用贪婪策略(Greedy Policy)制造一个新的样本用于初始的策略评估。
价值函数迭代计算过程中,每次迭代计算都需要对所有价值函数进行依次更新,然而对所有状态和所有动作都进行遍历是无法实现的,因此使用一种改进过后更新Q值的算法
(7)
虽然目标Q值可由价值函数迭代计算得出,但由于存在很大的累计误差,因此不能直接将此目标值直接赋给新的目标值。为此引入参数α,每一步具体的实现取决于参数α的值,最终可以迭代收敛到最优的目标值,且能够减少估计误差带来的影响。
关于如何选择生成动作的策略,通常有两种方法,一种是选择随机进行动作的生成来得到一个动作,另一种是通过贪婪策略,在当前Q值的基础上,通过计算得到最优动作
(8)
相较于第一种方法,贪婪策略不容易更新得到更优的Q值,但却可以对算法的有效性进行判断。为了让算法同时具备上述两种方法的优点,对贪婪策略进行改进,具体方法是给定一个很小的ε值,作为选取随机动作的概率值,因此又被称为ε-greedy策略。
对于复杂的自动驾驶问题,除了需输入车辆动力学参数和控制参数,还需输入从虚拟环境中采集的图像信息,这将导致算法的维度急剧增大,因此需对状态数据进行降维处理。本文采用值函数近似的方法对算法进行降维处理
Q(s,a)=f(s,a)
(9)
式中, f可以使用多种函数类型进行替换,通过使用这种函数化的表示方法,算法的计算不再受到维度的限制。由于Q值实际如何分布是未知的,因此通过引入参数ω,使函数f近似表示Q值函数,式(9)可以表示为
Q(s,a)≐ f (s,a,ω)
(10)
神经网络对于处理高维数据具有很大的优势,并且由于自动驾驶过程所采集的图像数据具有时序性,且每张图像信息是连续变化的,因此采用循环神经网络(Recurrent Neural Network,RNN)替换函数f。循环神经网络有别于其他神经网络的区别是,其独特的网络结构允许其读取历史中的信息,并利用历史中的信息影响后续网络的传输,具有很好的处理具有时序性数据的能力,其典型的结构如图4所示。
图4 循环神经网络结构示意图
可以看出循环神经网络的每一隐藏层之间的结点是存在连接的,每一隐藏层的输入都包含了本层输入层的输入和上一隐藏层的输出。
在RNN中,在下一时间段,神经元的输出信号可以反过来作用到本身,对于第i层神经元而言,在t时刻,除第i-1层神经元会将输出信号输送给它以外,自身在上一时刻的输出也会作为输入信号传输给自身。
为方便分析,按照时间段展开,可表示为如图5所示。
图5 RNN神经网络结构示意图
图5中,Xt,Ot和St分别表示t时刻的输入,输出和状态。由图中可以看出,t+1时刻的神经网络输出的最终结果变为了该时刻的输入和前序所有结果共同影响所产生的结果,实现了神经网络时序建模。
当采用RNN进行降维时,在时间序列上会发生梯度消失的现象。当前神经网络的预测位置和当前相关信息存在时间间隔,并且这个时间间隔会逐渐增大,当间隔变得很大时,简单的循环神经网络就会丧失学习的能力,为此使用长短时间记忆网络(Long Short-Term Memory,LSTM)来解决这一问题。
LSTM网络是一个拥有3个“门”的特殊网络结构,依次为“遗忘门”、“输入门”、“输出门”,通过“细胞门”开关实现时间上的记忆功能,防止梯度消失。图6为LSTM的结构单元和公式。
图6 LSTM单元结构示意图
图6公式中,c为记忆细胞状态;x为输入;a为各层输出;Wf、bf、Wu、bu、Wc、bc、Wo、bo为线性关系的系数和偏倚。
此时,循环神经网络已经被改编,成为了深层循环神经网络(Deep RNN)。具体做法是需要在BasicLSTMCell的基础上再封装一层MultiRNNCell,就可以实现基于循环时间网络的双向长短时间记忆网络(BLSTM-RNN)。由于BLSTM的网络结构构成了一个无环图,其输出是同时考虑了前后的因素得到的,因此更具有鲁棒性。
初步的训练过程定义了一个名为interpret_action的代理函数完成六个动作的实现,包含停止、直线行驶、向左行驶、向右行驶、左转和右转。随后定义compute_reward奖励函数为车辆行驶速度和偏离中心线距离的类,行驶速度越快且距离车道中心越近,获得的奖励值就越高。除此之外还定义了终止函数isDone来执行事件的终止,当发生碰撞或车速低于设定阈值的情况,训练就会被终止。主循环通过获取图像信息,根据当前策略计算要采取的动作,获得奖励进行排序,如果测试终止,车辆模型就会被重置为原始状态。
在进行虚拟环境下自动驾驶神经网络算法的训练时,选择6名测试人员参与了人工驾驶训练的工作,测试人员分别使用虚拟环境下驾驶采集装置,在虚拟环境中按自身驾驶习惯进行人工驾驶。驾驶训练所选用的场景为城市交通环境,并对驾驶训练数据进行了记录和统计。
测试人员的驾驶时间、平均车速、车辆距中心线平均距离的统计信息如表1所示。
表1 测试数据
编号驾驶时间/s平均车速/(km·h-1)距道路中心线平均距离/cm人员1132136.3139.47人员2120428.7943.31人员3119137.8732.97人员4176145.2531.27人员5206742.1959.85人员6169526.7949.20
测试过程中还分别记录了测试人员在驾驶过程中的车速、油门踏板、制动踏板变化情况,现以图7中第一名测试人员所得数据为例进行介绍,如图8所示。
图7 虚拟环境中人工驾驶采集
图8 测试人员驾驶过程曲线
6名测试人员驾驶时车辆距道路中心线距离分布统计数据如图9所示。
图9 车辆距道路中心线距离分布直方图
之后,使用6名测试人员驾驶时所得的驾驶数据对自动驾驶神经网络分别进行训练,使用训练后的神经网络算法进行自主驾驶测试,具体测试结果仍以第一个测试人员驾驶采集的数据训练为例,如图10所示。
图10 自主驾驶测试过程曲线
由此可以看出,使用每位试验人员的驾驶数据进行训练得到的算法在自主驾驶测试中表现相差较大,自主驾驶测试的表现与试验人员在进行人工驾驶训练时的驾驶表现有关,驾驶员的驾驶表现越好,训练的效果也越好,并且经过自动驾驶算法训练的自动驾驶车辆,其行驶速度和行驶过程(加速踏板与制动踏板开度变化小)也更加稳定,提高了车辆行驶的平稳性。
将算法用试验人员的驾驶数据训练之后,对所有进行自动驾驶测试的车辆距道路中心线距离进行采样,采样结果如图11所示。
图11 车辆距道路中心线距离采样统计曲线
从统计结果来看,经过训练的算法在自动驾驶时,车辆距中心线的距离基本保持在0~10 cm之间,与人工驾驶相比,自动驾驶车辆车道保持的更好,这说明算法在进行训练时保持了良好的策略,且忽略了人工驾驶时驾驶员主观因素的影响,使得自动驾驶车辆更好地保持了道路中心线。结合图9中的数据及表1中距道路中心线平均距离可以得出,测试人员5、6驾驶时车辆距道路中心线的距离最大,测试人员4驾驶时车辆距道路中心线的距离最小,与自动驾驶的数据对比后发现,测试5与测试6的车辆距道路中心线的距离较大,测试4的距离最小。因此可以得出,车辆与驾驶训练过程中车辆距道路中心线平均距离越小,所训练出的算法在进行自主驾驶时越容易接近道路中心线,车辆的安全性也越高。
利用虚拟现实仿真环境试验进行深度学习训练成本低、效率高的特点,结合自动驾驶技术与深度强化学习,设计并实现了一种端对端深度强化学习的自动驾驶算法,以虚拟现实环境下自动驾驶仿真训练平台对其进行仿真训练与测试。结果表明,车辆自主驾驶的表现与人工驾驶的表现有关,驾驶员的驾驶表现越好,训练的效果也越好,并且经过自动驾驶算法训练后,车辆的行驶速度和行驶过程(加速踏板与制动踏板开度变化小)更加稳定,提高了车辆行驶的平稳性,可以满足车辆长距离自治的需要。该方法可以有效提高自动驾驶的训练效果,降低自动驾驶技术测试的研究成本,大幅度提高了研发效率,对于处理大规模、高维度的算法具有很高的参考价值。
本研究虽然仅对车辆的直驶、转向和停车功能进行了验证,没有设计复杂道路条件下车辆的多种行驶模式,但随着车载大规模运算的应用,以及驾驶员的恐惧感、舒适性等体感参数的融入,将使得深度强化学习和端对端控制在实际载人自动驾驶领域的应用成为可能。
[1] 赵铭炎.浅析人工智能在自动驾驶中的应用[J].中国新通信,2019(05):107-108.
[2] 王羽,曲婕.智能驾驶发展现状及对地方开放智能驾驶车辆测试道路的建议[J].汽车工业研究,2018(11):4-11.
[3] 余卓平,邢星宇,陈君毅.自动驾驶汽车测试技术与应用进展[J].同济大学学报(自然科学版),2019(04):540-547.
[4] 张翔.虚拟环境下汽车驾驶安全主动干涉控制技术研究[D].广州:广东工业大学,2011.
[5] LECUN Y,BENGIO Y,HINTON G.Deep learning[J].Nature,2015,521(7553):436.
[6] 王科俊,赵彦东,邢向磊.深度学习在无人驾驶汽车领域应用的研究进展[J].智能系统学报,2018(01):55-69.
[7] SHOUWEN Y,JIAHAO Z,ZIRAN H,et al.Autonomous-driving vehicle test technology based on virtual reality[J].The Journal of Engineering,2018(16):68-71.
[8] 陈波,尹朝庆,卢苇.基于神经网络的自动驾驶模型及其虚拟实现[J].计算机工程与应用,2004(28):185-187.
[9] 费洋,吴永城.基于神经网络的列车自动驾驶控制算法研究[J].电子世界,2014(13):33-34.
[10] 夏伟,李慧云.基于深度强化学习的自动驾驶策略学习方法[J].集成技术,2017(03):29-34,36-40,35.
[11] 王悉.基于机器学习的重载列车智能驾驶方法研究[D].北京:北京交通大学,2017.
[12] CHEN C,SEFF A,KORNHAUSER A,et al.DeepDriving:Learning Affordance for Direct Perception in Autonomous Driving[C]//IEEE International Conference on Computer Vision.[S.l.]:[s.n.],2015.
[13] BOJARSKI M,DEL TESTA D,DWORAKOWSKI D,et al.End to End Learning for Self-Driving Cars[Z].2016.