且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

搞自动驾驶汽车很复杂?其实一个浏览器就行(讲解、代码全都有)

更新时间:2022-09-15 18:54:33

本文来自AI新媒体量子位(QbitAI)

自动驾驶高大上?其实在浏览器里也能玩。


上面那个视频是一个2D环境下的无人驾驶系统,在神经网络的驱动下,小车学会如何自动驾驶。这些小车以速度为奖励,来判断当前应该采取怎样的行动。

这个项目的Demo在此,你可以在系统中用鼠标设置新的障碍物,小车可以自己学会绕过障碍。这真是一个让人很兴奋的项目。

下面讲解一下这个项目的技术实现。

神经网络

代理通过调整神经网络(近似函数)的权重来学习。在这个案例中,这涉及两个神经网络:一个状态→动作的网络(3层,150个神经元),一个状态+动作→Q值的网络(2层,200个神经元)。Q值描述了动作的好坏。

通过学习第二个网络,即“价值网络”,可以获取策略梯度,然后可以据此学习第一个网络。第一个网络,即“执行器网络”,就变成了决策者。这个算法成为深度确定性策略梯度(DDPG)。除此以外,这个项目还用到如下技术:优先级经验重放缓冲,ReLU非线性等。

不过最麻烦的部分,还是神经网络中超参数的搜索。至少有十几个参数需要调整,以便达到***效果,这是一个缺点。未来希望可以通过自动超参数搜索来解决,即通过一组超参数的迭代来找到***选择。

传感器

代理的状态(或称神经网络的输入)由两个时间步长组成,当前时间步长和先前时间步长。这有助于代理基于时间带来的变化作出决策。在每个时间步长内,代理通过19个分布在不同方向的距离传感器收集环境的信息。

传感器就是小车身上伸出的几条线,碰到物体时就会“缩短”。传感器线条越短,代理获得的输入越高(0-代表什么也没碰到,1-代表距离非常近)。此外,时间步长还包括了当前的速度。总的来说,神经网络的输入有158个维度。

搞自动驾驶汽车很复杂?其实一个浏览器就行(讲解、代码全都有)

探索

DDPG的一个主要问题就是探索。在常规DQN(Deep Q-Network)中,可以把动作进行离散再行选择。那样就能简单的通过Epsilon-Greedy随机动作,混合动作-状态-空间。

而在DDPG的连续空间中就不那么简单了。这个项目使用了dropout作为一种探路方式。意思是随机丢弃执行器网络最后一层的一些神经元,从而在行动中获得某种变化。

多代理学习

除了把dropout应用到执行者网络,我还把四个代理同时放在虚拟环境中。所有这些代理共享相同的价值网络,但有各自的执行器,所以有不同的方法找到不同的状态,这样每个代理就能探索状态-动作空间的不同部分。

总之,这有助于更好和更快的收敛。

这个项目的所有代码、Demo、JavaScript库都能在GitHub上找到。

在量子位微信公众号( ID:QbitAI )对话界面,回复:“小车”两个字,发给您GitHub传送门。

本文作者:janhuenermann 
原文发布时间:2017-02-28