alex_bn_lee

导航

【486】机器学习的通用工作流程

 参考:Python深度学习 P89


目录

  1. 定义问题,收集数据集
  2. 选择衡量成功的指标
  3. 确定评估方法
  4. 准备数据
  5. 开发比基准更好的模型
  6. 扩大模型规模:开发过拟合的模型
  7. 模型正则化与调节超参数

 

一、定义问题,收集数据集

  首先,你必须定义所面对的问题。

  • 你的输入数据是什么?你要预测什么?
  • 你面对的是什么类型的问题?是二分类问题、多分类问题、标量回归问题、向量回归问题,还是多分类、多标签问题?

  只有明确了输入、输出以及所使用的数据,你才能进入下一阶段。注意这一阶段所做的假设。

  • 假设输出是可以根据输入进行预测的。
  • 假设可用数据包含足够多的信息,足以学习输入和输出之间的关系。

  并不是所有的问题都可以解决,例如股票价格走势预测。非平稳问题(nonstationary problem)是无法解决的问题

  请记住,机器学习只能用来记忆训练数据中存在的模式。你只能识别出曾经见过的东西。在过去的数据上训练机器学习来预测未来,这里存在一个假设,就是未来的规律与过去相同。但事实往往并非如此。

二、选择衡量成功的指标

  要控制一件事物,就需要能够观察它。要取得成功,就必须给出成功的定义:精度?准确率(precision)和召回率(recall)?衡量成功的指标将指引你选择损失函数,即模型要优化什么。ROC、AUC

三、确定评估方法

  • 留出验证集。数据量很大时可以采用这种方法
  • K折交叉验证。如果留出验证的样本量太少,无法保证可靠性,那么应该选择这种方法
  • 重复的K折验证。如果可用数据很少,同时模型评估有需要非常准确,那么应该使用这种方法  

四、准备数据

  • 应该将数据格式化为张量
  • 这些张量的取值通常应该缩放为较小的值,比如在 [-1, 1] 区间或 [0, 1] 区间
  • 如果不同的特征具有不同的取值范围(异质数据),那么应该做数据标准化
  • 可能需要做特征工程,尤其是对于小数据问题

  准备好输入数据和目标数据的张量后,就可以开始训练模型了

五、开发比基准更好的模型

  开发一个小型模型,它能够打败纯随机的基准(dumb baseline)。在 MNIST 数字分类的例子中,任何精度大约 0.1 的模型都可以说具有统计功效。之后需要选择三个关键参数来构建第一个工作模型。

  • 最后一层的激活(sigmoid,softmax)
  • 损失函数(binary_crossentropy,mse)
  • 优化配置(优化器、学习率,rmsprop 及其默认的学习率就是稳妥的)
问题类型 最后一层激活函数 损失函数
二分类问题 sigmoid binary_crossentropy
多分类、单标签问题 softmax categorical_crossentropy
多分类、多标签问题 sigmoid binary_crossentropy
回归到任意值 mse
回归到0~1范围内的值 sigmoid mse 或 binary_crossentropy

六、扩大模型规模:开发过拟合的模型

  首先搞清楚你需要多大的模型,就必须开发一个过拟合的模型,这很简单。

  • 添加更多的层
  • 让每一层变得更大
  • 训练更多的轮次

  要始终监控训练损失和验证损失,以及你所关心的指标的训练值和验证值。如果你发现模型在验证数据上的性能开始下降,那么就出现了过拟合。

  下一阶段将开始正则化和调节模型,以便尽可能地接近理想模型,既不过拟合也不欠拟合。

七、规则正则化与调节超参数

  这一步是最费时间的:你将不断地调节模型、训练、在验证数据上评估(这里不是测试数据)、再次调节模型,然后重复这一过程,直到模型达到最佳性能。你应该尝试一下几项。

  • 添加 dropout
  • 尝试不同的架构:增加或者减少层数
  • 添加 L1 和/或 L2 正则化
  • 尝试不同的超参数(比如每层的单元数或优化器的学习率),以找到最佳配置。
  • (可选)反复做特征工程:添加新特征或删除没有信息量的特征。

  如果系统性地迭代多次,最终会导致模型对验证过程过拟合(即使模型并没有直接在验证数据上训练)。这会降低验证过程的可靠性。如果测试集上的性能比验证集上差很多,那么这可能意味着你的验证流程不可靠,或者你在调节模型参数时在验证数据上出现了过拟合。在这种情况下,你可能需要换用更可靠的评估方法,比如重复的 K 折验证。

posted on 2020-09-27 17:00  McDelfino  阅读(155)  评论(0编辑  收藏  举报