在机器人对世界进行建模时,不可避免的需要识别和编码各种抽象的概念。 即使是描述最最基础的事物,都“隐含”有抽象的概念。 比如四维时空中的一个点,它至少包含四个维度上离原点的距离,即坐标;还包含N个基础属性的强度。 由此可以看出,抽象概念并不是主体凭空想象出来的,而是客观世界的一部分。 虽然抽象概念不能在时空中独立存在,但是时空中却处处都出现了抽象概念。
对于很多人来说,一提到抽象概念,就会想到数学,想到各种枯燥,烧脑的概念。 确实数学的研究对象基本上都是抽象概念,如实数,计算,集合,映射,概率,拓扑结构等等。 实际上,除了数学之外,人们日常生活中识别和应用了大量的抽象概念。 比如在社交生活中,我们会认为这个人很正直,那个人很有激情,另一个人很凶等等。 这里正直,激情,凶都是抽象概念。 甚至很多我们觉得很具体的概念,其实也是抽象概念,比如我们对事物的分类。 水果是对很多具体的物体的统称,但水果本身是一个抽象的概念,是一个集合。 人们对抽象概念的识别,最终的目标还是应用。 比如我们会根据对他人品质的判断来调整自己的行为,会根据对物品类别的理解,来判断其应用价值等等。
识别和表示抽象概念
集合是一种最基础的抽象概念,几乎所有的抽象概念都可以基于集合来定义。 我们以集合为例,梳理一下机器人可以如何识别客观世界中的集合。
如果机器人需要表示客观世界中两个不同的事物,那它们必须是可区分的,因此,其对应的编码也应该是可区分的。 那现实中的两个事物形成了一个集合Reality,表示空间中的“两个编码”也形成了一个集合Notation。 机器人识别Reality并记录Notation的过程实际上是一个从Reality到Notation的映射过程。 整个映射过程分为两步:
- 现实中的事物Reality与机器人的“感官子系统”在物理定律的约束下,产生一系列的相互作用,使得机器人接收到了相关的物理信号,并且不同事物的信号是可区分的。
- 机器人的“认知子系统”基于接收到的信号进行相应的计算,得到不同事物的内部编码,从而得到Notation 集合
“无限”集合
“无限”集合是一个非常重要的抽象概念,在日常生活和科学研究中都会遇到“无限集合”,比如自然数,宇宙的“直径”等等。 对于有限的集合,我们可以简单的用列表来枚举,即我们只需要给每个集合中的元素赋予一个不同的id就行了。 如果要表示集合元素很多或者是无限多是,显然我们就不能使用枚举来表示这个集合了。 这时候就需要使用规则来表示了。 规则实际上就是计算,而计算本身也可以用集合来表示。 但要表示无限的集合,最终一定需要依赖到需要用无限集合表示的计算。 所以最终问题就转化为如何表示需要无限集合的计算了。
一种有效的方法是使用递归规则:
- 先枚举若干个集合中的元素,(生成元)
- 再使用若干条规则来从集合中已有的元素生成“新元素”,(生成法则)
- 通过不断对新生成的元素递归应用规则可以生成无限多的元素。(递归运用)
这样无限的集合就可以使用若干个生成元和有限的生成规则来表示了。 比如自然数集可以用以下的方式来表示:
- 0 表示第一个自然数
- 如果x是自然数,那么s(x)也是自然数
这样我们就可以对所有的自然数进行编码了:
注意,这里使用规则可以生成无限多的元素并不是主体真的去执行无限多次规则。而是主体发现一个集合可以这么表示时,就知道这个集合是个无限集合。那么无限集合的必要特性,这个集合都具备。
如果机器人需要使用递归规则表示无限集合,那么对集合元素的编码必须是结构化的,当然最好是同构的,这样才能让递归规则应用于所有生成的元素。 同时机器人还需要理解和应用“变量”,因为规则本身的描述和应用需要声明“变量”,对“变量”赋值,并通过“变量”返回结果。
还有一种近似的表示无限集合的做法就是利用事物的特性来从一个“无限集合“映射到另一个”无限集合“。 比如照相机可以把“无限”的场景视图映射到“无限”的二维图像;人类的感官系统可以把“无限”的现实状态映射大“无限”的主观认知状态。
现实中还有很多无限相关的概念都可以用类似的规则来表示,如无穷大,极限,连续性等等。
多重表示机制
一个抽象概念可以用不同的编码机制来表示。 比如人类编码自然数就使用了很多不同的表示方式。 小朋友刚学数数时,用手指来表示自然数。 人们口头交流时,使用的是不同语言对应的声音信号来表示自然数。 计算机系统中,使用二进制来表示自然数。 数学教学中,经常用数轴上的点来表示自然数。
显然不同的表示方法在不同的应用场景中的效率是不同的。 为了更高效的表示和应用抽象概念,机器人也需要能够使用不同的方式来表示同一个抽象概念。 同时也需要知道如何在不同的表示方式之间转换。 最后还得知道什么场景下应该使用什么方式表示更高效,并作出相应的转换。