机器学习是一个热门话题,因此自然而然地将它用于不合适的目的,在这些目的中,更简单,更有效,更可靠的解决方案就足够了。前几天,我看到了一个说明性和有趣的示例:神经网络汽车和遗传算法。该视频演示了由神经网络驱动的2D汽车,其权重由通用算法确定。但是,整个方案可以用一阶多项式代替,而不会损失任何功能。机器学习部分过于严格。
上面展示了我使用多项式驾驶汽车的实现。我的妻子画了背景。没有寻路;可以说,这些车正沿着轨道行驶,“顺着轨道”。
我的意图不是特别选择这个项目。首先,可能的动机是希望将神经网络应用于某些事物。我自己的许多项目不过是尝试新事物的工具,因此我很同情。尽管专业设置有所不同,但在机器学习中应以比通常更怀疑的眼光看待机器学习。例如,在准随机序列会起作用时,不要使用主动学习来选择样本分布。
在视频中,汽车具有有限的转弯半径以及最小和最大速度。 (我在自己的模拟中保留了这些约束。)有五个传感器-前,对角线和侧面-每个传感器都感应到最近壁的距离。这些被输入到一个三层神经网络中,输出决定油门和转向。听起来很酷!
神经网络的关键特征是输出是输入的非线性函数。但是,操纵2D汽车非常简单,以至于线性函数绰绰有余,并且不需要神经网络。这是我的等式:
我只需要三个原始输入-前向用于油门,对角线用于转向-驾驶员只有两个参数,即多项式系数C0和C1。最佳值取决于轨道布局和汽车配置,但对于我的模拟,大多数情况下,大于0和小于1的大多数值就足够了。减少了崩溃的麻烦,而更多的是快速导航课程。
这些多项式显然比神经网络快得多,但是它们也易于理解和调试。我可以自信地说出可能输入的全部范围,而不必担心训练有素的神经网络会对未经测试的输入做出奇怪的反应。
我的程序没有做任何花哨的事情,而是生成随机系数来探索空间。如果我想为课程提供良好的推动力,则可以使用其中的数千个,并选择在最短时间内完成课程的系数。例如,这些系数为本文顶部的课程提供了快速而强大的驱动力:
许多常量可以完成跟踪,但有些常量会比其他常量快。如果我正在开发一个以此为AI的赛车游戏,我不仅会选择能够成功完成赛道的常量,而且会选择能快速完成比赛的常量。价差如下所示:
如果您想自己玩这个游戏,这里是我的C源代码,它实现了这种驾驶AI并生成上面的视频和图像:
跑道只是使用源标头中记录的颜色在您喜欢的图像编辑程序中绘制的图像。
对这篇文章有评论吗?通过发送电子邮件至~skeeto/[email protected] [邮件列表礼节],在我的公共收件箱中进行讨论,或查看现有讨论。