深度学习模型训练全流程!

Posted Datawhale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习模型训练全流程!相关的知识,希望对你有一定的参考价值。

↑↑↑关注后"星标"Datawhale

每日干货 & 每月组队学习,不错过

 Datawhale干货 

作者:黄星源、奉现,Datawhale优秀学习者

本文从构建数据验证集、模型训练、模型加载和模型调参四个部分对深度学习中模型训练的全流程进行讲解。

一个成熟合格的深度学习训练流程至少具备以下功能:在训练集上进行训练;在验证集上进行验证;模型可以保存最优的权重,并读取权重;记录下训练集和验证集的精度,便于调参。

本文CNN模型构建参考:

https://mp.weixin.qq.com/s/JhFun5I_8Kjkbz6S4613Xw

数据及背景  

https://tianchi.aliyun.com/competition/entrance/531795/introduction(阿里天池 - 零基础入门CV赛事)

构建验证集

在机器学习模型(特别是深度学习模型)的训练过程中,模型是非常容易过拟合的。深度学习模型在不断的训练过程中训练误差会逐渐降低,但测试误差的走势则不一定。

在模型的训练过程中,模型只能利用训练数据来进行训练,并不能接触到测试集上的样本,故需要构建验证数据集对模型进行验证。

过拟合与欠拟合

拟合(Fitting):就是说这个曲线能不能很好的描述某些样本,并且有比较好的泛化能力。

过拟合(Overfitting):模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,即不能正确的分类,模型泛化能力太差。

欠拟合(UnderFitting):模型没有很好地捕捉到数据特征,不能够很好地拟合数据,或者是模型过于简单无法拟合或区分样本。

防止过拟合方法

  1. 正则化方法。正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。但是在机器学习中一般使用L2正则。

  2. 数据增强(Data augmentation),增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。

  3. 重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。

  4. 提前终止法(Early stopping),对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)学习算法。提前终止法便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。

  5. 丢弃法(Dropout)。这个方法在神经网络里面很常用。丢弃法是ImageNet中提出的一种方法,通俗一点讲就是丢弃法在训练的时候让神经元以一定的概率不工作。具体看下图:

左侧为全连接网络,右侧的网络以 0.5 的概率丢弃神经元。输出层并没有应用 Dropout

方法1:L1正则化

在原始的代价函数后面加上一个L1正则化项,即全部权重 的绝对值的和,再乘以 (这里不像L2正则化项那样,须要再乘以1/2)。

先计算导数:

上式中 表示 的符号,那么权重w的更新规则为:

比原始的更新规则多出了 这一项。

为正时, , 则更新后的 变小;当 为负时, >0, 则更新后的 变大——因此它的效果就是让 往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

另外,上面没有提到一个问题,当 为0时怎么办?当 等于0时, 是不可导的。所以我们仅仅能依照原始的未经正则化的方法去更新 ,这就相当于去掉 这一项,所以我们能够规定 ,这样就把 的情况也统一进来了。(编程时,令

方法2:L2正则化(权重衰减)

L2正则化就是在代价函数后面再加上一个正则化项:

前一项代表原始的代价函数,后面那一项就是L2正则化项。它是这样来的:全部参数 的平方和,除以训练集的样本大小n。

λ 就是正则项系数,权衡正则项与 项的比重。另外另一个系数1/2,1/2经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与1/2相乘刚好凑整。L2正则化项是怎么避免过拟合的呢?我们推导一下看看,先求导:

部署深度学习模型时的全流程加密方案探索

从表格数据训练深度学习模型时,损失总是 nan

损失函数和深度学习

使用Pytorch实现深度学习的主要流程

Keras深度学习实战——神经网络基础与模型训练过程详解

如何解释模型学习曲线(训练和验证数据的时代准确率和损失曲线)?