目录
一 前言
二 计算历史
三 计算探秘
四 算力优化
五 未来展望
一 前言
计算本身其实是一个比较抽象的词,或者说比较笼统。很多场景都可能用到计算这个词,因此具体的含义就需要根据上下文来确定。今天我们讨论的计算,是比较狭义的计算,或者说跟计算机的计算、数学的计算是比较贴近的。
计算的重要性我想怎么强调都不为过。人类文明的进步,最重要的就是计算能力的进步。从简单的心算到借助工具进行复杂的计算,从无序到可控,人类了解、掌控、利用大自然的能力得到飞速提升。可以毫不夸张的讲,人类智慧的核心就是计算能力。这可以从许多方面体现出来,比如,我们把学科从大的方面划分为文科和理科。理科以数学为基础,自然就不必多说了。文科也是一门计算学科。这一点怎么讲呢?其实也是很好理解的,我们学的哲学、社会科学,都需要成理论成体系,自然少不了逻辑框架,这就是计算的体现。长篇小说是文学最高水平的体现,其中牵涉的巨大时间跨度、复杂人物关系、各个人物自身画像和角色设定,也是一套庞大的逻辑框架,这也需要很好的计算力。运筹帷幄、出谋划策、料事如神等等,都是计算力的体现。我们日常生活的方方面面,无不体现着计算。
二 计算历史
好了,回归主题。计算伴随着人类历史的发展,也是经历了几个不同的阶段。最开始,计算与计数是分不开的。早期,人类认识数目的能力很有限,传说有两个部族的首领在一起打赌,看谁说的数字大。第一个部族首领首先说1,另一个首领说2,然后第一个首领说3,另一个首领则说:好了,你说的大,我认输了。这个故事本身的真实性我觉得值得怀疑,但是反映的问题应该是毋庸置疑的。在生产力低下的时代,人类的计算力不高是合理的。现在我们的语言文字中,三以上就是多,也从侧面印证了这一点。
早期的计数方式,大家都比较清楚,那就是结绳计数。从最开始简单方式,到逐步的复杂模式。下图是比较简单的示例:
结绳计数示意(图片来自网络)
当然,现在也在一些文明遗迹中发现了非常复杂的方式,不单单是计数了,可以认为是记事。如下图所示:
复杂的结绳记事(图片来自网络)
我们知道,记录的英文单词是record,这其中cord就是绳子的意思。这种构词方法跟我们汉语还是有很多相近之处的。
上面简单介绍了计数,那计算呢?我想最开始人类应该是可以应对简单的心算的。当数字大了后,就需要借助工具。最先利用的就是我们的手和脚。最简单的,一个手指代表1,一只手表示5,两只手表示10,加上两个脚,就可以到20。不要笑,即使到现在,我们教小孩子简单的计算,也还利用手指脚趾呢。从古文献中可以发现更加复杂的利用手脚进行计数方法。如下图:
手指计数法(图片来自网络)
随着人类文明的进步和社会经济的发展,计算的需求越来越强烈。这时候就不仅仅是简单的计数了,还需要快速的计算方法。我们国家在汉代就已经有了九九口诀,如下图:
当然,心算的适用面有限。这时候就出现了借助工具进行计算的方法,典型的如算筹。通过配合口诀,就可以进行较大数字的快速计算了。九章算术中,就有这方面的记载:
九章算术中有关河图洛书的记载(图片来自网络)
算筹携带和使用还是不够好。其实,与其接近的算盘,更为大众熟悉。算盘不仅仅在中国有,在世界其他地方,也有类似的计算器件。配合口诀,算盘可以快速完成账目的计算,可以说是经商人士居家旅行必备之物品。
算盘(图片来自网络)
算盘在中国历史上扮演了非常重要的角色,而且非常的长寿。我们常听说的算盘算原子弹,虽然夸张点,但是从另一方面反映,算盘的确是好用。但是相对复杂一些,特别是牵涉数学表的一些计算,算盘就不那么实用了。在近现代工程中使用更多的是计算尺。经典的如纳皮尔尺:
纳皮尔尺(图片来自网络)
还有各种变形的计算尺:
柱状计算尺(图片来自网络)
关于计算尺的原理,这里就不介绍了,网络上有很多,感兴趣的读者可以去看看。费曼、钱学森等著名科学家都有跟计算尺结缘的轶事。
计算尺应该是机器出现之前,人类发明的最后最先进的计算工具了。很快,机械计算就逐步的进入人类历史并承担越来越重要的角色。
最开始的机械计算采用齿轮和转换方式完成计算。通过齿轮表达0到9数字,通过将乘法转换为多次加法,完成四则运算。后来,出现较为先进的查表法,改进了乘法运算。总的来讲,机械计算的问题是采用机械齿轮,可靠性低,体积庞大,位数少,算力低。当然,从现代眼光来看,特别是从电子计算回过头来看。机械计算还有一个大问题就是十进制。感兴趣的读者可以了解一下巴贝奇差分机,比较有名。
简单一笔介绍机械计算后,我们看看,进入近代,计算工具走了怎样的一条路。首先是莱布尼茨提出的二进制计数和计算方法。这让通过二进制代替十进制成为现实。使用二进制,可以在现实世界中有更多的物质选择。因为二进制可以简单表示为0和1,开和关,通和断,可选择的材料就比较充足。是不是有点曲线救国的感觉。德国工程师、发明家Konrad Zuse发明的Z1就是通过继电器来实现二进制的。注意了,这个人名翻译貌似有两个,一个是楚泽,一个是祖思,差别还比较大,各种资料书籍中两个翻译都有用,读者需要清楚他们是一个人。
其次是更好用的器件发明。从电子管来实现二进制,到现在晶体管实现二进制,计算机已经可以做到体积很小,算力很强了。关于这方面基础知识的内容就不介绍了,大家在日常学习中也都是反复咀嚼了的。
三 计算探秘
现在,我们来看看,计算到底是什么?
从前面的历史梳理中,计算还是比较纯粹的计算,说白了就是算术,就是加减乘除,进一步的有一些三角、对数相关的计算。即使是早期的电子计算机,也只是用来进行科学计算,不仅跟智能搭不上半点关系,就是跟非计算的功能也搭不上半点关系,比如文档处理、多媒体等等。而现在,这些非传统计算空间,则逐渐成为计算机的主要用武之地了,反而纯粹的计算则退居其次了。那计算到底是怎么演变出这些功能的,或者说这些东西是怎么用计算实现的?换个角度来说,计算机的底层基础就是开关电路,本质上就是由很多开关搭建的机器。通过这些开关来实现计算功能。那这些开关及其组合跟现在据称要定义下一代技术革命的人工智能是怎样搭上关系的?就好比我们人类一个个化学元素是怎么跟感情、意识搭上关系的?
要解答这个问题,我们需要先迈过第一个坎,也就是计算的基础:开关是如何涌现非计算功能的。
通过前面所述,这里面的第一个转变是计算到开关的转变。最开始的计算,都是直达目的的计算,无论通过手、算盘还是机械齿轮。在这个进化过程中,二进制改变了一切。使用二进制,就可以比较方便的用机器来实现计算。而二进制在机器中的实现,主要就是开关模型。我们完全可以通过制作开关来组建一台计算机器,但是你也知道了,用电子管或者继电器构建的机器,不仅体积大,耗电,而且速度慢。所以第二个转变是晶体管的出现。这极大地提高了计算能量的单位密度。用更少的电完成更多的计算。这一个链条的关系是使用晶体管做开关门电路,使用开关门电路构建逻辑门(与或非)和时序门(触发器)。使用逻辑门和时序门构建组合电路和时序电路,分别对应组合逻辑和时序逻辑。通过这两类逻辑构建控制逻辑和计算逻辑。进一步的产生CPU的各个单元。如此,完成了计算的基础功能。为了方便计算,人们又探求存储程序。这也是一个极大的突变。图灵机和冯洛伊曼架构就是这一突变的典型代表。因为数据都使用二进制,数据的存储也就用二进制来表示,或者更进一步的说,使用开关来表示。到此,门到计算机的桥就打通了。
那开关到文档、多媒体这些非计算功能的桥是怎么搭建起来的?别急,我们一点一点梳理。首先,通过上一节,我们有了从开关到数学计算机的桥。虽然这一步的目的主要是搭建科学计算的机器,但是它却具备了很多附加功能,这些附加功能,成为传统计算转到非传统计算的重要基础。第一就是存储。试想一下,之前的计算机器,是否有真正意义上的存储功能?也许有,但是仅仅是保存中间计算结果。而二进制计算机,则可以通过二进制存储数据,有了这个基础,我们的机器就可以对数据做二次处理。
其次,我们有了信息论。通过香农的信息论,我们可以用二进制对这个世界进行编码。这可以算得上是一次重大突破。世界被数字化、离散化了。对事物编码采样,然后进行存储、回放,世界的虚拟化成为了现实。语言文字可以用二进制编码,声音可以用二进制编码,图像可以用二进制编码,一切的一切,都可以用二进制编码来表示。到这里,开关到虚拟世界的桥搭建了一半。这里的一半是劈开的一半,不是折断的一半。另一半就由前述二进制的计算机来承担。它可以存储二进制,存储虚拟世界,还可以控制编程,对虚拟世界进行处理,再二次回放。这就是另一半桥。两半桥通过二进制粘合在一起。于是,开关到非计算功能的桥就算是搭建起来了。
总结一下,这其中其实有三个关键因素:
第一个关键因素是可数字化,世界被离散化,虚拟化。
第二个关键因素是可存储,虚拟世界可被记录、回放。
第三个关键因素是可控制,虚拟世界可被处理。
在这一切发生之前,有谁能够想到,开关可以构建虚拟世界?甚至可以说,二进制机器发明时,又有谁能够想到,本来是用来进行科学计算的开关组合体,能够涌出虚拟世界的功能。但是,很快,这个第二步的跨越,来的比以往都更早了一些。有点魔幻世界里结界被打破了的感觉。
此时,我们仍然用计算这个词。只是此时的计算,已经不再是单纯的数学运算了。我们的算力可能更多的关系了:数字化的精度、编解码的能力、数据搬运的性能、程序的指令周期速度等。这些与虚拟世界的处理都是息息相关的。
现在来看,计算到底是什么,你会有怎样的答案呢?
其实,泛化来讲,所有信息的处理,都是计算。开关与虚拟世界,只是成为了计算的对象。本质上,二进制只是比较方便的被选中了,十进制、二十进制也可以实现到虚拟世界的穿越,二者并没有必然依赖。这其中的关键,是一整套理论,实现上则是充足的算力。这个过程中,理论的分量还是比较重的,下面我们要引入的人工智能,则更加体现计算的力量。
人工智能并没有打破上面所述的三个关键因素。大家在相关资料中听到更多的是大模型,训练等词语。我们可以将大模型理解为一种特殊的编解码,或者说组合的编解码方案。当这个编解码器大到一定程度后,就会产生量变到质变的突变。许多零散的信息,变得系统化、体系化,或者讲,系统化需要的信息都被正确的组合起来了。这个过程,需要处理大量的数据,进而需要大量的算力。如何理解这个编解码器,是当前理论待突破的点。以前我们使用图形作为智能的切入点,现在ChatGPT带来新的视野,语言本身成为切入点。以前试图让机器理解语言,理解语言中的事物,现在则是构建知识体系,再来学习语言,通过交互反馈来学习。
如果有一天人工智能真的可以匹敌人脑,并且人类能够对模型做出解释,那么也许可以帮助我们实现对人脑的认知突破。是不是又有点曲线救国的意思。
如果人类真的有一天掌握了元素到无机物再到有机物再到生物的密码,那人类就真正的是自己的上帝了。
回到计算本身上,现在大模型的训练工作,需要消耗大量的能量,人脑则只需要25W左右就可以工作,这是不是说明,我们的纳米级晶体管尺寸还远远不够?粒子可被利用的微空间还很大?有点突发奇想了。
简单总结一下,人类通过利用、发明各种工具,不断的改进计算的性能,在二进制上产生了突变,引发了现在的人工智能革命。这其中的关键桥墩有门电路、组合电路、时序电路、控制器、存储器、存储编程、信息可数字化、信息可存储、信息可被编码、回放、修改、构建模型(特殊的编码器)等。
四 算力优化
关于计算本身,再多说一点。我们知道,在计算机中,使用不同的算法,可以节省算力,这是这门学科的精髓之一。其实,算法可以简单理解为捷径。完成一件事,可以有不同的方法,总有一种方法,消耗的能量较少,其他方法需要多做一些无用功,但是找出这些无用功则是比较难的。这就是计算机学科的数学特性。
算力的节省,可以有软件方法,也可以有硬件方法。软件方法就是我们说的比较传统的算法,也是更接近数学的方法。最终的效果就是计算得到结果时,控制器执行了更少的循环。硬件方法,则更多是结构上的改进。比如,通过真的并行执行,可以规避CPU本身取指、译码、执行、写回这样一个串行过程。当然这并不绝对,软件上也有结构方面的改进,硬件上也有算法本身的改进方法。比如,通过指令流水线、乱序执行、缓存等方法实现结构上改进;通过对电路逻辑进行优化合并,改进电路设计,可以减少功耗消耗。总之,总的目标就是有效利用每一个时钟周期,减少无用功。
凡事过犹不及,我们不能为了算力的节省在软硬件的边界上做的过多。软件有软件擅长的事情,硬件有硬件擅长的事情。需要各种复杂控制,交互性强的事情,还是交给通用CPU来完成比较合适。固定处理逻辑,可并行处理的事情,交给硬件可以更充分的提升性能。这些方面已经有很多好的方案在应用。比如在通用CPU里集成各种编解码器、GPU、NPU、DSP等等模块,专门负责特定领域的问题,实现软件硬化。而在FPGA里,通过程序编程,实现灵活的逻辑控制,从而实现硬件软化。还有将二者结合的例子,芯片里既有硬核CPU,也有FPGA用于实现各种软核逻辑,更加灵活,可应对多种复杂场景。
博主最近就遇到一个实际的例子,CPU核心可以跑Linux系统,但是无法处理一个高频中断的简单实时浮点计算任务。如果未实际接触,很难想象强大的CPU无法应对一个百十来行的浮点计算任务。这个任务交给FPGA,则就比较容易完成。这也就可以很好的理解,为啥Google用16000个CPU训练的模型,使用12个GPU就可以完成了。
五 未来展望
单纯从计算角度来讲,除了前面博主突发奇想的更微粒度的门电路外,还可以从其他方面入手,比如一直强调的量子计算。除此,还有一种称为生物计算的方法也不可忽视。生物计算类似化学反应,我们知道化学反应的速度是很快的,而且是并行进行的,如果有一天可以利用生物计算,还有一个好处是,可能只需要很少的能量就能完成大量的运算。如果这一天真的到来,那我们25W的大脑,还有多少优势?