场景化实践案例:利用机器学习找到帆船比赛中驾驶的最佳航线!
我们以相当传统的方式教授机器学习:让参与者把一艘真正的帆船变成赛艇机器人。
在这篇博客文章中,我们将分解这一挑战,并专注于第一个子任务:利用机器学习找到帆船比赛中驾驶的最佳航线。
您将学习如何赢得帆船比赛以及完成此任务所需的基本的机器学习概念。
从'为什么'开始
问“我们为什么这样做?”应该是我们在任何机器学习项目中提出的第一个问题。很多时候我们看到项目失败,是由于一个错误的原因开始,所以我们对于这个新项目首先开始问下:
我们为什么要制作自动驾驶帆船?
简短回答:它为学习如何应用机器学习提供了一个绝佳的环境。
这并不是因为人们厌倦了自己驾驶帆船,也不是我们想用新的智能系统去赢得比赛,而是发起的这个挑战有一些因素在内,使得它非常适合学习:
- 帆船赛其实是一场比赛
这种所谓的“对抗性”设置意味着我们不仅要考虑自己的行为,还要考虑一个或多个对手的行为。这在无形中增加了一层全新的复杂性,从而提供了一个非常具有挑战性的学习环境。
- 环境是真实的
这种设置不是人为的,而是现实的和无情的。有许多因素需要考虑:风、波浪、船的状况等。这些是大多数算法在现实世界中工作时所面临的现实。
- 知识会更牢固
人们通常会在调动起所有的感官的时候学习效果更为显著。乘坐帆船的时候,会刺激到所有人,并提供丰富的学习经验,这会有助于您更为深入理解这些概念。
在我们的课程中,我们采用的方法与大多数其他AI课程不同。我们不会从基本概念开始,直到我们解决难题这种方法。我们将采取不同的路线,赢得胜利。通过不断保持主要目标(创建自主帆船),您将在整个过程中保持更多的参与和积极性。
目标
让我们稍微细化一下我们的目标。创建一艘自动驾驶的帆船听起来比较简单,但可能会涉及到很多的内容。
我们可以按如下方式定义目标:
为帆船创建一个自动驾驶仪(转向机构),使其能够以竞争的方式参加帆船比赛。
到现在它仍然看起来像是一个非常大的难题。通常有助于将问题分解为我们可以单独解决的较小问题。这样的事情可能会有所帮助:
- 目标1:寻找最佳驾驶路线,考虑风向和速度
- 目标2:让船沿着最佳航线航行
- 目标3:应用比赛策略,以便我们可以选择最大化获胜机会的行动
目标1似乎现在看起来更加实用了。我们可以提出一些具体的问题:在给定风向和速度的情况下,帆船的最佳航线是什么?
能够提出这样一个问题是很有帮助的,接下来我们一起看下
目标1:找到最佳航线
在我们可以通过机器学习做些什么之前,我们首先需要学习一两件关于航行的知识。这种“领域知识”对于机器学习项目的成功至关重要。除了错误的动机之外,缺乏领域知识是许多机器学习项目失败的第二个原因。有时候,要么是我们解决问题的原因错了,要么是我们解决了错误的问题。
考虑下图1中的情景。假设我们需要到达顶部的标志点,风是直接来自上方的。根据航行方面的常识问题,您可能知道:我们无法直接驶入风中。但如果风来自侧面,我们就永远不会集中目标。所以在这两个极端之间存在一个最佳状态。找到这个最优是我们的目标。
图1:逆风梯(风来自顶部)
风角、风速和船速之间的关系通常由海员用极坐标显示。图2显示了这样一个图的一个例子。
图2:极坐标图
粗黑线表示在某些风角(相对于船)和速度下的船速。针对6,8,10,12和20节的风速绘制不同的曲线。船速通常以1节≈1,85kph的结节来测量。现在变得非常容易阅读船速:10度风在110度风角(答案约为7节)。更重要的是,这个图有助于我们找到最佳的VMG(见视频:Velocity Made Good)。
粗黑线表示在一定的风角(相对于船)和速度下的船速。风速分别为6、8、10、12和20节时绘制了不同的曲线。船的速度通常用绳结来计算,绳结≈每小时1,85公里。现在的船速就很容易阅读了
它变得很容易读的船速说:10节风在110度角(答案是大约7节)。更重要的是,这个图帮助我们找到最优的VMG(参见视频:Velocity Made Good)。
比较简单吧?我们不需要机器学习。只是我们没有为每艘船提供这些极坐标图。通常船艇设计师会提供一些理论上的内容,但专业团队需要创造自己的最佳性能。
现在我们可以将第一个目标重新定义为更具体的内容:
根据风速和风向,预测某个方向的船速。
有了这样的模型,我们可以很容易地预测最大VMG的过程。现在让我们继续看看如何使用机器学习来实现这一目标!
始终牢记目标
在课程中,我们将使用除自动帆船以外的示例。当我们介绍新概念时,我们将使用如下插入将它们链接到我们的目标:
目标:寻找最佳航线
什么是机器学习?
那么,什么是机器学习?让我们首先定义学习本身。 Google网络定义告诉我们:
学习:通过学习、经验或被教导获得知识或技能
这适用于计算机以及人类。后来我们确实会看到:人类和计算机其实是以非常相似的方式学习。
在机器中,获得的知识存在于所谓的模型中。该模型在训练阶段学习,稍后将用于在应用程序中执行其最终任务。以预测为例。
模型:系统的世界观,包含系统学到的东西
机器学习的类型
根据上面的学习定义,机器学习有三大类:
- 监督学习(正在教授)
- 强化学习(经验)
- 无监督学习(学习)
监督学习
目前,这是最常见的机器学习形式。我们知道结果必须是什么,通过提供好的和坏的数据示例“教导”机器更接近。
更具体:我们希望我们的模型能够将给定输入(通常名为X)转换为特定输出(通常命名为y)。我们通过输入具有相应输入的输出示例来训练模型,这称为训练集。
图3:输入、输出和模型
定义它的另一种方法是将其写为数学公式:
y = f(X)
这里f是将输入转换为输出的函数(模型)。
强化学习
这在技术上是一种监督学习形式,但老师不是真实的人类。系统会通过反复试验从其环境中学习。
该模型仍有输入和输出,但我们没有带示例的训练集。相反,我们有一个称为奖励函数的东西,模型试图最大化。
无监督学习
即使没有老师,机器也可以学习如何在收到的数据中找到结构。例如:'clustering'和'dimensionality reduction'。请参阅下面的维数减少示例。系统找到看起来相似的照片示例。
图4:t-SNE降维示例
目标 - 寻找最佳航线
问题
什么机器学习类型最适合我们的目标?
回答
我们有一个标签数据集,所以我们可以使用监督学习。
问题的类型
在有监督的学习中,我们可以解决两种主要类型的问题。类型取决于所需的输出。
想象一下,您想要确定某个图像是否包含狗或猫。这将是分类的一个例子。
分类:目标是预测一个类或类别
另一个例子:假设我们想根据天气预报和季节来预测北京的烟雾量。这将是一个回归问题。
回归:目标是预测实数
目标 - 寻找最佳航线
问题
我们的目标是分类还是回归类问题?
回答
显然是一个回归问题,因为我们想要预测的船速是一个实数。
特征
现在,我们来看一下机器学习系统的输入数据。模型需要知道我们想要了解的东西的属性,这些属性称为特性。
我们以水果为例:水果的重量和颜色都是特色。
图5:橙子和猕猴桃的不同特征
该模型可以使用这些特征来预测我们观察到的水果种类。这将是分类。
试图根据重量和颜色预测直径是一个回归问题。
目标 - 寻找最佳航线
问题
对于我们的目标,模型的特征是什么?
回答
风角和风速
训练模型
好的,但我们如何从特征到预测呢?首先,我们必须训练我们的模型。
训练分类模型
让我们继续水果的例子,我们想根据重量和颜色来确定水果的类型。首先,我们需要将颜色转换为数字。我们选择以nm为单位的光波长。绿色变为520nm,橙色为600nm。我们把两个数字都绘制在图表中。
图6:带有数据点的散点图
训练的目标是找到一条分出猕猴桃和橙子的线。该线完全是随机开始的。在每个训练步骤中,模型都试图将直线往正确的方向移动一点点。一段时间后,越来越多的水果将最终落在正确的一侧。
图7:对橙子和猕猴桃进行分类
经过5个步骤,我们对结果感到满意。训练停止,我们现在可以使用我们全新的训练模型进行预测。
训练回归模型
这遵循相同的基本原则,现在我们将根据重量预测每个橙子的价格。目标是绘制一条与我们用于训练的示例非常匹配的线。
图8:回归模型的示例
训练后,模型给出了给定重量的每个橙子的估计价格。
回到帆船上
那么考虑到风速和风向,我们如何使用机器学习模型来预测某个方向的船速?在我们开始训练之前,我们需要数据!
假设您的团队去年每次航行时都记录了风速、风向和船速。你遇到了很多不同的天气(和波浪)条件。清理完这些数据后,最终会得到一个带数字的大表。来自该数据帧的随机样本如图9所示。
图9:数据集的随机样本
在这种情况下,boat_speed是我们的目标变量。我们的输入功能是wind_speed和angle_of_attack。
在我们的课程中,我们使用船上收集的数据来训练机器学习模型。参与者将使用这些预测来制作他们自己的船的极坐标图。如前所述,这将使船舶可以自动驾驶,并在竞赛中发挥重要作用。
然后我们用帆船将它们挂在水面上测试模型。我们还与所有参与者进行虚拟竞赛,以找出最适合的模型!
总结
在这篇博客文章中,您已经发现了我们实现自主航行挑战子目标1的方法——找到最佳航线,并学习了一些机器学习的关键概念。
那么子目标2和3呢?子目标1在一篇博客文章中已经涵盖了很多内容,所以请继续关注后续的文章。
编译出品