最新网址:www.xianqihaotianmi.org
亲,双击屏幕即可自动滚动
第一卷少年游 第八十七章自生
    绿色燕子本写完以后,江遥第二天还是照常把它带进了教室。

    她已经没有地方可写,最后一页也只剩日期和那个关于“没有任何部分知道全局,整体还能不能知道什么”的问题,可那本绿色封皮的小册子在书包侧袋里待了几年,早晨收拾东西时,她仍然顺手把它塞了进去。走到楼下才反应过来,又懒得返回去换新的。训练中心门口的雪已经化得差不多,台阶边积着一层被踩脏的灰白冰碴,保洁阿姨拿着硬扫帚一下下敲碎。江遥绕过去时,对方提醒她小心,她答了声谢谢,进门后才发现核心组今天换了教室,十五个人被带到楼下一间平时不用的计算机房。

    每台电脑旁边都放着一张纸,上面只有四条规则。

    第一,屏幕里有两百个小点,每个点只能看见自己附近很小的一片区域。第二,它们可以向前移动,也可以略微调整方向。第三,如果附近的小点太少,它会靠近别人;太挤,它会避开;如果距离合适,则尽量让自己的方向与附近同伴一致。第四,没有领头者,也没有任何一个点知道整个屏幕是什么样子。

    顾老师等所有人看完才让他们运行程序。

    最初几秒,屏幕里像撒进一把受惊的芝麻,两百个小点各走各的,碰到边缘又重新转向。十几秒以后,某些小点开始朝相近方向移动,几团短暂的队伍出现,又因为互相碰撞散开。再过一会儿,整个画面忽然安静了许多,原本杂乱的运动自行聚成三四个方向一致的群体,一群向左上,一群沿着边缘转弯,还有一大群绕成一个缓慢旋转的环。

    有人第一反应是:“鸟群。”

    顾老师问:“哪里有鸟?”

    教室里笑了一阵。

    “那像鱼群。”另一个人说。

    “哪里有鱼?”

    这次没人继续抢答。大家当然明白屏幕上没有动物,只是两百个按照几条局部规则运动的小点,可一旦它们开始成群转弯,人的眼睛几乎无法不把它们看成某种活着的东西。江遥盯着那个旋转的环看了很久。没有任何一个小点知道“我们现在排成了一个圆”,更没有一只负责发布命令,可从屏幕外面看,一个稳定的形状确实出现了,而且还能维持相当长时间。

    顾老师让他们把第一条规则关闭,也就是取消“离别人太远时靠近”的倾向。群体很快散掉;恢复以后,再关闭“太近时避开”,屏幕里又迅速挤成几个密得几乎重叠的团块。最后只留下“尽量和邻居方向一致”,系统仍会偶尔形成局部队伍,却很难维持整体结构。

    “哪条规则制造了鸟群?”顾老师问。

    这一次没人急着回答。

    江遥把三条规则重新读了一遍。每一条单独看来都不像“形成鸟群”的规则:靠近别人只是不要走散,避免太近只是别撞上,跟附近的人朝相似方向走也只是局部模仿。可三件小事放在一起以后,屏幕上就出现了原本没有直接写进去的东西。她想起前一天的蚂蚁,那里也是类似情形,每只蚂蚁只走路、留下痕迹、闻附近的痕迹,却会形成一条比较好的路线。今天更加直观,因为群体甚至长出了形状。

    陆徊把其中两个参数调得很极端,屏幕上的点马上从整齐队伍变成乱窜。他说:“所以不是规则一加就行,强度也有范围。”

    江遥点点头。她把“跟随邻居”的力量一点点增加,发现系统并不是越整齐越好。力量太弱时大家各走各的,适中时可以形成几支稳定队伍,继续增强以后,整个系统反而变得迟钝,一旦形成一个方向就很难改变。顾老师随后在画面右侧突然放进一个红色障碍区,正常参数下的群体会在接近障碍时逐渐分流、绕开,跟随力量过强的一组却因为过分坚持原有方向,大量小点直接撞了进去。

    简宁看着那一幕说:“太团结也不行。”

    这句话引来不少笑声,江遥却在草稿纸上记了下来。她没有立即把它上升成群体、组织或者社会的比喻,只觉得这个现象本身已经足够有意思:一个让系统产生秩序的机制,如果强过头,也可能让系统失去改变方向的能力。所谓“好规则”并不是越强越好,它总和环境、速度、邻居范围以及外部变化绑在一起。

    上午真正的任务是让十五个人自己设计一种新环境,然后预测这群小点会发生什么。有人加入食物源,有人设置捕食者,有人改变屏幕边界,江遥这一组却做了一件看起来很小的修改:把两百个小点分成两类,两类遵守完全相同的规则,只是“看见邻居”的距离不同。一类眼睛看得近,只根据身边很少几个点行动;另一类能看到更大的范围,可以同时受到更多同伴影响。

    他们原本只是想知道“看得远是不是更容易形成大群体”,第一次运行结果也大致符合预期。远视野的小点更快形成统一方向,近视野那一组则分成更多小队。可把障碍加入以后,情况突然反过来了:大群体遇到障碍时调整较慢,小群体反而更灵活,有些从左侧绕,有些从右侧绕,虽然看上去更乱,却更快在障碍另一边重新汇合。

    沈策说:“那到底哪个好?”

    江遥盯着两段回放:“可能这个问题本身就没有固定答案。看得远会让大家更快一致,看得近会让局部更灵活。”

    “可以两个都有吗?”

    方禾已经开始改代码:“混起来?”

    这一下比原来的任务有趣得多。他们把两类小点混在一个系统里,不再分成两支队伍。最开始的几次运行没有明显优势,有时甚至更差,因为两类小点影响范围不同,局部会产生奇怪的拉扯。可当参数调整到某个范围以后,一种新的结构开始出现:视野较远的个体像是帮助群体维持大方向,视野较近的个体又让队伍在障碍附近保留足够的局部调整,整体既不会太散,也不会过分僵硬。

    韩思遥若是在,大概会说这是“既要又要”,江遥想到这里笑了一下。

    顾老师走到他们身后,看了一会儿,没有问结论,而是问:“是不是必须真的存在两种个体?”

    江遥没听明白。

    “也可能是同一个个体,在不同情况下改变自己看多远。”顾老师说完便走了。

    五个人安静了几秒。

    这个改动非常小,只要让“邻居范围”随着局部拥挤程度或环境变化自动调整即可,可问题突然从“不同个体如何合作”变成了“一个个体能不能根据环境改变自己的规则”。江遥没有马上去写程序,她先问自己:如果每个小点不仅遵守规则,还能根据最近发生的事情调整规则,那么最终那些群体结构还是由程序员设计的吗?显然底层机制仍然是人写的,可具体什么时候看远、什么时候看近,甚至最终会形成什么样的队伍,却可能不再由人直接指定。

    她第一次隐约碰到一个比“涌现”更麻烦的问题。

    如果一个系统的结果不是人一笔一笔设计出来的,而是许多局部规则和环境互相作用以后自己长出来,人到底应该把哪一部分称作“设计”,哪一部分称作“学习”,又从哪一步开始愿意承认它产生了某种属于自己的结构?

    这些词她都没有写进报告。她只在新拿的一张普通草稿纸上写了三件事:固定视野、两种视野、可改变视野。然后在第三行旁边打了一个很大的问号。

    中午回宿舍时,韩思遥正坐在桌边做普通组的训练卷。

    核心组和其他学员的课程已经开始真正分开。上午江遥他们做群体模型,普通组则上了一节光学专题。韩思遥过去几天表面上没怎么提这件事,可两边作息一错开,差异便很难装作不存在。江遥进门时,她正好抬头看了一眼江遥手里的计算模型讲义,问:“今天又玩什么了?”

    “很多小点乱跑。”

    “就这个?”

    “最后自己排队。”

    韩思遥接过她手机里那段动画,看了十几秒,第一反应果然是:“像鸟。”

    江遥笑:“老师今天专门问,哪里有鸟。”

    “你们老师很烦。”

    “确实。”

    韩思遥又看了一遍,把手机递回来,没有继续问。江遥却能感觉到她想知道更多,只是最近不太愿意显得自己在追着核心组课程走。两人一时都没有说话。简宁还在食堂,宿舍里只有暖气的轻响和走廊偶尔传来的关门声。

    过了一会儿,韩思遥自己开口:“下轮还有一次重新分组。”

    “嗯。”

    “我要再试一次。”

    江遥说:“好。”

    只有一个字,却比“你肯定能进”真实。韩思遥看了她一眼,似乎本来准备防着某句安慰,结果没等到,反而笑起来:“你现在确实会聊天一点了。”

    “谁教的?”

    “被骂出来的。”

    两个人都知道她说的是谁,也都没有继续。

    江遥下午没有核心组课程,陪韩思遥去楼下买了新的笔芯。训练中心旁边的小店东西不多,柜台边摆着一叠最普通的硬皮本,绿色只有一本,颜色却和她那本燕子本差得很远。韩思遥随手拿起一本问她是不是该换本子,江遥想了一会儿,最后拿了最普通的灰色。没有图案,没有燕子,也没有任何纪念意义。

    “你怎么不挑个好看的?”韩思遥问。

    “写完再说。”

    “写完它就好看了?”

    江遥想了想:“可能更难看。”

    老板听见她们说话,抬头笑了一下。

    ---

    原既白第一次把自动测试程序接进完整训练流程时,系统连续跑了六个小时,然后因为磁盘写满停了。

    宋弈第二天早上打开机器,看见终端里一串错误信息,站在机房门口沉默了很久,最后对原既白说:“我们成功造出了一个非常勤奋的垃圾制造器。”

    六个小时里,程序生成了四十多万张中间图片。绝大多数没有任何长期价值,只是为了搜索某个方向临时产生,原本应该测试完便删除,可他们为了以后复盘,每一步都先保存下来。单张图片很小,几十万张堆在一起却迅速吃光了空间,后面的日志也因此没能完整写入。更糟的是,最有价值的最后一批测试恰好只剩结果,没有保留生成过程,导致他们知道模型在某类变化下突然失效,却不知道测试器具体是怎么走到那里。

    从理论上看,这个问题很低级。

    低级到原既白一开始甚至有点不愿意承认它值得讨论。可他花了一个上午以后发现,低级并不代表容易消失。只要程序真的长时间运行,存储、日志、失败恢复、重复数据、任务中断都会出现。一个想法在纸上只需要一句“自动生成测试”,变成真正可运行的系统以后,却必须回答几十个这种毫无诗意的问题。

    宋弈建议简单点,只保存最终失败样本。

    原既白摇头:“那就不知道它怎么找到的。”

    “全保存磁盘又会爆。”

    “所以分层。”

    他这一次没有先画一个庞大的统一架构,而是从最实际的需求开始拆:普通中间样本只留统计,不留图片;出现模型输出显著变化时再保存关键节点;如果某条搜索路径特别异常,则把前后若干步完整保留。程序失败后要能从最近状态恢复,日志必须和模型版本绑定,否则下次换模型以后结果无法比较。

    宋弈听了一会儿说:“你现在终于开始像一个干活的人了。”

    “以前不像?”

    “以前像来给干活的人设计宇宙的。”

    原既白拿手边一本书砸他,没砸中。

    这套并不漂亮的改造用了两个晚上。第二次长时间运行时,程序没有再因为磁盘问题停掉,却出现了另一种故障:其中一个生成任务卡死,占着计算资源不释放,后面所有任务排队等待。原既白起初想追根究底找出那一个任务为什么卡住,宋弈却坚持先给所有任务加超时机制,超过一定时间直接杀掉并记录。“根因以后再查,”他说,“总不能一个人堵厕所,整栋楼都不上班。”

    这个比喻把原既白说服了。

    过去的他会本能地觉得,每个异常都应该先被理解,再决定怎么处理;真正运行的系统却等不起完整理解。你可以暂时不知道某个罕见任务为什么死掉,但必须先保证它不会拖死所有其他任务。工程不是放弃真相,而是在真相还没有完全到手以前,先让系统活着。

    叶老师远程看他们的新版本时,注意力甚至没有先放在算法上。他看了任务队列、日志策略和恢复机制,问:“如果明天模型换掉呢?”

    原既白说:“测试接口不变。”

    “数据格式换呢?”

    “转换一层。”

    “测试器自己升级?”

    “版本单独记。”

    “如果旧结果不能直接和新结果比?”

    原既白停了一下:“那就明确不能比。”

    叶老师笑了:“不错。很多系统最后不是死在不会算,而是死在大家假装不能比的东西还能比,已经变的东西还没变。”

    视频结束以后,原既白没有马上关掉电脑。他忽然看见自己这几个月真正学到的东西,和最早想象的不太一样。最开始他以为机器学习的难处主要在模型本身:结构够不够好,准确率够不够高,能不能找到更一般的规律。后来问题不断向外扩散,数据从哪里来、模型究竟看见什么、换来源为什么失效、测试怎样设计、目标如何被钻空子,到现在甚至包括一个任务卡死以后系统能不能继续跑。

    高层结构仍然重要。

    可世界并不会因为你找到了一个好结构,就自动把电源、磁盘、接口、人员和时间都整理好。

    那天晚上他离开机房时,县城突然降温。车棚顶上结了一层薄霜,自行车座摸上去很凉。原既白戴好手套,手机正好震了一下,是江遥发来一段小点自动成群的动画。

    他站在车棚下面看完。

    第一条回复是:“规则是什么?”

    江遥把三条局部规则说了一遍,又提到两种视野混合以后出现的效果。原既白很快问:“有没有一个全局目标函数?”

    “没有。”

    “那怎么判断哪个群体更好?”

    “我们自己定义环境任务,比如避开障碍、保持队伍、重新集合。”

    原既白继续问:“那还是人定义什么叫好。”

    江遥看见这句话时正在宿舍泡麦片。她想了一阵,回:“对。至少现在是。”

    原既白骑车出了校门,等红灯时又看一遍。这个答案没有试图把今天的群体模型吹成某种真正自主智能,也没有因为“没有领头者”就直接跳到“系统自己有意志”。它仍然只是一个很简单的模拟,可正因为简单,一些边界反而看得清楚:局部规则可以让人没有直接设计过的整体行为出现,却不意味着系统因此拥有自己的目标。行为可以自发生成,目标从哪里来,是另一层问题。

    他回:“这个区别重要。”

    江遥发来:“我也觉得。”

    接着又是一条:“但是如果以后它能自己改规则呢?”

    原既白本来已经准备收手机,看到这句又停下脚。

    如果系统不仅按照人写好的规则行动,还能根据环境改变自己的规则,事情确实更复杂;可就算如此,改变规则的方式也仍可能来自更上一层的人类设计。继续追问下去,似乎总能向上找到一个被预先设定的边界。可人本身又怎样?人的基因、身体、教育和社会也给了大量边界,我们却不会因此简单地说人的所有选择都只是别人写好的程序。

    这个类比显然不能直接成立。

    原既白没有急着沿它往下走,只回了一句:“要先问它能改到哪一层。”

    江遥看着这句话很久。

    她打开新买的灰色本子,在第一页最上面写下日期,然后把原既白这句话稍微改了一下:

    **一个系统能够改变自己的哪一部分?**

    写完以后,她没有继续解释。

    第二天的核心组课程却完全没有人工智能。

    整整一个上午都是传统电磁学训练,而且难得让人烦躁。简宁状态很好,许观澜依旧稳定,江遥第二题中途算错一个符号,检查了十几分钟才找到,最后只做到全卷第九。她已经不会因为连续几次开放课表现突出,就觉得这种成绩有什么不合理。核心组里很多人仍然比她熟练,某些题型甚至明显强于她。一个人在新问题上能重新表示,并不意味着旧问题就可以不练;未来要走到真正没有路的地方,首先得有足够多已经存在的工具可用。

    下午顾老师却把上午那道最传统的电磁题重新拿了出来。

    他没有讲答案,而是把条件一点点拆掉:先拿掉理想导体,再让边界变得不规则,再让材料参数随位置改变,最后问大家,当熟悉的对称性全部消失以后,还剩下什么办法。

    教室里开始安静。

    上午那些依靠漂亮技巧很快做完题的人,也不得不重新回到最基础的关系上。简宁试了两条路径都不顺,陆徊开始画局部场线,江遥则盯着那张已经变得很丑的图看了很久。她没有立即寻找新的公式,而是先问自己,原题里究竟哪些东西只是因为环境漂亮才成立,哪些东西就算边界变丑也不会消失。

    她慢慢圈出了三个关系。

    不是答案。

    更像骨架。

    顾老师从她身后走过,没有停。

    江遥继续往下推,第一次方案失败,第二次也失败。到第三次时,她发现如果把整个区域一次性求解,问题几乎不可处理,可如果先分成许多很小的局部,在每个小地方只处理附近关系,再让这些局部互相传递信息,事情似乎又能往前走一点。

    这个想法当然远没有形成完整方法。

    她甚至没有把最后一页做完。

    可下课铃响以后,她仍坐在那里,又画了几格。

    很多年以后,她会接触远比这复杂的数学、算法和人工智能,也会知道把大问题拆成局部计算、让局部交互逐渐形成整体结果,有无数成熟而深刻的理论传统。此刻的她什么名字都不知道。

    她只是第一次觉得,上午屏幕里那群没有领导者的小点,和下午这些彼此只需要交换附近信息的小区域之间,似乎隔着一条很远、却又未必完全无关的路。

    江遥没有把这个念头写成结论。

    她只是把那几格又画大了一点。

    窗外天已经快黑了,教学楼玻璃上映出十五个人低头收拾书包的影子。有人讨论晚饭,有人抱怨上午第二题,有人问明天是不是又要跑操。江遥合上灰色本子,最后一个离开教室。