深度学习助力自动驾驶:数据集扩展与强化学习实践
一、数据集扩展
在自动驾驶模型训练中,使用更多的数据通常有助于提升模型性能。当模拟器正常运行后,我们可以通过多次数据收集来扩展数据集。甚至可以尝试合并 AirSim 中不同环境的数据,观察基于这些数据训练的模型在不同环境中的表现。
此前,我们仅使用了单个相机的 RGB 数据。而 AirSim 提供了更多功能,例如,我们可以为每个可用相机收集深度视图、分割视图、表面法线视图等图像。这样,每个实例可能会有 20 种不同的图像(五个相机在四种模式下运行)。使用这些额外的数据能否帮助我们改进现有的模型呢?这值得进一步探索。
二、序列数据训练
当前的模型在每次预测时仅使用单个图像和单个车辆状态,然而在现实生活中,我们的驾驶决策并非如此简单。我们的行动往往会考虑到直至给定时刻的一系列近期事件。在数据集中,我们拥有所有图像的时间戳信息,可利用这些信息创建序列。我们可以对模型进行修改,使其基于前 N 个图像和状态进行预测。例如,根据过去 10 个图像和 10 个状态来预测下一个转向角度,这可能需要使用循环神经网络(RNN)。
三、强化学习概述
近年来,强化学习在计算机领域引发了广泛关注。计算机在决策任务中击败人类的消息,如在国际象棋、电子游戏(如 Atari、围棋、Dota 2 等)中的胜利,使得关于计算机何时将统治世界的讨论再度兴起。这些“机器人”通过相互对战并强化成功策略来学习游戏,这与人类训练宠物的方式类似,即强化良好行为、抑制不良行为,这正是强化学习的核心概念。
传统的监督学习方法通常专注于单个决策,不太适合需要一系列决策的计算机游戏或其他场景。目前,强化学习已广泛应用于各个行业,如优化股票交易、管理大型建筑和数据中心的冷暖系统、进行广告实时竞价、优化视频流质量以及实验室中的化学反应优化等。因此,对于序列决策和优化问题,强化学习是一个很好的选择。
四、AWS DeepRacer 与强化学习
4.1 强化学习简介
强化学习理论在 20 世纪 90 年代曾达到鼎盛,但由于计算要求高和训练困难,未能广泛应用于大规模生产系统。传统上,强化学习被认为是计算密集型的,而神经网络则是数据密集型的。随着深度神经网络的发展,强化学习也从中受益,神经网络被用于表示强化学习模型,从而催生了深度强化学习。在本文中,除非特别说明,强化学习通常指的是深度强化学习。
尽管近年来强化学习取得了进展,但对于开发者来说,其开发环境并不友好。深度学习模型的训练接口逐渐简化,但强化学习领域尚未完全跟上。此外,强化学习还面临计算要求高和模型收敛时间长的挑战,创建一个收敛的模型可能需要数天甚至数周时间。而且,关于强化学习的教育资源相对较少,且大多针对高级数据科学家,开发者获取这些资源存在一定难度。
AWS DeepRacer 的出现旨在让开发者更容易接触到强化学习。它由 Amazon SageMaker 强化学习平台提供支持,是一款 1/18 比例的自动驾驶赛车。谁能抗拒自动驾驶汽车的魅力呢?
4.2 为何选择用自动驾驶汽车学习强化学习
近年来,自动驾驶技术得到了大量投资并取得了显著成功,DIY 自动驾驶和遥控赛车社区也日益流行。开发者对使用真实硬件构建缩放版自动驾驶汽车并在现实场景中进行测试表现出了极大的热情,这促使我们以自动驾驶汽车为载体,向开发者传授强化学习知识。
虽然存在其他构建自动驾驶汽车的算法,如传统计算机视觉或监督学习(行为克隆),但我们认为强化学习具有一定优势。强化学习的一个关键优势是可以在模拟器中进行模型训练,但也面临着模拟到现实(sim2real)的问题,即如何将完全在模拟环境中训练的模型部署到现实世界中。DeepRacer 提供了一些简单而有效的解决方案来应对这一问题。在 2018 年 11 月 DeepRacer 推出后的前六个月内,近 9000 名开发者在模拟器中训练了他们的模型,并在现实赛道上成功进行了测试。
4.3 不同自动驾驶套件对比
| 硬件组装 | 技术 | 成本 |
|---|---|---|
| AWS DeepRacer(Intel Atom 搭配 100 GFLOPS GPU,预组装) | 强化学习 | $399 |
| OpenMV(OpenMV H7,DIY 需两小时) | 传统计算机视觉 | $90 |
| Duckietown(树莓派,预组装) | 强化学习、行为克隆 | $279 - $350 |
| DonkeyCar(树莓派,DIY 需两到三小时) | 行为克隆 | $250 |
| NVIDIA JetRacer(Jetson Nano,DIY 需三到五小时) | 监督学习 | ~$400 |
4.4 未来展望
来自 3DR 首席执行官兼 DIY Robocars 创始人 Chris Anderson 的观点认为,DIY 社区中自动驾驶汽车的未来将呈现以下趋势:
-
更快
:在各种条件下持续击败人类,从直线速度开始,逐步发展到赛道/赛车的攻防策略。
-
更易
:就像一款优秀的游戏“易于上手,但难以精通”一样,我们希望汽车出厂就能良好行驶,但要获胜则需要巧妙的软件方法。
-
更便宜
:进入 DIY 赛车联赛的成本和机器学习门槛将显著降低。
4.5 基于 DeepRacer 的实用深度强化学习
现在,让我们开始构建第一个基于强化学习的自动驾驶赛车模型。在开始之前,先了解一些重要的强化学习术语:
-
目标
:在不偏离赛道的情况下完成一圈赛道。
-
输入
:与人类驾驶汽车时通过视觉感知环境并运用驾驶知识做出决策类似,DeepRacer 是一个视觉驱动的系统,使用单个相机的灰度 120x160 图像作为输入。
-
输出(动作)
:在现实中,我们通过油门、刹车和方向盘来驾驶汽车。DeepRacer 基于遥控车构建,有两个控制信号:油门和转向,均由传统的脉冲宽度调制(PWM)信号控制。为了更直观地控制,我们将汽车的驾驶动作离散化。例如,就像老式电脑赛车游戏中使用箭头键(左、右、上)来驾驶汽车一样,我们可以定义一组固定的动作,并且对油门和转向有更精细的控制。训练后的强化学习模型将根据输入决定采取何种动作,以成功导航赛道。
-
代理
:学习和做出决策的系统,在我们的例子中,就是学习在赛道环境中导航的汽车。
-
环境
:代理通过与动作交互进行学习的地方。在 DeepRacer 中,环境包含一个赛道,它定义了代理可以行驶和停留的范围。代理通过探索环境来收集数据,以训练底层的深度强化学习神经网络。
-
状态(s)
:代理在环境中的位置表示,是代理在某一时刻的快照。对于 DeepRacer,我们使用图像作为状态。
-
动作(a)
:代理可以做出的决策集合。
-
步骤
:从一个状态到下一个状态的离散转换。
-
回合
:汽车尝试实现目标的一次尝试,即完成一圈赛道。因此,一个回合是一系列步骤或经验,不同回合的长度可能不同。
-
奖励(r)
:代理在给定输入状态下采取动作所获得的值。
-
策略(π)
:决策策略或函数,是从状态到动作的映射。
-
价值函数(V)
:从状态到值的映射,其中值表示在给定状态下采取动作的预期奖励。
-
回放或经验缓冲区
:临时存储缓冲区,用于存储经验,经验是一个元组 (s, a, r, s’),其中“s”表示相机捕获的观察(或状态),“a”表示车辆采取的动作,“r”表示该动作产生的预期奖励,“s’”表示动作执行后的新观察(或新状态)。
-
奖励函数
:任何强化学习系统都需要一个指南,以告知模型在学习过程中给定情况下的好坏动作。奖励函数就是这样一个指南,它评估汽车采取的动作,并给予一个标量值奖励,以表明该动作在当前情况下的可取性。例如,在左转时,采取“左转”动作将被认为是最优的(例如,奖励 = 1;在 0 - 1 范围内),而采取“右转”动作则是不好的(奖励 = 0)。强化学习系统最终会根据奖励函数收集这些指导信息并训练模型,这是训练汽车的最关键部分。
整个系统的流程如下:
graph LR
A[输入(120x160 灰度图像)] --> B[强化学习模型]
B --> C[输出(左、右、直行)]
在 AWS DeepRacer 中,奖励函数是模型构建过程的重要组成部分,在训练模型时必须提供。在一个回合中,代理与赛道交互,学习采取最优动作以最大化预期累积奖励。但单个回合产生的数据不足以训练代理,因此我们需要收集多个回合的数据。在每个第 n 个回合结束时,我们启动一次训练过程,生成强化学习模型的一个迭代版本。通过多次迭代,我们可以得到最佳模型。训练完成后,代理通过对模型进行推理,根据图像输入采取最优动作,实现自动驾驶。模型的评估可以在模拟环境中使用虚拟代理进行,也可以在现实世界中使用实体 AWS DeepRacer 汽车进行。
4.6 模拟到现实的转移问题(SIM2REAL)
机器人应用的数据收集通常非常困难且耗时,因此在模拟环境中训练这些应用具有很大优势。然而,在现实世界中创建某些场景可能不切实际,例如模拟与其他汽车或人类的碰撞。因此,模拟器与现实世界之间可能存在差距,包括感知差异、模拟保真度(图像质量、采样率等)、物理差异(摩擦、质量、密度等)以及不正确的物理建模(模拟器中物理对象之间的交互和碰撞)。这些因素可能导致模拟环境与现实世界有很大不同。
4.7 构建第一个强化学习模型
要进行此练习,你需要一个 AWS 账户。使用账户凭证登录 AWS 控制台,具体步骤如下:
1.
确保区域设置
:由于该服务仅在北弗吉尼亚地区可用,所以要确保你所在的区域为该地区。
2.
导航到 DeepRacer 控制台页面
:访问链接 https://console.aws.amazon.com/deepracer/home?region=us-east-1#getStarted。
3.
选择强化学习
:选择“Reinforcement learning”后,将打开模型页面,该页面显示了所有已创建的模型及其状态,在此处开始创建模型。
4.7.1 步骤 1:创建模型
我们要创建一个可供 AWS DeepRacer 汽车在赛道上自主驾驶(采取动作)的模型。需要完成以下操作:
- 选择特定的赛道。
- 提供模型可以选择的动作。
- 提供一个奖励函数,以激励我们期望的驾驶行为。
- 配置训练期间使用的超参数。
4.7.2 步骤 2:配置训练
在这一步中,我们需要完成以下任务:
-
配置模拟环境
:强化学习模型的训练在模拟赛道上进行,我们可以选择训练模型的赛道。使用 AWS RoboMaker 云服务来启动模拟环境。训练模型时,应选择与最终比赛赛道最相似的赛道。截至 2019 年 7 月,AWS DeepRacer 提供了七条可供训练的赛道。虽然配置这样的互补环境不是必需的,也不能保证得到一个好的模型,但可以增加模型在比赛赛道上表现最佳的可能性。例如,如果在直道上训练,模型可能无法学会转弯。在强化学习中,就像监督学习一样,代理不太可能学习训练环境范围之外的内容。对于第一次练习,建议选择 re:Invent 2018 赛道。
-
选择学习算法
:目前,AWS DeepRacer 控制台仅支持近端策略优化(PPO)算法。该团队最终会支持更多算法,但选择 PPO 是因为其训练速度快且收敛性好。训练强化学习模型是一个迭代过程,一方面,很难一次性定义一个奖励函数来涵盖代理在环境中的所有重要行为;另一方面,通常需要调整超参数以确保训练性能令人满意。因此,一个明智的方法是从一个简单的奖励函数开始,然后逐步改进。AWS DeepRacer 支持克隆已训练的模型,方便我们改进奖励函数或系统地调整超参数,直到结果收敛。检测收敛的最简单方法是查看日志,看汽车是否通过终点线,即进度是否达到 100%,也可以通过直观观察汽车的行为来确认。
通过以上步骤,我们可以逐步构建一个基于强化学习的自动驾驶赛车模型,体验深度学习在自动驾驶领域的魅力。
4.8 训练过程中的注意事项
在使用 AWS DeepRacer 进行强化学习模型训练时,有几个关键方面需要特别注意,这些要点对于模型的成功训练和性能提升至关重要。
4.8.1 奖励函数的设计
奖励函数是强化学习模型训练的核心,它直接影响着模型的学习方向和最终性能。一个好的奖励函数应该能够准确地反映我们期望的驾驶行为。在设计奖励函数时,要遵循从简单到复杂的原则。
一开始,可以使用一个简单的奖励函数来让模型初步学习基本的驾驶规则。例如,对于在赛道上行驶且未偏离赛道的行为给予一定的正奖励,而对于偏离赛道的行为给予负奖励。随着训练的进行,逐步增加奖励函数的复杂度,考虑更多的因素,如行驶速度、转弯角度的合理性等。
在调整奖励函数时,要注意避免奖励函数过于复杂导致模型难以收敛。可以通过多次试验和观察模型的训练结果,不断优化奖励函数。同时,要确保奖励函数的取值范围合理,避免奖励值过大或过小影响模型的学习效果。
4.8.2 超参数的调整
超参数的选择对模型的训练效果有着重要影响。不同的超参数组合可能会导致模型的收敛速度和最终性能有很大差异。在训练过程中,需要根据模型的训练情况对超参数进行调整。
常见的超参数包括学习率、批量大小、折扣因子等。学习率决定了模型在每次迭代中更新参数的步长,学习率过大可能导致模型无法收敛,学习率过小则会使训练速度变慢。批量大小影响着模型训练的稳定性和效率,合适的批量大小可以提高模型的泛化能力。折扣因子则用于平衡短期奖励和长期奖励的重要性。
在调整超参数时,可以采用网格搜索、随机搜索等方法,尝试不同的超参数组合,观察模型的训练结果,找到最优的超参数设置。同时,要注意记录每次调整超参数后的训练结果,以便进行对比和分析。
4.8.3 训练环境的选择
训练环境的选择直接关系到模型的适应性和泛化能力。如前文所述,应该选择与最终比赛赛道最相似的训练环境。这样可以让模型在训练过程中学习到与实际比赛相关的驾驶技巧和策略。
不同的赛道具有不同的特点,如弯道的曲率、直道的长度等。在选择训练环境时,要充分考虑这些因素。如果训练环境过于简单,模型可能无法应对复杂的实际赛道;而如果训练环境过于复杂,模型可能需要更长的时间来收敛。
此外,还可以尝试在多个不同的训练环境中进行训练,以提高模型的泛化能力。通过在不同的环境中学习,模型可以更好地适应各种赛道条件。
4.9 模型评估与优化
模型训练完成后,需要对其进行评估和优化,以确保模型在实际应用中具有良好的性能。
4.9.1 评估指标的选择
评估模型性能的指标有很多种,常见的包括完成一圈赛道的时间、偏离赛道的次数、行驶的稳定性等。在选择评估指标时,要根据具体的应用场景和需求来确定。
例如,如果我们更关注模型的行驶速度,可以选择完成一圈赛道的时间作为主要评估指标;如果更注重模型的安全性和稳定性,则可以关注偏离赛道的次数和行驶的平稳性。
同时,要综合考虑多个评估指标,避免只关注单一指标而忽略了其他重要方面。通过对多个指标的综合评估,可以更全面地了解模型的性能。
4.9.2 优化策略
根据评估结果,我们可以采取不同的优化策略来提升模型的性能。如果模型在某些方面表现不佳,可以针对性地进行改进。
- 调整奖励函数 :如果模型在某个特定的赛道场景下表现不好,如频繁在弯道处偏离赛道,可以调整奖励函数,增加对正确转弯行为的奖励,减少对错误转弯行为的奖励。
- 重新调整超参数 :如果模型的收敛速度较慢或训练结果不稳定,可以重新调整超参数,尝试不同的组合,找到更适合模型的超参数设置。
- 增加训练数据 :如果模型的泛化能力不足,可以增加训练数据的多样性,在更多不同的环境中进行训练,让模型学习到更多的驾驶技巧和策略。
4.10 强化学习在其他领域的应用前景
强化学习不仅在自动驾驶领域有着广泛的应用,在其他许多领域也展现出了巨大的潜力。
4.10.1 金融领域
在金融领域,强化学习可以用于优化投资组合、进行股票交易等。通过学习市场的变化规律和历史数据,强化学习模型可以自动调整投资策略,以实现收益最大化。例如,模型可以根据市场行情的变化,实时调整股票的买入和卖出时机,提高投资回报率。
4.10.2 医疗领域
在医疗领域,强化学习可以用于优化治疗方案、疾病预测等。通过分析患者的病历数据和治疗效果,强化学习模型可以为医生提供更个性化的治疗建议。例如,在癌症治疗中,模型可以根据患者的病情和身体状况,选择最适合的治疗方案,提高治疗效果。
4.10.3 工业自动化领域
在工业自动化领域,强化学习可以用于机器人的路径规划、生产过程的优化等。机器人可以通过强化学习不断学习和改进自己的行为,提高工作效率和准确性。例如,在物流仓库中,机器人可以通过强化学习找到最优的货物搬运路径,减少搬运时间和成本。
4.11 总结与展望
通过使用 AWS DeepRacer 进行强化学习模型的训练,我们深入了解了强化学习在自动驾驶领域的应用。从数据集的扩展、序列数据的训练,到强化学习模型的构建和训练,每一个环节都对模型的性能有着重要影响。
在未来,随着技术的不断发展,强化学习在自动驾驶以及其他领域的应用将会更加广泛和深入。我们可以期待看到更智能、更高效的自动驾驶汽车,以及在各个行业中更多基于强化学习的创新应用。同时,也需要不断探索和研究,解决强化学习在实际应用中面临的各种挑战,如模拟到现实的转移问题、模型的可解释性等。
总之,强化学习为我们提供了一种强大的工具,让我们能够解决许多复杂的决策和优化问题。通过不断学习和实践,我们可以更好地掌握强化学习技术,推动其在各个领域的应用和发展。
希望本文能够帮助读者更好地理解强化学习在自动驾驶领域的应用,激发大家对强化学习的兴趣和探索欲望。如果你对强化学习和自动驾驶有更多的疑问或想法,欢迎在评论区留言交流。
graph LR
A[开始训练] --> B[选择赛道和动作]
B --> C[设计奖励函数]
C --> D[配置超参数]
D --> E[训练模型]
E --> F[评估模型]
F -->|性能达标| G[应用模型]
F -->|性能不达标| H[调整奖励函数和超参数]
H --> E
以上流程图展示了使用 AWS DeepRacer 构建强化学习模型的整体流程,从开始训练到最终应用模型,中间可能需要多次调整奖励函数和超参数以达到满意的性能。
通过本文的介绍,相信你已经对如何使用 AWS DeepRacer 进行强化学习模型的训练有了更清晰的认识。现在,就动手尝试构建自己的自动驾驶赛车模型吧,体验深度学习和强化学习的魅力!
超级会员免费看
672

被折叠的 条评论
为什么被折叠?



