讲真?一天就学会了自动驾驶——强化学习在自动驾驶的应用

2023-11-11 01:20

本文主要是介绍讲真?一天就学会了自动驾驶——强化学习在自动驾驶的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=gif


编译 | 婉清

编辑 | 姗姗

出品 | 人工智能头条 (公众号ID:AI_Thinker)


【导读】制造真正的自动驾驶汽车(即能够在任何要求的环境中安全驾驶)的关键是更加重视关于其软件的自学能力。换句话说,自动驾驶汽车首先是人工智能问题,需要一个非常具体的机器学习开发技能。而强化学习是机器学习的一个重要分支,是多学科多领域交叉的一个产物,它的本质是解决决策(decision making)问题,即自动进行决策,并且可以做连续决策。今天人工智能头条给大家介绍强化学习在自动驾驶的一个应用案例,无需 3D 地图也无需规则,让汽车从零开始在二十分钟内学会如何自动驾驶。


前言


(译者按)强化学习是通过对未知环境一边探索一边建立环境模型以及学得一个最优策略。强化学习具有以下特征:


  • 没有监督数据,只有奖励(reward)信号;

  • 奖励信号不一定是实时的,而很可能是延后的,有时甚至延后很多;

  • 时间(序列)是一个重要因素;

  • 智能体当前的行为影响后续接收到的数据。


有监督学习则是事先给你了一批样本,并告诉你哪些样本是优的哪些是劣的(样本的标记信息),通过学习这些样本而建立起对象的模型及其策略。在强化学习中没有人事先告诉你在什么状态下应该做什么,只有在摸索中反思之前的动作是否正确来学习。从这个角度看,可以认为强化学习是有时间延迟标记信息的有监督学习。


其他许多机器学习算法中学习器都是学得怎样做,而强化学习是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报。


简而言之,强化学习采用的是边获得样例边学习的方式,在获得样例之后更新自己的模型,利用当前的模型来指导下一步的行动,下一步的行动获得奖励之后再更新模型,不断迭代重复直到模型收敛。


强化学习有广泛的应用:像直升机特技飞行、经典游戏、投资管理、发电站控制、让机器人模仿人类行走等等。


英国初创公司 wayve 日前发表的一篇文章 Learning to drive in a day,阐述了强化学习在自动驾驶汽车中的应用。Wayve是英国两位剑桥大学的机器学习博士创立的英国自动驾驶汽车公司,正在建立“端到端的机器学习算法”,它声称使用的方法与大部分自驾车的思维不同。具体来说,这家公司认为制造真正的自动驾驶汽车的关键在于软件的自学能力,而其他公司使用更多的传感器并不能解决问题,它需要的是更好的协调。


自动驾驶的人工智能包含了感知、决策和控制三个方面。


感知指的是如何通过摄像头和其他传感器的输入解析出周围环境的信息,例如有哪些障碍物、障碍物的速度和距离、道路的宽度和曲率等。而感知模块不可能做到完全可靠。Tesla 的无人驾驶事故就是在强光的环境中感知模块失效导致的。强化学习可以做到,即使在某些模块失效的情况下也能做出稳妥的行为。强化学习可以比较容易地学习到一系列的行为。自动驾驶中需要执行一系列正确的行为才能成功的驾驶。如果只有标注数据,学习到的模型每个时刻偏移了一点,到最后可能会偏移非常多,产生毁灭性的后果。强化学习能够学会自动修正偏移。


自动驾驶的决策是指给定感知模块解析出的环境信息如何控制汽车的行为达到驾驶的目标。例如,汽车加速、减速、左转、右转、换道、超车都是决策模块的输出。决策模块不仅需要考虑到汽车的安全性和舒适性,保证尽快到达目标地点,还需要在旁边的车辆恶意的情况下保证乘客的安全。因此,决策模块一方面需要对行车的计划进行长期规划,另一方面需要对周围车辆和行人的行为进行预测。而且,无人驾驶中的决策模块对安全性和可靠性有严格的要求。现有的无人驾驶的决策模块一般是根据规则构建的。虽然基于规则的构建可以应付大部分的驾驶情况,对于驾驶中可能出现的各种各样的突发情况,基于规则的决策系统不可能枚举到所有突发情况。我们需要一种自适应的系统来应对驾驶环境中出现的各种突发情况。


现在,让我们来看看 Wayve 的自动驾驶汽车的解决方案有什么新颖的地方。


从零开始学会如何通过试错法来学会自动驾驶


还记得小时候学骑自行车的情景吗?又兴奋,又有一点点焦虑。你可能是第一次坐在自行车上,踩着踏板,大人跟随在你身边,准备在你失去平衡的时候扶住你。在一些摇摆不定的尝试之后,你可能设法保持了几米距离的平衡。几个小时过去后,你可能在公园里的沙砾和草地上能够飞驰了。大人只会给你一些简短的提示。你不需要一张公园的密集 3D 地图,也不需要在头上装一个高保真激光摄像头。你也不需要遵循一长串的规则就能在自行车上保持平衡。大人只是为你提供了一个安全的环境,让你学会如何根据你所见来决定你的行为,从而成功学会骑车。


如今,自动驾驶汽车安装了大量的传感器,并通过缓慢的开发周期中被告知如何通过一长串精心设计的规则来驾驶车辆。在本文中,我们将回到基础,让汽车从零开始学会如何通过试错法来学会自动驾驶,就像你学骑自行车一样。




看看我们做了什么:只用了 15~20 分钟,我们就能够教会一辆汽车从零开始沿着一条车道行驶,而这只有当安全驾驶员接手时作为训练反馈才使用。


译注:试错(trial and error)是一种用来解决问题、获取知识的常见方法。此种方法可视为简易解决问题的方法中的一种,与使用洞察力和理论推导的方法正好相反。在试错的过程中,选择一个可能的解法应用在待解问题上,经过验证后如果失败,选择另一个可能的解法再接着尝试下去。整个过程在其中一个尝试解法产生出正确结果时结束。


像学骑自行车的方法只有一种:试错。虽然简单,但这个思想实验突出了人类智能的一些重要方面。对于某些任务,我们采用试错法;而对于其他任务我们则使用规划的方法。在强化学习中也出现了类似的现象。按照强化学习的说法,实证结果表明,一些任务更适合无模型(试错)方法,而另一些则更适合基于模型的(规划)方法。


无需密集 3D 地图,无需手写规则


这是自动驾驶汽车在网上学习的第一个例子,每一次尝试都会让它变得更好。那么,我们是怎么做到的呢?


我们采用了一种流行的无模型深度强化学习算法(深度确定性策略梯度:deep deterministic policy gradients,DDPG)来解决车道跟踪问题。我们的模型输入是单目镜摄像头图像。我们的系统迭代了三个过程:探索、优化和评估。


640?wx_fmt=png


译注: DDPG,由DeepMind的Lillicrap 等于 2016 年提出,全称是:Deep Deterministic Policy Gradient,是将深度学习神经网络融合进DPG的策略学习方法。而 DPG 是由 DeepMind 的 D.Silver 等人在 2014 年提出的: Deterministic Policy Gradient,即确定性的行为策略。在此之前,业界普遍认为,环境模型无关(model-free)的确定性策略是不存在的,在 2014 年的 DPG 论文中,D.Silver 等通过严密的数学推导,证明了 DPG 的存在。DDPG 相对于 DPG 的核心改进是:采用卷积神经网络作为策略函数μ 和 Q 函数的模拟,即策略网络和 Q 网络;然后使用深度学习的方法来训练上述神经网络。


DDPG 算法是利用 QDN 扩展 Q 学习算法的思路对 DPG 方法进行改造,提出的一种基于行动者-评论家(Actor-Critic,AC)框架的算法,该算法可用于解决连续动作空间上的 DRL 问题。 


可参考论文《Continuous control with deep reinforcementlearning》(https://arxiv.org/abs/1509.02971


无模型的 DDPG 方法学习更慢,但最终优于基于模型的方法。


我们的网络架构是一个深度网络,有 4 个卷积层和 3 个完全连接的层,总共略低于 10k 个参数。为了比较,现有技术的图像分类体系结构有数百万个参数。


640?wx_fmt=gif


所有的处理都是在汽车上的一个图形处理单元(GPU)上执行的。


在危险的真实环境中使用真正的机器人会带来很多新问题。为了更好地理解手头的任务,并找到合适的模型架构和超参数,我们进行了大量的仿真测试。


640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=gif


上组动图所示,是我们的车道跟随不同角度显示的模拟环境的示例。这个算法只能看到驾驶员的视角,也就是图中有青色边框的图像。在每一次模拟中,我们都会随机生成一条弯曲的车道,以及道路纹理和车道标记。智能体会一直探索,直到模拟终止时它才离开。然后根据手机到的数据进行策略优化,我们重复这样的步骤。


640?wx_fmt=png


在安全驾驶员接管之前,汽车行驶的距离与模拟探索的数量有关。


我们使用模拟测试来尝试不同的神经网络架构和超参数,直到我们找到一致的设置,这些设置在很少的训练集中,也就是几乎没有数据的情况下,始终如一地解决了车道跟随的问题。例如,我们的发现之一,是使用自动编码器重构损失训练卷积层可以显著提高训练的稳定性和数据效率。


▌ 潜在的影响力


我们的方法的潜在影响是巨大的。想象一下,部署一支自动驾驶车队,使用一种最初只有人类司机 95% 质量的驾驶算法会怎么样。这样一个系统将不会像我们的演示视频中的随机初始化模型那样摇摇晃晃地行驶,而是几乎能够处理交通信号灯、环形交叉路口、十字路口等道路情况。经过一天的驾驶和人类安全驾驶员接管的在线改进后,系统也许可以提高到 96%。一个星期以后,提高到 98%。一个月以后,提高到99%。几个月以后,这个系统可能会变得超人类,因为它从许多不同的安全驾驶员的反馈中受益得以提高。


今天的自动驾驶汽车仍停留在良好的状态,但性能水平还不够好。在本文中,我们为第一个可行的框架提供了证据,以便快速改善驾驶算法,使其从不堪造就到可安全行驶。通过巧妙的试错法快速学习解决问题的能力,使人类拥有具备进化和生存能力的万能机器。我们通过各种各样的模仿来学习,从骑自行车到学习烹饪,我们经历了很多试错的过程。


DeepMind 向我们展示了深度强化学习方法可以在许多游戏中实现超人类的表现,包括围棋、象棋和电脑游戏,几乎总是比任何基于规则的系统表现的更好。我们发现,类似的哲学在现实世界中也是可能的,特别是在自动驾驶汽车中。有一点需要注意的是,DeepMind 的 Atari算法需要数百万次试验才能完成一个任务。值得注意的是,我们在不到 20 次试验中,一贯都学会了沿着车道行驶。


结束语


20 分钟,我们从零开始,学会了沿着车道行驶。想象一下,我们一天可以学到什么?


Wayve 的理念是构建机器人智能,不需要大量的模型、花哨的传感器和无尽的数据。我们需要的是一个聪明的训练过程,可以快速有效地学习,就像我们上面的视频一样。人工设计的自动驾驶技术在性能上达到了令人不满意的玻璃天花板。Wayve 正视图通过更智能的机器学习来开发自动驾驶功能。


原文链接:

https://wayve.ai/blog/learning-to-drive-in-a-day-with-reinforcement-learning

论文链接:

https://arxiv.org/pdf/1807.00412.pdf


本文由人工智能头条编译,如需转载请联系小助手(微信号:csdnai)


——【完】——


在线公开课NLP专场

时间:7月17日 20:00-21:00

扫描海报二维码,免费报名

添加微信csdnai,备注:公开课,加入课程交流群


这篇关于讲真?一天就学会了自动驾驶——强化学习在自动驾驶的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/386578

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]