管控复杂度,大模型Transformer技术是一种通用的哲学

Posted by Tony on June 07, 2023 · 1 min read

它的成功源于对复杂度的精确控制上。它代表的是一种结构的成功,而不是局部的成功;是整体的成功,而不是个体的成功。

AI技术的爆发,有赖于2017年Transformer结构的出现。它代表的不仅是一种技术上的方法,也是一种通用的哲学。

首先,我们需要对Transformer做一个合理的翻译,这个名字表达的意思是,它具有神奇的转变事物的能力,包括把语言文字转变成数字的能力,接着对数字进行复杂运算的能力,之后把数字结果变回文字的能力。

这里可能要开一个中文世界的先河,亦或许早有人这么称呼,我把它翻译为“魔术师”,而不是变形金刚,原因是前者可将其他事物变化形态,后者是自己发生变化。

魔术师把玩着文字和数字,经过各种变化,最终出现了智能。他设计了怎样的变化过程,他为什么要这样设计?我们试图梳理他做了什么,他的出发点和设计理念是什么。

我想把这段科学史,放在历史、哲学、经济和管理的范畴中去理解,没有公式和代码,但要把它的结构和意义说清楚。我们遇到这样一个复杂的、带有偶然性质取得突破的机器时,除了惊叹之外,更需要理解如果要复现这个成功的过程,需要遵循怎样的原则。

回顾整个模型的结构,我们可以识别出一条主线,”管控复杂度“。是这个理念在反复地起作用,让一个复杂的问题,逐步变成由普通的电子计算单元可以求解的问题。我们将以这条主线,来考察魔术师是如何一步一步解决问题,最终创造出人工智能的。

细分到足以胜任

计算机科学家和工程师们,在试图制造一个可以对话的系统时,他们究竟面临了怎样的难题?

首先要听懂,接着可回答。

为了实现这两个目标,这个系统需要采取怎样的策略?

首先是要听懂。一段话是由多个词语组成的若干个句子。在魔术师方法中,采取了以下几个策略,来确保听得懂:

  • 限制输入的复杂度。即限制输入文本的最大长度,让模型去解决一个有限复杂度的问题。
  • 拆分词语为字符片段。拆解观察目标的结构,降低复杂度。
  • 分层处理信息。通过增加空间的层次和时间的步骤,降低每一步处理的复杂度,逐步提高理解力。

这几点,其实都是基于计算机的观察和计算能力较弱,而语言对应的语义空间极其庞大,而采用的降低复杂度的策略,核心解法就是拆解问题到足够细的环节,直到一个计算单元可胜任的尺度。

接下来我们解释下这几点。

限制输入复杂度

面对复杂的问题,自然不能让问题的输入无限制,做出限制,才能在有限的空间内优化有限的资源。对于ChatGPT模型,最大可接受的输入长度,大约是3000个英文单词。

因为在计算过程中,每个英文单词都对应到若干个计算单元,无论是用cpu还是gpu,都意味着计算的成本。

求解一个资源允许的问题,是第一步。如果问题太大,那么就把问题截断,选择一个较小规模的问题。

比词语更微观

这是为了降低系统内部工作语言的复杂度,以适应计算资源的瓶颈。

我们知道英文有几十万个单词,常用的也有2万以上,更不要说这种大语言模型还兼顾到了多种语言,比如法语、德语、中文等。如果要识别每一种语言的数万个词语,那么这个模型需要可以识别数百万个词汇,这对模型本身的结构和算力都有要求。

那就需要一种降低这个数量(空间复杂度)的方法。计算机领域采用的是将单词拆分为字符片段(Token)的方法,每个片段大约3-4个字母,只要保证这些片段通过拼合可以组成完整的词语即可。对于中文,一个汉字可以使用两个特殊的字符片段表示,同样可以大幅降低组成汉字的元素的数量。

这样,原本需要数百万个词汇来组成多种语言,就只需要大约5万个字符片段就足够了。这就是系统内的工作语言的复杂度,从外界的数百万降低到5万多。这样的好处是,降低了模型结构的复杂度,进而降低了存储和训练的成本。

当然也可能存在弊端,因为这些字符片段并不是日常使用的语言本身,使用真正的文字或许会让模型的理解力更好。所以,随着模型复杂度的提升和硬件算力的增加,会有更多的真实文字被模型直接使用。

同时,这种在最小元素上下功夫的方法,也鼓励了对声音、图像和视频的生成。声音的波形切片、图像的像素、视频的像素和声音片段,都可以类比于文字模型中的字符片段。使用同样的原理,这些领域里,生成式AI的发展也极其火热。

协作求解,分层抽象

大模型说自己使用的技术是神经网络。神经两个字会让人联想起大脑,进而带来一些畏惧心理,我们对于大脑的理解实在太少,现在的技术并没有完全模拟大脑里面神经元的连接方式,而是更像公司里面的分层决策机制。

从结构上看,所谓的神经网络,其实并没有建立跨越两层之间的连接,更没有形成环状连接。日常的使用中,信息只从上游向下游单向流动。

如同一个公司,分成了多个小组,每个负责一种任务。

第一层,找到相应的人手,观察输入的信息,并且依据自己的敏感度,记录自己的观察笔记。 第二层,这一层内的成员,每一个人都可以拿到全部第一层观察员的观察笔记,并且做出自己的分析判断。 第三层,每人可获得第二层全部观察员的观察笔记…… … … 最后一层,需要做出判断了,下个结论吧。这里是公司的管理层了,要做出决策了。

蜜蜂的语言

我们假设人类在研究蜜蜂的语言,有一个公司受托去做这种研究。他们发现一个蜜蜂发现了花粉之后,回去后用某种方式告诉了蜂群,然后蜂群会精确地沿着目标方向飞过去。

为了研究蜜蜂的通信方式,人类的协作方式可能是这样的。

第一小组,50人,就负责观察蜜蜂,记录蜜蜂的行为,形成笔记。 第二小组,50人,就负责从第一小组的笔记中,分析可能的模式。 第三小组,50人,就负责从第二小组的分析报告中,形成可能的结论。

我们可能会发现,第一小组的工作需要非常细致,他们要用完整的数学坐标记录下来蜜蜂的轨迹,还有记录环境中每一个事物的坐标,包括蜂巢、花朵、太阳、风速、风向,以及蜜蜂在蜂巢内的运动轨迹。

第二小组,则通过这些笔记去分析可能的模式,比如说,可能恰好有一个成员,对角度很敏感,它通过蜂巢、花朵和太阳的位置,计算出了以蜂巢为中心,花朵和太阳之间的夹角。同时,有另外一个人对于运动的轨迹敏感,他发现飞回去通风报信的蜜蜂,在树立的蜂巢平面上走来走去走来走去,划出了8字形状。他把这些8字轨迹单独拿出来查看,发现两个半圆之间的那一条直线,都比较直,而且蜜蜂在走这条直线时,都是沿着同一个方向,这个方向与垂直线形成了一种夹角。

接着第三个小组,在第二个小组中发现的诸多蛛丝马迹中,发现上述的两个角度竟然几乎大小一样。于是,第三个小组在排查了其他要素之后,说这个角度可能是蜜蜂传递出来的最重要的信息。

于是,在经过多次验证之后,发现这两个角度就是那么一致,于是,这个团队发现的这种蜜蜂的语言,就可以被大众认可了。

时间换空间,聚焦在当下

把所有的资源,聚焦到解决当前的问题上。基于当前的答案,继续下一步的任务。

上文提到,一个语言大模型的任务是:首先要听懂,接着可回答。

这里我们说回答这部分。

我们知道回答一段话的,是另外一段话。但是显然,直接给出另外一段话,是困难的。大模型的方案,是一个字一个字地蹦出来。

这里的解决空间复杂度的方法,就是按照顺序,解决当前面对的空间序列中的第一个环节。

通过这种方法,大模型拥有了一套普遍适用的方案,不管接下来要回答多少字,只需要尽全力把当下的要输出的第一个字准确交付即可。接下来,刚交付的字,成为了问题的一部分,模型开始了寻找下一个最佳文字的计算。而最佳的标准,就是依据它曾经识别的多种组合,在给定的问题的背景下,哪个字最有概率出现。

警惕顺序执行的序列

大模型的成功,有赖于去掉了同层节点之间的依赖。

这是一个典型的减少时间复杂度的案例。在魔法师结构之前,存在一种名叫RNN的结构,这种结构下,同一层内的节点,要计算结果,不仅依赖上一层的节点,也依赖同一层的近邻。这就导致每一层内的计算,不是多节点并行的,而是按照顺序进行的。

去掉这种顺序机制后,由于计算速度可以通过并行获得大幅提升,所以在同样的时间内可以完成更多的试验,这才真正实现了推动模型结构的进化。

可以说2017年提出Transformer魔法师结构的团队,首要的目标就是解决这个问题,以便可以真正用上GPU的优势算力。

选择代表,近似描述

降低无限语义的复杂度。

我们知道文字可以表达无限的意思,所以理论上,就文字的含义而言,其空间复杂度是无限的。那么这时你会想到,又需要一个算法来降低文字的空间复杂度了。

怎么降低?降到多低?

我们不妨找几个词语来看下它们的定义。

你发现似乎在定义一个词语甲的时候,总要引入新的词语乙。而去看新的词语乙的解释的时候,发现它竟然又使用了甲。语言的这种特征,我猜测有人研究过,但是可能还没有解决,否则我们的权威词典就不会这样写了。

我们大约可以理解到,一个词语,其实就是与其他词语共生的一个部分,我们很难从公理出发,为语言定义基本词,再由基本词语定义出衍生词,而且即使出现了这样的定义体系,也难以独立于人类的感觉而存在。

所以,我们不妨不再去追求词汇的绝对定义,而是去寻找它与其他词汇之间的相关性,通过它与一组词汇的相关性,来近似模拟这个词汇的含义。

具体而言,可以考虑寻找一批词汇的代表,一门语言中所有的词汇都去测量与这些词汇的相似性,如果选择了1000个词汇代表,那么所有的词汇就可以用这1000个代表词汇来表示了。

比如,代表词汇是“苹果”、“牛奶”、“汽车”等等

那么梨子大约就是大比例的苹果,小比例的牛奶,和零比例的汽车。

这看起来是个不错的方法,因为只要找到1000个有代表性的词语,加上代表比例大小的数字,就可以表示其他任何一个词汇了。

词汇 = 相关系数1 * 代表1 + 相关系数2 * 代表2 + ……

这样我们把无限的复杂度,控制在1000个维度的复杂度上了。而至于选择用哪些代表词汇,以及这些系数是多大,在魔术师的系统中,不需要提前设定,因为这些代表和系数,只是一种工具,用来表征两个词语之间的相关性,它们都决定于输入的训练数据,哪怕多一个句子进入训练数据,它们也可能会发生变化。所以,代表以未知的状态、系数以随机数的状态,进入模型去训练,训练结束后,它们才得以确定。

训练,量变等待质变

一个字一个字地训练,累积经验。要读几百万本书,每次只读一个字。降低空间复杂度,聚焦能力范围内的任务。

训练的过程大体是这样的,首先,从训练数据中找到一些高质量的文本,从中找到一个句子,比如说是:

“知识是否是现代人的信仰?”

那么系统可能会把最后一个字拿掉,当做输入。

“知识是否是现代人的信”

我们知道在最初阶段,模型里面都是一些未知的代表和随机数,但即使如此,经过“协作求解,分层抽象”的过程,模型仍然会给出一个对下一个字的预测。

比如说,第一次预测到的字是“信息”的“息”字,那么这时关于“仰”和“息”之间的差异,就会被记录下来备用,因为“仰”是正确的答案。这时,这种差异就被告知模型的最后的一层,决策层,决策层中我们知道有多个成员参与决策,它们就要内部开一个会,说我们调整下模型参数,对于之前的输入,我们要输出一个“仰”字才对。它们中的每一个都做了调整,之后,还会告诉相邻的上游一层,这一层也调整模型参数,就这样一级一级,直到第一层,都做了调整。

经过这样的调整之后,当下次再输入“知识是否是现代人的信”这几个字的时候,下一个字就会出现“仰”字。

也就是说,模型完成了第一次训练。

之后,这个模型要不断地使用这些数据来来回回地训练,它要记住新的词语组合,还要复习旧的词语组合,而有赖于它的多层的结构,以及每个成员的决策风格的不同,在经过大量的预测、调整、复习的过程之后,它可以比较稳定地输出我们人类想要的答案了。

此时,每一层的成员,都练就了一身本领,无论来了什么文本,都可以自由应对了。比如在某一层中,某个成员对于颜色特别敏感、而另外一层中,某个成员对体积敏感,只要他们的前一层的成员,提交的观察分析报告中有特定的数据,在经过它们两个阅读分析后,就会果断地识别出来。而这就是一种组织成员的敏感性,也是在大量地训练中,自发形成的分工。

胜任又均质的组织成员

降低组织内人力资源管理的复杂度。

继续类比大模型和公司管理,你如果要问,大模型的成功,全是GPU的并行计算实现的,而GPU中又都是完全均质且结构又简单的单元,那么也要要求一个组织里成员也一样吗?

我会说,这是一种控制风险的策略。因为在招募人手做一个事情之前,应当确定好以下原则:事情的复杂度要低于岗位成员的能力。

只有事情较成员的能力更简单,才可以让这件事以一种更高的确定度完成。系统不需要处于某个岗位的成员有异常的能力,因为这样的成员往往更贵,基于成本的考量,并不需要。同时,也不能让工作任务的的复杂度可能的波动,超过岗位成员的能力,如果是这样的话,就要增加一道流程,也就是增加一个分层,把任务做出拆解,务必满足上述的规则。

在电脑里,GPU中的每个计算单元就是负责完成工作任务的成员,我们知道这些电子器件是可能会坏的,当它坏掉后,应当可以有一个完全一样的许多备选,随便找到一个快速接手他的工作。

在现实的公司运作中,对于不同的岗位,往往还会做些区分,把工作链路拉出来,总会在关键点布置关键的人。但是如果考虑到集体作战,每个岗位都是以团队替代单人的话,则必须考虑要让同一岗位的人员可以平替其他伙伴,同时,为了组织的稳定,也需要不同岗位的成员,工作难度相差不大,这样就可以避免特定人员成为组织的瓶颈和风险。而要实现这样的目标,则必须对岗位做出合理评估,拆分工作任务,让每个人可以完全胜任自己的工作任务,避免需要对谁“委以重任”。

而这个道理,往往在一些大型组织中不经意地践行着,这就是所谓的大厂和成熟的企业,往往需要组织结构完善,而不需要突出的个人。即使真有突出的个人存在,在这些组织中,也不应该把他们放到某一种职能固定的岗位上去。

做到成员能力的绝对一致,大模型使用GPU就是一个例子,GPU集成了大量的可以做特定的简单计算的计算单元,它们完全相同,所以,使用GPU来并行计算,提高速度,就需要考虑到这种硬件特性。所以,在Transformer魔术师的体系中,网络中的每一层中的每一个成员(也就是节点),它们做的计算完全相同,而且非常简单。

  1. 它们只负责计算乘法和加法
  2. 乘法是前一层所有节点传来的数据和对应权重的乘积
  3. 加法是把上述的每个乘积,再加上一个常数
  4. 这些结果最终加和得到一个数字
  5. 不同的节点往往拥有完全一样的激活函数,上面的数字在激活函数的判断下,对外呈现最终的数字结果

就是这么简单,一切的智能,都是由这些微小的单元组成的。无论最终是生成了一句话,还是一张图片,还是一段声音,还是一种蛋白质结构,最重要的核心部分,都是由且仅由这些计算完成。

所以,可以说是神经网络算法的设计,对应于组织中是分工设计,是各自成功的关键,具体的执行者,应当永远是完全胜任自己的工作任务,且又可以随时补充的。

情感上我们难以接受,作为一个工作者,竟然是社会中可以随时被替换的一员,但是以AI的发展趋势来看,机器人终将替代大部分人的工作,哪些人不会被替代,我没有想过。或许,我们对于工作的定义是错误的,把工作设想为仅仅为了获取生存所依赖的酬劳,可能会有危机感,但是机器人的大规模部署,可能让人类更接近拥有无限能源,从而获得更大的自由。人类可以努力的地方不是生产环节,而是分配环节,当然这是后话了。

同层与两层之间的高带宽

在组织内部,需要降低协作的复杂度。

首先是决策所需信息完整可见。

在我们讨论的Transformer魔术师的神经网络中,相邻两层之间,前一层的所有数据对下一层的每个成员完全可见。

类比于在组织中,则是两道工序之间,上游的工作结果应当对下游完全可见,也即需要的信息,都可以获得。

此外,模型还教会我们一种机制,叫做自注意机制。

在神经网络的同一层内,每个节点如何观察,相互之间是有商量的,这是魔术师架构下的一个创新,叫做自注意机制,意指要用自己擅长的能力去对照考察整个问题,寻找自己的切入点。在自注意机制下,同一层内的每个节点,都会首先关注全部的输入信息,而不只是局部的信息,之后再选择切入点。这有利于发现全局范围内的信号。

对应于组织管理中,则是负责相同职责的一组人员,针对工作任务,在看到全局的情况下,然后聚焦于优势侧面去解决问题。

这样,我们从大模型中又寻得两条对组织管理的启发

  • 上下游职能之间,应当是信息畅通的
  • 相同职能内部,面对同一个问题,都要有全局视野,之后再去分工

当然,我们不会只从大模型中得到关于管理方面的启发。事实上,大部分的企业,可能也没有明显的分层结构,企业内的信息网络,更像是一个分层不明显的节点之间全连接的网络。

在商业价值的呈现过程中,对于大部分企业,我们大体可以把以下几个方面抽象出分层

  • 设计
  • 生产
  • 销售
  • 交付
  • 服务

但由于每一个分层内,工作职能的差异太大,不太可能深入到另外一个职能内部,然而,如果内部成员都不能准确把握足够的信息,则用户端可能更难完整感受到这种商业的价值。

我们倡导的原则是:在组织协作中识别复杂度。

我们的解法也简单:针对不同类型的复杂度,做出不同的应对。

  • 面对任务规模大,无从下手,这是空间复杂度,可以先将大任务化解为更细小的任务,这样,现有的资源就可以开始着手解决问题,通过时间换空间
  • 面对的任务耗时长,要么通过并行操作,以空间换时间;要么需要拆解流程,减少前后依赖,从优化的结构中取得收益
  • 与人相关的复杂度,需要机制设计,控制职能的范围,增加工作交付的确定度,在职能范围内,则鼓励拥有全局的视野

总结

无论是在做个人生活中,还是在设计一套组织机制时,做任何类型的事情,面对复杂问题,都应当注意到以下几个方面

  • 限制输入问题的复杂度
  • 降低工作者面临问题的难度
  • 通过充分协作和多级抽象来降低对单个工作者的能力要求
  • 通过聚焦在当下工作任务逐步完成一个庞大的序列
  • 识别并减少顺序执行环节
  • 通过与若干代表的相关性来近似描述目标
  • 面对海量工作任务也按照顺序全部完成
  • 同时在组织管理上,采用均质、低成本、可相互替换的工作者降低组织风险
  • 同时在内部协作上,鼓励信息流通,鼓励职责内有全局视野

我们有理由相信,如果有这样的组织,将是具有战斗力的组织。

Transformer魔法师结构,它以一种体系呈现出智能。

它的成功源于对复杂度的精确控制上。它代表的是一种结构的成功,而不是局部的成功;是整体的成功,而不是个体的成功。

它向我们展现了面对复杂问题时应当如何应对,如何组织资源,如何通过寻找更确定的体系的力量,来实现目标,这也是本文的主旨。

大模型的成功,不仅是在计算机领域内增加了一种算法,而且溢出到了行业外,我称之为一种通用的哲学,怕是也不为过。