从零开始学AI:2-2—设计智能体
AI的发展,就像从生命诞生之初到现在的演化过程一样。从使用电信号的高和低来传递0和1的信息开始,一直到如今最具智能的大语言模型,人类用短短的百年时间走完了生命从最原始的埃迪卡拉生物到智慧生物产生的数十亿年的漫长进程。也许正是因为有着生动的例子,人类设计智能体的方式总是能找到现有生物的影子。例如简单反射型智能体与(非)条件反射;再比如学习型智能体与大脑的学习能力。这些纷繁复杂的设计总是能够抽象出以下的基本结构:

欸,上面的图和上一节的这张图实际上是一个东西:

这里想强调的其实是智能体程序和架构之间的关系:智能体程序需运行在某种具有物理传感器和执行器的计算设备(也就是智能体架构)上。例如说我们人类,有五官,还有温度、触觉、痛觉等各种感受器。人类使用这些感受器感受环境的变化,然后使用神经系统处理感受到的信息,转换成动作指令,最终下发到运动器官。人类之所以为人,不仅是因为它有鼻子有眼,四肢健全,还因为它拥有灵魂————经过数十亿年演化出的极其复杂的“智能体程序”。下面就由简单到复杂介绍几种智能体程序。
最trivial的智能体程序————表驱动程序
所谓表驱动,是指智能体程序以所有可能的感知序列为定义域,然后为这些自变量设定好取值。这个程序设计原理最简单,但是要求极高,大多数情况下是不现实的方式。以设计下国际象棋的机器人为例,如果遍历所有棋局的可能性,需要将10^150种感知序列都找到合理的解法。这个数有多大呢?据科学家们推测,目前可观测宇宙中所有原子的数量也“只有”约10^80个。也就是说,即便宇宙中每一个原子都编码了一种感知序列,也无法满足存储表驱动国际象棋机器人所需要的所有存储需求。
因此AI的关键挑战是找出编写程序的方法,尽可能从一个小程序,而不是巨大的表中产生理性行为。
膝跳反射————简单反射型智能体
我们小学二年级就知道,在膝关节保持弯曲时,对着自己的膝腱轻轻地敲击一下,我们的小腿就会不由自主地急速前踢。在生物学中,我们管这类不受大脑控制的反射叫做“非条件反射”,而巴普洛夫与狗狗的故事则是条件反射的经典例证。人类设计智能体时,有时也会采用类似的方法:不管前置条件如何,只要接收到某个信号,智能体就需要做出对应的动作。这种智能体程序的结构如下图所示:

可以看到,简单反射型智能体的世界非常单纯,它“活在当下”,对世界的认识不够立体。此外,在传感器不能对环境充分探测时,它对于世界的认识将会局限于它当下的探测结果,对于稍微复杂一些的情况就会出现“卡死”的情况。例如我之前用过的一款扫地机器人,它就经常会卡在一条死胡同里原地转圈。经过观察,我发现它没有摄像头。只有在“咚”地一声撞上障碍物后,它才知道此路不同。此时它会后退一小截,然后原地顺时针旋转90度。这显然就是简单反射型智能体,它对环境的适应能力非常的底下。
随机化操作可以解决智能体的卡死状态。但是我们有更有效,更智慧的解决方案。
更好地认识世界————基于模型的反射型智能体
简单反射型智能体的缺陷在于,它无法深入了解现在的世界是什么样子,从而做出合理决策。那么是不是可以维护一个依赖于感知历史的内部状态,从而反映当前未观测到状态的某系额方面?智能驾驶实际上就采用了类似的解决方案。例如:如何判断前车是否刹车?首先需要根据车头摄像头传回的图像,判断是不是车辆边缘的两个尾灯(刹车灯)同时亮起,还要判断前车的刹车灯何时亮起,是否在进行刹车,还需要考虑如何识别雨天、雾天等特殊气候条件下传回的图像。
这种智能体需要维护的内部状态信息会随着时间、世界以及智能体的动作发生改变。因此更新这些内部状态需要在智能体内部维护两种知识:一种是转移模型,用于描述“世界如何运转”以及“我的动作如何影响世界”;另一种是“传感器模型”,用于描述“世界状态在传感器中如何反映”。这种智能体程序的结构如下图所示:
