Py学习  »  机器学习算法

增强避障系统设计浅析:站在机器学习的角度,剖析学习型避障小车的设计思路

阿里云云栖社区 • 6 年前 • 595 次点击  

摘要: FF91于12017年1月4日在美国拉斯维加斯成功首发,拉开了互联网生态电动汽车的序幕。自动泊车使得停车也成为了一种享受,新手司机再也不用担心该如何见缝插针了。但是如果在车水马龙的繁忙环境下,无人驾驶还能得心应手吗?本文将站在机器学习的角度和大家分享学习型避障小车的设计思路。

作者简介:Boyang Dai,是NYC数据科学院的数据学家,在美弗吉尼亚大学担任实验室导师。

项目综述

整个项目由三个部分组成:

训练场设计

包括:随机障碍,固定障碍,边界碰撞检测

汽车模型

包括:传感器,规则学习

学习的算法

包括:基于表的算法和基于神经网络的算法

项目组成示意图:

依赖和代码概述

Python依赖

该项目是在Python环境中开发的,用到5个关键Python模块:

 numpy

 matplotlib

 sklearn

 keras

 pygame

前三个模块用于执行基本的数学计算,例如距离测量,碰撞检测,角位移等。 “keras”模块用于神经网络算法,使用“Tensorflow”后端。 “pygame”模块用于创建训练内容和汽车对象以获取用于学习的数据。

代码概述

本项目代码基构成如下:

关键组件

a.训练场

训练场的最终设计具有两种不同类型的障碍物。

 固定移动方向的障碍物

在轨道上的一个点周围有4个较大的正方形,其以训练场中心作为盘中心。这些方块以固定的角速度和固定的模式移动。

- 随机移动障碍物

在训练场中以不同的速度在随机方向上运动的20个较小的正方形。靠近训练场的边缘之后,会拉回训练场中。

一开始,训练场只有固定的障碍物。这时汽车学得非常快,它的生存时间在3万多次试验后能超越3小时。但是这并不意味它已毕业。因为单调的驾驶模式远不能被应用到更复杂的训练场。因此还要增添更复杂的障碍设计。

b.训练小车

模拟车具有如图(a)所示的圆形形状。为了将汽车附近的环境转换成数字并将它们存储到Python字典中,这里将使用十个传感器来探测汽车到任何对象的距离,包括5个前传感器和5个后传感器,从而尽可能接近真实环境的复杂路况。汽车有五种移动模式:

- 向前

- 右前

- 左前

- 右转

- 左转

图(a)

五向运动示意图:

训练脚本的规则学习可作如下改进:

- 汽车围绕训练场逐帧移动。

- 每当汽车碰到周边或障碍物,它将被重置,并回到它的原始点。

- 汽车有三个动作:左转,右转,直走。

- 10个传感器的探测区域将向外扩展以感知汽车和障碍物之间的距离,组成状态空间。

C.学习算法

我在这里用来训练小车的方法是增强学习。 增强学习是借鉴于动物学习研究,也与控制工程学习自动机的理论有关。 它是一种基于试验和错误的学习技术,核心是通过与环境的重复交互以解决复杂的任务,系统原理如下:

基本的增强学习模型包括:

- 一组环境和代理状态S

- 代理的一组动作A

- 从状态过渡到行动的政策

- 确定转换的标量即时反馈的规则

- 描述代理观察到的规则

学习系统通过汽车上的传感器接收关于环境的状态信息,并且通过推理过程使用状态信息以确定在给定状态下做出的动作。执行动作之后,学习系统从环境接收增强信号以反馈其结果。强化学习代理的目的是收集尽可能多的反馈,以便最大化数字累积回报信号。

Q型学习

Q学习是用于训练机器人以开发解决任务为策略的增强学习示例。它使用动作值函数来计算在离散状态下执行特定动作的期望效用,并遵循最优策略。数据表用于在训练场中存储汽车驱动器的效用数据。

Q学习是一种无模型的强化学习技术,包括代理,状态S和每个状态A的一组动作。在特定状态下执行动作并向代理提供反馈。每次代理在时间t中以状态S执行动作A时,代理将获得反馈r,代表应如何接近于解决任务。然后根据更新规则更新用于执行此操作的应用程序:

其中:

- S是当前状态

- A是S中的最优动作

- S'是下一个状态

- A'是S'中的最优动作

- r是反馈

- α是学习率

- γ是折现因子

解释:

-状态(S and S')

汽车上的传感器被设计成获得汽车所处的当前状态的表示。因此,状态是汽车感知的环境的总结。在环境表示中,状态被表示为4元组(w,x,y,z)。变量w与传感器信号相关联。如果左传感器中的读数和和与右侧的传感器的读数和相同,则w被赋值0。如果右传感器接收更大的读数和,则w被设置为1;如果左传感器接收更大的读数和,则w被设置为2。变量x是监视与汽车前方障碍物接近度的二进制变量。如果汽车附近的传感器感知到任何信号,则x被设置为1。除了后传感器之外,相同的规则适用于y。最终变量z是一个二进制变量,如果汽车周围的传感器在时间步中没有被感知到,则激活该二进制变量。因此,整个状态空间由3×2×2×2的感知组合或24个唯一状态(如下表)组成。

-动作(A和A')

对于每个时间步,汽车能够找到其在当前状态下执行特定动作所授予的增强值(r)。 汽车将需要选择在任何状态下具有最大q值的动作,使得汽车可以遵循完全优化的策略。 当q值函数已经收敛到状态和动作对(Q(S,A))的真实收益时,则汽车做出的策略将是最优的。汽车在任何给定状态下可以采取的动作被表示为一个变量(p)。 总动作空间下表所示。

为了在探索和开发之间保持平衡,并允许汽车在早期学习阶段有效地学习,引入“epsilon”,这是作为epsilon贪婪的政策。每次汽车做出决定时,将产生一个数字(z),范围从0到1。在执行下一动作之前,将比较z和ε,如果z小于ε,我们将随机地做出探测决定;如果z大于ε,我们找到与maxQ(剥削)的动作。 ε的值的范围从0到1,该值越大,在q学习代理的决策中将附加更多的随机性。

-反馈(r)

反馈计划是整个q学习算法的核心。为了实现强化学习,关键是汽车能够在执行某个状态的动作之后立即确定动作的近似值。由于汽车的目标是尽可能长地在训练场中生存,所以不接收来自传感器信号的反馈是有意义的。如果传感器没有感知到,汽车获得100的反馈;如果传感器感知到任何东西,那么汽车会得到-20的反馈,如果汽车碰到任何东西,它将被给予-500的惩罚反馈。

-学习率(α)

学习率表示新获取的信息用于覆盖旧信息的程度。值为0时表示代理不学习任何东西,而值为1时表示代理只考虑最近的信息。

-折现因子(γ)

折现因子决定未来反馈的重要性。值为0将使代理仅通过考虑当前的反馈,而值为1时代理会努力获得长期的更高的反馈值。

基于表的Q学习

基于表的Q学习使用Q表来存储Q值。对于我们的训练场环境,我们有24个状态x 3个动作,共获得72个条目表。其学习过程可以描述如下。

基于神经网络的Q学习

为了克服由于状态空间复杂性所带来的问题,可以使用神经网络作为近似Q值的函数来开发Q学习。

神经网络使用互连节点来实现信号的跨越。节点之间的每个连接点包含权重参数。然后通过将输出目标与输入进行比较从而产生用于训练神经网络的误差。该误差用于更新神经网络中的连接和(或)连接的权重参数。使用该数据表时的学习过程可以描述如下。

建立一个具有8个输入节点(6个用于状态表示和2个用于移动动作),4个隐藏节点和1个输出节点的神经网络,从而形成一个具隐藏层的网络结构。 神经网络接以状态和动作作为输入,并输出该状态-动作对(Q(S,A))的近似Q值。Qtarget(S,A)由主方程产生并用于训练网络,如下图所示。

小结:

这个项目的目标是鼓励汽车学习一个驱动策略,以躲避障碍和尽可能长时间的存活。为了实现这一点,允许汽车在训练场中行驶和学习,直到它接近学会了一个成功的目标方法。相关训练方法的实验结果如下:

可见,在接近现实世界的模拟训练场中,基于神经网络的Q学习方法更可靠。

最后附上实验的演示结果:

本文由阿里云云栖社区组织翻译。

文章原标题《Reinforcement Q-Learning Car》译者:伍昆


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/xMlLJWiLyZ
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/6416
 
595 次点击