《通灵芯片》读书笔记

《通灵芯片》是一本介绍计算机运作原理的小书,全书只有 134 页,书很薄, 却饱含作者对计算机的深刻理解。 这本书并不介绍具体的计算机技术,而是重在介绍其思想。 书中许多话见地深刻、高屋建瓴,值得反复品味。 作者对计算机的过去提纲挈领,对计算、智能的未来有期望、信念笃定。 令我最深刻的一句话是, 思维是计算、人脑为机器

《通灵芯片》封面

豆瓣链接:《通灵芯片 - 计算机运作的简单原理》

本文主要记录《通灵芯片》中的一些经典语句,这些语句对整个计算机科学有着深刻的理解。

序言 - 石的奇迹

  1. 计算机是以组成一个分层体系的部件构造的,每一个部件都重复多次。 要懂得计算机,你只要理解此分层体系就行了

  2. 计算机依据的是概念,对技术的依赖性没有那么大

  3. 关于计算机最值得一提的是,它的本质凌驾于技术之上。

  4. 功能抽象使概念独立于技术。

  5. 通用计算机的原则, 实际上只存在一种计算机 ,更确切的说,所有类型的计算机在所能和所不能方面是一致的。

    任何类型的计算装置,无论是由晶体管、杆和绳、还是由神经元构成,都可用一种通用计算机来模拟。

  6. 计算机的真正伟力,在于它不仅能处理概念的表示形式,而且能处理概念本身

  7. 模拟生物进化的设计,系统行为的突现,源于许多简单交互作用的累积,而非自顶向下的控制。

  8. 分层设计思想的一些理解

    本章节反复提及的一个系统设计思想是分层 ,它在整个计算机领域中随处可见, 例如 OSI 模型分层状态机、乃至整个计算机架构等等,都是分层的, 它是一种人工设计导向的系统设计的主要方法。

    值得说明的是,分层设计注意三个原则:

    1. 层次划分根据功能抽象,而不是过程切割。
    2. 下层不理解上层。
    3. 一般不做跨层交流。

    此外,分层体系具有不灵活性、且容易发生灾难性故障,底层部件的故障可能会波及整个系统。

通用件

  1. 实现技术应能由不完善的输入产生完善的输出,微小的误差必须消灭在初始萌芽状态。

    这句话的意思,是指系统的误差会不断放大,因此必须经常调节,将误差尽早消灭。

  2. 功能抽象是计算机设计的一项基本原则,虽不是设计复杂系统的唯一方法,但却是一种最常用的方法。

万能积木

  1. 有限状态机为何如此有用,其原因之一是它们能识别序列

    我们知道 正则表达式 就是利用有限状态机。

  2. 有限状态机尽管功能强大,但并不能识别所有类型的序列模式。例如,无法识别一个利用回文开锁的有限状态机, 也无法构造一个识别某个英语句子语法上是否正确的有限状态机。

  3. 书中提到一个有趣的关于状态机的难题 – 射击队问题 , 可以参考此视频

程序设计

  1. 如果说,布尔逻辑块和有限状态机是计算机硬件的积木。那么,一种编程语言便是生成计算机软件的一组积木。

  2. 一个编写得好的程序,同样具有风格、技巧。甚至幽默,条理清之清晰可与最优秀的散文媲美。

  3. 一个计算机只是一个特殊类型的有限状态机连上一个存储器

  4. 机器语言比一般编程语言简单得多,机器语言直接由有限状态机解释执行

  5. 在大多数计算机中,基本有两类指令:处理指令和控制指令。

图灵机的普适性

  1. 计算理论的核心思想是通用计算机 - 意即足以模拟任何计算装置的计算机

  2. 两个计算机能力的主要差别,仅速度和存储空间而已。所有的计算机(以及所有其他类型的计算装置),就其能而言,本质上是相同的。

  3. 只存在一种类型的通用计算机器。 任何由物理装置可进行的计算,只要有足够的时间和存储空间,它暗示着: 一个通用计算机,只要编程恰当,就可以模拟人脑的功能

  4. 混沌系统 – 初始条件中的微小变化,会对系统进展到何种状态产生很大的影响。

    伪随机数发生器就是一种混沌系统,种子的微小变化,可以造成随机数序列完全不同。

  5. 在同一意义上,数字计算机和物理世界中的万物,既是可预知的,又是不可预知的。它们遵循确定性规律,但这些规律具有极其难以预知的复杂后果。

    拉普拉斯主义 认为,知道物理世界中现在的每一个细节, 比如每个粒子的速度和位置,就可以计算出来未来任意时刻的每一个细节。 但是这个主义一般被认为是不可行的。

    书中这段话的意思是,哪怕计算规律是确定的,哪怕知道现在的一切,计算出未来的复杂性是巨大的。

  6. 停机问题 是不可计算的。

  7. 任何定理,人能证明,计算机亦能证明。不可计算的问题,人同样无法计算。人并不比计算机更有作为

  8. 大部分数学函数是不可计算的。幸好,几乎所有这些不可计算的函数都无甚用处。

  9. 要获得真正不可预知的效果,我们所知的唯一途径是依靠量子力学。

  10. 一杯水中每一个水分子能够在瞬间完成计算,一个原子为何能比一个数字计算机快这么多呢? – 并行处理.

  11. 一个神经元,其所有有关的计算特性都可在一个普通计算机上加以模拟。如果确是这样,那么,同样可以模拟由数百亿个神经元组成的神经网络。 这又意味着:可以用一个通用机来模拟人脑

  12. 人脑是一种计算机,而思维不过是一种复杂的计算

算法和探索法

  1. 一个算法,是一个不会失败的、确保达到既定目标的过程。

  2. 归并排序 是显示递归之神奇和精巧的一个范例。

    微积分何尝不是一种无穷的归并过程呢?

  3. 探索法几乎总是行之有效。 好的探索法往往推测正确。计算机的一些最引人注目的特效皆因探索法而非算法所致。

存储:信息与密码

  1. 流通和存储是同一个事物的两个方面。

    流通是把信息从一处发往另一处,存储则是把信息从一时发往另一时。 倘若你惯用思维空间思索,便不会对流通和存储这一意义上的等同感到诧异。

  2. 任何压缩法都利用数据中的规律性

  3. 压缩 - 提高质量是需要代价的。

  4. 图像具有高度的规律性,所以相对容易压缩。通常多数图像中的亮度和颜色几乎和邻点一样。

  5. 确定何种信息有意义,何种信息无意义,这是一种微妙的艺术,它取决于图像作何种应用,以及供谁应用。

  6. 许多图像和声音算法摈弃某些无意义的信息,以减少表示的信息量,这就是所谓的耗损压缩算法。

  7. 信息量度:一个二进制位模式的信息量等同于生成这些二进制位的最短计算机程序的长度。

  8. 一组信息经过充分压缩,便不再显示出规律性

  9. 经过充分压缩的文本,是随机的。许多数学家将此种不可压缩性,作为对随机性的定义。

  10. 伪随机数蕴含着潜在的规律模式。

    知乎 - 电脑取随机数是什么原理,是真正的随机数吗?

  11. 冗余的纠错码可以一定程度纠正信息传输中的噪音错误。 计算本身的错误,也可以构造冗余的容错逻辑块,少数服从多数。 容错靠的是冗余

    在分布式系统中,系统可用性依赖冗余设计,例如,分布式数据存储系统中采用多副本的策略、 著名的 Raft 共识算法 的选举过程 等等。

    在业务系统中,大家惯用的补偿手法,也是一种逻辑上的冗余设计。

    在通信和数据存储中的容错设计中,多添加一位校验数据块 (例如 RAID5校验位算法), 来抵抗数据可能损失的风险。 书中也提到一个经典的 奇偶校验位 的查错方法。

  12. 我们的考虑永远不会是万无一失的,最富于戏剧性的故障往往在意料之外发生。

  13. 大多数计算机错误并非因不正确的逻辑运算所致,其原因可溯源至设计中的错误 – 通常是软件设计中的错误。

    这一句许多人应该会感同身受。在我最近的工作经历中,亦深刻意识到,设计上的错误远比实现错误的威力大。

  14. 编有程序的计算机,是人类迄今所设计的最复杂的系统。 一个大型计算机的性能,即使无故障发生,有时也是无法预料的。 这就是为何不可能设计出一种绝对可靠的计算机的根本原因。

    分层系统中的底层部件的故障可能会波及整个系统。

    冗余技术只能使系统避免事先估计到的故障

速度:并行计算机

  1. 一般来说,计算机的速度取决于将数据移入和移除存储器所有的时间。

  2. 处理器与存储器之间的数据流动是顺序计算机的瓶颈所在。

  3. 我们可将计算机的存储器分成许多小存储器,并为每个存储器配备一个处理器,这种机器称为并行计算机。

  4. 计算机是一个由构造块组成的分层体系,各层为其上层提供服务。在并行计算机这种模式中, 计算机本身作为构造块

  5. 科学家们往往过高估计并行计算机的复杂性。

  6. 计算机速度为何这么慢,因为它是顺序执行的,一时只能做一事。

    计算机必须一个象点一个象点地看一帧图像。 相比之下,人脑瞬间就感知到整幅图像,同时将其所见与所知的每幅图像匹配。虽然人的视觉系统神经元的速度比不上计算机晶体管的速度, 但是在识别物体的速度方面,人远胜于计算机。

  7. 人脑充分利用并行性。

  8. 安达尔定律: 整个计算中总有一个部分具有内在的顺序性,即一时只能由单独一个处理器来执行的工作。

    即使计算中只有10% 具有内在的顺序性,那么, 无论你如何加速其余的 90% ,整个计算速度的提升都不会超过 10 倍。

    安达尔论证中的缺陷在于其假定:整个计算中的一个固定的部分,哪怕只有 10%,必定是顺序执行的。这一假定貌似有理, 但对于大多数大型计算来说却是站不住脚的。问题的关键是整个计算工作如何在众处理器之间划分。 初看,似乎最好的方式是赋予每个处理器执行程序的某一部分。更为有效的方式是使每个处理器执行相似的工作,但使用不同部分的数据, 这种方式称为任务的数据并行分解。

  9. 书中提到的一个有趣的问题:追踪链问题。

    假如有 N 台计算机,每个计算机上面都存有下一台计算机的网络地址。你可以在每一个计算机上部署一个程序。现在知道第一个计算机的网络地址, 如何找到最后一个计算机的网络地址?

    最简单的方法,是一个一个往下找。更快的方法是采用并行处理的方法。最开始,每个计算机将自己的地址发给它的下一个计算机, 此时每个计算机都知道了自己的上游是谁。然后每个计算机把自己下游计算机的地址发给上游计算机。 如此一来,上游计算机可以直接知道它的下游的下游计算机的地址。比如 A B C 三台计算机,这种方法下,A 可以知道 C 的地址。 如此反复进行,最终可以知道最后一台计算机的位置。 在整个处理过程中,每个计算机都同时参与其中,而非一个一个参与, 每次迭代都会使得需要考虑的总的计算机数量减半,显然这一种方法的复杂度更低,是 logN .

  10. 基于物理模型的计算之所以能并行执行,是因为物理世界本身是并行运行的。

    作者对此有许多例子,比如两杯液体融合,几乎在同一时间完成。一束光线的反射是同时发生的。 其强调的重点是,并行计算的每个参与单元都在同时做计算。并行计算机的每个单元都要有自己单独的处理器和存储器。

  11. 号称 Internet 的全球计算机互联网,其主要用途仍然是作为人们的一种通信系统。这些计算机如果一起协同工作, 其潜在的计算能力,远远超出迄今所建造的任何一台计算机。

    我相信,Internet 将表现出一种自发行为,跨越通过显式编程对系统所设定的特性。

    我猜测:Internet 的运行将更像一个并行计算机,倒不太像一个网络。将来 Internet 上所表现的自发行为,其有趣程度远胜于今天的风光。

自学习与自适应的计算机

  1. 编写能从经验中提高的程序完全是可能的。

  2. 计算机是利用反馈来做到吃一堑,长一智的。任何基于反馈的系统需要有三种信息:

    1. 期望状态(目标)是什么?
    2. 当前状态与期望状态的差距(误差)是什么?
    3. 缩小当前状态与目标状态的差距是哪些动作(反应)?
  3. 反馈系统根据误差调整系统的反应,以期达到目标。我们最熟悉的、最简单的反馈系统,不是自学习系统,而是控制系统。

  4. 反馈这一基本概念是所有自学习系统的核心

  5. 大脑似乎是通过修正连接神经元突触的强度来掌握新信息的。

跨越工程设计

  1. 我笃信:我们创造人工智能会远远早于理解天生智能。 我们不是通过工程设计来制造人工智能,而是建立合适的条件促使一种智能得以突现

  2. 我们的技术 – 其最伟大的成就莫过于创造了跳出工程设计思路的工具 – 使我们的创造力能够超越理解力。

  3. 有这样的可能:大脑中功能的学会是通过某种自组织过程,为使一个区域能执行某种功能而改变各种突触连接的强度。

  4. 大脑中的布线的模式并不像计算机中层次分明。

  5. 我们不能将人类智能当做一个分层体系的机器,指望通过分解和分析便能加以理解。

  6. 系统复杂到一定程度,那就无人能对该系统通盘了解。

  7. 但是,并非一切复杂系统都是脆弱的,人脑远比计算机来得复杂,然而,人脑却鲜有灾难性故障。

  8. 我宁可选一个由进化产生的排序程序,而不会用一个由一组程序员编写的排序程序

  9. 本质上,模拟进化是一种探索法搜索技术。

  10. 人脑充分利用了两种机制的优越性:它既是学习的产物,又是进化的产物。

  11. 在某种意义上,我们的头脑是一种机器。

  12. 意识是一般物理定律的作用和一种复杂计算的表现。

  13. 人脑为机器,思维为计算

(完)

本文原始链接地址: https://writings.sh/post/the-pattern-on-the-stone-notes

王超 ·
喜欢这篇文章吗?
微信扫码赞赏
评论 首页 | 归档 | 算法 | 订阅