本文作者通过简单的方式构建了强化学习模型来训练无人车算法,可以为初学者提供快速入门的经验。
想象一下,你生活在一个没有交通拥堵,没有交通事故,也无需花费时间开车的世界,那会多美好。
在我之前做过的一篇关于强化学习的文章中(链接在文末)曾说过,自动驾驶汽车是一场革命,主要有两个原因:
每年因交通事故将挽救125万人的生命
省下开车的时间,它会让你在一生中多活3年
很多公司已经在研究自动驾驶汽车了!比如特斯拉,谷歌,Wayve等等。这些自动驾驶汽车往往使用了强化学习!
再说一遍,如果你还没有读上一篇文章(链接在文末),可以先读一下,在这里我只做上篇文章的简要概述。
强化学习使机器(或者称为智能体)通过实验学习。就像人类学习走路。起初,你以一定的方式移动你的腿,但是你会跌倒。你跌倒了很多次,但最终,经过多次尝试,你会慢慢学会如何移动你的腿来走路。强化学习的原则与此相同!
比较正式的说法是,具有特定状态的环境中的智能体具有可以执行的一组动作。在执行这些动作后,它会收到一个奖励,让智能体知道这个动作有多好。当然,我们希望得到与我们目标相符的最高的奖励。贝尔曼方程用于说明未来的奖励,它通常是一系列导致积极结果的动作。在Q学习函数(Q-Learning)中,我们使用这些奖励来更新可以告诉我们某个状态有好坏的Q值。在深度Q学习(Deep Q-Learning)中,我们使用可以近似Q值的深度神经网络来代替Q值。当下次我们的智能体在环境中移动时,它将使用深度Q网络(Deep Q-Network)为每个动作生成Q值,并采用具有最高Q值的动作。
概念说太多也许你不明白,直观理解就足够了。强化学习与我们学习的方式进行比较是:
我们采取的行动会产生正面或反面的后果。如果它是正面的,我们会再次采取行动,反之亦然。就这么简单!
现在开始构建我们的虚拟自动驾驶汽车,让我们来看看构建的过程。
1.建立环境
首先,我需要为我的车创建虚拟环境。我最初想到创建一个Unity环境,但我的笔记本电脑在创建Unity游戏时感觉已经快死了。再加上机器学习和录制软件,我认为这么麻烦不值得。
我使用了一个名为Kivy的python包来创建UI。
我们从一张空地图开始。“汽车”的目标是在地图的左上角到右下角之间来回移动。
但是,我可以在地图上绘制“沙地”。如果汽车碰到了沙地,就会被视为出了车祸!
我们将使用强化学习(RL),特别是深度Q-Learning来制造我们的自动驾驶汽车。RL算法都有3个关键元素,状态(State),动作(Action)和奖励(Reward)。以下我的程序中定义这些元素的方式:
状态
汽车所处的状态包括5个变量:
传感器红色
传感器黄色
传感器蓝色
方向
负方向
前三个来自汽车前部的3个传感器。每个传感器(红色,黄色,蓝色)都能探测到距离自身10像素半径内的沙地的像素。从逻辑上讲,也就是说,如果汽车左侧有一堵沙墙,蓝色传感器会比黄色传感器探测到的沙地更多。这使汽车可以确定沙地的位置,从而确定行进的方向。最后2个变量代表汽车的方向。以角度衡量,0度将指向上方。我们还添加了负方向方便优化和提升性能。
动作
有三种可能的行动:
顺时针旋转20度
逆时针转动20度
不转弯
奖励
主要奖励包括:
-5:如果汽车驶入沙地
-0.1:如果汽车离目的地越远
0.1:如果汽车更接近目的地
这些只是主要的奖励。我还根据汽车的性能定义了其他奖励。例如,我后来意识到汽车离地图的边缘太近了,所以每当距离边缘10个像素内时我就给它一个负奖励。在实践中,你可以自行定义奖励,以获得自己想要达到的效果。
2.选择模型
我决定使用强化学习,特别是深度Q学习。这是我的神经网络的架构:
输入层:5个节点(每个状态一个输入节点)
隐藏层:30个节点
输出层:3个节点(每个动作一个)
激活函数:ReLU
优化器:Adam
一个隐藏层通常足以解决这类简单的问题。再进行训练需要更长的时间,并且不会带来显著的性能提升。
3.训练
训练时,汽车开始行驶,并逐渐适应环境。我添加了按钮来保存,并将以前的模型加载到当前的自动驾驶汽车中。以下是我们实际学习的代码片段:
4.评估和参数调整
这是智能体每个时间步获得奖励的图。在图中,智能体每次接近目标时都获得+1奖励,远离则获得-1奖励。这由+0.1和-0.1累积而来。训练在1500个时间步后达到稳定水平。
上面是更早之前生成的图。这是当智能体视离目标的远近分别获得+0.1和-0.1奖励。如你所见,奖励在2000步之后稳定了,而不是这次的1500步。这两个图平均需要10个不同的训练周期。结果表明,+1和-1奖励训练速度比+0.1和-0.1奖励更快。
对该模型进行了许多其他更改。比如:
天气调整
额外的奖励(例如,智能体不采取最佳路线。我们增加奖励,鼓励智能体降低与上一圈相比达到目标的步数。)
不同的神经网络架构(例如,层数,节点数,优化器,激活函数)
5.预测!
现在,我们的优化模型。我们的汽车可以无碰撞地进行自动驾驶!
我在这里开发了RL驱动的自动驾驶汽车的基础架构。现实生活中的汽车将更难进行编码,但我相信我们最终会成功。并且,我是在笔记本电脑上进行研发,其计算能力比特斯拉公司的小数百万倍。
-
无人车
+关注
关注
1文章
302浏览量
36470 -
强化学习
+关注
关注
4文章
266浏览量
11250
原文标题:强化学习开源项目:自己动手创建虚拟自动驾驶汽车
文章出处:【微信号:IV_Technology,微信公众号:智车科技】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论