本节摘要:人工智能是大圈,机器学习是其中靠数据拟合规则的一环,深度学习又是机器学习里用多层可微模块堆出来的那一支。本教程标题里的「第一个 AI 模型」,落到代码上就是一个有监督的深度分类器:输入是张量,输出是类别分数,学习靠损失和梯度。分清这三层,后面对照 TensorFlow 与 PyTorch 时才不会把框架能力说成「人工智能本身」。
阅读完本节,你应当能够:
打开招聘启事或产品介绍,「人工智能」几乎可以贴在任何带预测功能的系统上。于是出现一种错位:有人以为学会某个框架就等于学会人工智能;另一些人以为没推完反向传播公式就不配碰框架。两边都把层次弄乱了。
更准确的图景是三层包含,而不是三件并列的神器。人工智能覆盖所有让机器表现出「看起来会判断」的技术,规则引擎、搜索、规划都算。机器学习是其中一类:不把规则写死,而从带标签或带结构的数据里估计一个函数。深度学习再收窄:这个函数由很多层可微变换叠成,参数量通常大到必须靠梯度自动计算,而不是手写每一层的导数。
把本教程放进这张图:我们不实现搜索树,也不手写一套「如果像素和大于某阈值就判为鞋子」的规则。我们准备一批已经标好类别的图像,让网络自己找边界。TensorFlow 和 PyTorch 都是为这一层服务的计算与工程工具,不是人工智能的定义本身。
传统程序像按菜谱做菜:步骤写死,输入变了只要还在菜谱范围内,输出可预期。机器学习更像根据很多次试吃调整火候——你提供「这盘咸了、那盘淡了」的反馈,拟合过程去改参数。深度学习只是把「可调的部分」变成很多层,每层仍然是张量上的可微运算。框架存在的理由,就是把这些运算、求导和数据搬运变成可重复的工程步骤。
有监督分类是本教程的主任务,也是入门最不容易跑偏的设定:每个样本有输入 x 和标签 y,模型输出一个对 y 的猜测,损失衡量猜得有多离谱,优化器按梯度改参数。Fashion MNIST 的 y 是 0 到 9 的整数类别,不是一段文字描述,所以损失会选多分类交叉熵这一类,而不是回归用的均方误差。
无监督、强化学习不在本教程展开,但对照时偶尔会碰到它们的影子:无监督没有 y,框架照样提供张量和求导,只是损失怎么定义要另写;强化学习的「标签」来自环境回报,训练循环会更长。入门阶段先把有监督这条路走稳,两套框架的差异已经足够看清。
数据怎么切,比选哪套框架更容易让人自欺。训练集用来更新参数;验证集用来在训练过程中看泛化,决定何时停、哪组超参数留下;测试集原则上只碰一次,用来报告最终数字。Keras 的 fit 可以传入 validation_data,PyTorch 则要你在循环里自己切一段评估。两侧机制不同,原则相同:不能用测试集调参再把同一数字当成「没见过的成绩」。
| 划分 | 作用 | 常见误用 |
|---|---|---|
| 训练集 | 计算损失并更新权重 | 只看训练准确率,误以为已经学会 |
| 验证集 | 选超参数、早停、发现过拟合 | 反复在验证集上调到最好再当最终成绩 |
| 测试集 | 一次性报告泛化 | 训练过程中每个 epoch 都看测试集 |
💡 关键直觉:框架帮你算梯度,但不帮你守住数据划分。划分一旦泄漏,两套框架会用同样自信的准确率骗你。
深度网络相对浅层模型的差异,主要不在「会不会分类」,而在特征要不要人先做。早期视觉系统常先提取边缘、纹理,再交给线性分类器。卷积网络把「提取什么」也变成可学习的层。本教程第 5 章会先用多层感知机把 28×28 展平再分类,再对照一个简单卷积——不是因为卷积神秘,而是为了让你看见:同一框架里,换层类型比换框架成本低得多。先建立这个判断,选型时才不会把「我要用 CNN」说成「所以我必须选某一套框架」。
原文把第一个任务定为 Fashion MNIST 上的服装分类,而不是语言模型或强化学习,有几条很具体的工程理由。图像是规则网格,张量形状直观:一批样本、高、宽,灰度时通道为 1。类别数固定为 10,输出层大小没有争议。数据集小到 CPU 也能在原文示例的 10 个 epoch 里跑完,对照实验的反馈周期以分钟计而不是以天计。
若第一个任务选成「从零训练一个对话模型」,你会被词表、填充、变长序列、显存同时淹没,对照表会写成「两边都很痛」,学不到张量与循环上的真正差异。图像分类把痛点集中在:像素要不要除以 255、标签是整数还是 one-hot、输出层要不要 Softmax——而这些恰恰是 Keras 与 PyTorch 默认约定分叉的地方。
人类直觉:这是一件衬衫 │ ▼ 数据:28x28 灰度像素 + 整数标签 │ ▼ 模型:展平 → 隐层 128 → 10 类分数 │ ▼ 学习:交叉熵 + Adam → 更新权重
「第一个 AI 模型」这个说法容易让人期待一个什么都会的智能体。请把期待降到可检验的句子:给定一张 28×28 的灰度图,模型输出十个类别上的分数或概率,我们用准确率衡量它在一万张测试图上对了多少。智能体、规划、工具调用都不在本课范围。把目标写小,对照才对照得完。
⚠️ 常见坑:把训练准确率接近 100% 当成「已经掌握人工智能」。在 Fashion MNIST 这种小而干净的数据上,多层感知机很容易把训练集背下来;真正要看的是测试集,以及衬衫与外套是否互相认错——第 5.3 节会回到这件事。
深度学习能在图像上起作用,还依赖两个工程前提,后文会反复对照。其一,计算必须能放到 GPU 上,否则大模型训不动;入门数据小,CPU 也能完成对照,但设备字段从一开始就要进入你的词汇表。其二,损失必须对参数可微,框架的自动求导才接得上;若你手写一个不可微的后处理再对它求梯度,两边都会默默给你错误的更新。先承认这两点,第 2 章的张量设备与 GradientTape / autograd 才不是空中楼阁。
与传统机器学习库的边界也值得提前说清。表格型数据、要强解释性、样本只有几千的时候,树模型和线性模型往往更合适,不一定上深度网络。本教程选深度框架,是因为任务是像素网格上的分类,且目标是学会两套深度工具的对应关系。不要把「本课用 TF/PT」推广成「所有预测问题都该上神经网络」。
三层关系一旦钉死,选型表才不会写成「人工智能选 TensorFlow」。框架是深度学习这一层的工程工具,负责张量运算、自动求导、把训练步骤变成可重复的代码。规则引擎、搜索、知识图谱可以仍是人工智能,却不必出现在本教程里。反过来,会写 fit 也不等于理解智能:你只是在一个有监督分类器上完成了参数估计。招聘启事把两件事揉在一起,学习计划不要跟着揉。
有监督学习里还有一条容易忽略的边界:验证集不是「多出来的测试集」,它是你允许自己反复观看的镜子。Keras 把镜子传给 validation_data,PyTorch 要你在 epoch 末自己跑一段评估。镜子看多了会脏——反复用验证集做所有决策,等于把验证变成第二训练集。1.1 把划分纪律提前讲,是因为第 5 章原文示例有时直接拿测试当验证。你可以跟原文走以便对照代码,但必须在嘴巴上承认:那样报告的「泛化」掺了水分。更干净的做法是从六万训练里再切一块验证,测试集锁到最后。
深度相对浅层的优势在特征是否可学,不在框架商标。同一套 Fashion MNIST,用逻辑回归或线性分类器也能得到一个准确率,往往低于带 ReLU 的多层网络,因为像素之间的组合要靠隐藏层去凑。这不能推出「所有表格数据都该上深度网络」。表格小样本、要解释系数时,传统机器学习库更合适。本教程选深度框架,是任务是网格像素,且目标是学会两套深度工具的互译。把这个「为何用深度」说清,才不会在学完第 5 章后把树模型从工具箱里扔出去。
从历史角度看,深度学习能在图像上爆发,离不开 GPU 把矩阵乘变成可承受的墙钟时间,也离不开自动求导把多层复合函数变成可实现的工程。这两点正是第 2 章对照的对象。1.1 先承认它们存在,后面 Tape 与 autograd 才不是突然冒出来的术语。没有 GPU 的读者仍然能完成本课:Fashion MNIST 的 10 个 epoch 在 CPU 上可接受。缺的是速度,不是资格。资格来自把验收句写清楚:一张 28×28 的图进网络,出来十个数,测试集上可复述准确率。
能。你需要接受三句话:损失是预测和标签的距离;梯度指出让损失变小的方向;框架替你算梯度。求导的链式法则在 2.2 用「前向留痕迹、反向传回去」讲完,不要求你手推每一层。若你想补数学,那是另一条学习路径,不要卡在本课第 1 章。反过来,完全拒绝「参数会被更新」这个事实,后面的优化器表会读成天书。中间地带足够完成本教程。
下一节把 TensorFlow 与 PyTorch 放到同一张选型表上:重叠的能力不再浪费篇幅,分叉的优势才是对照重点。