此分类用于记录吴恩达深度学习课程的学习笔记。
课程相关信息链接如下:
本周为第三课的第一周内容,本周的内容关于在实际项目进行中的一些基本策略,并不涉及技术性的知识。
经过整个第一课和第二课后, 我们已经了解了足够支持我们构建一个完整的基础神经网络项目的知识和技术,本周便是在这些基础上的一个指导策略,可以帮助实现更好确定项目方向,优化和评估模型性能。
只要对前面两课涉及的技术原理足够了解,可以说,本周的内容不存在理解上的难度。
本篇的内容关于正交化调优和评估指标。
我们已经了解到了很多技术,来支持我们在模型训练中进行不同的尝试,就像课程里说的这样:

在上周的超参数调整部分里,我们已了解到了方格调参,取对数轴等帮助超参数调优的方式,这周的内容又从一个更大的角度给出了这方面的策略。
你可能在高数里看到过这个概念,我们在DL的背景下再来阐述一下这个概念:

我们不提正交化在数学里的专业概念,只理解它在我们现在的机器学习策略中的作用即可。
其实简单来说,就是把负责各个功能的内容分开,让它们不要互相影响,从而影响调优。
你可能会把它理解成控制变量,但还是我之前说的,这个范围要比我们之前提到的超参数调优要大一些。
我们来具体看看。

这就是正交化的使用,不同于之前我们通过超参数调整针对某个超参数,正交化的基本思想是把调优方式分组来调优整个项目的单个环节,并尽可能地实现互不影响。
很明显,这对我们明确拟合步骤和调优方向是极有帮助的,而且逻辑通顺。
接下来我们再拓展一个专业名词:耦合
在进入下一部分前,先来拓展两个非常常见、但在深度学习里却往往被忽略的词:耦合(Coupling) 和 解耦合(Decoupling)。
它们其实和我们刚刚讲的“正交化”是并行概念,但描述的角度不同。
我们分点来了解一下:
“耦合”指的是:两个本来应该独立的部分,却互相影响、互相牵制,让你没办法单独调其中一个。
在DL中,实际上就是我们刚刚提到的非正交化,比如:
这些问题的共同点是:
一个地方的问题被多个因素共同影响,你很难定位问题来源。
就像 一团线缠成一坨毛球 —— 你想拉出一根,却发现其他线也跟着动。

很显然,解耦就是让每一块功能只影响它应该影响的部分,不要交叉干扰。
同样,在 DL 中,就是我们刚刚的正交化,表现为:
换句话说: 训练的几个关键目标(拟合、泛化、优化稳定性、速度等)要尽量互相独立。
耦合和解耦合的说法实际上更常见于软件开发中的模块化中,用来区分功能,明确责任。我们这里拓展一下,你如果在其他地方见到,它们和这里提到的正交,非正交是一个意思,只是在不同领域的常用说法不同。
我在前面的实践部分都会使用准确率来评估模型的拟合效果,而准确率就是评估指标的一种。
在这部分,我们就随课程内容展开一下在实际项目中,这方面的策略。
我们在买东西时常说:要看性价比。
这是因为:
现在,如果只看价格和效果这两个评估指标,你会发现很难评价上面两种商品间的好坏,因为它们各有优劣。
所以,我们用性价比这个单一数字评估指标结合这两种指标来评价商品,就避免了上面的纠结。
在DL领域也是一样的道理,我们来看一下分类模型里面常用的几个评估指标,如果你要写这方面的论文,就几乎逃不开它们。
准确率是我们最熟悉的指标,它衡量的是:模型预测正确的样本占全部样本的比例。
公式为:
其中:
第一次看这几个字母组合可能会有些分不过来,但在各个分类指标中,他们都会和你常见。
现在来看个例子:
假设你有一个 10 个样本的猫狗分类模型:
如果模型预测对了 8 张,那么:
[text{Accuracy}=frac{8}{10}=0.8 ]
听上去不错,但这个指标有一个致命缺点: 当正负样本极不均衡时,准确率可能毫无意义。
这句话是什么意思?
继续我们之前的数据集设定:
[text{Accuracy}=frac{99}{100}=99% ]
看上去非常漂亮,但模型完全没用!
因为它根本没有学会识别“狗”是什么样子,它只是迎合了数据分布,而不是真正地在分类。
因此,就出现了其他指标,我们继续。
精确率关注的是: 模型预测为“正”的样本里,有多少是真正的正样本?
换句话说,它衡量的是: “你说这些是猫,结果你说对了吗?”
公式为:
[text{Precision}=frac{TP}{TP + FP} ]
再重复一下,其中:
精确率解决的问题是:“我不想模型乱报。”
例如肿瘤筛查,如果模型只要看到一点点异常就高喊“癌症!癌症!”,
虽然可能很“敏感”,但全部都是误报,用户会被吓死。
这时就需要精确率来约束模型的“靠谱程度”。
你有实际 10 张猫图,模型预测“是猫”的有 8 张,其中:
那么:
[text{Precision}=frac{5}{5+3}=0.625 ]
含义就是:模型说“这里有猫”时,只有 62.5% 的概率是对的。
召回率关注的是:在所有实际为“正”的样本中,模型能找对多少?
特别适合“找到所有风险”、“不能漏报”的任务:
比如风控报警、欺诈检测等。
公式为:
[text{Recall}=frac{TP}{TP+FN} ]
继续重复,其中:
假设真实有 10 个“猫”,模型找到了其中 7 个:
[text{Recall}=frac{7}{7+3}=0.7 ]
这意味着:模型成功找出了 70% 的猫,还有 30% 被漏掉了。
如果任务是:
“不能漏掉任何一只猫(例如找可疑人员)”,
那么 0.7 的召回率就是完全不可接受的。
知道了召回率和精确率的概念后,你应该就会发现:
就像这样:

因此,我们需要一个指标:
能综合衡量精确率(Precision)与召回率(Recall)
F1 正是:
[text{F1} = 2cdot frac{text{Precision}cdot text{Recall}}{text{Precision}+text{Recall}} ]
现在假设:
[text{F1}=2cdotfrac{0.8times 0.67}{0.8+0.67} = 0.73 ]
可以看到:F1代表了两者的平衡程度。
当任务要求是既不能漏太多,也不能乱报太多时,F1 就非常关键了。
我们总结一下:
| 指标 | 关注点 | 典型问题 | 适用场景 |
|---|---|---|---|
| Accuracy | 总体正确率 | 模型整体表现怎样? | 类别均衡的分类任务 |
| Precision | 报准了没有 | 我说“是”的里有多少是真的? | 误报代价高(垃圾邮件、安检) |
| Recall | 找全了没有 | 所有真正的“是”我找到了多少? | 漏报代价高(医疗、风控) |
| F1-score | 平衡两者 | 报准与找全的折中 | 对误报和漏报都敏感 |
根据我们的任务需求,我们需要选择合适的评估指标来衡量性能。
很显然,在大多情况下,用F1-score作为单一评估指标,会比只用Precision或者Recall作为指标更为全面。
就像在这个课程里的例子里一样:

在前两者各有优劣的情况下,你可以通过F1分数比较出两个分类器的综合性能高低。
我们现在以及有了很多指标,但实际,在不同任务中,对不同指标的重视程不同。
因为我们又在此基础上,把指标分成满足指标和优化指标,他们因任务不同而不同。
在这个课程实例里来介绍一下:

现在假如这个分类器是针对某种医学图像的识别,那么我们就会这么设置:
那现在再换一种情况,这个分类器是某种危险信号的识别,那我们就会这么设置:
现在,给出二者的概念:
满足指标指的是:这些指标只要达到某条线即可,不强求做到最好。
优化指标指的是:这是我们真正要拉满、要尽可能提升的指标。
因为一个模型不可能同时把所有指标都变成最优。
必须先明确“最低要求是什么”,然后把资源集中在真正关键的指标上。
这便是指标部分的策略。
| 概念 | 原理 | 比喻 |
|---|---|---|
| 正交化调优 | 将训练目标拆分成互不干扰的小块,各调各的。 | 就像把厨房、客厅、卧室分开装修,不会你刷墙时把厨房的地板一起搞脏。 |
| 耦合 / 解耦合 | 耦合:互相牵连。解耦:各做各的事。 | 耦合像一团乱麻的耳机线;解耦像一根根排好序的键盘线。 |
| 单一数字评价指标 | 用一个数字融合多个维度来评估。 | 就像“性价比”:不用纠结贵不贵、好不好,一看这个就知道买不买。 |
| 精确率(Precision) | 预测出的正类里有多少是真的。 | 它关注“你说有猫,那你说对了吗?” |
| 召回率(Recall) | 所有真实正类里,你找出了多少。 | 它关注“所有的猫,你有没有一个不漏地找出来?” |
| F1-score | Precision 与 Recall 的调和平均。 | 既不能乱喊“有猫!”,也不能漏掉猫,是一种“说得准 + 找得全”的折中。 |
| 满足指标 & 优化指标 | 满足指标达线即可;优化指标才是你真正要卷的。 | 满足指标像考驾照过线就行;优化指标像真实上路,还得开得又稳又快。 |
登录查看全部
参与评论
手机查看
返回顶部