模型训练技巧

模型训练技巧

神经网络模型设计训练流程

图1-1 神经模型设计流程

当我们设计并训练好一个神经网络之后,需要在训练集上进行验证模型效果是否良好。这一步的目的在于判断模型是否存在欠拟合;在确定已经在训练集上拟合的很好,就需要在测试集上进行验证,如果验证结果差就需要重新设计模型;如果效果一般,可能需要增加正则化,或者增加训练数据;

欠拟合处理策略

当模型在训练集上的表现结果并不好的时候,在排除不是数据集和训过程有问题,你可以采用以下几个方法来进行处理。

更换激活函数

Sigmoid激活函数

Sigmoid函数的形式如(1)所示,图结构如图1-2所示

图1-2 sigmoid函数

但是使用Sigmoid函数作为激活函数会存在梯度消失的现象。就是当神经网络的隐藏层数量超过3层的时候,底层的参数更新就几乎为0;

ReLu(Rectified Linear Unit)激活函数

ReLu函数的形式如(2)所示,图形结构如图1-3所示

图1-3 ReLu函数

使用ReLu作为激活函数的原因在于:1)计算更为简单,相比与Sigmoid函数,ReLu计算的更为简单2)ReLu相当于无穷多个不同偏置的Sigmoid函数叠加起来的效果3)ReLu可以解决梯度消失的问题。由于ReLu函数结构,当某个神经元的输出为0时(如图1-4所示),就相当于该神经元在神经网络中不起任何作用,可以将这一些神经元从神经网络中舍去(如图1-5)。

图1-4 神经网络中输出为0的神经元

图1-5 “瘦长线性”神经网络

Leaky ReLu激活函数

由于当ReLu的输入时,对应的神经元就不起任何作用。因此,Leaky ReLu的改进点是当输入时,输出不再是0,而是一个较小值。Leaky ReLu函数结构如(3)所示,的取值通常需要人工赋值,如当时,函数结构如1-6所示

图1-6 Leaky ReLu激活函数

Parametric ReLu激活函数

由于在Leaky ReLu中的需要人工赋值,赋值的好坏需要一定的先验知识。因此,Parametric ReLu中的是参数,是可以被训练出来,甚至每一个神经元都可以有不同的

图1-7 Parametric ReLu激活函数

的训练情况更一般参数一样,但跟一般的参数更新有所区别的是采用带有动量的更新方法

其中为动量,为学习率;

Maxout可学习激活函数(Learnable Activation Function)

Maxout是一种可学习的激活函数,它可以学习出来ReLu函数的形式。因此,ReLu是Maxout的一种特殊情况。 Maxout结构如图1-8所示,当输出值跟权重相乘后,并不是送进激活函数进行转换,而是将若干元素作为一组(元素数量需预先设定),选择最大值作为输出。

图1-8 Maxout结构

以图1-9为例,当其中一个输入为1,则最终可以的激活函数实行为图1-10所示。根据你选择多少个元素作为一组,就可以训练出任意的分段函数。

图1-9 Maxout示例

图1-10 Maxout训练出的激活函数

自适应学习率

Adagrad

Adagrad是将学习率的取值跟之前所有偏微分值的均方值的根号有关系。以当个参数为例,具体的计算如下

其中,表示对的偏导数;表示将先前所有对参数的偏导数的平方进行累加,并求均值,最后再取根号;

RMSProp

RMSProp的计算公式如(7)所示,从公式中可以看出,在进行参数更新的时候,不仅考虑了当前的梯度,也考虑了先前历史的梯度。其中是可以自己设置的常数,当的值较小时,就表示比较相信当前的梯度。

Momentum

Momentum的思想来自于现实生活中的场景,当我们往一个崎岖的抛一个球时,由于重力势能,会导致球不一定停留在第一个凹点,可能会翻过第一个凸点,到达全局最低点。

图1-11 Momentum现实场景

因此,不同于以往的移动方向只考虑梯度方向,也会考虑到以往的移动方向。具体的计算公式中为(8)

过拟合处理策略

早停(Early Stopping)

早停的思想就是,当模型在训练集上的训练误差在降低时,在测试集的测试误差可能会增加,如图1-12所示。因此需要在训练误差和测试误差之间做一个权衡。

图1-12 训练误差与测试误差

正则化(Regularization)

添加正则化的目的在于增加模型的平滑性,并且通常会在已有的损失函数上添加一些跟参数相关的项。

L2正则化

假定现在已经确定的损失函数为L(θ),而L2正则化会对添加一项,L(θ)形式如(9)

当添加上L2之后,对于参数的跟新形式变为(10)

对于(10)的跟不添加L2正则项是一样的,而增加L2后,就相当于参数w在更新之前总是会乘上一个小于1的数,因此总是会使w的值减小,这个计算过程称作Weight Decay。L2的效果是使得参数越来越接近0,而我们在初始化参数时通常也会初始化接近于0的值;而我们更新的参数是使得参数越来越远离0,;因此,L2的效果跟早停的效果有些相似。

L1正则化

L1正则化跟L2正则化非常相似,只是L2是取平方和,而L1是取绝对值,形式如(11)

添加L1项后,参数的更新形式就为

因此,当w>0时,为正,从而使得w的值减小;反之,当w<0时,就会加上一个正数,从而使w的值增加。由于L2是每次都乘上一个小于0的系数因此w减小的会比较明显;而L1是每次都减去一个固定值,因此下降的比较缓慢;所以,在最终训练出来的w,添加L2项的参数普遍较小;添加L1的参数可能有大有小。

Dropout

Dropout的做法是对于一个确定好的神经网络模型,每一次更新参数前都会对原始模型中的每一个神经元进行采样,决定是否丢弃神经元,每一个神经元都有p%的几率被丢掉。

图1-13 dropout采样过程

图1-14 dropout采样后的NN结构

在训练的时候需要对模型进行dropout采样,但是当测试的时候就不要进行采样,而且,每一个参数都要乘上(1-p)%。如图1-15所示,假设dropout几率为50%,则训练时有一半的神经元会被丢弃。而在测试时,为了使测试和训练的输出尽可能相同,就需要对每一个权重都乘上(1-p)%,以保持输出值的平衡(如图1-15右图所示)。

图1-15 dropout测试权重处理

Dropout原理解释

Dropout可以看做是一种集成学习。集成学习的做法大致是,从训练集中采样出多笔数据,分别去训练不同的模型(模型的结构可以不同)。用训练出的多个模型分别对测试集进行预测,将最终的结果进行平均(如图1-16所示)。

图1-16 集成学习的处理方法

假定设计的神经网络中的神经元个数为M个,每个神经元可能被dropout或者不被dropout。因此,每个神经元有2种选择,而M个神经元就有2M选择,对应的就可以产生2M种模型结构。因此,在训练模型时,就相当于训练了多个模型。对于模型中的某个权重是,在不同的dropout的神经网络中是共享的。

图1-17 dropout训练过程

但是,在训练好之后,需要进行预测。但是无法将如此多的模型分别进行存储,并单独预测。于是,为了解决这个问题,就在所有的不Dropout的模型的权重都乘上(1-p)%。

图1-18 dropout权重处理

Dropout在线性激活函数上的表现会更好。原因在于,当激活函数为线性是,所有权重都乘上(1-p)%,dropout后的模型输出跟集成输出的结果更加接近了。

Sigmoid梯度消失分析

但是使用Sigmoid函数作为激活函数会存在梯度消失的现象。就是当神经网络的隐藏层数量超过3层的时候,底层的参数更新就几乎为0;这是因为Sigmoid求导公式为S(x)‘=S(x)(1-S(x)),当时x=0,S(x)=0.5时,maxS(x)‘=0.25而当我们要求解底层的参数时,需要累乘上层参数的斜率,也就是要乘上多个小于0.25的数,当乘的个数较多时,的值就会变得很小,从而导致梯度消失现象。而由于ReLu函数的斜率为1,进行求导在累乘,不会产生上述情况。

参考资料

[1]机器学习-李宏毅

原文地址:https://www.cnblogs.com/MrPan/p/9503008.html

时间: 2024-11-02 16:34:36

模型训练技巧的相关文章

深度学习模型训练技巧 Tips for Deep Learning

一.深度学习建模与调试流程 先看训练集上的结果怎么样(有些机器学习模型没必要这么做,比如决策树.KNN.Adaboost 啥的,理论上在训练集上一定能做到完全正确,没啥好检查的) Deep Learning 里面过拟合并不是首要的问题,或者说想要把神经网络训练得好,至少先在训练集上结果非常好,再考虑那些改善过拟合的技术(BN,Dropout 之类的).否则的话回去检查三个 step 哪里有问题. Deep Learning 中的方法为了解决两个主要问题而提出:1.训练集做得不好:2.训练集做得好

CS231n 卷积神经网络与计算机视觉 7 神经网络训练技巧汇总 梯度检验 参数更新 超参数优化 模型融合 等

前面几章已经介绍了神经网络的结构.数据初始化.激活函数.损失函数等问题,现在我们该讨论如何让神经网络模型进行学习了. 1 梯度检验 权重的更新梯度是否正确决定着函数是否想着正确的方向迭代,在UFLDL中我们提到过,计算时梯度公式如果计算错误是不容被察觉的,我们需要比较分析法得到梯度与数值法得到的梯度是否相似,下面是一些技巧: 1.1 centered formula 高等数学中我们知道导数的近似公式: df(x)dx=f(x+h)?f(x)h 以及下面的centered formula: df(

深度学习网络训练技巧汇总

转载请注明:炼丹实验室新开了一个专栏,为什么叫炼丹实验室呢,因为以后会在这个专栏里分享一些关于深度学习相关的实战心得,而深度学习很多人称它为玄学,犹如炼丹一般.不过即使是炼丹也是可以摸索出一些经验规律的,希望和各位炼丹术士一起多多交流. 训练技巧对深度学习来说是非常重要的,作为一门实验性质很强的科学,同样的网络结构使用不同的训练方法训练,结果可能会有很大的差异.这里我总结了近一年来的炼丹心得,分享给大家,也欢迎大家补充指正. 参数初始化. 下面几种方式,随便选一个,结果基本都差不多.但是一定要做

训练技巧详解【含有部分代码】Bag of Tricks for Image Classification with Convolutional Neural Networks

训练技巧详解[含有部分代码]Bag of Tricks for Image Classification with Convolutional Neural Networks 置顶 2018-12-11 22:07:40 Snoopy_Dream 阅读数 1332更多 分类专栏: 计算机视觉 pytorch 深度学习tricks 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/e01528

输入法之模型训练

输入法,尤其是拼音输入法,解决的就是一些序列标注的问题,针对给定的状态(拼音),获取其概率最高的隐状态(中文). 这个是一个标准的HMM,针对HMM的解码过程,是一个很成熟也很完备的东西. local的计算和存储能力都有限,我们选择一般是二阶马尔科夫,也就是所谓的bigram model. 高阶对质量会有帮助,但是涉及到存储和计算,工程上不可行. 同理,利用ME 以及CRFmodel都可以解决这一类的标注问题,同样是工程上的问题,不太可行. 确定了采用bigram model,那么训练过程也就很

卷积神经网络_(3)_几种简单训练技巧

下面来介绍几种简单的训练技巧: 1.首先说一下filter(感受野)的概念:感受野的大小即特征图中的某一单元是从原始输入图像中多大的一块区域中提取的特征: 如上图,第一次卷积后得到的特征图中,每一个小单元的感受野大小为3*3,而第二次卷积后特征图中的每一个小单元对应的感受野大小为5*5,以此类推,如果 用三层3*3的filter,那么最后一层特征图中每一个小单元的感受野大小即为7*7. 同时我们可以推论:卷积层数越多,越后面的特征图中的每个单元的感受野大小就越大,特征提取的效果就越好. 这时我们

机器学习基本概念和模型训练基本问题

分类与回归的区别 二叉树 二叉树很容易理解,在这里我们一般用满二叉树:就是非叶子节点都有2个分支的树形数据结构 决策树分类 决策树最初是用来做决策用的,就好像下面的见不见相亲对象的决策过程一样: 如果把最后的决策结果看成是分类,那么决策树就可以用来分类了,例如,下面的例子就是把相亲对象分为见和不见两种. 下面通过一个例子来区分这些概念 特征,正负样本,训练集(数据),验证集(数据),预测集(数据) 我们的数据集是一百个点,如下图所示,是二维平面的100个点,这个就是我们总的数据集(全集),这些数

[Kaggle] dogs-vs-cats之模型训练

上一步建立好模型之后,现在就可以训练模型了. 主要代码如下: import sys #将当期路径加入系统path中 sys.path.append("E:\\CODE\\Anaconda\\tensorflow\\Kaggle\\My-TensorFlow-tutorials-master\\01 cats vs dogs\\") import os import numpy as np import tensorflow as tf import input_data import

opencv_人脸检测、模型训练、人脸识别

人脸检测.模型训练.人脸识别 2018-08-15 今天给大家带来一套人脸识别一个小案例,主要是帮助小伙伴们解决如何入门OpenCV人脸识别的问题,现在的AI行业比较火热,AI技术的使用比较广泛.就拿现在的只能手机来说吧,现在很多智能手机都必须有人脸识别解锁.拍照自动美颜.拍照物体识别等等功能,这些都是AI技术的功劳.在此也不多说了,让我们来见证奇迹的发生. 1.首先我们先准备好跑代码的环境,这一点很重要,我在跑这个代码的时候就是环境配置搞了我半天的实际,很头疼.我使用的是python3.6.5