神经自行车:创世纪

前几天,Youtube以为我觉得观看一段名为“ AI学习玩爬坡赛车”的视频会很有趣。 这很有趣,因为在此之前的几分钟,我已经完成了该项目的下一个更改,我和我的同事们在工作与工作之间解决了这个问题。 没错,该视频中没有“ AI”-作者沉迷于Box2D吸引了观众,并对此保持了冷静。 不过,我建议将此事实视为该主题相关性的令人信服的证据,并拆卸我们的拨浪鼓。

关于任务的简要说明:车辆-在我们的例子中是Alien或带轮子的Singer缝纫机,我们简称为“ agent”-必须自始至终沿着沙丘行驶,并带有相同的名称噪声 。 这是代理在其沙箱中的外观:



触碰到轨道后方或在朝目标移动时没有表现出热情的特工将从轨道上移开。

我们将使用神经网络解决问题,但是会通过遗传算法(GA)进行优化-这种过程称为“ 神经进化” 。 本世纪初,我们使用了Kenneth Stanley和Risto Miikkulainen发明的NEAT(增强拓扑的神经进化)方法[1] :首先,他在解决国民经济的重要问题上表现出色,其次,我们开始从事该项目已经有自己的框架来实现NEAT。 因此,坦率地说,我们没有选择解决方案的方法,而是选择了一个任务,您可以在其中驱动已经准备好的任务。

该图显示了遗传算法的近似方案:



可以看出,任何体面的遗传算法都是从初始人口开始的(该人口是一组潜在的解决方案)。 我们将致力于它的创作,同时熟悉NEAT第一条原则 。 根据此原理,起始种群中的所有代理都应具有神经网络最简单的“最小”拓扑。 拓扑与它有什么关系? 事实是,在NEAT中,随着连接权重的优化,网络体系结构也在不断发展。 顺便说一下,这消除了针对任务的设计需求。 从简单的架构过渡到复杂的架构,不仅逻辑而且实用(搜索空间更少),因此您需要从尽可能少的拓扑开始-这就是该方法的作者的推理方式。

对于我们和所有类似情况,此最小拓扑是从以下考虑因素得出的。 为了做有意义的事情,代理需要:

  • 了解有关环境及其状况的信息,
  • 处理此信息
  • 与您的世界互动。

传感器起着第一个作用-输入层的神经元,我们将向传感器提供有用的信息。 输出层神经元将处理来自传感器的数据。 演员 -响应来自输出层“其”神经元的信号而执行机械动作的设备-负责与环境进行交互。 因此,构造初始配置的一般原则如下:我们确定带有传感器和执行器的位置,每个执行器启动一个神经元,然后将所有传感器和另外一个特殊的神经元- 位移神经元bias ,下面关于它)随机连接到所有神经元。输出层。 像这样:



b-偏置,s-传感器,o-输出层的神经元,a-执行器,n-传感器数量,k-执行器数量

这是我们任务的最低NS:



我们只有一个执行器-这是我们轮式创作的引擎。 它尚不知道如何射击,跳跃和弹奏烟斗。 以下值是从输出层的单个神经元提供给引擎的(将其称为层是可耻的):

f(w_b + \ sum \ limits_ {i = 1} ^ {n} {s_iw_i})

w b是从偏置到输出神经元的连接权重值,乘以任何偏置“产生”的事实,即 + 1,s i是在第i个传感器上归一化到范围[0,1]的值, wi是从第i个传感器到输出神经元的连接权重的值,f是激活函数。

作为激活功能,我们使用以下软件签名幻想:

f(x)= \ frac {1} {2} + \ frac {1} {2} \左(\ frac {x} {0.2 + | x |} \右)

-在一个狭窄的圈子中,在一位著名的神经进化论者的测试中,她表现出最好的表现[2] 。 而且,将弯曲的柔和度和该函数的图形的对称性与弯角的Leaky ReLU进行比较是没有意义的:



该图显示了试剂对活化功能的不同值的反应。 当值接近于1时,引擎将使车轮顺时针旋转,从而使药液向前加速并使壳体向后强烈倾斜,从而使头脑虚弱但勇敢的人迅速向后倾斜并死去。 值接近0时,情况相反,而值0.5时,代理电机不工作。

该图显示了偏置神经元的作用-从其到输出层神经元的键的权重与沿横坐标的偏置f(x)的大小和方向有关,如(1)所示。 图中的虚线表示在w b = -1时的激活函数图。 事实证明,即使传感器上没有信号,具有这种连接的代理也将很快返回:f(x)= f(-1 + 0)≈0.083<0.5。 通常,水平移动该功能的值可以使偏置连接微妙地(根据重量而适当地变厚或变厚),从而将发动机对所有传感器值的反应及其连接的重量立即调整。 似乎已经在搜索空间中添加了新的维度(必须搜索w b的“正确”值),但是以附加自由度形式获得的好处超过了此类位移的可能性。

好吧,我们介绍了未来初始种群的主体神经网络。 但是NEAT是一种遗传算法,它适用于基因型 - 基因型是从中形成网络的结构,或更普遍地,是在解码过程中的表型 。 由于我们是从表型开始的,所以我们将向后做所有事情:尝试以基因型编码上面介绍的网络。 在这里,您不能没有第二个NEAT原理 ,其主要本质如下:在基因型中,除了神经网络的结构及其连接的权重之外,信息还存储在其所有元素的起源历史中。 除了这个历史方面,表型几乎是“一对一”地编码在基因型中的,因此,我们现在将用神经网络的片段来说明第二个原理。

这个原则的价值很难被高估-它为代理人提供了有性生殖的可能性。 这个话题非常微妙,因此我们将首先考虑无性繁殖。 发生的情况是这样的:复制代理的所有基因,对它们进行几种类型的更改之一- 突变 。 在我们的NEAT版本中,可能存在以下突变:

  • 连接权重变化
  • 取消连结
  • 添加链接
  • 神经元插入。

前三种类型的突变简单易懂,无需进一步说明。 下图显示了神经元的插入,它总是代替现有连接发生,删除连接,并在其位置出现两个新连接:



这里h是一个 隐藏的神经元。

有两个媒介参与性繁殖或杂交 -父母,因此第三个媒介出现-一个孩子。 可以说,在孩子的基因型形成过程中,发生了含义相同的父母的基因或基因组的交换。 第二个原则就是您需要搜索具有相同含义的基因。

想象一下,我们想交叉代理具有上述列表中不同系列突变的基因型:



寻找在父母双方的拓扑结构上很常见的一些片段,并从胎儿的基因型中取出一部分,这似乎是合乎逻辑的。 这将很难做到,即使在一般情况下NP也很困难,但假设我们设法做到了。 在这种情况下,我们发现在右侧父级中,有两个子图与左侧父级的图同构。 在下图中,这些子图的弧以不同的颜色突出显示:



与左亲本基因重组选择哪一种?

让我们回顾一下这些基因型出现的历史:



如预期的那样,父代理的两个祖先都以最小的NS(T 0 )开始。 他们的基因组在那里发生了突变,并且在时间T 1的时刻,隐藏的神经元被插入到左父母祖先的连接s 1- > o中。 在这个戏剧性的时刻,编码键s 1- > h和h-> o的基因在左父母的祖先中找到了它们的含义: 链接s 1- > o的取代
右父母在时间T 2的基因型中的基因s 1- > h 1和h 1- > o具有完全相同的含义。 我们的祖先的进一步命运对我们并不特别感兴趣-我们已经知道该与什么混合:



如何正确书写遗传历史,将有可能在下一次发现,特别是由于我们在该领域有一些小发现,因此它们与原始技术对稳定繁殖方案的适应有关。

是时候四舍五入了。 本文从Youtube开始-我们将完成它。 在早期版本的模拟器中,编写用于生成轨道的代码的同事以无底深渊结束了一切。 在车轮下存在地球穹隆的情况下,已经进化了很长时间的神经网络对其小宇宙的这种设计的反应可能被称为“模板破坏”:


可以在[3]中找到有关网络博物学家生平的其他轶事故事的大量信息。

资料来源


[1] KO Stanley和R .. Miikkulainen,通过增强拓扑进化计算发展神经网络,第1卷。 10号 2,第 99-127,2002年。
[2] C. Green,“ SharpNEAT中激活功能的回顾”,2017年6月19日。
[3] J. Lehman等人,“数字进化的惊人创造力:来自进化计算和人工生命研究社区的轶事合集”,arXiv:神经与进化计算,2018年。

Source: https://habr.com/ru/post/zh-CN426783/


All Articles