IDNI Blog

  • The New Tau

    Ohad Asor 发表于2017年12月31日上午7:27分

    一个团体可以少到几个人,也可以多到几十亿人,当这个团体需要做出某个决策的时候,团体的成员需要反复协商,最终达成某种协议,供全体成员共同遵守执行。这一过程我们称之为社会选择 (Social Choice)。社会选择可以衍生为五个层面,语言(language)、知识(knowledge)、讨论(discussion)、协作(collaboration)和演化(choice about choice)。鉴于社会选择广泛存在于人类社会之中,并且十分重要,我们对此进行了深入细致的分析,提出了一种社会选择机制,使集体协商决策的过程更加合理科学。

    这种集体协商决策需要克服的一个主要困难在于成员之间的沟通是有限制的,随着团体成员数量的增加,信息的流通会更加低效。这种困难在现实中是天然存在的,并且往往被认为是无法克服的。举例来说,我们很自然地会想到每个人都有权投票的情形,但是如果每个人都有平等的权利提出提案,供全体成员投票,这是一种什么情形呢?

    在日常生活中,我们不需要经常投票,只是会经常表达我们的观点,有时候会一起讨论,达成一致意见或者形成新的共识。而在大型团体比如一个国家,我们仅能想到的是,成员们都有权投票给一些数量有限的提案。这些提案或许是以层级(hierarchical)的方式逐层提出。我们无法想象成员们以非中心化的方式,每个人都有权提出一个提案供全体成员讨论,因为无法保证每个成员的建议都不被忽略,也无法保证每个成员有能力处理如此大量的信息。所以社会选择(Social Choice)在讨论(discussion)这一层面,面临着扩展性的难题。

    迄今为止,没有哪一种方法可以解决讨论(discussion)过程中的扩展性难题。当团体成员比较多的时候(哪怕仅仅几十个人),如果数量增加一倍,带来的效益并不是信息量增倍,而很可能是整体效益减半,甚至一半都不到。

    值得庆幸的是,这一难题可以得到解决。我们能够有效解决讨论(discussion)过程中,信息流动的扩展性难题,使得一万个人的集体协商决策过程比一百个人有效一百倍。然而我们需要机器的帮助,前提是我们需要先对机器进行指导。

    具体来说,这种人机交互只能使用少数几种语言,让机器在讨论(discussion)过程中明白人的意图。由于没有人知道如何使计算机理解自然语言, 我们必须使用机器可理解的语言。我们将详细介绍这一点,在此之前先介绍关于自我修正(self-amendment)的一些知识。

    为了解决以上所述的问题,我们提出了Tau Chain这一去中心化计算机网络项目。我们可以使用Tau Chain汇集成员提出的建议,以及针对各项建议提出支持或者反对的投票信息,经过Tau Chain的讨论(discussion)平台的处理,转化为可供人们执行的决策。而对于我们而言,关于Tau Chain本身的讨论和决策是最重要的。

    所以在Tau Chain这一系统之上讨论的主要事项就是关于Tau Chain本身。Tau 就是关于Tau的讨论(Tau, is a discussion about Tau)。或者可以使用一个更精巧的定义,Tau是X生成Y,并被Y所取代的情形。(Consider a process, denoted by X, of people, forming and following another process denoted by Y. Tau is the case where X=Y)这就是Tau。Tau究竟是什么并不重要, 重要的是它可以改变成任何我们想要的东西。此外, Tau是一个计算机程序, 是一个可以依据用户集体协商决策而进行改变的程序。

    需要指出的是,Tau并不是用来猜测人类的意图,不是通过机器学习更加精准的猜测人类意图的系统。这或许是我们使用逻辑(logic)的主要原因。在这一平台上沟通需要使用像电脑程序一样形式化和确定性(formal and definite)的语言,因为需要处理的是一般的知识, 而不是机器指令。

    基于这一点,Tau这个通过集体协作而进行自我修正的去中心化程序,可以转换成几乎任何我们需要的程序,甚至同时转化成多种程序。实际上,Tau并不仅仅是用于自身的演化,在这个平台之上,不管团体的规模是大是小,任何协作性质的活动都可以展开,比如对知识的整理讨论和分享,对于共识或者分歧的探知,协调各种行动等等,只要这些活动是以程序的形式在Tau平台上展开。

    本文开始提到的关于社会选择的五个层面对应于Tau开发的路线图。这里需要对Tau的路线图做进一步的解释。第一步是TML(Tau Meta Language)和互联网语言的开发。第二步Alpha 是讨论平台(discussion platform)的开发。第三步Beta 是在讨论平台添加后续协作(collaboration)的功能,这样系统不仅能进行知识的汇集,还能够执行程序。前三步并不具备类似于比特币网络的去中心化的特征,这一特征将在第四步引入。到了第四步,Tau将是一个去中心化的具备自我修正特征的社会选择平台(self-amending social choice platform)。第五步,在此基础之上,我们将构建Agoras。Agoras由三个组件构成,一个是知识市场(knowledge market),一个是类似于Zennet的计算资源市场(computational resources market),还有一个是为实施衍生品交易而新设计的经济系统,其特征是不需要开动印钞机就能提供无风险收益。

    为了让机器提升我们讨论和协作的能力,机器需要懂得人类语言的含义,然而迄今为止这一难题还无法解决。机器语言和人类语言并不相通。另一方面,如果人类使用机器语言去分享知识也非常不方便。因为机器语言是由机器指令组成,人类语言对知识的描述具有完全不同的特性。换言之,机器需要的是可操作的信息,人类语言更多的是用来描述和说明。所以Tau的目标,是让我们更多地专注于“知道什么”("know-what"),让机器去处理“知道怎样做”("know-how")。

    为了架起人类语言和机器语言之间的沟通的桥梁,我们建议使用逻辑(logic)(cf. e.g. the article "Knowledge Representation and Classical Logic" by Lifschitz et al)。形式逻辑与人类语言的特性相近,而且可以被机器所使用。但是, "形式逻辑" 并没有什么特别之处, 因为它并不代表任何语言, 而是一个语言类别的模糊描述。

    我们认为通用语言不应该也不可能是唯一的。最佳的语言不可能只是一种,一种语言也无法满足所有需求。因此, 我们提出了一种能够定义新语言的元语言(meta-language),这种语言能够重新定义自己,可以自我修正,这样可以避免走入单一语言满足所有需求的误区。因此我们不仅能够拥有多种语言,而且定义这些语言的元语言能够自我修正,这对于一个能够自我修正的系统而言,是一个重要组成部分。

    事实证明, 逻辑学(logics)虽然并不被公众所熟知,但是可以定义自身,并且具有良好的逻辑属性,比如可判定性。虽然我们已经拥有了通用的图灵机,但是寻找一种具有较少表达属性(expressive),较多信息属性(informative, e.g. decidable)的语言并不是一件简单的事情。我们采用了logic PFP,它的表达属性符合PSPACE-complete,这一点可以参考关于Finite Model Theory的书籍。而且逻辑学能够对自身进行定义,这一点可以参考Imhof, 1999 "Logics that define their own semantics"。

    继续讲互联网语言。上文提到的meta-language ,我们称之为TML (Tau Meta-Language),用户可以在TML的基础上使用逻辑公式定义新的语言,这样可以做到两种不同的语言描述的文档具有相同的含义。换句话说,定义一个新的语言,需要与已经存在的语言,建立能够保证相同语义(semantics-preserving)的翻译方法。这里的语义指的是本体论 (对象和关系)(ontological,objects and relations),而不是编程语言的操作语义学(operational semantics)。在这基础上,我们能够建立知识互联网,不管使用哪一种语言,只要这种语言的文档能够通过TML转换成另一种语言。

    上述所言并不是指把法语翻译成中文这类翻译,前文已经强调过我们不处理自然语言。当然,从理论上讲,将来或许有人能够在TML的基础上开发出能够完全理解自然语言的东西,但是我们并不指望这些。实际上,现在已经有一些形式化的自然语言很接近完整的自然语言,人类使用起来有很高的舒适度,也足够简单,机器可以理解,所以我们期待TML在某种程度上可以处理人类容易理解的语言。但是TML设计的主要意图是供机器使用。例如,把文档转换成HTML或者维基(Wiki)格式,把高级语言编写的程序转换成机器代码,根据逻辑(logic)编写代码。

    更一般地,我们希望能够把TML做成编译器编译程序。出于对某种语言的逻辑性的考虑,需要一次又一次的编译该语言编写的文档,为了避免这种低效的情况,我们采用Partial Evaluation,这又会给编译器编译程序增加新的优点: Futamura projections。至此, 我们可以用各种基于TML的语言来表达知识和观点, 可以使用这些语言进行交流。考虑一下人与人之间的这种交互,确切地说是人-机器-人之间的这种交互过程,机器并不是与人平起平坐的角色,而仅仅是机器而已,它仅仅是将我们人类要表达的内容组织起来编码,通过这个机器网络传播和处理,供其他人使用。这个流程的优势是,表达起来很简单,理解起来很简单,同时知识是形式化(formalizing knowledge)的。

    具体的讲,一个用户所表达的内容,不需要让其他用户理解,他只需要让机器理解。这项任务在某些方面可能比较简单, 而在其他方面会比较复杂, 但机器肯定比人类更不受组织和规模的约束,机器在扩展性方面具有优势。一个用户将自己的想法以机器可理解的语言形式化以后(formalized),另一个用户不仅可以将其内容翻译成另一种语言,还可以将其组织编排成新的内容,或者与其他用户表达的内容进行比较。这样用户可以从这个机器网络中找到任何问题的答案,因为机器能够完全理解该问题相关的主题,有回答用户提出的所有问题的理论能力(基于可判定性(decidability arises again here)),有了机器的帮助,用户就不需要寻找原作者的表述。

    到了Alpha这一步就超越了这种情况,Alpha是没有规模限制的讨论平台。它是结构化的,像论坛或者社交网络一样可以发帖,发表评论,发表自己的意见,并与好友分享。可以根据某个主题建立群组并进行设置。比如建一个团队协同开发一个软件,起草法律或者合同,或者仅仅是讨论任何有关科学或者哲学或者社会或者是一些毫无意义的想法。

    到目前为止,这个讨论平台似乎没有什么特别之处,然而由于我们使用的是机器可以理解的语言,这个讨论平台具有很多的优势。比如:自动检测同一个人重复的论点;收集讨论过程中每个人表述的内容,总结出一致的意见和不同的意见,把每一种意见的支持者和反对者列出来;把讨论的内容有条理的组织起来,像wiki一样更具有可读性;甚至可以自动评论,比如当你看到某人表达了某个观点,而你以前对相关的主题有过表述或者评论,这是你可以点击“自动评论”,系统基于你之前提供的信息自动表达出你的观点;或者更重要的一个优势是,在一个特定的范围内(可以是整个网络,或者整个团队,或者你的好友,或者是某个主题讨论的参与人员),逐条列出大家都赞成的各项观点。无需惊奇,因为所有内容都是以逻辑(logic)来表述。(或者说我们有一种逻辑能够将表述的内容转换成逻辑,即TML,它可以定义用户表达时所使用的语言)

    在Alpha这一步,我们赋予机器网络很多知识,可能是我们有意输入的,也可能是通过讨论而得到的。此外还形成了我们一致同意的理论, 并且我们都作出了贡献。我们能用这些知识做些什么呢?最终, 在计算机世界, 我们所能做的就是运行计算机程序。到 Beta 这一步, 我们将能够讨论程序的开发, 然后运行程序。在Tau这个网络上, 我们将有一个特殊的团队称为Tau, 这样, 每当团队接受一个新的决策, Tau的代码将会自动修改。到 Beta 这一步, 我们可以实现在Alpha上讨论达成一致的事情。对于某个程序,一旦团队同意修改某些规范, 则无需编写或重写任何代码, 因为它可以自动完成, 所有内容都已处于机器可理解的语言中。依据设计规范来编写代码相当于在TML基础上翻译另外一种语言,当然要完成这个目标,需要开发足够丰富的语言转换工具。这些工作说起来容易做起来困难,相关的细节是高度技术性的。可以说, 在 MSO+λY 领域,上述所说的依据设计规范自动编写代码的工作是前沿的尖端技术。

    选择如何选择,即改变选择机制本身,或者说是改变规则的规则,意味着Tau随着时间不断演化。这本身会变成一个悖论,会限制逻辑的使用。如果规则可以改变自身,他们将不可避免的自相矛盾。那么我们怎样才能够以无悖论的方式对这一过程形式化呢?或许有人会想到高阶逻辑,但这还不够。比如这条规则“所有的规则包括这条规则只能在多数人同意的时候才可以修改”,由于它对自身起作用,所以不是有限阶的。因此, 我们需要递归, 以处理更改规则的规则。这是 TML 中不动点逻辑(fixed-point logic)所包含的一个重要方面, 也是Beta版中λY 演算(λY calculus)的重要内容(Bauer在"On Self-Interpreters For System-T and Other Typed λ-Calculi"中阐述了一种能够自我解释的语言必须有不动点(fixed point),这就把目前所有的编程语言排除在外了)。

    旧版的Tau对规则的改变采取了Nomic的方式。 我们用一个例子解释旧Tau和新Tau改变规则的方式有什么区别。两个律师各自代表某项交易的双方, 他们要起草一份双方能够达成一致的合同。一种方法是,甲律师提出一项条款, 乙律师同意, 则附加该条款, 否则不附加该条款;然后轮到乙律师提出一个条款,甲律师同意, 则附加该条款, 否则不附加该条款;以此类推。这就是Nomic的方案。该方案反映在Tau上,就是对代码持续打补丁。这种方式把各方的意见置于非对称(asymmetry)的位置。关于非对称这个问题以及Tau如何尽可能避免,有很多内容可以阐述,但是现在需要考虑的是新的条款与旧的条款冲突这一情形。如果我们不希望把新旧条款置于不平等的位置,我们必须同等的审查修改新旧条款,而不是以默认的方式删除旧条款。

    另一种方法是,每一轮一方律师提交一个完整的合同草案, 另一方律师可以接受或提出另一草案。要求每个草案在逻辑上一致, 这样我们将不需要处理过去与未来的矛盾。它完全消除了往回看的必要。但这种方法仍然无法扩展。如果我们有100万律师, 他们会读100万份草案吗?

    对于Tau而言,这些草案对应于Tau下一个版本全部代码的备选代码,我们能够以一种相当直截了当的方式处理100万份备选代码(因为代码文件是以逻辑形式化的),计算出每个人都同意的核心部分,并且列出需要解决的要点。我们无需投票,只需要像日常生活中的小组讨论那样表达我们的观点,然后就可以呈现出整体的解决意见的框架。

    还有许多内容需要阐明,我们将在后续的博客和论文中讲述。对于上述讨论的任何问题,尤其是实际中的社会选择和讨论扩展性的问题,我期待您的意见和建议。