解读:如何使用强化学习训练自主驾驶汽车?

点击上方关注,All in AI中国

作者:Jerry Qu

解读:如何使用强化学习训练自主驾驶汽车?

研究表明,到2040年,销售的新车中95%将是完全自主驾驶的汽车。

而以下是汽车行业产生革命性变革的两个原因:

  • 乘坐自主驾驶汽车每年避免的交通事故可以挽救125万人的生命。
  • 自主驾驶汽车在运输途中节省的时间相当于为乘客的一生增加了3年的时间。

https://offthethrottle.com/blog/2018/04/09/much-time-spend-cars/

由于这些影响,自主驾驶汽车将成为一个价值数万亿美元的行业。增加3年的时间能做多少事情?这是推动特斯拉公司和谷歌公司等技术领导者创新的动机之一。但在人们可以应用之前,需要了解使这一切成为可能的技术:强化学习。

那么,强化学习是如何工作的呢?

想象一下,一个机器人(也称为代理)试图拿起一支笔,但它失败了,然后再试一次,又失败了。如此重复这个过程1000次后,最终获得成功。代理现在已经学会了如何拿笔。简而言之,这就是强化学习,它与生物学习的方式非常相似。

强化学习有三个关键术语

  • 状态(State):描述当前的情况。(例如在迷宫中的位置)
  • 行动(Action):代理在其状态下可以做些什么(例如,向右移动)
  • 奖励(Reward):反馈特定状态的特定行动是好还是坏

让我们看一个简单的例子。

解读:如何使用强化学习训练自主驾驶汽车?

在这个图像中,有一个机器人在位置(1, 1),在迷宫中。这个位置就是状态。机器人有一组可以执行的向上移动或向右移动的行动。最后要注意的是,机器人只要采取行动就会收到奖励。奖励由程序员定义。

以下我们将定义奖励。

奖励:

  • 进入空心方块:+1
  • 碰到墙面:-1
  • 找到出口方块:+100

每当机器人采取行动(a)时,在状态下,它都会接收奖励(r)。在它的头脑中,它不断更新其在这些状态下采取某些行动的奖励记忆。这就是所谓的政策。该政策基本上是代理如何做出决策。所有决定都基于预测的奖励。让我们假设机器人头脑中有一张巨大的表。该表存储所有状态,包括所有可能的操作,以及该状态,并预测该状态动作对的奖励。在训练开始时,所有预测奖励设置为0。

解读:如何使用强化学习训练自主驾驶汽车?

机器人开始采取随机行动,因为它还没有经验。然而,在经过多次迭代的随机动作之后,它慢慢学会准确地预测每个动作的奖励。它通过每次调整特定状态,对动作正确所接收奖励的预测奖励来实现这一点。这些预测的奖励正式称为Q值。Q值基本上定义了某个状态的"好"程度以及代理想要进入该状态的程度。

解读:如何使用强化学习训练自主驾驶汽车?

现在,机器人可以简单地寻找最高Q值,并采取该行动。它已经学会了!

然而,事情并不是那么简单

我们的模型现在有两个问题。一个大,一个小。我们将从小问题开始。

1.利用(Exploitation)vs探索(Exploration)

解读:如何使用强化学习训练自主驾驶汽车?

让我们假设代理刚刚开始学习,所以所有的Q值都是零。代理正试图达到目的,这意味着它的目标是选择具有最高Q值的动作。由于都从0开始,每个人有25%的机会被选中。假设代理商最终选择向右移动。该政策现在看起来像这样:

解读:如何使用强化学习训练自主驾驶汽车?

但是有一个问题。下一次代理重置为状态(1,1)时,它将始终选择该行动。代理从未有机会探索其他行动。这称为贪婪策略,代理总是选择最高的Q值。代理人正在"利用"它的先验知识,因此被利用。另一个潜在的政策是随机选择一个行动,从而进行探索。在实践中,许多因素会影响我们的政策(我们如何选择采取哪种行动)。

你的代理是否在模拟中运行,在没有影响的情况下犯错?或者代理是否实时运行?

前者将受益于更多的探索,更快地学习,而后者将受益于更高的利用,以减少损失。通常使用利用和探索的组合,具体取决于问题。(例如,利用占70%的时间,探索占30%的时间)

2.未来的奖励

解读:如何使用强化学习训练自主驾驶汽车?

我们的代理现在面临的最大问题是,我们只能领先一步。例如,在状态(1,1),代理已经知道两个动作都将导致+1奖励。我们可以看一下迷宫,看看向上移动不是一个理想的行动,因为它会将是死路一条。我们需要一种方法将未来的奖励与当前的奖励联系起来。 采及贝尔曼方程可以解决!

解读:如何使用强化学习训练自主驾驶汽车?

未来累计折扣奖励

上面的等式被称为未来累积折扣奖励。它是贝尔曼方程的一部分,它允许我们考虑过去状态t+1的未来奖励。在这个等式中:

这些是变量所代表的含义:

  • (t):当前状态
  • (Rt):状态t的累积折扣奖励(更新我们的Q值)
  • (r):奖励
  • (γ):贴现率(介于0和1之间)
  • (k):收到奖励的未来步骤数

对于那些不喜欢一堆数学方程式的人来说,这个等式实际上取当前奖励的总和加上所有未来的奖励,用数字γ打折,数量γ以指数方式减少k倍(收到奖励的未来步骤数)。使用此功能,我们不仅可以根据下一个行动更新Q值,还可以根据以下所有行动更新Q值。

应用γ= 0.9,我们得到:

解读:如何使用强化学习训练自主驾驶汽车?

每个状态的Q值(γ=0.9)

在最终状态,只有当前的奖励(100)。但对于之前的状态,我们采取下一个奖励的折扣加上当前的奖励(100* 0.9+1 = 91)。然后对于之前的状态,除了当前奖励(100 * 0.9 * 0.9 +1*0.9+1= 82.9)之外,我们对最终奖励加下一个奖励的折扣提供更大的折扣。在更远的将来,从逻辑上讲,奖励应该得到更大的折扣,因为当前行动在产生奖励方面的作用较小。

我们做到了!

解读:如何使用强化学习训练自主驾驶汽车?

我们的代理现在有充分的学习经验!它将探索迷宫数千次。每次稍微调整其Q值为(Rt)(累积折扣奖励)。只有少量,因为更大的变化会使学习太混乱。经过数千次迭代后,代理将学会近似的Q值,然后它可以利用贪婪的策略来采取具有最高Q值的行动,并使其到达迷宫的尽头!

但等等,还有最后一个问题!

我保证,这是最后一个。

解读:如何使用强化学习训练自主驾驶汽车?

我们如何学习宇宙中每一个点的Q值?

让我们来玩一个游戏

想象一下,尝试在现实世界中使用这种形式的强化学习。以自主驾驶汽车为例。我们面临的问题是,我们的世界过于复杂,无法为每个状态存储Q值。想象一下,这需要为地球上的每个坐标点存储一个值。此外还要添加其他因素:例如天气状况,代理面临的方向,以及不断变化的道路情况。因此不可能解决这个问题!

表示"坚持非常重要。除非你被迫放弃,否则你不应该放弃。"—伊隆·马斯克

我们以前一直使用的解决方案可以与强力方法进行比较,我们的代理为每个状态存储Q值。但是,如果我们使用机器学习(神经网络)来预测每个动作的Q值,并将状态作为输入,那该怎么办呢?这将彻底改变游戏。

欢迎采用深度Q-Learning

在许多现实世界的问题中,我们的状态中存在与Q值相对应的模式。例如,如果自主驾驶汽车感觉到停在它前面的一辆汽车,那么自驾车必须停下来!无论自驾车在哪里,天气如何,或任何其他因素,这种方法都适用。如果要继续驾驶,汽车将会发生碰撞,导致非常负面的回报(由机器学习工程师定义)。因此,不可能创建每个可能条件(天气、位置等)的表格,神经网络可以简单地知道如果汽车停在代理前面,则采取名为"减速"的行动。

神经网络在一件事情上是惊人的,学习模式!

深度Q-Learning使用神经网络来学习状态和Q值之间的模式,使用奖励作为预期输出。这些被称为深度Q网络。

现在我们了解强化学习,我们可以讨论一下为什么它如此独特。

在传统的神经网络中,我们需要标记所有输入。这就是神经网络学习的方式。(如果你需要复习,请查看我关于神经网络的上一篇文章。)

然而,在自主驾驶汽车的情景中,我们如何定义每个时间间隔的预期值?我们需要说,将车轮向左转0.5度,将速度提高到每小时50公里。在不到一秒的时间内,我们需要为新输入添加新标签!而制作这个标签需要数年时间!

解读:如何使用强化学习训练自主驾驶汽车?

在Deep Q-Networks中,我们不是定义每个单独的值(方向盘角度、速度),而是将行动与Q值相关联。例如,将方向盘向左转5度是一个潜在的动作。因此可以向右4度,改为每小时50公里,然后再改变为每小时30公里。然后我们定义奖励。这完全取决于工程师,当我们尝试采用不同的值时,这里肯定会有一些发挥作用。撞车显然是坏事,必须避免。所以,也许我们给它奖励-1000000的分数。另一方面,为了不撞车,我们每秒将给予代理1分的奖励,并且为了更接近目的地,而每秒奖励10分。在这种方法中,提供对我们环境固有的反馈(奖励)。我们现在只是将反馈映射到导致反馈的行为。这就是强化学习之美。我们不再需要标记我们的数据!

而且还有更多......

到目前为止,我们还没有完成强化学习,现在就有更多的进步!机器学习是一个新兴的流动领域。一些最大的进步包括:

  • 体验重播
  • 分布式强化学习
  • 独立目标网络(双深度Q-Learning)

我会很快跳过这些,因为它们对于强化学习的理解并不是必不可少的。体验重播采用不实时训练神经网络的方法。相反,它执行许多行动,接收一批行动、状态、奖励这个三重奏,并随机采样这个三重奏来训练神经网络。这允许采用更加通用的模型,因为数据的顺序是随机的。

分布式强化学习是一种较新的发展,我们不是将每个动作的神经网络优化为单个Q值,而是根据每个动作的Q值范围概率进行训练。例如,我们的神经网络的输出将变为:

  • 行动的Q值的概率a为1-5
  • 行动的Q值概率a为6-10
  • 行动的Q值的概率b为1-5
  • 行动的Q值的概率b为6-10

这解决了当Q值具有多个峰值时出现的问题。通常在多次迭代后,将这些多个峰值进行平均,但是这种新方法允许代理单独考虑每个峰值。在实践中,研究人员证明,这种模式使玩Atari游戏的代理的训练速度提高了一倍!

因此,我创造了一辆虚拟自主驾驶汽车

我不得不用我新发现的知识做点什么。请继续关注我在下一篇文章中如何将强化学习应用于虚拟自驾车!

但是,就像所有美好的事物一样,都要有一个警告。

强化学习是抽象标签数据的需要。但是,其结果我们失去了一点准确性。想象一下需要告知如何驾驶汽车,驾驶,撞车和学习之间的区别。

"事实证明,强化学习是一种机器学习,其对数据的渴望甚至超过了有监督的学习。获得足够强化学习算法的数据是非常困难的。"—Andrew Ng

尽管如此,强化学习是迈向新世界的踏脚石。通过直接从环境中获取反馈,它使我们更接近通用人工智能。我们已经在机器交易和自动驾驶汽车等领域证明了强化学习的价值。但这仍然是一个新领域,不断改进和颠覆。 所以需要坚持下去。 一般来说,强化学习和机器学习仍然存在!

解读:如何使用强化学习训练自主驾驶汽车?

相关推荐