政安晨AI笔记:计算机怎样运行——学习人工智能的起点
学习人工智能离不开了解计算机的工作原理,但大部分讲计算机的资料都特别技术化,虽然我是从事智能技术工作半生的人,身上也带着浓浓的技术气,但还是渴望能够用纯粹的白话,以超级简单的方式,讲透计算机是怎样运行的。
学习人工智能离不开了解计算机的工作原理,但大部分讲计算机的资料都特别技术化,虽然我是从事智能技术工作半生的人,身上也带着浓浓的技术气,但还是渴望能够用纯粹的白话,以超级简单的方式,讲透计算机是怎样运行的。
(一) 故事开始
在一块石头上,刻画了一系列几何图案,在外行看来,这些图案显得神秘而又复杂,但作为专业人士的我,清楚地知道,只要布局正确,这些图案就会赋予这块石头一种特殊的能力,即,对一种咒语做出回应。如果我用这种语言提问,石头便会应答。这是一个我用符咒创造的世界,也是一个在石头图案中想象的世界。
实际上,如果我从事的是计算机设计和编程,而上文提到的石头就是硅晶片,符咒便是软件程序。虽然蚀刻在芯片上的几何图案与指示计算机工作的程序一样,看起来复杂且神秘,但根据一些基本的生成原理,我们很容易将其解释清楚。
计算机是人类有史以来最复杂的人造物。但从基本原理上来说,它们又十分简单。计算机是由不同层次的部件构建起来的,而每一层次的部件都会被重复多次。只要理解了这些层次结构,你就能读懂计算机。
还有一个使计算机易于理解的原理,那就是各部件之间“交互作用”的本质。这些交互作用很简单,而且定义明确,通常具有单向性,可以准确地排列成一系列因果关系。这使得计算机内部的运行原理,比汽车发动机或者收音机的运行原理更容易理解。其实相比于汽车和收音机,计算机拥有更多零部件,但这些部件协同工作的方式非常简单。计算机更多依据的是概念,而非技术。这些概念与组成计算机的电子元件没有任何关系。
(二 ) 基本原则
计算机的本质基于几条基本原则。
第一条原则:计算机是执行输入、运算、及输出的机器。
第二条原则:程序是指令和数据的集合。
第三条原则:计算机的处理方式有时与人们的思维习惯不同。
大家都知道,计算机是由硬件和软件组成的。小朋友理解硬件和软件区别的时候,可能会想到游戏机设备和游戏软件的比较。但如果沿着这个思路再说深一点,计算机是功能抽象原理与通用计算原理的结合。
功能抽象原理包含因果关系、层次结构等逻辑概念,即许多层次结构能够被不断重复。计算机之所以易于理解,是因为你可以专注于某一层次结构发生的情况,而不必担心较低层次结构上发生的细节。所以说,功能抽象原理是使概念与技术脱离的关键。
而通用计算原理则表明:所有的计算机其实本质上都属于同一种类型,更确切地说,所有类型的计算机在能做哪些事和不能做哪些事上是相似的。我们也可以这样说,一台通用计算机能够模拟所有类型的计算机,无论其组成材料是晶体管、量子、纳米材料,还是神经元。
(三) 思想实验
接下来,基于刚才列出的计算机三条原则,让我们在大脑中进行一次组装计算机的思想实验。
现在准备你的材料,让我们来收集元件。
制作微型计算机所需的基础元件只有3个,CPU、内存和I/O外设,每种元件都是作为一块独立的芯片组在市场上出售的。CPU是计算机的大脑,负责解释、执行程序。内存负责存储程序和数据。I/O外设是输入与输出的缩写,负责将计算机和周边外部设备连接在一起。
试着想象一下,你挥挥手变了个魔法。将CPU摆在中间,内存摆在旁边,在四周将各类I/O外设,像围栅栏一样将他俩围起来,并在栅栏的一侧开了一扇门,然后,你把无形的能量注入到这个场地中,然后把门关上。神奇的一幕发生了!四周的"栅栏"竟然和中间的CPU与内存发生了各种复杂又不可名状的能量及数据交换,像一张大网交织融合,五光十色、绚丽夺目。
太棒了,你的想象很精彩,你成功地制造出了一台计算机。
(四) 程序语言
下面让我们一起给这台计算机注入第一组程序。
现在,继续我们刚才的思想实验。你看到了一片丝状大网:它们五光十色、绚丽夺目。但是你并不知道这些丝线之间是怎样的关系,以及这些丝线最开始铺开的时候是个什么过程?好了,请展开你强大的记忆力回溯功能,我带你来看一看这张丝线大网即将铺开时候的过程。
还记得吧,当你为整座篱笆墙注入能量的时候,你其实触发了一道神奇的禁制,这就是分布在篱笆栅栏的地面上的二进制指令,这些二进制指令告诉CPU如何在内存中先把指令铺陈开,再一道指令接着一道指令地执行外面一段一段的栅栏墙。这些二进制指令是由一些专业的程序员术士们制作成的,同样的二进制指令可以由很多种不同的语言制作成,就像不同国家的语言都可以表达同一种概念一样。这些语言中最接近二进制指令的,就是汇编语言。
汇编语言的语法和英语祈使句的语法很像。一开头放置了一个“做什么”的动词,这个动词就相当于汇编语言中的操作码。在动词后面放置了一个“动作要作用到什么上”的宾语,这个宾语就相当于汇编语言中的操作数。因为程序的作用是向CPU发出指令,而且编程语言又是由说英语的人发明的,所以编程语言与英语类似也就不足为奇了。
比汇编语言高级一点的还有C语言、PYTHON语言等等,不过这些不同的语言在术士们手中的作用都是一样的:把它们变成二进制指令在计算机这个“篱笆墙“内执行。这些指令就是我们通常所说的"机器语言"。
(五) 输入输出系统
CPU通过机器语言协调各段外围篱笆墙一同工作,是有个基本章法的,这就是工作周期。否则大家各干各的,就乱套了。这个工作周期叫做频率,也称"主频",也可以用指令周期来理解。而刚才您做思想实验的这个小过程被称为BIOS,用术士们的话说就是:基本输入输出系统。
这样,我们就通过思想实验体会到了计算机底层的工作方式。现在,你已经变得更加了解计算机了,其它程序员术士们很难忽悠你了。
(六) 程序与算法
如果你还想继续,那我要先问你个问题。你看过小溪与江河吗?你说,我当然见过。好,你已经了解程序了。记住我接下来的咒语:程序像河水一样流动着。因为程序与河水都有同样的性质,它们都是:向着一个方向流淌;流着流着产生支流;卷成漩涡;汇聚成海;再被大气吸收,变成雨水,降回河流。是的,这就是程序。
这里对程序总结一下:
与河流的流动方式一样,程序的流程也分为三种:
A. 在程序中,把犹如水流向着一个方向流淌的流程称作“顺序执行”;
B. 把流着流着产生了支流的流程称作“条件分支”;
C. 把流着卷成漩涡的流程称作“循环”。
而汇聚成海再通过雨水变成河流的过程,叫做"重新启动"。
程序员术士们一般都是先考虑程序的流程再开始编写程序的。只有编写过程序的人才能体会到“程序是流动着的”。一个人编写的程序如果不能按照预期运行,就说明他还没有很好地掌握“程序是流动着的”这一概念。
为什么说“程序是流动着的”呢?因为作为计算机大脑的CPU,在同一时刻基本上只能够解释与执行一条指令。把指令和作为指令操作对象的数据排列起来就形成了程序。请想象把若干条指令一条挨一条地依次排列到一条长长的纸带上。然后把这条纸带展开抻平,从顶端开始依次解释并执行上面的每条指令,这样看起来程序就好像流动起来了。这就是程序的流程。但程序的流程不会只有一种,就像世上不会只有你和我一样,还有各种各样的我们的同类。
程序是用来在计算机上实现现实世界中的业务和娱乐活动的。为了达到这个目的,程序员术士们需要结合计算机的特性,用程序来表示现实世界中对问题的处理步骤,即处理流程。在绝大多数情况下,为了达到某个目的需要进行若干步处理。例如为了达到“计算出两个数相加的结果”这个目的,就需要依次完成以下三个步骤,即“输入数值”“执行加法运算”,以及“展示结果”。像这样的处理步骤,就被称为算法。在算法中,有表示程序整体大流程的算法,也有表示程序局部小流程的算法。
算法是程序设计的"成语",术士们想要出口成章,就一定要了解算法。与算法成为好朋友的口诀如下:
1.算法中解决问题的步骤是明确且有限的。
2.计算机不靠直觉而是机械地解决问题。
3.利用计算机的处理速度,并用编程技巧提升程序执行速度。
4.可以在草图上考虑算法,并找出数字间的规律。
我亲爱的朋友,你瞬间明白了吧,原来计算机算法与小学数学是相通的!
(七) 操作系统
当然,对于操作系统、数据库、以及面向对象进行编程的高级的术士技能,我只想讲一段话概括它们:
很久很久以前,我们都生活在部落中,过着简单而纯粹的生活;随着我们生产能力和智力水平的提高,我们逐渐成立了国家,过起了社会化分工的日子。有了法律、有了道德、有了社会契约等等。总之一句话,我们变得复杂了,回不去了。为了让人们的生活有保障、有秩序,政府成立了,制定了大量的条例约束各行各业的行为,操作系统就此诞生。而各行各业在工作生活中积累下巨量的经验,于是人们发明了文字和书籍,记录下这些经验,数据库出来了。政府和各行业因此变得更复杂了,需要更加专业的人做更加专业的事,面向对象的编程出现了。
这就是前面我们一起进行的思想实验与程序员术士们发展出来的这些高级技能之间的区别。
(八) 网络与协议
但国家与国家之间的交流怎么办呢?网络应运而生。通常,人们把通过连接多台计算机所组成的、可用于交换信息的系统称为“网络”。互联网作为网络的一种,可以使我们的计算机和远在千里之外的计算机连接在一起。
诸位都经常上网,在网上看看网页、刷刷视频、玩玩游戏,听听数字陈言的音频,这一切似乎已经司空见惯了。
我们通常把在一栋建筑物内或是一间办公室里的那种小规模网络称作LAN。与此相对,把互联网那样的大规模网络称作WAN。而用于把全世界的计算机彼此相连的网线已然交织成了一张网,这就是广域互联网。因为信息可以以电信号的形式在网线中传播,所以计算机彼此之间就能够进行信息交换。但为了交换信息,还必须在发送者和接收者之间事先确定发送方式。这种对信息发送方式的规定或约束就称为“协议”。
小到公司内部的网络,大到互联网,TCP/IP协议族已然成为了现行的标准。TCP/IP这个名字意味着同时使用了TCP协议和IP协议。几乎所有的网卡都会在上市前被分配一个不可变更的MAC地址,这个地址是计算机在网络上的身份ID。而传输信息的过程中为了保证安全,会把信息在发送端加密,并在接收端解密。计算机收到解密的信息包,就会交给相应的程序进行处理再加工,变成我们能够理解的数字内容。
(九) 计算机的本质表达
想要真正了解计算机的本质,有些表述可能是需要知道的:
第一段描述:计算机的构建基础包括布尔逻辑、二进制、逻辑块等。如果有一天计算机的硬件设备被淘汰,这些基础都将依然保持正确。
第二段描述:构建一台计算机需要一些基本的工具,比如逻辑功能和有限状态机。逻辑功能主要是指明确计算规则,为不同的输入指定对应的输出。而有限状态机则可以帮助计算机实现随时间变化的功能。
第三段描述:在计算机的世界里,只要你能够精确描述你所想象的东西,它就能使其运行起来,而描述的关键在于编写正确的程序。
第四段描述:计算机的能力极限是什么?图灵提出了假设,只要具备足够多的时间和存储空间,任何一种通用计算机都能完成所有物理计算装置所能完成的计算任务。也就是说,计算机的极限将是无极限!这是废话吗?不,这是一个了不起的假设,也许有一天它会成为结论。其实,模拟人类的大脑对计算机来说简直就是小儿科,因为整个宇宙也可能是一台巨大的计算机,它虚拟出了我们的一切。
第五段描述:回到现实。计算机的运行受到存储空间大小的限制。奢望建立一台完美的计算机是不现实的,大多数计算机故障都源于错误的设计。
第六段描述:计算机的算法是指一系列运算步骤,通常以程序的形式呈现,而每一种算法都可以通过不同的方式来实现。
第七段描述:计算机的运行速度取决于将数据写入和移出存储器所花费的时间。为了达到更快的处理速度,现在的计算机需要同时执行多个操作。为了实现这个目标,我们可以将计算机存储器分为多份,并为每一份提供独立的处理器。这种计算机被称为并行计算机。
第八段描述:并非所有的程序都是一成不变的。我们可以编写出随着经验的积累而不断完善的程序。当计算机运行这样的程序时,它们能够从错误中积累经验,并纠正问题。计算机可以通过反馈系统来实现这一功能。
任何基于反馈机制的系统都需要如下三类信息:
1、什么是理想的状态?
2、当前状态和理想状态之间有什么差异?
3、采取什么样的行动会减少当前状态和理想状态之间的差异?反馈系统就是这样根据误差来调整响应动作,以实现目标。
第九段描述:类人工智能方式是计算机发展到一定程度时必然会出现的。但搞清楚人类大脑的运行机制,对于构建足够"聪明"与足够"善良"的人工智能来说至关重要。因为,我们将人类文化融入了机器智能的形成过程,最终得到的产物不是完全的人工智能,而是人工智能支撑的人类智能;所以,我们要充分相信人类得之不易的进化脑,把人工智能引向人类智能是完全有可能的。
到此为止。从基础到幻想,我们完成了对计算机全貌的粗略认知。
好了,这么有耐心的读者您已经看到了计算机原理的模样了。它并不是那样的冷冰冰,相反,它是一个活泼的、生机盎然的数字世界,正是这样的世界在快速地奔向人工智能时代。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)