只需两个神经元即可骑自行车

Hacker News Top 论文

摘要

一篇论文的注释版,展示仅含两个神经元的简单神经网络即可控制自行车,强调了稳定运动所需的最小条件。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/30 16:27

# 费马图书馆 | 骑自行车只需两个神经元(注释/解释版) 来源:https://fermatslibrary.com/s/it-takes-two-neurons-to-ride-a-bicycle 骑自行车只需两个神经元 MatthewCook ∗ 摘要 过去尝试让计算机骑自行车要么需要过长的学习时间(强化学习方法需要1700次练习骑行[1],却仍无法直线行驶),要么需要对要控制的特定自行车进行精确运动方程的代数分析[2,3]。神秘的是,人类在学习骑自行车时并不需要做这些。这里我们提出一个双神经元网络¹,它能让自行车沿着期望方向行驶(例如,朝目标点或沿期望路径),该方向可在运行时选择或更改。 就像人骑自行车一样,该网络对于远距离目标非常准确,但在短距离内,稳定性问题主导了行为。这不是通过显式设计发生的,而是网络控制自行车方式的自然结果。 ## 1 引言 骑自行车这项任务对人类或计算机来说都是一个有趣的挑战。我们对自己如何骑自行车并没有深入的洞察,也无法给正在学习的人提供太多有用建议。 事实上,在这个项目过程中,我有机会在计算机上骑“虚拟自行车”,并惊讶地发现它多么反直觉。我曾以为,既然非常清楚如何在现实生活中骑自行车,那么在仿真中应该不成问题。然而,在现实生活中一定有我感知到的额外惯性线索或我做出的倾斜动作,而这些在仿真中缺失,因此我必须像从零开始一样学习该关注什么线索以及如何应对。起初我甚至以为仿真器一定有bug,因为要右转时我发现必须向左推车把。当然,如果你停下来想一想,这正是正确的。要右转,自行车必须向右倾斜,而实现这一点²的唯一方法是使与地面的接触点向左移动,这需要最初向左推。但一旦自行车向右倾斜,由于其稳定性的构造,它本身会以比最初向左推更大的力将车把向右推,³因此持续温和地向左推确实会导致自行车向右转。同样地,要退出右转(或保持它),你需要温和地向右推车把。 在本文中,我们概述了我们项目的各个部分,这些部分引导我们找到了一个出人意料的能胜任的双神经元网络。这项工作不同部分可能对不同的人有吸引力。读者可以自由跳过不感兴趣的部分——论文已组织好,使得跳过后阅读后续部分时不会丧失理解。 ## 2 方法:仿真系统概览 ### 2.1 物理 为了让我们能够试验不同的自行车控制器,首先必须建立一个虚拟自行车供它们控制。自行车的运动方程有些复杂[2],因此编写一个通用的机器人仿真器似乎并不更复杂且更有用,它可以读取任意机器人的描述(由铰链式连接的刚体组成),并模拟该机器人在施加力下的运动。这包括计算每个刚体的转动惯量,模拟单个刚体在受力下的运动[5],以及在每个时间步求解方程组,以确定铰链式连接如何向机器人部件施加力,从而满足铰链的对齐和共位要求。⁴ ### 2.2 自行车机器人 有了这样一个通用物理仿真器后,我们就可以转而设置一个机器人,在本例中是一辆自行车。自行车由四个刚体组成:两个车轮、车架和前叉(转向柱)。每对相邻部件通过允许沿定义轴旋转的关节连接,车轮与地面通过要求其最低点高度为零且无水平运动(无滑动)来连接。 图1:虚拟自行车。 除了指定构成自行车的结构和连接外,我们还需要决定控制器可以获取哪些感知输入,以及控制器的输出应如何转换为自行车上的力(用机器人学术语,这个非完整欠驱动系统的传感器和执行器应该是什么)。对于我们的自行车,我们允许所有易于感知的量对感兴趣的控制器可用:位置、航向、速度、车把角度(及其变化率),以及自行车的倾斜角度(及其变化率)。对于执行器,我们允许对后轮施加扭矩和对车把施加扭矩。人类在骑行时也会很好地利用身体向一侧或另一侧倾斜,但在无人自行车上我们不会有这种控制。此外,我们不允许控制器知道自行车的具体细节,如其确切比例或部件的质量。 ### 2.3 控制器 设置好机器人自行车后,我们可以转向感兴趣的任务:为自行车设计控制器。我们希望控制器解决与人类骑自行车时相同的问题。人类知道自己在哪、朝哪个方向、速度多快、自行车如何倾斜等等,但根据经验我们知道人类不需要知道自行车的具体构造细节。 这里我们最终面临一个我们并非先验知道如何解决的问题。因此我们盯天花板思考一会儿,每当有灵感闪现,我们就基于它快速编写一个控制器。 主要有三种风格的控制器(先见型、人类型和双神经元型)引导我们得到了有趣的结果或观察,我们将在接下来的三节中讨论它们。它们都没有显著使用速度——它们都仅通过车把来控制自行车。我们将不在此讨论那些只会导致自行车每次都摔坏的控制器。 ## 3 先见型控制器:强化学习一瞥 考虑到整个系统都在仿真中,一个有趣的控制器想法是让控制器作弊,使其能够访问仿真器。这在真实世界的自行车控制器中无法做到,因此对应用没有兴趣,但我们当然可以在仿真世界中尝试看看会发生什么。 特别地,我们可以尝试以下算法用于控制器:每一步,首先仿真并比较三个动作。这些动作仅在最初瞬间车把的推动方式上有所不同:向左推、向右推、或不碰。这三个动作的其余部分是什么也不做,直到自行车摔倒。然后可以根据哪个动作使自行车保持直立时间最长、哪个动作导致向右进展最多、或任何其他决定优化的标准来比较这三个动作。在仿真了三个动作的结果后,控制器根据这些结果决定此刻做什么。(因此每个不同的标准就是不同控制器的基础。) 这些仿真在有和没有随机轻微力(“风”)施加在自行车上时都进行了尝试。最初这样做是为了使控制器不能依赖绝对完美的未来预测。这也可能帮助控制器有更“连续”的行为,因为在连续几个瞬间的过程中,它会对其每个动作的成功概率分布有一个粗略估计,从而导致控制器采取类似分布的动作。然而,这样的风实际上对结果没有显著影响。 在强化学习的语言中,这样的控制器正是您在一步策略迭代后得到的——如果您从从不碰车把的空策略开始,并在每一步允许自己三个动作(左推、右推、不推)。然后如果控制器学习该策略的值函数(实际中需要大量不碰车把的经验,但我们通过让控制器访问仿真器来模拟),它就可以贪婪地根据该值函数行动。这相当于一步策略迭代,至少对于不摔倒的目标,在一次迭代后确实得到了最优策略(即,它成功不摔倒了)。然而,它不是以常规方式做到的,比如直线骑行,而是通过用前轮做特技在近乎零速度下保持稳定性,例如通过旋转车把画圈(对于我们的自行车,车把和前轮不会碰到车架,也没有缆线会缠绕,为何不呢?)。这种奇怪行为的视频可以在以下网址看到: http://www.paradise.caltech.edu/∼cook/Warehouse/RecursiveBike.avi 尽管多次尝试制定合理值函数,我们发现很难让自行车产生合理行为。通过奖励直立状态,自行车会停止正常骑行并开始做上述特技。如果我们试图通过奖励速度来阻止这一点,自行车会左右摇摆,每次摇摆都会暂时增加速度。如果我们试图通过奖励直线行驶来阻止这一点,自行车会做得很好,但当然它会立即摔倒,因为避免摔倒需要偏离直线。当然,可以尝试这些或其他想法的加权组合,但问题开始不再是控制器需要花多长时间学习骑自行车,而是我们需要花多长时间学习如何编程控制器以使其正常骑行。正如从事强化学习的人们所指出的那样,选择一个好的值函数可能是一个非常棘手的事情。 即使我们用这种方法取得了巨大成功,它也无法立即应用于更现实的情况,因为它依赖于从仿真器获取“如果……会怎样”问题的答案,实际上是访问了一个神谕。不过,它本可以提供强化学习可以有效使用的提示。事实上,我们得到的提示是强化学习会很困难。这也是我们从Randløv和Alstrøm的出色论文[1]中得到的提示,他们尝试了各种强化学习方法让控制器学习骑自行车,但即使使用最好的方法,也需要数千次练习骑行才能学会不摔倒,再需要数千次才能学会骑向目标,而且即使在“学会”之后,控制器的行为充其量也只是像喝醉了一样。 ## 4 人类控制器 一种古老的学习方法是专家教导,例如通过示范。在这种情况下,明显的专家是熟练的人类。为此,我们让计算机显示自行车的实时图形显示,允许人类使用键盘控制踩踏和车把推动。就我而言,这导致了引言(第1页)中描述的经历,我发现控制自行车相当反直觉。⁵ 尝试学习驾驶虚拟自行车的人类控制器主观上发现,注意自行车的倾斜角度并专注于操纵这个角度非常重要。这一观察成为下面描述的双神经元控制器的基础。没有一个人类变得精通于让自行车沿精确方向行驶,而双神经元控制器很好地展示了这项技能。不能排除人类通过进一步练习可能获得这项技能的可能性。 我们试图利用人类专业知识的两种方式是:一种是在他们骑行过程中记录正在发生的事情。收集这些数据并分析其中的相关关联,发现几乎没有有用信息。 12345678910111213141516 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 12345678910111213141516 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1:t 2:x 3:y 4:ΘH航向L 5:sH速度L 6:ΓH与垂直方向夹角L 7:ΑH车把角度L 8:s_i H预期速度L 9:Τ_h H车把扭矩L 10:t 11:x 12:y 13:Θ 14:s 15:Γ 16:Α 图3:许多可供控制器使用的量之间的协方差。主对角线已被设为零以免视觉上分散注意力。控制器输出τ_h (9)与转向量 ̇θ (13)之间有很好的相关性,这似乎可以立即解决问题,但不幸的是,这种关系中的因果关系方向相反:控制器需要根据γ调整τ_h以维持稳定性,而γ (6)和 ̇θ (13)恰好强相关。(这种γ (6)和 ̇θ (13)之间的相关性可以基于最简单的离心力物理立即理解,但我们不希望我们的控制器需要任何物理定律的知识。)τ_h (9)和 ̇γ (15)之间相当有用的因果关系是可见的,但这里很少有线索提示其对成功控制的重要性。 另一种尝试利用人类专业知识的方式是让人类主观描述他们如何试图控制自行车。由于他们刚刚经历了必须学习如何做这件事的过程,他们相当能够描述自己的算法,并且结果证明他们开发了类似的技术,基于仔细调整自行车的倾斜角度。 基于人类的报告,实现了双神经元网络控制器,它几乎立即就能工作,参数很少,且对任何参数都不过分敏感。这种方法正是下一节的主题。 ## 5 双神经元网络 这里我们提出一个双神经元网络,它能在一定速度范围内胜任地操作自行车。第一个神经元的输出馈送到第二个神经元,其输出连接到执行器,该执行器向车把施加指定大小的扭矩。 作为网络的输入,我们提供期望航向θ_d,以及当前航向θ和自行车当前倾斜程度γ,以及它们的导数 ̇θ和 ̇γ。⁶ 由于问题的性质,我们将使用一个在时间和数值上都连续的网络。一个单元的输出简单地由其输入的加权和的阈值函数决定。如有必要,这可以解释为平均发放率模型,但这里我们不探讨网络真实性的问题。给定如此小的这种类型网络就足够了,似乎毫无疑问更现实的网络也能解决这个问题。 网络的任务是使自行车沿期望方向行驶。然后这可以被更高级的规划系统用来使自行车驶向目标,或者通过朝一系列航点行驶来跟随路径。 为了将自行车的航向θ设为期望值,我们需要能够控制 ̇θ。从图3我们知道 ̇θ与自行车倾斜程度γ强相关,因此我们可以尝试通过简单地控制γ来间接控制 ̇θ。⁷ 为了控制γ,我们需要控制 ̇γ。而我们的执行器,它可以对车把施加期望扭矩,恰好对 ̇γ有合理的控制。没有直接或固定的对应关系,但作为一般规则,在稳定骑行中,对车施加较大的顺时针扭矩会使自行车开始向左倾斜更多。因此,通过根据我们希望γ如何变化来设定扭矩,我们应该能够使得γ收敛到其期望值。(注意,如果实际收敛只是朝向γ期望值的某个近似值,这并没有太大区别——确切期望值对于这种控制方法成功并不关键。) 我们电路中的第一个神经元将输出期望的γ,并应用非线性以确保自行车不会试图过度倾斜。⁸ 电路中的第二个神经元将输出要施加到车把上的期望扭矩。 第一个神经元将接收θ和θ_d(可以假设它们在θ的±π范围内, ⁶ 实际上,我们将看到,网络甚至不需要使用 ̇

相似文章

生长中的 Neural Cellular Automata

Hacker News Top

本文探讨了 Neural Cellular Automata 作为一种计算模型,其灵感来源于生物形态发生和再生,展示了简单的局部规则如何导致复杂的全局行为。

无神经元智能交通——基于表格强化学习的公平地铁网络扩展

arXiv cs.LG

阿姆斯特丹大学的研究人员提出了一种基于表格强化学习的地铁网络扩展问题方法,表明该方法在性能上与深度强化学习相当,同时平均减少18倍的训练回合数和12倍的碳排放量。该方法还融入了社会公平标准,并在西安和阿姆斯特丹的真实地铁网络上进行了评估。