动手学深度学习第一章笔记:机器学习问题到底怎么分类
好家伙,
这次我把《动手学深度学习》第一章读完了。
先说一下,我为什么会突然翻这本书。
更直接的原因是,前面我在做一个从零学习 AI 的小项目。
写一个小项目去用,去学习ai(所谓干中学)
写到训练循环时,代码里开始出现这些东西:
_, loss = model(x, y)
loss.backward()
optimizer.step()
loss 到底是什么?
为什么 loss 低就代表模型预测得更好?
loss.backward() 到底在根据什么更新参数?
再具体一点,是为了看懂这行代码:
loss = F.cross_entropy(logits_for_loss, targets_for_loss)
这行代码背后其实是在回答:
模型预测下一个 token 错了多少?
这个“错了多少”的数字是怎么算出来的?
当时我一路追下去,就追到了:
logits
softmax
真实 token 的概率
-log(probability)
cross entropy loss
让我的codex老师给我解释,越解释越晕
所以我才去翻《动手学深度学习》。
为了理解
模型如何知道自己错了?
模型如何根据错误修改参数?
第一章它先把机器学习问题的大框架铺开了
机器学习到底在解决什么问题?
一个问题为什么叫监督学习?
回归和分类到底差在哪?
搜索、推荐、标注这些又算什么?
无监督学习和强化学习又和监督学习有什么区别?
我之前看这些词的时候,很容易把它们当成一堆名词背。
但读完第一章以后,我现在更愿意先问一个更朴素的问题:
模型训练的时候,到底拿到了什么反馈?
模型最后要输出什么东西?
这篇文章就按这个思路,把第一章里关于机器学习问题类型的部分整理一下。

0.先说我的理解:机器学习不是先背模型名
以前我一听机器学习,脑子里会先冒出这些词:
线性回归
决策树
神经网络
Transformer
强化学习
聚类
这些当然都重要。
但如果一开始就背模型名,很容易乱。
因为真正写项目时,我们首先遇到的不是:
我要用什么模型?
而是:
我手里有什么数据?
我有没有标签?
我要预测的是一个数,一个类别,多个标签,还是一个排序?
模型预测错了以后,我怎么知道它错了?
这些问题回答清楚以后,模型选择才有意义。
所以我现在会先把机器学习问题拆成两层:
第一层:训练反馈是什么?
第二层:输出结果长什么样?
第一层决定它大概属于监督学习、无监督学习还是强化学习。
第二层决定它在监督学习里更像回归、分类、标注、搜索还是推荐。
1.监督学习:训练数据里有标准答案
《动手学深度学习》第一章里说,监督学习擅长在“给定输入特征”的情况下预测标签。
这句话看起来简单,但其实很关键。
监督学习最核心的结构是:
输入特征 -> 标签
比如:
房子的面积、卧室数量、位置 -> 房价
图片像素 -> 猫/狗
病人的检查指标 -> 是否有风险
文章内容 -> 文章标签
这里的“标签”,就是训练时给模型看的标准答案。
模型不是凭空学。
它是看了很多这样的样本:
输入 A -> 正确答案 A
输入 B -> 正确答案 B
输入 C -> 正确答案 C
然后慢慢学出一个规律。
以后来了一个新输入,模型就根据学到的规律给出预测。
所以监督学习的关键不是“模型多高级”,而是:
你有没有足够好的 输入-标签 数据。
这里也能解释为什么标注很贵。
因为很多时候数据本身没有天然标签。
比如图像分类:
一张图片是不是猫?
一张 CT 图像是不是癌症?
一段语音对应哪一句文字?
这些标签往往要人工标。
如果标签错了,模型就会被错误答案带偏。
所以监督学习里,数据质量经常比模型名字更重要。
2.回归:输出是一个数值
第一章讲回归时,用了房价预测的例子。
比如一个房子的特征是:
面积
卧室数量
浴室数量
到市中心距离
模型要预测的是:
这个房子大概多少钱?
这里的输出是一个数字。
这就是回归。
我现在对回归的记法很简单:
只要问题在问“多少”,大概率就是回归。
比如:
房价是多少?
电影评分是多少?
明天下雨量是多少?
病人住院时间是多少天?
接口平均响应时间是多少毫秒?
这些问题的答案不是“属于哪一类”,而是一个连续数值。
所以回归模型关心的是:
预测值和真实值差多少?
比如真实房价是 300 万,模型预测 310 万。
这不是完全错。
它是有误差。
回归问题通常就是希望这个误差越小越好。
3.分类:输出是一个类别
分类解决的是另一种问题:
这个东西属于哪一类?
比如:
图片是猫还是狗?
邮件是垃圾邮件还是正常邮件?
手写数字是 0 到 9 中的哪一个?
这个用户会不会流失?
这里模型输出的不是一个连续数值,而是一个类别。
如果只有两个类别,就是二分类。
比如:
是 / 否
猫 / 狗
有风险 / 无风险
如果有多个类别,就是多分类。
比如:
数字 0-9
新闻类别
商品类目
游戏装备类型
这里容易踩一个坑:
分类模型输出的往往不是直接“答案”,而是每个类别的概率。
比如猫狗分类:
猫: 0.9
狗: 0.1
我们通常取概率最大的类别作为答案。
但这不代表所有场景都应该这么干。
第一章里举了毒蘑菇的例子。
如果模型说:
这张图是毒蘑菇的概率只有 20%
按普通分类思路,好像可以判断“不是毒蘑菇”。
但现实里我们不会吃。
因为错一次的代价可能非常大。
所以分类问题不只是看准确率。
有时候还要看:
错判的代价是什么?
宁愿错杀还是宁愿放过?
这点在医疗、风控、安全场景里尤其重要。
4.标注问题:不一定只有一个标签
分类还有一个变体,叫标注问题,也可以理解成多标签分类。
普通分类常常默认:
一个输入只能属于一个类别。
比如一张手写数字图,它要么是 0,要么是 1,要么是 2。
但很多真实问题不是这样。
比如一篇技术博客,可以同时有多个标签:
机器学习
Python
深度学习
数据处理
工程实践
这些标签不是互斥的。
一篇文章可以既是机器学习,也是 Python,也是工程实践。
这就不是普通的“选一个类别”。
它更像:
从一堆候选标签里,选出所有适合的标签。
这也是我对标注问题的理解:
分类是选一个。
标注是可以选多个。
如果放到我自己的博客场景里,一篇文章可能同时被打上:
LLM
RAG
Agent
Docker
学习笔记
这就是一个很自然的多标签问题。
5.搜索和推荐:输出不是一个答案,而是一组排序结果
搜索和推荐这部分,我觉得是第一章里很容易被低估的内容。
因为它不像回归和分类那么“教科书式”。
但真实产品里,搜索和推荐非常常见。
搜索问题不是简单地问:
这个网页是否相关?
而是要问:
给定一个查询,哪些结果最应该排在前面?
比如用户搜:
Transformer 注意力机制
搜索系统可能找到 10000 篇文章。
真正重要的是:
哪 10 篇应该排在第一页?
它们的顺序应该怎么排?
所以搜索的输出不是单个类别,也不是单个数值。
它输出的是一个排序列表。
推荐系统也类似。
只不过搜索通常从用户主动输入 query 开始。
推荐通常是系统根据用户历史行为主动给出内容。
比如:
给这个用户推荐哪几本书?
给这个用户推荐哪些视频?
给这个玩家推荐哪些装备搭配?
推荐系统本质上也要给“用户-物品”打分,再取分数最高的一批。
这里最容易踩的坑是反馈循环。
比如系统越推荐某个商品,用户越可能看到它。
用户越可能看到它,它的数据越多。
数据越多,模型越觉得它值得推荐。
最后就可能出现:
被推荐的东西越来越容易继续被推荐。
所以推荐系统不是单纯预测问题。
它还会改变用户能看到什么,进而改变后续数据。

6.无监督学习:没有标准答案,模型自己找结构
无监督学习和监督学习最大的区别是:
训练数据没有标签。
也就是说,我们只有输入,没有标准答案。
比如:
一堆用户行为数据
一堆文章
一堆图片
一堆商品
但没人告诉模型:
这个用户属于哪类人
这篇文章属于什么主题
这张图应该叫什么
这时候模型要自己找结构。
常见问题包括:
聚类: 把相似的数据分到一起
降维: 把高维数据压缩成更容易看的表示
异常检测: 找出和大多数样本不一样的点
表示学习: 学出更好用的数据表示
我现在会这样理解无监督学习:
监督学习是在学“答案”。
无监督学习是在学“结构”。
比如我们有一堆用户行为数据。
监督学习可能问:
这个用户会不会购买?
无监督学习可能问:
这些用户能不能自然分成几类?
哪些用户行为模式相似?
这两者不是谁更高级。
它们只是问题不同。
7.强化学习:不是给答案,而是给奖励
强化学习的反馈方式又不一样。
它通常不是一次性给模型一堆标准答案。
而是让智能体和环境互动。
可以先记这个结构:
智能体做动作
环境给反馈
智能体根据奖励调整策略
比如下棋。
模型每一步都要选动作。
但它不会在每一步都直接得到“这一步标准答案是什么”。
很多时候,它要等到一局结束以后,才知道赢了还是输了。
强化学习关心的是:
怎样选择一系列动作,让长期奖励最大?
这和监督学习差别很大。
监督学习像是在做题:
题目 -> 标准答案
强化学习更像是在玩游戏:
状态 -> 动作 -> 奖励 -> 新状态 -> 再动作
所以强化学习更适合这些场景:
游戏 AI
机器人控制
自动驾驶决策
资源调度
对话策略
这里的难点是:
当前动作的好坏,可能要很久以后才看得出来。
这就比普通分类复杂很多。
8.练习部分:我会怎么回答
第一章最后的练习,核心不是考公式。
它更像是在让我们确认:
能不能把现实问题翻译成机器学习问题。
我会按下面几个问题来做练习。
练习1:哪些问题可以用监督学习?
我的答案是:
只要训练数据里有输入和对应标签,就可以优先考虑监督学习。
比如:
输入: 房屋面积、位置、卧室数量
标签: 房价
任务: 回归输入: 图片
标签: 猫/狗/鸟
任务: 分类输入: 文章内容
标签: 技术、机器学习、Python
任务: 多标签分类
关键不是“这件事听起来像不像 AI”。
关键是:
有没有历史样本?
有没有正确答案?
答案是什么形式?
练习2:怎么区分回归和分类?
判断方法是:
问“多少” -> 回归
问“哪一个” -> 分类
比如:
预测明天温度是多少 -> 回归
预测明天是否下雨 -> 分类
预测电影评分是多少 -> 回归
预测电影属于哪个类型 -> 分类
但这里有个细节:
有些数值看起来像回归,实际可以被做成分类。
比如用户评分是 1 到 5 星。
你可以把它当成回归:
预测一个 1-5 之间的数。
也可以把它当成分类:
预测 1 星、2 星、3 星、4 星、5 星。
怎么选,取决于业务目标和损失设计。
练习3:搜索和推荐为什么不只是分类?
因为搜索和推荐真正关心的是排序。
搜索不是只判断:
这个网页是否相关?
而是要回答:
在所有相关网页里,哪个应该排第一?
哪个排第二?
哪个排第三?
推荐也是一样。
系统不只是判断:
用户喜不喜欢这个商品?
它还要从大量候选商品里选出一批,并按顺序展示。
所以搜索和推荐更像:
打分 + 排序 + 展示
这就是它们和普通分类的区别。
练习4:无监督学习能解决什么?
我的理解是:
当没有标签,但想从数据里发现结构时,就会用到无监督学习。
比如:
把用户分群
发现异常交易
把文章按主题聚类
把高维向量降到二维可视化
无监督学习不直接给标准答案。
它更像是在帮我们整理数据:
哪些东西相似?
哪些东西特殊?
数据背后有没有隐藏结构?
练习5:强化学习和监督学习最大的区别是什么?
监督学习是:
每个样本都有标准答案。
强化学习是:
智能体在环境里做动作,根据奖励学习策略。
所以两者最大的区别在反馈方式。
监督学习更像老师批改作业:
这题对,这题错。
强化学习更像玩游戏:
你做了一连串操作,最后赢了或输了。
奖励可能延迟出现。
这也是强化学习难的地方。
9.这一章我真正记住的东西
第一章看完以后,我觉得最重要的不是记住所有名词。
而是先建立这个判断顺序:
1. 数据里有没有标签?
2. 输出是数值、类别、多个标签,还是排序?
3. 模型的错误怎么衡量?
4. 这个系统会不会和用户或环境互动?
5. 反馈会不会反过来影响未来数据?
如果这些问题没想清楚,直接上模型很容易乱。
比如:
房价预测不是因为用了线性回归才叫回归。
而是因为它要预测一个连续数值,所以它适合用回归思路。
再比如:
推荐系统不是普通分类,因为它最终要输出排序,而且推荐结果还会影响用户后续行为。
这才是这一章真正想让我建立的感觉。
10.总结
所以这篇先记住一句话:
机器学习问题不是先按模型名分类,而是先按训练反馈和输出形式分类。
监督学习:
有标签,学输入到标签的映射。
回归:
输出数值,回答“多少”。
分类:
输出类别,回答“哪一个”。
标注:
输出多个不互斥的标签。
搜索和推荐:
输出排序结果,顺序很重要。
无监督学习:
没有标签,从数据里找结构。
强化学习:
没有直接标准答案,通过和环境互动拿奖励。
下一篇我准备继续往下看:
数据、模型、目标函数、优化算法这几个关键组件到底怎么串起来。
因为这些东西一旦串起来,后面再看线性回归、softmax 回归、神经网络,就不会只是在背公式了。
参考资料
这篇文章主要参考第一章中“各种机器学习问题”的内容,包括监督学习、回归、分类、标记问题、搜索、推荐系统、无监督学习和强化学习。这里引用它,是为了说明这些任务分类不是我自己造的,而是机器学习入门时很基础的一套问题划分方式。
- 《动手学深度学习》第二版:1. 引言
