📰 来源: 博客园
这次我把《动手学深度学习》第一章读完了。
先说一下,我为什么会突然翻这本书。
更直接的原因是,前面我在做一个从零学习 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。
但很多真实问题不是这样。
比如一篇技术博客,可以同
🔗 原文链接: 点击阅读原文
文章评论