【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.

    • 所需手工设计的组件更少,简化设计工作流程。

  • 端到端深度学习的缺点:

    • 需要大量的数据。
    • 排除了可能有用的人工设计组件。

参考

posted @ 2022-07-19 15:52  空白4869  阅读(75)  评论(0编辑  收藏  举报