computer-science / concepts
核心概念
抽象、递归、类型、并发、缓存、虚拟化——计算思维的基本词汇
66 篇
抽象与分层
Abstraction and Layering
1970 年代,一台电子计算机上运行程序,程序员需要了解寄存器、总线、内存地址。今天,一个网页开发者用 JavaScript 调用 fetch() 发出网络请求,中间隔着十几层代码,却无需知道任何一层的内部机制。 这种能力——用简单界面隐藏复杂实现——叫做抽象。它是计算机科学中最重要、也最常被忽视的思想。
抽象 · 分层架构 · 接口
被 6 个领域引用(人类历史、生命科学、数学、宇宙学、政治学、宇宙物理)
递归
Recursion
字典里如果有这样一条词条:"递归,见:递归",读者会感到困惑和被戏弄。 然而计算机科学里,这种用自身定义自身的方式,是一种精密的、有时是唯一自然的表达方式。递归是现代计算机语言的核心能力之一,也是理解许多算法和数据结构的钥匙。
递归 · 分治 · 调用栈
被 1 个领域引用(数学)
数据结构
Data Structures
一个程序员拿到一台 16GB 内存的电脑,可以用十几种截然不同的方式把数据放进这 160 亿个字节里。选择哪种方式,决定了程序快还是慢、简单还是复杂,有时甚至决定了一个问题能不能被解决。 这些组织数据的方式,就叫数据结构。
数据结构 · 数组 · 链表
被 1 个领域引用(数学)
计算机体系结构
Computer Architecture
1945 年 6 月,约翰·冯·诺伊曼(John von Neumann)起草了一份关于 EDVAC 计算机设计的报告草稿,描述了一个看似简单的思想:程序和数据存储在同一内存中。 这个"存储程序"(Stored-Program)概念是革命性的。在此之前,ENIAC 等早期计算机通过手动插拔电缆来改变程序——改变程序意味…
体系结构 · CPU · 冯诺依曼
被 5 个领域引用(化学、数学、工程与技术、哲学思想、宇宙物理)
CPU 流水线
CPU Pipelining
想象一个汽车组装工厂,有一百道工序。最简单的方式是:一辆车从头到尾完成所有工序后,再开始下一辆。如果每道工序需要 1 分钟,完成一辆车需要 100 分钟,每小时生产 0.6 辆。 更聪明的方式是流水线(Assembly Line):一辆车完成第一道工序后,立刻移向第二道,而另一辆新车进入第一道工序。在任何一个时刻,每道…
CPU · 流水线 · 乱序执行
GPU 与并行计算
GPU and Parallel Computing
2012 年,多伦多大学的 AlexNet 在 ImageNet 图像识别大赛中,将前五误差率从 26% 降到 15.3%——领先第二名超过 10 个百分点。震撼行业的不只是准确率,还有它的实现方式:用两块 NVIDIA GTX 580 GPU(每块 3GB 显存)训练出来。 这是深度学习革命的奇点时刻。GPU,这个原…
GPU · 并行计算 · CUDA
被 2 个领域引用(宇宙学、数学)
Unicode 与文本编码
Unicode and Text Encoding
2003 年 10 月,软件开发者 Joel Spolsky 发表了一篇长文,标题就带着不容商量的口气:《每个软件开发者绝对、必须了解的 Unicode 与字符集知识(没有借口!)》。 文章里有一句话后来被反复引用——"脱离编码去谈一个字符串,是没有意义的"(It does not make sense to have…
Unicode · UTF-8 · 字符编码
被 2 个领域引用(语言学、政治学)
并发与并行
Concurrency and Parallelism
1965 年,英特尔联合创始人戈登·摩尔观察到:集成电路上可容纳的晶体管数目,大约每两年翻一番。这个预测维持了数十年,让单核处理器的速度持续攀升。 2004 年,Intel 宣布放弃 4GHz 的 Pentium 4 计划,转向多核处理器。不是因为不想更快,而是因为功耗和散热的物理极限已经到来。从那时起,计算机的性能提…
并发 · 并行 · 线程
被 2 个领域引用(经济学、政治学)
存储层级与缓存
Memory Hierarchy and Caching
CPU 处理数据的速度,比从主内存(RAM)读取数据快大约 100 到 500 倍。 这句话意味着:如果 CPU 每执行一步都要去内存取数据,那 99% 的时间它在等待——什么都不做。这个"速度鸿沟"(memory wall)是现代计算机体系结构最核心的工程挑战之一。
存储层级 · 缓存 · 局部性原理
被 2 个领域引用(心理学、生命科学)
虚拟化与容器
Virtualization and Containers
2006 年,亚马逊推出了一项新服务:EC2(Elastic Compute Cloud)。它让用户通过浏览器点几下,就能在几分钟内"租到"一台 Linux 服务器,不再需要购买物理机器。 这件事在技术上依赖一个已经存在了四十年的想法:虚拟化——让一台物理计算机"假扮"成多台,每台互相隔离。AWS 的出现,让这个想法从…
虚拟化 · 容器 · Docker
网络协议栈 TCP/IP
Networking Protocols: The TCP/IP Stack
1969 年 10 月 29 日,第一条通过 ARPANET 发送的消息是"lo"。原计划发"login",系统在收到前两个字母后崩溃了。 五十年后,这个网络的后代——互联网——每秒传输的数据量超过 10 万 GB。支撑这一切的,是一个精密的分层协议体系,其核心思想 1969 至 1983 年间逐渐成形,核心规范至今仍…
TCP/IP · 网络协议 · 分层模型
被 6 个领域引用(宇宙物理、经济学、生命科学、工程与技术、数学、政治学)
操作系统
Operating Systems
1969 年夏天,贝尔实验室的肯·汤普森(Ken Thompson)发现了一台被闲置在角落里的老旧 PDP-7 计算机。他用了三周时间,在上面写下了一个简单的操作系统内核、一个 shell、一个汇编器。他的妻子和孩子出门度假,给了他这段不被打扰的时间。 这个周末项目就是 Unix 的雏形——今天地球上几乎所有重要的计算…
操作系统 · 内核 · 进程管理
数据库与事务
Databases and Transactions
设想一个最朴素的取款程序:先读出账户余额,减去取款金额,再把新余额写回。当两台 ATM 在同一瞬间为同一个账户执行这段逻辑——都读到了 1000 元、都各自算出 900 元、都写回 900 元——结果是取走了 200 元,账户却只少了 100 元。再设想写回的那一刻服务器恰好断电:扣款记下了一半,钱却没真正划走。 这类…
数据库 · 事务 · ACID
被 4 个领域引用(经济学、生命科学、数学、政治学)
编译器
Compilers
1957 年,约翰·巴克斯(John Backus)领导的 IBM 团队发布了第一个 FORTRAN 编译器,把人类用代数公式写的代码翻译成 IBM 704 的机器指令。当时许多程序员不相信这会有用——他们断言,编译器产生的代码不可能比手写的汇编快,而速度就是一切。 他们错了。FORTRAN 编译器产生的代码的效率让大…
编译器 · 词法分析 · 语法分析
被 1 个领域引用(数学)
缓存策略
Caching Strategies
2010 年,Facebook 的工程师们面临一个危机:随着用户增长,MySQL 数据库承受不住负载,页面响应时间大幅上升。解决方案是什么?不是更换数据库,而是在数据库前面加了一层——使用 Memcached(一个分布式内存缓存系统)把热点数据存在内存里,大量请求根本不需要到达数据库。 2013 年,Facebook …
缓存 · 性能优化 · CDN
分布式系统
Distributed Systems
2003 到 2006 年间,Google 接连发表了三篇论文:GFS(分布式文件系统,2003)、MapReduce(分布式计算框架,2004)、Bigtable(分布式数据库,2006)。这三篇论文重塑了整个互联网行业的基础设施——不是因为它们发明了什么革命性算法,而是因为它们系统性地解答了一个问题:如何让数千台普…
分布式 · 一致性 · 容错
被 8 个领域引用(哲学思想、政治学、经济学、宇宙学、工程与技术、生命科学、数学、宇宙物理)
分布式共识算法
Consensus Algorithms
2014 年,Diego Ongaro 和 John Ousterhout 在 USENIX ATC 发表《In Search of an Understandable Consensus Algorithm》。论文没有声称 Paxos 是此前唯一正确的协议,而是指出:从 Paxos 的单次决议核心到可实现的复制日志,…
共识 · Paxos · Raft
被 4 个领域引用(经济学、政治学、生命科学、哲学思想)
云计算
Cloud Computing
2006 年,亚马逊先后发布了两个不起眼的服务:3 月推出 S3(简单存储服务),8 月推出 EC2(弹性计算云)。定价是:存储每 GB 每月 0.15 美元,计算每小时 0.10 美元。 当时没有人意识到,这是一场彻底重构软件行业商业模型的革命的起点。近二十年后,云计算市场年规模已超过 5000 亿美元。
云计算 · 虚拟化 · IaaS
被 1 个领域引用(法学)
负载均衡
Load Balancing
每年"双十一"零点,或者一场热门演唱会开票的瞬间,海量请求在一秒内涌向同一组服务器。没有任何一台机器能独自扛住这种流量。让网站不至于当场崩溃的,是一个安静地站在用户和服务器之间、把潮水般的请求分摊到一排机器上的角色——负载均衡器(load balancer)。它是现代大规模互联网服务最不起眼、却最不可或缺的基础设施之一…
负载均衡 · 可扩展性 · 高可用
被 1 个领域引用(经济学)
TCP 与可靠传输
TCP and Reliable Transport
1986 年秋,互联网发生了所谓的"拥塞崩溃":ARPANET 的吞吐量骤降至峰值的 0.1%。流量挤满了网络,但几乎没有有用的数据成功到达。这不是硬件故障,而是协议设计的缺陷——当时的 TCP 没有任何机制限制发送速率。工程师 Van Jacobson 花了几个星期设计出拥塞控制算法,写了几百行代码,将 ARPANE…
TCP · 可靠传输 · 拥塞控制
DNS:互联网的命名系统
DNS: The Internet's Naming System
1983 年之前,互联网上的所有计算机名字都记录在一个文件里:HOSTS.TXT。这个文件由斯坦福研究院(SRI)下属的网络信息中心(NIC,长期由 Elizabeth "Jake" Feinler 团队负责)手工维护,每周编译一两次新版本,所有主机用 FTP 从单一服务器 SRI-NIC 下载同步。当时 ARPANE…
DNS · 域名 · 分布式系统
被 1 个领域引用(政治学)
万维网与 HTTP
The Web and HTTP
1991 年 8 月 6 日,互联网上出现了第一个公开可访问的网页。它的内容是关于如何使用万维网的说明,由 Tim Berners-Lee 在瑞士日内瓦的 CERN(欧洲核子研究中心)托管。地址后来常写成 http://info.cern.ch。万维网的第一份公开文档是说明书,不是报纸:它教人怎么用浏览器、服务器和 H…
HTTP · 万维网 · REST
被 3 个领域引用(人类历史、经济学、哲学思想)
路由与交换
Routing and Switching
一个数据包从北京的客户端发出,穿越多个运营商网络,跨越太平洋海底光缆,到达旧金山某个数据中心的服务器——全程可能经过 15 个路由器,耗时 120 毫秒。这个过程没有任何中央调度,每一个路由器只基于自己掌握的信息,独立决定"下一跳去哪里"。 这就是互联网路由的本质:去中心化的、局部决策驱动的、自适应的数据包转发系统。
路由 · 交换 · BGP
文件系统
File Systems
你电脑上有 100,000 个文件分散在 SSD 的数十亿个存储单元中,你用一秒钟就能找到并打开任何一个。 这个能力如此日常,以至于我们从未思考它背后的机制。但这背后是几十年的工程:如何在可能随时断电、可能出现坏块的存储硬件上,可靠地保存和检索数以亿计的命名数据对象?
文件系统 · 存储 · inode
被 1 个领域引用(生命科学)
区块链
Blockchain
2008 年 10 月 31 日,署名"中本聪(Satoshi Nakamoto)"的人向密码学邮件列表发布了一篇九页论文:《比特币:一个点对点电子现金系统》。文中提出了一种无需可信第三方的去中心化账本机制,核心数据结构是一条哈希链接的区块序列。 这个数据结构后来被称为"区块链"。它解决的核心问题,是密码学领域思考了数…
区块链 · 密码学 · 分布式账本
被 4 个领域引用(经济学、政治学、人类历史、哲学思想)
嵌入式系统
Embedded Systems
你口袋里的手机是一台通用计算机。但打开洗碗机的控制面板,里面那块芯片永远只做一件事:控制洗碗程序。这就是嵌入式系统(Embedded System)——专门为特定任务而设计、集成到更大设备中的计算系统。 嵌入式系统无处不在,却几乎不被感知。一辆现代汽车通常装有 70 到 100 个独立的嵌入式处理器(ECU,电子控制单…
嵌入式 · 实时系统 · 微控制器
被 1 个领域引用(医学与公共卫生)
实时系统
Real-Time Systems
1996 年 6 月 4 日,阿丽亚娜 5 型火箭首次发射,在主发动机点火后约 37 秒(离地升空约 30 秒)爆炸解体。调查结果令人震惊:原因是一个 64 位浮点数被转换为 16 位整数时发生溢出,触发了未处理的异常,导致惯性导航系统失效,火箭偏离轨道。 更讽刺的是:这段代码来自阿丽亚娜 4 型,在 4 型上从未出错…
实时系统 · 调度算法 · 硬实时
被 7 个领域引用(宇宙学、经济学、数学、地球科学、工程与技术、医学与公共卫生、心理学)
数据库索引与查询优化
Database Indexing and Query Optimization
一张存储了 10 亿行用户数据的表,每行包含用户 ID、姓名、邮箱、注册时间等字段。你执行一条查询: sql
数据库 · 索引 · 查询优化
大数据系统
Big Data Systems
2003 年,Google 内部工程师在每天爬取、索引数十亿网页,每周要处理数 PB 数据时,意识到已有的工具完全无法应对:单台服务器不够,商业数据库太贵且扩展性有限。 他们需要一种全新的计算范式,能够把普通廉价服务器组成集群,分布式地处理这些数据。他们发明了MapReduce,并把底层存储叫做 GFS(Google …
大数据 · MapReduce · 分布式计算
被 5 个领域引用(地球科学、宇宙学、生命科学、经济学、法学)
微服务架构
Microservices Architecture
2008 年 8 月,Netflix 的单体 Oracle 数据库损坏,导致连续三天无法发货 DVD。这场事故让他们看清了单体 Java 应用(所有功能打包在一个巨大的程序里)的脆弱:一个模块的 bug 可以拖垮整个网站,一次小功能上线需要协调数百名工程师同时停工。2009 年,他们做了一个痛苦的决定——迁上云、把整个…
微服务 · 系统架构 · API
被 1 个领域引用(经济学)
消息队列与流处理
Message Queues and Streaming
2010 年,LinkedIn 的工程团队遇到了一个奇怪的问题:系统里有数十个数据管道,把数据从各个来源同步到各个目的地,形成了一张复杂的点对点网络。每增加一个新数据来源或新的数据消费者,就需要新写一批同步管道,整个系统呈现出 $O(n^2)$ 的连接复杂度。 他们的解决方案是发明一个"统一日志"——一个持久化的、分布…
消息队列 · 流处理 · Kafka
被 2 个领域引用(宇宙学、数学)
容器与容器编排
Containers and Orchestration
2013 年 3 月,一家名不见经传的 PaaS 初创公司 dotCloud 在 PyCon 上发布了一个内部工具——Docker。演示视频里,工程师 Solomon Hykes 在台上用几行命令打包了一个应用,把它传到另一台机器上,一个命令运行起来:环境完全一致,没有任何"在我机器上能跑"的问题。 那次演示被后来的开…
容器 · Docker · Kubernetes
可观测性与监控
Observability and Monitoring
凌晨三点,一个电商网站的下单接口突然变慢。表面只是"慢了一点",但背后这一次下单,可能穿过了几十个互相调用的微服务、几个数据库、一个消息队列和两个外部支付接口。问题出在哪一环?在单台服务器的年代,工程师登录机器看看日志就行。在今天这种分布式系统里,"看看日志"几乎等于在一座迷宫里找一根针。 可观测性(Observabi…
可观测性 · 监控 · 分布式追踪
被 3 个领域引用(经济学、政治学、地球科学)
类型系统
Type Systems
1996 年 6 月 4 日,欧洲航天局阿丽亚娜 5 号运载火箭首航。升空约 37 秒,制导系统因一行代码崩溃:一个表示水平速度的 64 位浮点数被转换成 16 位有符号整数,而它的值超过了该类型能容纳的上限 32767,转换失败。 两台惯性参考系统先后宕机,把诊断信息当成飞行数据发回主机,火箭随即偏离航向,约 40 …
类型系统 · 静态类型 · 动态类型
被 2 个领域引用(数学、政治学)
垃圾回收
Garbage Collection
1959 年,约翰·麦卡锡(John McCarthy)在为 Lisp 实现"cons cell"(基本数据结构)时,遇到了一个根本问题:程序分配的内存单元,用完了怎么处理? 让程序员手动追踪并释放每一个不再使用的内存单元,对于 Lisp 这种动态语言来说几乎不可能。麦卡锡的解决方案是:让运行时自动识别并回收不再使用的…
垃圾回收 · 内存管理 · GC
被 1 个领域引用(经济学)
版本控制
Version Control
1991 年,Linus Torvalds 在赫尔辛基大学宿舍里开始写 Linux 内核,协调方式是通过邮件列表发补丁文件(.patch)。贡献者把修改写成差异文件,发给 Linus,他手工合并。 这种方式在全球数千名开发者同时贡献代码时完全行不通。
版本控制 · Git · 协作
被 2 个领域引用(哲学思想、政治学)
设计模式
Design Patterns
1977 年,建筑学家克里斯托弗·亚历山大(Christopher Alexander)出版了《建筑模式语言》——一本记录了 253 种建筑设计中反复出现的解决方案的书:如何设计楼梯、如何安排窗户、如何创造让人感到舒适的广场。他相信,这些模式是独立于具体设计的"反复出现的结构关系"。 1994 年,四位软件工程师——E…
设计模式 · 面向对象 · 架构
软件工程
Software Engineering
1968 年,北大西洋公约组织(NATO)在西德加尔米施举办了一次研讨会,议题只有一个:软件危机(Software Crisis)。 当时,大型软件项目普遍超预算、超期限、质量低下,甚至根本无法完成。IBM 的 OS/360 操作系统开发——有数千程序员参与——成为失控的代名词。项目负责人 Fred Brooks 后来…
软件工程 · 开发方法论 · 敏捷
被 2 个领域引用(经济学、政治学)
软件测试
Software Testing
1962 年 7 月 22 日,水手 1 号(Mariner 1)的 Atlas-Agena 火箭偏离航向,地面安全官在发射后 294.5 秒发出自毁指令。NASA 的任务史把失败归因于两个共同发生的问题:Atlas 制导天线失去锁定,以及制导方程中的半径符号漏掉上划线,使程序没有按预期平滑处理数据。流行叙事常把它说成…
测试 · TDD · 单元测试
被 6 个领域引用(心理学、哲学思想、宇宙学、数学、经济学、工程与技术)
API 设计
API Design
2002 年前后,亚马逊的 CEO 杰夫·贝索斯发出了一道著名的内部指令(其内容直到 2011 年才被前亚马逊、时任 Google 工程师 Steve Yegge 在一篇广为流传的随笔中公开转述): 按 Yegge 的转述,备忘录末尾还附了一句威胁:"任何不遵从这一规定的人都会被开除。"这道"贝索斯备忘录"强制推行了一…
API · REST · GraphQL
被 2 个领域引用(法学、政治学)
函数式编程
Functional Programming
1958 年,约翰·麦卡锡(John McCarthy)在麻省理工学院设计了 Lisp——世界上第一门函数式编程语言。它的灵感不来自硬件或工程实用性,而来自阿隆佐·邱奇(Alonzo Church)在 1930 年代发展的数学系统:Lambda 演算(Lambda Calculus)。 这个血统决定了函数式编程的气质:…
函数式编程 · 不可变性 · 纯函数
面向对象编程
Object-Oriented Programming
1967 年,挪威计算机科学家奥利·约翰·达尔(Ole-Johan Dahl)和克里斯滕·尼高(Kristen Nygaard)发布了 Simula 67——一种为离散事件模拟而设计的语言(其前身 Simula I 早在 1960 年代初已问世)。为了模拟现实中的船只、银行和交通系统,他们引入了"类"和"对象"的概念:…
面向对象 · 封装 · 继承
被 1 个领域引用(哲学思想)
逻辑编程
Logic Programming
1972 年夏天,法国马赛大学的阿兰·科尔默劳(Alain Colmerauer)和他的学生菲利普·鲁塞尔(Philippe Roussel)正在为一个自然语言问题发愁:怎么让计算机理解法语问句并给出回答?他们试过把语法规则和推理规则直接写成一阶逻辑的句子,再让一台定理证明器去"证明"用户问句的答案存在。结果发现,证明…
逻辑编程 · Prolog · 归结
计算机图形学
Computer Graphics
1995 年,《玩具总动员》(Toy Story)上映,这是第一部完全由计算机生成的长篇动画电影。导演约翰·拉塞特(John Lasseter)和皮克斯团队用了约四年完成制作,全片 11.4 万帧画面由一个 117 台 Sun 工作站组成的"渲染农场"算出,累计耗费约 80 万机时(machine-hour)——平均每…
图形学 · 渲染 · GPU
被 2 个领域引用(数学、艺术)
人机交互
Human-Computer Interaction
1968年12月9日,在旧金山一间礼堂里,一位名叫道格拉斯·恩格尔巴特(Douglas Engelbart)的工程师坐在屏幕前,用一只木壳的小盒子在桌面上滑动,屏幕上的光标随之移动。他点击、拖拽、跳转链接、与远在数十公里外的同事实时共同编辑同一份文档。 台下的观众看到的,是鼠标、超文本链接、视频会议、屏幕窗口、协作编辑…
人机交互 · HCI · 图形界面
被 5 个领域引用(哲学思想、语言学、经济学、人类历史、政治学)
计算机安全原则
Computer Security Principles
2017 年 5 月 12 日,"WannaCry"勒索软件在一天之内感染了全球 150 个国家超过 23 万台计算机。英国国家医疗服务体系(NHS)的大量医院被迫关闭紧急服务,手术被取消,救护车被改道。代价估计超过 40 亿美元。 WannaCry 利用的是 Windows 的一个漏洞(EternalBlue),这个…
安全 · 密码学 · 漏洞
被 3 个领域引用(政治学、经济学、数学)
加密基础
Encryption Basics
1977 年,Ron Rivest、Adi Shamir、Leonard Adleman 设计了后来以三人姓氏首字母命名的 RSA,并于次年发表。它利用模幂运算易算、从公开参数恢复私钥在已知经典算法下代价极高的不对称性。 RSA 是早期公开发表的实用公钥加密与签名方案之一,不是“公钥思想的唯一第一步”:Diffie–H…
密码学 · 加密 · 公钥密码
被 2 个领域引用(数学、法学)
身份验证与授权
Authentication and Authorization
每次你登录一个网站,系统至少要处理四个不同问题: 身份核验(identity proofing)还要回答“这个数字账户与哪个现实主体有关”,它不同于每次登录。一个系统可以正确验证账户控制权,却仍因对象级授权错误让用户读取他人数据。
身份验证 · 授权 · OAuth
被 3 个领域引用(政治学、哲学思想、经济学)
软件供应链安全
Software Supply Chain Security
现代软件很少从空白开始。一个应用可能依赖操作系统镜像、编译器、包管理器、数百个直接与传递依赖、CI 插件、制品仓库、部署脚本和自动更新服务。攻击者不一定要攻破最终应用;只要控制其中一个被信任环节,就可能让合法流水线替自己分发恶意代码。 软件供应链安全研究的不是“依赖有没有 CVE”这一件事,而是从需求、源码、依赖、构建…
软件供应链 · SBOM · SLSA
被 4 个领域引用(哲学思想、经济学、工程与技术、政治学)
隐私工程
Privacy Engineering
一个系统可以从未发生数据泄露,却仍然严重侵犯隐私:它可能收集完成任务不需要的数据,把用户预期中的单次用途变成长期画像,允许员工合法查询敏感记录,或用准确模型对人做不透明且不公平的决定。 隐私工程把隐私从政策口号变成可验证的系统属性。它追踪数据为何被收集、怎样关联、谁能推断什么、保留多久、个人能否理解和控制,以及处理活动…
隐私工程 · 数据最小化 · 差分隐私
被 5 个领域引用(哲学思想、政治学、经济学、医学与公共卫生、法学)
机器学习概览
Machine Learning Overview
1959 年,IBM 工程师 Arthur Samuel 发表了论文《Some Studies in Machine Learning Using the Game of Checkers》——标题里"machine learning"一词正是经他推广而流行起来。论文探讨的核心,是如何让计算机"在没有明确编程的情况下学…
机器学习 · 监督学习 · 统计学习
被 15 个领域引用(哲学思想、心理学、生命科学、语言学、社会学、化学、地球科学、数学、经济学、医学与公共卫生、宇宙学、工程与技术、艺术、法学、政治学)
神经网络
Neural Networks
1943 年,神经科学家 Warren McCulloch 和数理逻辑学家 Walter Pitts 发表了一篇论文,提出了第一个神经元的数学模型——受生物神经元启发的简单阈值函数。他们的目标是证明神经元可以计算任意逻辑函数。 八十多年后,这个思路衍生出的人工神经网络,正在重塑人类与计算机的关系。
神经网络 · 反向传播 · 深度学习
被 8 个领域引用(生命科学、宇宙物理、艺术、化学、经济学、数学、医学与公共卫生、哲学思想)
深度学习架构
Deep Learning Architectures
2012 年 9 月,ImageNet 大规模视觉识别挑战赛(ILSVRC)的结果公布。多伦多大学的 AlexNet 以 15.3% 的 Top-5 错误率获胜,而第二名是 26.2%——超出约 11 个百分点。这不是渐进改进,是质的飞跃。 AlexNet 的核心是一个深度卷积神经网络,约 6000 万个参数、65 万…
深度学习 · CNN · Transformer
被 4 个领域引用(哲学思想、化学、生命科学、语言学)
强化学习
Reinforcement Learning
2016 年 3 月,DeepMind 的 AlphaGo 以 4:1 击败围棋世界冠军李世石。围棋被认为是人工智能最难的棋盘游戏之一——棋盘状态空间约 $2.08 \times 10^{170}$,远超国际象棋的约 $10^{43}$。穷举搜索完全不可行。 AlphaGo 的核心技术是深度强化学习(Deep Rein…
强化学习 · 马尔可夫决策过程 · Q学习
被 7 个领域引用(心理学、哲学思想、经济学、生命科学、工程与技术、数学、政治学)
自然语言处理
Natural Language Processing
1950 年,Alan Turing 在他关于"计算机器与智能"的论文中提出,评判机器智能的标准应该是:能否在文字对话中被误认为是人类。 七十多年后,我们制造出了能流畅回答问题、写代码、解数学题、分析文学作品的系统。问题是:它们真的"理解"语言,还是只是在进行极其复杂的模式匹配?这个问题至今没有定论,但 NLP 技术本…
NLP · 语言模型 · Transformer
被 5 个领域引用(语言学、哲学思想、人类历史、政治学、心理学)
计算机视觉
Computer Vision
1966 年夏天,MIT 人工智能实验室的 Seymour Papert 发起了"夏季视觉项目(The Summer Vision Project)"。在 7 月 7 日的备忘录里,他计划用一个暑假、组织一批暑期学生,搭建一个能把物体从背景中分离出来、并加以识别的视觉系统。 后世常把它演绎成"一个暑假、一名本科生就能解…
计算机视觉 · 图像识别 · 目标检测
被 13 个领域引用(哲学思想、心理学、数学、艺术、医学与公共卫生、政治学、化学、宇宙学、地球科学、工程与技术、人类历史、生命科学、语言学)
机器人学
Robotics
1997 年,IBM 的"深蓝"在国际象棋上击败了世界冠军卡斯帕罗夫。同一时期,全世界没有一个机器人能像三岁小孩那样,从桌上拿起一只杯子而不把它碰倒。 机器人研究者汉斯·莫拉维克(Hans Moravec)在 1988 年的《心智儿童》(Mind Children)里把这个反差写成了著名观察:让计算机在智力测验或下棋上…
机器人学 · 运动规划 · SLAM
被 2 个领域引用(工程与技术、心理学)
感知机与第一次 AI 寒冬
The Perceptron and the First AI Winter
1958 年 7 月 8 日,《纽约时报》以"新海军装置边做边学"为题,报道了罗森布拉特在康奈尔航空实验室展示的感知机:一台能通过示例学会区分图像的机器。报道说,海军期待它成为"能行走、说话、看见、书写、自我复制并意识到自身存在的电子计算机的雏形"。这个构想他在 1957 年 1 月的实验室报告里已经提出,一年后他把它…
感知机 · AI 寒冬 · 明斯基
专家系统与第二次 AI 寒冬
Expert Systems and the Second AI Winter
1980 年代初,人工智能第一次成为一门生意。 商业逻辑很清楚:把某个领域专家的知识,写成一大堆"如果……那么……"的规则,装进推理引擎,就得到一个能在该领域作出专业判断的系统。它不需要通用智能,只需要在一个窄领域里比新手强。
专家系统 · 知识工程 · 第二次 AI 寒冬
程序设计语言设计
Programming Language Design
1972 年,Dennis Ritchie 在贝尔实验室用 C 语言重写了 Unix 操作系统。在此之前,操作系统只能用汇编语言写——每换一台新机器,代码全部报废。C 的出现让同一份源代码能跑在不同硬件上,只需重新编译。这件事改变了软件的性质:它从"一次性的机器指令集"变成了可移植的人类思想的表达。 这正是程序设计语言…
编程语言 · 类型系统 · 语法
被 1 个领域引用(数学)
形式化方法与程序验证
Formal Methods and Verification
1996 年 6 月 4 日,阿丽亚娜 5 号首飞在点火序列开始约 40 秒后解体。调查委员会追溯出一条比"整数溢出"更完整的失效链:惯性基准系统仍在执行一段升空后已无必要的对准软件;阿丽亚娜 5 与阿丽亚娜 4 的早期轨迹不同,使一个表示水平偏差的 64 位浮点值超出 16 位有符号整数范围;这次转换没有异常保护,两…
形式化方法 · 程序验证 · 模型检验
被 7 个领域引用(哲学思想、政治学、数学、经济学、工程与技术、宇宙学、心理学)
信息检索与搜索
Information Retrieval and Search
1998 年,两名斯坦福博士生谢尔盖·布林(Sergey Brin)和拉里·佩奇(Larry Page)在第七届万维网大会上发表了一篇论文,标题朴素得不像会改变世界:《大规模超文本网络搜索引擎剖析》。论文描述的是一个跑在斯坦福校园里、索引了约 2400 万个网页的搜索引擎原型——它的名字叫 Google。 那篇论文的核…
搜索引擎 · 信息检索 · 倒排索引
被 4 个领域引用(经济学、哲学思想、医学与公共卫生、政治学)
推荐系统
Recommender Systems
2006 年,Netflix 宣布了一项百万美元竞赛:谁能让公司的电影推荐算法预测准确率提升 10%,就获得 100 万美元奖金。竞赛吸引了全球数千支团队,历时三年。最终获奖的方案综合了超过 100 种不同算法,准确率恰好超过了 10% 的门槛。 这场竞赛让推荐系统从学术领域进入了公众视野,也暴露了这个问题的本质:如何…
推荐系统 · 协同过滤 · 矩阵分解
被 6 个领域引用(心理学、哲学思想、社会学、经济学、政治学、数学)