GMIS:将所有设备变成机器人






4.67/5 (8投票s)
通用机器人操作系统
1. 引言
通用机器智能系统(以下简称“GMIS”)是一个通用的机器人操作系统。通过使用准自然语言,它让普通用户能够自由地以编程方式驱动机器人工作,以满足用户的个性化需求。
与现有操作系统不同,GMIS不再管理硬件,而是专注于设备的逻辑行为的智能。它将计算机行为(执行单元)的粒度从应用程序级别降低到功能级别,以便任务逻辑可以按需实时编译。
在此基础上,我们实现了使用准自然语言来驱动GMIS,这意味着普通用户将能够自由地实时控制机器人的行为。我们只需像与Siri交谈一样,GMIS就会像程序员一样执行。
更重要的是,GMIS的所有行为都可以组装成逻辑树来执行。通过这种方式,我们可以轻松实现逻辑、记忆、学习、预测、分工等的动态重构,这些都是实现强人工智能的极其重要的特征。我们相信没有其他替代解决方案。
为了验证这一理论,我们制作了一个原型,并且我们相信我们已经得到了我们想要的东西。
通过GMIS,我们可以将任何基于现代操作系统的设备变成机器人,包括但不限于计算机、移动设备、家用电器、汽车、飞机、各种工业设备和军事设备等。机器人时代将更接近普通用户。
2. 背景
目前机器人硬件发展迅速,但传统的鼠标+菜单或遥控操作模式极大地限制了机器人的实用价值,解决这个问题的唯一方法是在人工智能方面取得突破。
自1956年以来,尽管我们有各种人工智能理论,但实际上没有一个成功。
一种更广泛使用的理论是所谓的神经网络算法,声称模拟了人脑神经,它造成了很大的误导,让人们认为只要有足够的计算能力,我们就能达到与人类一样高的智能。
事实上,我们尚未完全理解神经是如何工作的。从技术上讲,这种算法是一种常见的数据分析和处理手段。就像我们使用的其他算法一样,它能解决一些应用问题,但对实现真正的智能没有更多帮助。
要实现真正的智能,我们首先必须理解智能的本质是什么。
简单来说,我们相信智能源于某个代理,而非算法。河流最终流入大海并非因为它能找到通往大海的路,而是重力与环境相互作用下的必然结果。一个人看似拥有智能并非因为他天生就具备知识,而是他的本能与客观环境相互作用下的必然行为。
因此,所谓的智能无非是代理与客观环境之间的互动。拥有某种先天能力或本能的代理决定了与客观世界互动的程度,也决定了它所能拥有的智能程度。
人工智能的本质是尝试创造一种具有某些本能(器官)的代理,直到它满足我们的要求。
此外,当代理与客观世界交互时,如果产生了行为-反馈循环,并且该循环能够自我维持,我们就说这个代理具有自主智能。
基于以上观点,我们将一个完整的机器人设计分为两部分:一部分更侧重于与硬件相关的一面,它根据具体的应用领域决定机器人应该具备哪些本能(器官),并使机器人种类多样化。另一部分可以设计成一个统一的通用系统,用于处理所有输入和输出消息,驱动机器人的本能与客观世界互动,并获得我们想要的循环。这就是GMIS的设计目标。
当接收到一种信息时,GMIS会决定如何利用该信息将本能编译成逻辑行为,以及如何执行这些逻辑行为,以实现人类大脑所表现出的一些特征,例如动态逻辑重组、逻辑重入、记忆、预测和学习等。
更重要的是,GMIS的逻辑行为可以给出信息的相应逻辑上下文,这是智能交互的先决条件。从此以后,机器人处理信息不再是为了取悦人类,而是为了提供自身行为的基础。
如果我们使用自然语言作为输入信息,那么普通用户就可以使用自然语言来驱动机器人满足他们的需求,而不必学习专业的编程。这将为机器人进入普通家庭打开大门。
统一系统意味着基于GMIS的机器人具有互联互通、相互学习和进行逻辑分工的能力。
如果我们制造的系统,其本能(器官)与人类相似,那么就有可能实现与人类非常相似的自主智能。
3. 定制本能
现在我们已经有了一个GMIS原型,这个原型将帮助我们验证上述观点。
通过这个原型,我们可以将基于现代操作系统的硬件变成机器人。要实现这个目标,我们首先需要为设备定制一些本能。
这里的“本能”指的是硬件的一些基本行为或功能,它们可以组合起来实现其他更复杂的动作。
从程序员的角度来看,本能和函数的区别在于,函数只是一段对程序员有意义的代码,而本能是对机器人本身或其用户有意义的行为。换句话说,一个函数可以是一个本能,但一个本能可以是一个包含许多函数的程序。
虽然本能可以被视为一种应用特性,但它通常是通过特定的硬件(器官)作为载体来实现的。例如,如果一个机器人具有行走能力,它必须具有类似于腿的硬件特性;如果机器人想听声音,那么它必须具有类似于耳朵的器官。
机器人应该拥有哪些本能取决于机器人的使用目的,但数量应尽可能少,因为它与大脑的效率成反比。
一般来说,专用机器人应具有极少的本能,因为我们更注重效率而非智能,有时甚至不需要与人类用户交互,这类机器人将是机器人种类中的大多数。
GMIS支持向下兼容。机器人始终具有相互通信的能力,因此有望在未来成为物联网的统一标准。
只有极少数机器人应该拥有类人智能,它们是人工智能领域最复杂的机器人之一,也是最大的挑战。
基于这个目标,我们在运行Microsoft Windows操作系统的PC上定制了GMIS原型的本能。当然,这里的“定制”并不是指改变PC硬件或给它一条腿,而是使用操作系统下的一些软件功能作为它的本能,通过这些本能,我们可以进行一些数学运算、内存、逻辑控制和自然语言理解等方面的演示,从而验证GMIS的设计理念。
如果它运行良好,我们唯一需要做的就是为其他基于GMIS的机器人添加特定的本能(器官)。
以下关于GMIS的讨论均基于定制原型。本能的详细信息此处不列出,您可以在此原型的手册附录中找到它们。
4. 使用准自然语言驱动
如上所述,要自由使用机器人,我们必须允许用户使用自然语言驱动机器人,并且机器人能够将语言的含义编译成自身的逻辑行为来执行,我们可以说这是GMIS的核心目标。
目前,也许我们无法让机器人直接理解已经进化了数万年的人类自然语言,但我们至少应该尝试让它理解准自然语言。
所谓的准自然语言是指自然语言中最小的子集,其语法尽可能简单,但其用法和形式应尽可能保持与普通自然语言的一致性。
下面,我们将通过GMIS原型来揭示它。
4.1 初始化
首先,我们打开GMIS的主程序,或者说是激活原型的“大脑”。
为简单起见,我们使用一个集成到GMIS中的单一输入输出接口作为信息器官,这使得主程序看起来有点像一个即时通讯程序。
用户可以在底部的编辑框中输入命令,在顶部的表单中查看输出结果或我们需要了解的其他数据。当前大脑拥有的所有逻辑线程或任务对话将显示在左侧。
默认情况下,GMIS总是有一个像中枢神经系统一样的系统对话,它会产生子对话来执行用户输入的命令,而不是亲自执行,以确保大脑本身安全运行。
那么剩下的问题是GMIS将如何解释我们的输入信息?
前面我们提到,GMIS被设计成与信息类型无关,最初只具有本能。为了使用这些本能,用户必须首先在GMIS的内存中用自己熟悉的信息对其进行标记,我们可以将这一步想象成在超市商品上贴标签。使用这些标签,意味着我们正在调用相应的本能。这是一种后天学习,所有这些标签将逐渐发展成类似于我们教新生儿的语言。
至于这些信息是什么,则取决于机器人的信息器官是什么,就像海豚可以接收超声波而人类不能一样。
当然,作为GMIS原型的一个PC版本,它所能拥有的信息器官只有一个文本编辑器,用户可以在其中直接输入任何自然语言。
为了方便用户,GMIS在首次打开和初始化时,会记住一些英文单词和短语来标记其本能,这样用户就可以直接使用英语来命令GMIS。在此基础上,其他母语用户可以教它任何语言。
由于中文是我的母语,它也学会了中文,所以甚至能理解中英文混合输入。
4.2 最终C语言
现在,让我们体验一下什么是准自然语言,以及它如何驱动GMIS。
输入命令进行测试
Define int 32;
“define”是谓语动词,“int”(integer的缩写)是宾语,“32”构成宾语补足语,这个命令的作用显然和它的字面意思一样。
执行加法
Define int 4, define int 5, use operator +;
这里值得一提的是命令的形式而非其作用。从现在开始,无论逻辑多么复杂,输入到GMIS的所有命令都将是这种形式:每个动作逻辑是一个以句号或分号结尾的句子,每个句子由一个或多个从句组成,每个从句是一个行为,将用逗号分隔,不再有其他要求。
这是否意味着用户可以自由地使用自然语言命令GMIS为我们做任何事情?我们希望如此,但现实是原型仍然不具备如此成熟的能力。
第一个限制是GMIS只理解我们教过的命令,嗯,这只是一个开始。
另一个限制是GMIS目前除了主谓宾从句之外,无法理解大多数自然语言语法(假设主语是机器人本身,所以从句通常只由谓语和宾语组成),这也没什么,当理解失败时,GMIS会提示我们。
但最大的限制是,当我们编译命令来驱动机器人执行一些复杂任务时,我们必须屈从于编程的现实,并偏离一些自然语言使用的直觉。
为了理解这一点,我们必须首先解释GMIS的本能将如何执行。
简而言之,每个本能都像一个函数,GMIS会提供一个像神经一样的管道来连接函数,并在任务执行期间提供所需的参数,如果函数完成时有任何数据输出,GMIS会将这些数据放回管道供下一个本能使用,如此循环往复,直到整个任务逻辑结束。
以上述命令为例
在执行管道进入任何本能(函数)之前,我们必须确保管道中的数据类型与本能的要求一致。GMIS会自动检查,如果数据不匹配,任务将被中断。因此,使用本能编译复杂逻辑时,用户必须清楚地知道每个本能完成执行后如何改变管道中的数据,以及下一个本能需要什么数据类型。如有必要,用户必须调整管道中的数据。
因此,GMIS接受的语言仍然不是真正的自然语言,而是一种准自然语言。我们称之为Final C,即最终的C程序语言。它是传统高级编程语言和自然语言之间的一种中间语言。在我们看来,GMIS未来将有能力完成这种转换。作为一个原型,它目前只能实现第一步。
Final C语言的显著优点之一是,它可以通过语音而不是键盘或鼠标实时直接控制机器人执行一些逻辑任务(您可能没有注意到,即使是用最先进的脚本语言编写的程序也很难大声朗读)。
这似乎只是形式上的一些改进,但它是限制机器人发展的主要障碍之一。我们都知道,用键盘或鼠标控制机器人很难表达复杂的逻辑,而使用高级编程语言可以做到,但很难实时。事实上,我们不能让每个人都学习专业编程。但现在使用Final C,普通用户将获得驱动机器人的自由。
4.3 然而,它真的能执行任何逻辑吗?
是的,它可以。
为了证明这一点,我们打算让GMIS执行一个稍微复杂的任务:循环输出9次“hello world”。
根据结构化编程理论,如果GMIS做得好,这意味着它能很好地处理任何复杂的逻辑。
在GMIS开始执行任务之前,让我们回顾一下高中学到的一些物理知识
- 串联和并联电路:串联电路无需解释,我们只需要知道,在并联电路中,相同的电流将在同一时间流经所有分支。这对GMIS非常重要,它也使用了相同的概念:逻辑行为之间的逻辑关系要么是串联,要么是并联;如果是并联关系,执行管道将复制自身,为每个分支提供相同的数据。
- 电容器:一个空的电容器会从电流中吸收能量,当它充满时,会将能量释放到电流中。GMIS模拟了这种行为来实现临时数据存储。
- 电阻器:电阻器可以消耗电流中的电子。对于GMIS,它意味着擦除执行管道中指定数量的数据。
- 二极管:它使电流单向通过,GMIS有所扩展,它可以选择性地让电流通过。
有了以上知识点,我们来绘制任务的电路图
图中的每个命令都是GMIS的本能之一,其作用从字面意思上更容易理解。
理解此图的关键在于像观察电路图一样,了解电流在每个节点上拥有的数据。
让我们简单追溯一下执行过程
- (1) 首先定义一个整数 0,然后执行管道将包含数据:0。
- (2)遇到空电容器“cp”时,当执行管道流过它时,意味着管道中的所有数据都将被保存到其中。
- (3) 设置逻辑断点“lab1”,它对管道没有影响。
- (4) 引用上面创建的电容“cp”,此时电容已充电,因此它将放电,电容中的所有数据将重新放入包含数据:0的管道中。
- (5) 定义一个整数1作为循环步长,执行后,管道包含数据:0和1。
- (6) 执行加法,它会取出前两个数据,这些数据必须是数字,否则系统会报错,然后将结果推入管道,此时管道只包含数据:1。
- (7) (8) 现在准备进入一个并行体,管道复制自身以确保进入每个分支的管道数据相同,在 (7) 中管道流入电容器“cp”,由于“cp”之前已放电,所以它会再次存储管道中的所有数据,即:1,在 (8) 中管道流入一个零电阻意味着数据不变,当 (7) 和 (8) 分别完成时,两个管道将按顺序合并为一个管道,最终效果是循环计数存储在电容器“cp”中,并且唯一流出的管道仍然包含数据:1。
- (9) 现在,定义循环终止计数10,然后管道包含数据:1,10。
- (10) 执行比较操作,它将从管道中移除两个数字,同时将比较结果推回管道,结果为0(假)或1(真)。
- (11) (12) 这是另一个并行体。两个以二极管开始的并行分支将分别从自己的管道中取出一个数字,检查该数字是否等于二极管的数字,如果相等,该分支将继续执行下一步,否则该分支将被中断并停止执行。显然,根据管道中的数据:1,分支 (12) 将继续工作,直到满足循环条件,当 (12) 完成时,管道将不包含任何数据。
- (14) 定义一个字符串。管道将包含一个字符串:“Hello World”。
- (15) 此操作将打印管道中的所有数据,以获得我们想要的“输出”。
- (16) 定义一个电阻器,值为10。这意味着管道中的前十个数据将被删除。显然,管道中没有那么多数据,这本质上是一种预防性措施,用于清除管道中的所有数据。
- (17) 最后,我们执行一个跳回到 (3) 的操作,在那里我们设置了一个逻辑断点,然后重复上述步骤,直到我们进入并行分支 (11) 来完成整个任务。
现在,让我们将这个图表转换成Final C语言。就像思考某个问题一样,人们总是将复杂的逻辑分解成更小的简单任务来执行。GMIS在这里也会做同样的事情。
让我们先输入
think logic circle;
这个命令将使大脑进入思考模式,这意味着下一个输入的命令不会立即执行,而是创建一个名为“circle”的临时逻辑。
然后输入
use logic a, set label "lab1",use logic b, use logic c;
临时逻辑“circle”已创建。我们可以在逻辑视图中看到它。它由三个子逻辑组成:逻辑“a”用于定义循环起始计数,逻辑“b”负责判断循环条件,逻辑“c”负责执行具体工作。
现在,我们着手实现上述三个逻辑
think logic a;
define int 0, use capacitor cp;
think logic b;
reference capacitor cp, define int 1,use operator+, reference capacitor cp,
and use resistor 0 ,define int 10,use operator <;
以上句子可以一起输入。
注意:“引用电容器cp,并使用电阻器0”中,两个子句之间插入了“and”,表示这两个命令是并行逻辑关系,将在逻辑上同时执行。
think logic c;
use logic c1, and use logic c2;
逻辑“c”也被分为两个子逻辑,它们是并行逻辑关系,逻辑“c1”负责循环条件满足的情况,逻辑“c2”处理循环终止条件满足的情况。
think logic c1;
use diode 1,define string "hello world", view pipe, use resistor 1000,goto label "lab1" ;
think logic c2;
use diode 0, use resistor 1000;
最后,让我们输入以下命令来执行整个任务。
use logic circle;
5. 最大的优势:逻辑树
到目前为止,我们已经证明了可以使用Final C语言表达任何逻辑,但这真的有必要吗?
在上面的循环示例中,如果使用高级编程语言完成,可能只需要一行代码,而Final C使用了17步。
随着未来GMIS智能的提升,我们相信这种复杂性可以消除,就像高级编程语言消除了汇编语言的复杂性一样。
我们之所以必须使用Final C,是因为它能为我们提供实现人工智能的基本条件:逻辑树——这是整个故事的核心。
为了显示树,我们输入
debug;
然后,大脑将切换到调试执行模式。
让我们再次执行之前的循环任务
use logic lg1;
这次,您可以在调试输出窗口中看到一个逻辑树。
我们可以点击“Step”按钮,一步一步地执行每一个本能,在输出窗口中查看当前执行管道中的数据。
请注意,这种执行模式并非专门用于调试,它是机器人应有的正常行为。GMIS可以随时自由切换两种模式,就像人类遇到一些意想不到的事情时,我们总是放慢速度进行一些调整,直到确定没有其他问题发生,然后返回正常执行模式继续任务。
那么,逻辑树能给我们带来哪些特殊的益处呢?
运行时动态改变逻辑
我们相信这是未来机器人实现自主人工智能的关键。
逻辑树有一个重要特性:无论如何组合、添加和删除其分支,它仍然是一个逻辑树,这意味着机器人能够处理实时动态场景,而不是僵硬地工作。这是对人脑的真实模拟。
易于记忆和预测
逻辑树可以很容易地被记忆和预测,它将有助于理解具有逻辑上下文的自然语言。在记忆了一定量的逻辑后,GMIS可以轻松理解你的真实意图,从根本上解决词语歧义,并预测下一步动作,这将为自主智能奠定基础。
逻辑重入
同样得益于逻辑树执行模式,我们可以轻松暂停逻辑任务,保存执行状态,然后在未来从暂停点恢复。同样的事情在我们的生活中经常发生。例如,从小到大,我们总是尝试做很多事情,但大多数都不得不暂停,因为没有合适的条件完成,但它们都会存储在我们的脑海记忆中,构成我们的人生经验。我们可以根据需要重新提取,并改变检索到的逻辑以满足我们当前的需求。
天生的并行执行
我们上面已经提到,GMIS的并行执行就像在并联电路中工作一样,它赋予GMIS天生的并行执行能力。
我们只需说:“做A和做B”即可构建一个并行任务。这将大大降低并行计算的使用门槛。
与其他机器人协作
逻辑树的执行模式可以确保一个GMIS可以将其他GMIS调用到其任务逻辑中,就像调用其自身拥有的本能一样,从而实现机器人之间的协作。
由于其天生的并行执行能力,这种协作是双向的。当一个GMIS调用其他机器人时,它也可以同时被其他机器人调用。结果是机器人将实现类人分工。
一个典型的应用案例是,GMIS允许任意数量的计算设备(如手机和PC)实时组装成多台超级计算机,同时为许多用户服务。
为了GMIS的实用价值,我们赋予GMIS使用外部对象的能力,这里的外部对象指当前IT世界中已存在的各种可执行段。例如操作系统API或其他网站提供的API,各种应用程序等等,所有这些都可以包装成一个外部对象供GMIS使用,通过它们我们可以拥有一些特殊的机器人技能。
为了更直观地展示GMIS的特点,我们录制了一些演示视频。
- https://player.vimeo.com/video/112729494 - 这个视频只有2分钟,其中我们尝试用GMIS与一个机械臂配合。这个机械臂已经在Kickstarter上完成了众筹。
- https://player.vimeo.com/video/112729495 - 这个视频有18分钟,我们展示了GMIS使用外部对象的一个实际案例。
- https://player.vimeo.com/video/113364683 - 这个视频有45分钟,与上面视频类似,但添加了一些关于GMIS设计理念的解释。
GMIS原型完全开源:gmis.github.io,您可以下载原型和所有代码。
6. 结论
总之,GMIS支持线性表达的消息,使其未来能够直接理解自然语言。基于逻辑树的执行机制使其最终能够实现从被动智能到自主智能的转变。
您可能有些失望,因为您在GMIS上没有找到像Siri或Google Now那样智能的壮举。但是,您能想象一个缺乏GMIS上述能力的智能机器人吗?
GMIS所基于的哲学基础如此简单,以至于我们相信很难找到其他替代解决方案。