【Deep Learning】03 构建机器学习项目
本文为吴恩达 Deep Learning 笔记
机器学习策略 (上)
评价指标
为什么要学习机器学习策略:
- 当我们构造神经网络模型时,可以从很多方面优化:更多的数据、超参数调试、改变神经网络结构、改进优化算法、正则化。
正交化方法:
Orthogonalization 正交化方法
- 正交化方法:每次只调试一个参数,保持其它参数不变。这样可以使每一种调节方法对应一重评价,更精确有效的解决问题。
- 在机器学习中,我们希望模型有四重评价:
- 在训练集上表现好:(如表现不好) 使用更复杂的神经网络结构、改进优化算法 (如使用 Adam)。
- 在验证集上表现好:(如表现不好) 使用更多的数据、正则化。
- 在测试集上表现好:(如表现不好) 使用更大的验证集。
- 在实际应用上表现好:(如表现不好) 改变测试集或代价函数。
- 早停法 (Early Stopping) 不推荐使用,因为他会影响多个 "功能",具有正交化。
单值评价指标:
Single Number Evaluation Metric 单值评价指标
Harmonic Mean 调和平均数
-
准确率和召回率:
- 准确率:预测为正类的正类数量 / 预测为正类的数量。
- 召回率:预测为正类的正类数量 / 正类的数量。
-
假设有两个模型 \(A\) 和 \(B\),\(A\) 的准确率 \(P\) 更高,\(B\) 的召回率 \(R\) 更高。我们使用单值评价指标 \(F1\) \(Score\) (\(P\) 和 \(Q\) 的调和平均数) 来评价模型的好坏:
\[F1 = \frac{2 \cdot P \cdot R}{P + R} \] -
除 \(F1\) \(Score\) 外,我们也可以使用平均值作为单值评价指标来对模型进行评估。
满意指标和优化指标:
Satisficing Metic 满意指标
Optimizing Metic 优化指标
- 把所有的性能指标都综合在一起,构成单值评价指标是比较困难的。
- 我们把一些性能作为满意指标:只要满足阈值即可。
- 我们把一些性能作为优化指标:寻求最优化值。
训练 / 验证 / 测试
训练集 / 验证集 / 测试集划分:
- 训练集 / 验证集 / 测试集应该是同分布的。
验证集和测试集的大小:
- 随着机器学习的发展,数据的增加,训练集 / 验证集 / 测试集的划分大小在不断变化。
什么时候改变验证集 / 测试集和评价指标:
- 机器学习可分为两个过程:找靶心、通过训练以射中靶心。
- 在训练的过程中可能会根据实际情况改变算法模型的评价标准,进行动态调整。
人类表现
为什么与人类表现做比较:
Human-level Performance 人类表现
Bayes Optimal Error 贝叶斯最优误差
- 机器学习模型经过训练会不断接近人类表现,甚至超过人类表现,但是超过人类表现后,准确性会上升得较慢,最终不断接近理想的最优情况 (Bayes Optimal Error)。
- 当构建的机器学习模型的表现还没达到人类的表现水平时,我们会使用各种方式来提升它:
- 采用人工标记过的数据进行训练。
- 通过人工误差分析了解为什么人能够正确识别。
- 进行偏差、方差分析。
可避免偏差:
Avoidable Bias 可避免偏差
- 偏差与方差:
- 训练误差与人类表现误差之间的差值称为偏差 (Bias),也叫做可避免偏差 (Avoidable Bias)。
- 训练误差与测试误差之间的差值称为方差 (Variance)。
- 参考《偏差 / 方差》一节。
- 如果偏差大于方差,应专注于减少偏差;如果方差大于偏差,应专注于减少方差。
理解人类表现:
- 不同人群的人类表现不同,一般来说,我们将表现最好的人类群体作为人类表现。
- 不同人类表现误差的选择会影响偏差和方差的相对变化。
- 当模型表现很好,接近贝叶斯最优误差时,人类表现误差难以准确定义,人类表现误差对方差与偏差谁者重要的影响也越大。
超过人类表现:
- 在很多方面,机器学习模型的表现已经超过人类,如:广告、商品推荐、物流时间估计、货款审批。
- 当算法模型的表现超过人类表现时,很难再通过人的直觉来解决如何继续提高算法模型性能的问题。
改善模型的表现:
- 比较训练误差与人类表现误差之间的差值 (Bias) 和训练误差与测试误差之间的差值 (Variance)。
- 解决 High Bias 的方法:
- 更大的模型。
- 改进优化算法:Momentum, RMSprop, Adam。
- 神经网络结构 / 超参数。
- 解决 High Variance 的方法:
- 更多的数据。
- 正则化:L2, Dropout, 数据增强 (Data Augmentation)。
- 神经网络结构 / 超参数。
机器学习策略 (下)
误差分析
误差分析:
Error Analysis 误差分析
- 猫的识别例子:
- 已知模型错误率为 \(10\%\),检查发现,该模型会将一些狗类图片错误分类成猫。
- 一种解决办法是扩大狗类 (负样本) 图片的数量,误差分析帮助判断是否值得花时间这样做。
- 从分类错误的样本中统计出狗类图片的数量。
- 如果狗类样本占 \(5\%\),则扩大狗类图片的数量只能使错误率降为 \(9.5\%\)。
- 如果狗类样本占 \(50\%\),则扩大狗类图片的数量能使错误率降为 \(5\%\)。
- 通常来说,比例越大,影响越大,越应该花费时间和精力着重解决这一问题。
清理标注错误的数据:
- 有时会发现数据集中有些样本被人为地错误标记了。
- 如果是训练集中样本被错误标记,由于机器学习算法对于随机误差的稳健性,只要出错样本数量较少,分布随机,就不必花时间修正。
- 如果是验证集 / 测试集中样本被错误标记,与《误差分析》一节相同,统计测试集中所有分类错误的样本中标注错误的数据的比例,决定是否修正所有标注错误的数据。
快速构建一个系统并迭代:
- 先快速构建第一个简单模型,然后再反复迭代优化。
数据不匹配
训练集 / 测试集的不同划分:
- 训练集和验证集 / 测试集的来源不同:
- 方法一:将训练集与验证集 / 测试集混合,随机选一部分做训练集,另一部分做验证集 / 测试集。
- 方法二:将训练集与一部分验证集 / 测试集作为新的训练集,另一部分验证集 / 测试集作为新的验证集 / 测试集 (这种方法较为常用,性能较好)。
不同数据集划分的偏差和方差:
Data Dismatch 数据不匹配
- 如果训练集和验证集 / 测试集来自不同分布,则不能直接比较训练集误差和验证集 / 测试集误差。
- 解决方案:从训练集中划分出一部分作为训练 - 验证集 (Train-dev Set)。
- 训练 - 验证集误差与训练集误差之差反应了方差 (Variance)。
- 训练 - 验证集误差与验证集之差反应了数据不匹配 (Data Dismatch)。
- 参考《可避免偏差》一节。
解决数据不匹配问题:
Artificial Data Synthesi 人工数据合成
- 进行误差分析,人工检查训练集和验证集 / 测试集。
- 尝试将训练集数据调整的更想验证集 / 测试集,使用人工数据合成等方法。
其他机器学习方法
迁移学习:
Transfer Learning 迁移学习
Pre-training 预训练
Fine-tuning 微调
- 迁移学习:将已经训练好的模型的一部分知识 (网络结构) 直接应用到另一个类似模型中。
- 迁移学习的做法:
- 方法一:利用之前的神经网络模型,只改变样本输入、输出以及输出层的权重系数 \(W^{[L]}\), \(b^{[L]}\),其它层所有的权重系数 \(W^{[l]}\), \(b^{[l]}\) 保持不变。
- 方法二:只保留网络结构,重新训练所有层的权重系数。
- 迁移学习可以保留原神经网络的一部分,再添加新的网络层,具体问题,具体分析。
- 预训练和微调:
- 初始 \(W^{[l]}\), \(b^{[l]}\) 由之前的模型训练得到,这一过程称为预训练。
- 之后不断调试、优化 \(W^{[l]}\), \(b^{[l]}\) 的过程称为微调。
- 迁移学习的使用场景:
- 任务 \(A\) 和任务 \(B\) 有同样的输入。
- 任务 \(A\) 有更多数据,从人物 \(A\) 迁移到任务 \(B\)。
- 任务 \(A\) 的低层次特征对任务 \(B\) 的学习有帮助。
多任务学习:
Multi-task Learning 多任务学习
- 多任务学习:构建神经网络同时执行多个任务。
- 如:识别行人、车辆、交通标志和信号灯。
- 多个任务之间具有相关性,如抹口红和戴耳环。
- 多任务学习与 Softmax:
- 多任务学习的输出向量 \(y\) 可以有多个元素为 \(1\) (多任务学习中,可能存在训练样本 \(y\) 某些标签为空白的情况,这并不影响多任务模型的训练) 。
- Softmax 的输出向量 \(y\) 只有一个元素为 \(1\)。
- 多任务学习的使用场景:
- 训练的一组任务可以共用低层次特征。
- 每个任务的数据量相近。
- 能够训练一个足够大的神经网络,以同时做好所有的工作。
什么是端到端的深度学习:
End-to-end Deep Learning 端到端的深度学习
- 端到端深度学习:
- 将所有不同阶段的数据处理系统或学习系统模块组合在一起,用一个单一神经网络模型实现所有的功能。
- 将所有模块混合在一起,只关心输入和输出。
- 训练样本足够大,神经网络模型足够复杂,端到端深度学习模型性能比传统机器学习分块模型更好。
是否要使用端到端的深度学习:
-
端到端深度学习的优点:
-
只要有足够多的数据,剩下的全部交给一个足够大的神经网络。比起传统的机器学习分块模型,可能更能捕获数据中的任何统计信息,而不需要用人类固有的认知来进行分析。
Let the data speak.
-
所需手工设计的组件更少,简化设计工作流程。
-
-
端到端深度学习的缺点:
- 需要大量的数据。
- 排除了可能有用的人工设计组件。