结果不理想的检查步骤
情况一:模型问题
- 所设的模型不包含要找的函数;需要重新修改模型
- 可以增加模型中特征值,或者增加层数(Deep Learning),以增加模型的复杂度
情况二:优化(optimization)没做好
- 没有找到模型中解决问题的最好的方法
如何判断问题出自情况一还是二:
上图右边,56层的netWork训练数据得到的数据没有20层的netWork的好,表明56层不是Overfitting的问题,因为56层netWork包含20层netWork,层数越高得到训练数据必然越好,所以这是情况二
情况三:过度拟合(Overfitting)
例如:
- 模型的自由度大,就会产生一些奇怪的曲线,导致训练资料的结果好,测试资料上的结果差
解决方法:
- 增加训练资料,即使模型的弹性较大,足够多的训练资料也能限制住产生的曲线,如:数据增加(data augmentation),把图片资源上下翻转,左右翻转等。
- 缩小模型的弹性,限制模型:如:把高次函数限制函数为二次函数
限制方法:减少特征值、减少参数,Deep Learn中减少每层中神经元的个数,模型中共用参数等
过度限制也可能会回到情况一的问题:
情况四:不匹配(mismatch)
特殊情况;训练资料和测试资料的分布不一样。如:
解决情况二:优化(optimization)问题
- 原因:由于没有找到该模型中使训练资料得到数据最好的函数,导致训练资料得到的数据不好
- 局部最小值和鞍点处一阶倒数都为0,所以可以根据泰勒展开式,确定周围点与这点值的大小关系,从而区分局部最小值和鞍点
泰勒级数近似(Tayler Series Approximation)
- 对于鞍点的情况,H可以确定参数更新的方向:
- 局部最小值的情况在现实中是比较少的:
出现局部最小值的点处在更高维度的模型中很可能只是一个鞍点,并且现实中的模型中参数维度都较高,所以很少出现局部最小值的情况
批处理(Batch)
- 实际算微分时,不是直接对所有参数算微分,而是把所有的参数分成大小为B的批处理;
- 每次修改参数的时候,依次拿B资料算出Li,用微分值和η(learning rate)修改参数;全部的Batch都修改一次叫Epoch,每次Epoch后都会重新分Batch
注:左边不分Batch,右边分成了N个Bactch
左边修改参数时,一次训练只修改一次,修改一次数据要较长时间,并且修改的参数方向准确;
右边的一次训练要修改N次数据,每次修改参数时间短,但是修改的方向不准确
由于GPU可以同时计算多比数据,所以Batch的个数分的不多时,所需的时间不一定会很长;
例如:训练资料有60000个参数,Batch Size设置为1,一个Epoch要60000个updates;
若Batch Size设置为1000,要60个updates;(同时计算1000比数据)
注:当Batch Size较大时,也会出现优化失败(optimization fails)的问题
原因是,当Batch较大时,更容易出现微分为0的情况,所以更容易卡在某个点处
- 有时候会出现较大Batch和较小的Batch在训练资料中数据相近,但测试中较小的Batch得到的数据较差;原因可能训练中的Loss函数中有多个局部最小值,不同的局部最小值周围数据分布平缓程度不一样,而测试资料的Loss函数又和训练的Loss函数有一些差距,此时局部最小值周围数据分布不平缓时,就会导致测试资料数据较差(局部最小值周围数据分布越平缓时,这个局部最小值越好)
动力(Momentum)
- 可能对抗局部最小值(local minima)和鞍点(saddle point)
- 概念:Loss函数比作斜坡,参数比作球,把球从斜坡滚下,由于惯性,可能滚过鞍点和局部最小值
- Gradient Descent(梯度下降法):利用梯度和η(learn rate)改进参数,但由于鞍点和局部最小值处梯度为0,所以容易卡在某个鞍点或者局部最小值点
- Momentum就是在梯度下降法中修改参数时,另外再加上一次修改参数的方向作为这次参数修改的方向(类似加入惯性)
附加学习效率(Adative Learn Rate)
- 有时候,梯度不为0,但Loss的值却下降不明显:就是因为η的值不适合
- 有可能参数在Loss局部最小值的两边来回震荡,这种情况Loss基本不会下降,但实际上并没有卡在鞍点或者局部最小值
这种情况,η(Learn Rate)不变的话,则很难到达目标点,所以就需要自动调整学习速率(某方向上梯度较小时,则η调大,反之调小)
修改η为参数依赖的值
1、 均方根(root mean square),前边的每个梯度权重相同
在接近时,y轴突变导致Loss变大,解决方法是学习速率调度(Learn Rate Scheduling)
- 学习速率衰变(Learn Rate Decay):让η随时间的增加而减小; Warm Up:η先变大后变小
2、 PMSProp
- 用上次的σ和这次的梯度的平方按权重取方差(σ中其实包含之前的所有梯度)
3、 Adam: PMSProp+Momentum
训练数据集和现实全部数据的分布差距
h为模型的一组参数值,
- 训练集得出理想的最佳h和实际现实的h不同,所以用理想的h用在现实中,差距如何控制在ε内
- 训练数据有好坏之分,用坏的训练数据,得到的h,即使在训练集中损失值小,但在测试集中损失值也较大
得到坏的训练集的概率:
- ε为自己定的;|H|为模型中h可选值的数量,也标志着模型的复杂度;N为训练数据总数
- 所以增加N或者降低|H|都可以使得到坏的训练数据的概率降低
- 当|H|较小时,模型的复杂度不够高,得出的最好的函数可能在现实中表现也不好,即使训练集和测试集接近,最终得到的数据也一般
- 当|H|较大时,模型的复杂度过高,训练集得的h代入测试集中可能差别较大,最终得到的数据也一般
当 |H|过小时,即使找到了模型中的最佳函数,可能也没有大|H|模型中二流函数的测试结果好
如何即让|H|小,训练集和测试集结果接近,也让模型的复杂度高,能确保包含使现实数据较好的函数:深度学习
结:深度学习可以用较少的参数构建出更复杂的模型
标签:训练,最小值,模型,Batch,神经网络,参数,鞍点 From: https://www.cnblogs.com/TianLiang-2000/p/17566466.html