前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搞自动驾驶汽车很复杂?其实一个浏览器就行(讲解、代码全都有)

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

作者头像
量子位
发布2018-03-21 16:41:14
8420
发布2018-03-21 16:41:14
举报
文章被收录于专栏:量子位
作者:janhuenermann 编译:量子位(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上找到。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 神经网络
  • 传感器
  • 探索
  • 多代理学习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档