【DL】网络模型训练的一些指导原则

深度学习中网络模型训练的一些指导原则

1. 过拟合和欠拟合

机器学习的根本问题是优化和泛化之间的对立优化(optimization)是指调节模型以在训练数据上得到最佳性能(即机器学习中的学习),而泛化(generalization)是指训练好的模型在前所未见的数据上的性能好坏。机器学习的目的当然是得到良好的泛化,但你无法控制泛化,只能基于训练数据调节模型。

训练开始时,优化和泛化是相关的:训练数据上的损失越小,测试数据上的损失也越小。这时的模型是欠拟合(underfit)的,即仍有改进的空间,网络还没有对训练数据中所有相关模式建模但在训练数据上迭代一定次数之后,泛化不再提高,验证指标先是不变,然后开始变差,即模型开始过拟合。这时模型开始学习仅和训练数据有关的模式,但这种模式对新数据来说是错误的或无关紧要的。

为了防止模型从训练数据中学到错误或无关紧要的模式,最优解决方法是获取更多的训练数据模型的训练数据越多,泛化能力自然也越好。如果无法获取更多数据次优解决方法是调节模型允许存储的信息量,或对模型允许存储的信息加以约束。如果一个网络只能记住几个模式,那么优化过程会迫使模型集中学习最重要的模式,这样更可能得到良好的泛化。这种降低过拟合的方法叫作正则化(regularization)。

  1. 更大的网络更容易引起过拟合,大的网络很容易能学习训练数据到目标的映射关系,但会学习到许多无关紧要的信息,此时模型泛化能力会变差。通常训练模型时在头几步误差就很快降到很低的话,也许你需要考虑是否有过拟合的问题了。
  2. 更小的网络更容易引起欠拟合,通常训练集误差较大,还有很多提升空间,这时网络处于很大可能处于欠拟合,可能面临模型参数太少,容量小的问题,可能需要扩大网络规模。
  3. 训练的一般流程通常是开始时选择相对较少的层和参数,然后逐渐增加层的大小或增加新层,直到这种增加对验证损失的影响变得很小。
  4. 防止过拟合常用的方法包括a. 获取更多的训练数据;b. 减小网络容量;c. 添加权重正则化;d. 添加 dropout;

2. 机器学习的通用工作流程

2.1 定义问题,收集数据集
  1. 你的输入数据是什么?你要预测什么?只有拥有可用的训练数据,你才能学习预测某件事情。
  2. 你面对的是什么类型的问题?是二分类问题、多分类问题、标量回归问题、向量回归问题,还是多分类、多标签问题?或者是其他问题,比如聚类、生成或强化学习?确定问题类型有助于你选择模型架构、损失函数等。

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

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

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

2.2 选择衡量成功的指标

要控制一件事物,就需要能够观察它。要取得成功,就必须给出成功的定义:精度?准确率(precision)和召回率(recall)?客户保留率?衡量成功的指标将指引你选择损失函数,即模型要优化什么。它应该直接与你的目标(如业务成功)保持一致自定义衡量成功的指标也很常见。

2.3 确定评估方法

一旦明确了目标,你必须确定如何衡量当前的进展。了三种常见的评估方法如下:

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

只需选择三者之一。大多数情况下,第一种方法足以满足要求。

2.4 准备数据

一旦知道了要训练什么、要优化什么以及评估方法,那么你就几乎已经准备好训练模型了。但首先你应该将数据格式化,使其可以输入到机器学习模型中(这里假设模型为深度神经网络)。

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

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

2.5 开发比基准更好的模型

先设计一个小网路,初步开始有效果,也称为有统计功效(也就是比随机生成的数据结果要好)。但要注意,不一定总是能获得统计功效。如果你尝试了多种合理架构之后仍然无法打败随机基准,那么原因可能是问题的答案并不在输入数据中。要记住你所做的两个假设:

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

这些假设很可能是错误的,这样的话你需要从头重新开始
如果一切顺利,你还需要选择三个关键参数来构建第一个工作模型。

  1. 最后一层的激活。它对网络输出进行有效的限制。例如,IMDB 分类的例子在最后一层使用了 sigmoid,回归的例子在最后一层没有使用激活,等等。
  2. 损失函数。它应该匹配你要解决的问题的类型。例如,IMDB 的例子使用 binary_crossentropy、回归的例子使用 mse,等等。
  3. 优化配置。你要使用哪种优化器?学习率是多少?大多数情况下,使用 rmsprop 及其默认的学习率是稳妥的。

下图列出一些常见问题类型的最后一层激活和损失函数:
在这里插入图片描述

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

一旦得到了具有统计功效的模型,问题就变成了:模型是否足够强大?它是否具有足够多的层和参数来对问题进行建模?例如,只有单个隐藏层且只有两个单元的网络,也许具有统计功效,但并不足以很好地解决问题。请记住,机器学习中无处不在的对立是优化和泛化的对立,理想的模型是刚好在欠拟合和过拟合的界线上,在容量不足和容量过大的界线上。为了找到这条界线,必须超过该界线(让模型过拟合)。

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

  1. 添加更多的层。
  2. 让每一层变得更大。
  3. 训练更多的轮次。

要始终监控训练损失和验证损失,以及你所关心的指标的训练值和验证值。如果你发现模型在验证数据上的性能开始下降,那么就出现了过拟合。下一阶段将开始正则化和调节模型,以便尽可能地接近理想模型,既不过拟合也不欠拟合。

2.7 模型正则化与调节超参数

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

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

请注意每次使用验证过程的反馈来调节模型,都会将有关验证过程的信息泄露到模型中。如果只重复几次,那么无关紧要;但如果系统性地迭代许多次,最终会导致模型对验证过程过拟合(即使模型并没有直接在验证数据上训练)。这会降低验证过程的可靠性。
一旦开发出令人满意的模型配置,你就可以在所有可用数据(训练数据 + 验证数据)上训练最终的生产模型,然后在测试集上最后评估一次。如果测试集上的性能比验证集上差很多,那么这可能意味着你的验证流程不可靠,或者你在调节模型参数时在验证数据上出现了过拟合。在这种情况下,你可能需要换用更加可靠的评估方法,比如重复的 K 折验证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值