从"会算"到"会学":人工智能问题的基本形态
当人们说“计算机很聪明”时,往往混合了两种能力:一种是“会算”,即按照明确规则高速、可靠地执行;另一种是“会学”,即在规则不完整、环境变化、目标含糊时,仍能从经验中形成可迁移的策略。传统软件工程的强项在前者:把需求翻译为规则,把规则翻译为代码;而现代人工智能的突破集中在后者:当我们无法把规则写清楚,或规则写得再多仍覆盖不了真实世界时,就转而让系统从数据中自动形成“近似规则”。本章要做的不是罗列算法清单,而是给出一种更稳定的理解方式:把绝大多数人工智能问题都放入同一个“任务—数据—模型—目标函数—评测指标”的框架中,从而解释为什么“学习范式”改变了工程方法,也为全书后续讨论建立共同语言。
人工智能、机器学习与通用智能:三个层次的区分
“人工智能”是目标,“机器学习”是一类方法
在最宽泛的意义上,人工智能(Artificial Intelligence, AI)指让机器表现出某种通常需要人类智能才能完成的能力,例如识别、规划、对话、推理、控制等。它更像一个“目标集合”:要解决什么能力问题,而不限定必须用哪种技术路线。
机器学习(Machine Learning, ML)则是一类方法论:不直接手写规则,而是从数据中学习映射关系或策略。换言之,ML是AI的重要子集,但不是全部。即便在今天,许多AI系统仍由规则、搜索、优化、知识库与学习模块共同构成。
> 侧边栏:一个实用判断 > 若系统的核心行为由“参数”决定,而这些参数主要通过对数据的优化得到(而非人工逐条设定),它通常属于机器学习系统;若系统的核心行为主要由显式规则或可解释结构直接决定,则更接近传统符号方法或规则系统。
“通用智能”谈的是跨度与迁移,而非单点性能
通用人工智能(Artificial General Intelligence, AGI)关心的不是某一项任务的高分,而是能力的广泛性与迁移性:能否在较少样本、较少人工改造的前提下,把已有知识迁移到新任务;能否在多目标、多约束、开放环境中长期稳定地学习与适应。现实中的系统大多属于“窄域智能”(在特定任务上强),距离通用性仍有明显鸿沟。
为了避免概念争论,本书采用一个对普通读者更可操作的三层视角:
- **AI(问题域)**:关注要实现的能力与任务形态。
- **ML(方法族)**:关注从数据学习参数与表示的技术体系。
- **通用智能(能力性质)**:关注跨任务迁移、泛化、持续学习与自主性。
常见混淆与澄清
1. “AI=深度学习”:深度学习是机器学习的重要分支,但AI问题还包括规划、约束满足、博弈搜索、符号推理等。 2. “会下棋就会思考”:单任务超人并不等同于通用智能;它可能依赖强先验、封闭环境与密集反馈。 3. “数据越多必然越好”:数据量重要,但数据分布、质量、标注一致性与任务匹配同样关键;甚至在某些场景,数据越多越会放大偏差与噪声。
人工智能问题的统一框架:任务—数据—模型—目标函数—评测指标
许多AI实践之所以容易“看似玄学”,往往不是因为算法神秘,而是因为在讨论中把五个要素混在一起。一个更稳定的做法是把问题拆成五个部件,并明确它们之间的依赖关系:
1. 任务(Task):系统要完成的行为规范与输入输出形式。 2. 数据(Data):任务的经验载体,包括样本来源、分布、标注与噪声。 3. 模型(Model):可学习的函数族或策略空间(例如神经网络、树模型、线性模型)。 4. 目标函数(Objective / Loss):训练时优化的数学指标,决定“学到什么”。 5. 评测指标(Metric):交付与比较时使用的指标,决定“算不算好”。
它们之间的关系可以用一个工程化流程表示:
```mermaid flowchart TD A[任务定义 Task\n输入/输出/约束] --> B[数据 Data\n采集/清洗/标注] B --> C[模型 Model\n结构/参数/先验] C --> D[目标函数 Objective\n损失/正则/约束] D --> E[训练 Training\n优化器/超参] E --> F[评测 Metric\n离线/在线/鲁棒性] F --> G{上线与监控} G -->|分布漂移| B G -->|指标退化| A ```
用一个最小数学表达把“学习”说清楚
在监督学习中,我们常把数据写成 $D=\{(x_i,y_i)\}_{i=1}^n$:$x$是输入(邮件文本、图像像素、用户行为序列等),$y$是目标(垃圾/正常、类别标签、点击与否等)。模型是带参数的函数 $f_\theta(x)$,目标函数(损失)常写作:
$$ \min_\theta \ \frac{1}{n}\sum_{i=1}^{n} \mathcal{L}(f_\theta(x_i),y_i) + \lambda \Omega(\theta) $$
其中 $\mathcal{L}$刻画“预测错了有多糟”,$\Omega(\theta)$是正则项,$\lambda$控制复杂度惩罚。这个式子并不意味着一切都能被优雅数学化,但它提醒我们:学习的核心是“用数据定义偏好,用优化把偏好刻进参数”。
为什么“目标函数”与“评测指标”必须分开谈
在工程上,训练损失与评测指标经常不一致:
- 训练时用可微、稳定的损失(如交叉熵);
- 交付时关心业务指标(如召回率、误报率、延迟、成本、合规性)。
如果不把两者区分清楚,就会出现“训练曲线很好看,上线却翻车”的典型现象。更进一步,评测还应包含对分布外(OOD)、鲁棒性与公平性的检查:同样的平均准确率,可能在不同群体、不同场景下风险截然不同。
> 侧边栏:指标是一种价值选择 > 选择准确率、AUC、F1、延迟、能耗、可解释性,本质上是在做价值权衡。指标不是“客观真理”,而是“在约束下可执行的目标代理”。
三个直观案例:同一框架下的不同表象
下面用三个常见系统把五要素逐一对齐。读者可把它当作一个“模板”:遇到任何AI项目,先把五要素填完整,再讨论算法细节。
案例一:垃圾邮件过滤——从规则堆砌到数据驱动
- **任务**:输入一封邮件,输出“垃圾/正常”,并尽量降低误杀(把正常邮件判成垃圾)。
- **数据**:历史邮件文本与人工/用户反馈标签;关键在于采样是否覆盖新型诈骗话术。
- **模型**:从朴素贝叶斯、线性模型到深度文本模型皆可。
- **目标函数**:分类损失+对误杀的加权惩罚(例如对“正常→垃圾”更重)。
- **评测指标**:误报率(False Positive Rate)与召回率的权衡,往往比总体准确率更重要。
对比一下规则系统与学习系统在工程形态上的差异:
```python
规则系统(示意):覆盖有限,维护成本随规则数上升
def is_spam_rule(email_text: str) -> bool: suspicious = ["免费提现", "点击领奖", "紧急验证", "账户冻结"] return any(k in email_text for k in suspicious)
学习系统(示意):规则不手写,而是由数据“沉淀”到参数
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
```
规则系统的问题不是“没用”,而是当对手(垃圾邮件发送者)持续对抗、话术快速演化时,人工更新规则会变成一场永无止境的追逐;学习系统的优势在于能从大规模反馈中更新“统计规律”,但代价是需要数据管线、评测体系与上线监控。
案例二:图像识别——为何深度学习改变了“特征工程”
- **任务**:输入图像,输出类别(猫、狗、车辆等)。
- **数据**:大规模标注图像;数据增强(裁剪、翻转)常用于提升泛化。
- **模型**:卷积神经网络等深度模型。
- **目标函数**:交叉熵损失+正则化。
- **评测指标**:Top-1/Top-5准确率、鲁棒性(模糊、遮挡、光照变化)等。
这一领域的标志性转折常被追溯到ImageNet竞赛中深度网络的显著提升:当模型能够端到端学习“表示”(representation)时,许多传统的手工特征设计被系统性替代[^1]。这并非意味着“人类不再需要理解视觉”,而是意味着理解的载体从“手工编码的特征”部分转移到“数据分布、归纳偏置与训练机制”上。
案例三:推荐系统——目标函数与指标冲突最明显的战场
- **任务**:给用户排序内容,最大化长期价值(满意度、留存、购买等)。
- **数据**:曝光、点击、停留、购买、负反馈,以及强烈的选择偏差(用户看见什么本就被系统影响)。
- **模型**:从矩阵分解到深度排序模型,常包含用户与物品的嵌入(embedding)。
- **目标函数**:往往以点击/转化为代理目标,但必须处理样本偏差与延迟反馈。
- **评测指标**:离线AUC不等于在线收益;还需关注多样性、冷启动、公平性与“信息茧房”。
推荐系统提醒我们:AI工程从来不是单纯的“拟合数据”。当系统上线后,它会反过来改变数据分布(用户行为因推荐而变),形成闭环。此时,“数据”不再是静态资源,而是系统行为的一部分;这也是现代AI系统需要长期监控与持续迭代的原因。
学习范式如何改变传统软件工程:从“写规则”到“管不确定性”
需求表达方式的变化:从规格说明到数据与指标
传统软件工程强调把需求写成清晰规格,再实现并验证;而学习系统的需求常以“数据+指标”表达:
- 你很难写出“什么叫好看的图片”或“什么叫垃圾邮件”的完备规则;
- 但你可以收集样本,让不同人标注,再用一致性与评测指标逼近可执行的标准。
因此,AI项目的前期工作往往不是“选一个更强的模型”,而是:
- 定义输入输出边界(任务);
- 建立标注规范与数据版本;
- 明确评测协议与上线门槛(指标与阈值)。
测试观念的变化:从“对/错”到“误差分布”
在传统程序中,很多模块可以被单元测试覆盖到接近确定性;但学习系统天生带有统计误差:同一模型在不同样本上表现不同。于是测试的关注点从“是否通过某个断言”转向“在某个分布下错误是否可接受”。这引出三个关键概念:
- **泛化(Generalization)**:在未见样本上的表现能力。
- **过拟合(Overfitting)**:在训练集很好、在新数据变差。
- **分布漂移(Distribution Shift)**:上线环境与训练数据不一致,导致性能退化。
从工程实践看,这意味着你需要的不只是测试代码,还包括:数据切分策略(训练/验证/测试)、线上监控、告警阈值、回滚机制,以及定期再训练与复盘。
交付形态的变化:模型不只是“文件”,而是“系统部件”
一个可上线的学习系统通常包含:数据采集、特征/预处理、训练流水线、模型注册与版本管理、服务部署、监控与反馈回流。它更接近“持续运营的产品系统”,而不是“一次性交付的软件”。这也是近年来“MLOps”兴起的背景:它并非新口号,而是对学习系统工程现实的回应。
> 侧边栏:为什么AI系统更需要“治理” > 数据隐私、偏见、公平性、可解释性、合规审计,往往不是模型训练完成后再补的“外部要求”,而是从任务与指标阶段就必须纳入的设计约束。否则,越强的模型可能越高效地放大风险。
关键术语与阅读路线:把共同语言先立起来
本书后续反复出现的术语(精确定义版)
- **样本(Sample)**:一次观测到的输入(及可能的标签)。
- **特征/表示(Feature/Representation)**:输入的表达方式;深度学习常把表示也交由模型学习。
- **标签(Label)**:监督信号,可能来自人工标注、用户反馈或延迟结果。
- **损失(Loss)**:训练时优化的代价函数,定义“错的程度”。
- **正则化(Regularization)**:抑制过拟合的约束或惩罚项。
- **训练/验证/测试集**:用于拟合、选超参、最终评估的不同数据切分。
- **超参数(Hyperparameter)**:训练前设定、训练中不直接学习的参数(如学习率、模型宽度)。
- **基线(Baseline)**:最朴素但可靠的参照方案;没有基线就难以判断改进是否真实。
- **分布外(OOD)**:与训练分布显著不同的输入;是许多“上线翻车”的根源。
- **反馈回路(Feedback Loop)**:系统输出影响后续数据输入,常见于推荐与策略系统。
阅读路线:从统一框架走向更强的心智模型
本章建立的五要素框架将贯穿全书。建议读者带着三个问题向后阅读: 1. 我在解决什么任务?任务边界在哪里? 2. 数据从哪里来,代表了谁,遗漏了什么? 3. 我的目标函数与评测指标是否一致?若不一致,差距如何治理?
后续章节将逐步回答更深层的问题:
- 当数据有限或有偏时,如何构造更可靠的学习与评测?
- 当任务变成序列决策(如机器人、博弈)时,五要素如何扩展?
- 当我们谈“通用心智”时,哪些能力是由表示学习、记忆、规划、工具使用与自我反思共同构成的?
最后需要强调的是:学习范式并没有取消“工程”,而是把工程的重心从“写出所有规则”转移到“设计可学习的系统”:你要设计任务、治理数据、选择模型、对齐目标与指标,并在真实世界的漂移与反馈中持续校准。这条从“会算”到“会学”的路径,正是理解当代人工智能的最短通道;而理解它的统一形态,则是迈向“通用心智”讨论的第一块基石。
[^1]: A. Krizhevsky, I. Sutskever, G. Hinton. *ImageNet Classification with Deep Convolutional Neural Networks*, 2012(可在公开学术搜索中查阅)。