训练过程如果训练不起来:
一:区分问题种类
1: 先看训练集的training loss,如果training loss很大,还要看是high bias还是high variance?
2:如果在训练集的loss很小,那么再看测试集的loss,如果测试集合的也很小,就万事大吉,如果在测试集的loss很大,说明很可能发生了过拟合。
3:High bias: (当你使用任何一个x,期望值是f(x),尝试了很多很多参数搭配都不能降低loss,说明期望点在这些参数的表示域外),说明程序模型的复杂度不够,太简单了,需要重新设计模型,模型需要变得复杂,更加弹性,比如增加参数量(增加特性量),增加网络深度,增加神经元。
4:优化问题:(当你使用任何一个x,期望值是f(x),尝试了很多很多参数搭配都不能降低loss,但是期望值确实在表示域内,只不过找不到那个对应的参数集),这个原因可能是梯度下降造成的局部最优点问题,始终不能达到全局最优点,也能造成loss大。
如何区分哪一个?训练两个不同复杂度的模型,看看在训练集和测试机的loss随着迭代次数的变化,就能判断出,按道理,复杂度更高的模型肯定能做到简单模型的事情,但是如果发现效果更差,就说明复杂模型处于待优化问题,可能遭遇了局部最优点问题(第二部分会继续讨论的,会说一些方法)。如果更复杂的模型的loss更小,表现更好,说明处于模型待提升的bias问题,模型复杂度还不够,尝试继续加深试试。
比较好的方法是,拿到一个问题,先从简单的模型开始,逐渐将模型变得复杂,如果更深一点的模型能降低loss,逐步继续将模型复杂化,直到模型的loss降低了,这时候发生了优化问题。
5:overfiting,在训练集合上,模型过于复杂,导致对训练集数据拟合很好,在没有见过的数据就很随意随机,所以在测试集合数据拟合很差了。
解决方法是:增加更多的训练数据,使用正则化,dropout,数据增强,模型简化(减少参数,价绍神经元,共享参数),Early stopping。
权衡一个中间复杂度的模型(不过于复杂也不过于简单),按照途中所示选择最低点。
二:神经网络训练不起来怎么办?
第一部分讲了一些方法论,这里继续讲解一些其他的手段。
===以下是训练的一些常用手段
1:优化问题:分别局部最小值和鞍点
到达了一个梯度不下降的地方,这里的梯度为0,叫做critical point,包括了local minima和鞍点(saddle point),得先区分出来。
2:Batch Grigent 和 动量
Batch size=N叫做full batch。
用Batch 的原因是,计算和参数更新速度快,batch size越小,更新和计算速度越快,但是相对更新的结果越充满noise的,更新轨迹越杂乱。所以一般取中间的一个小点的batch size值效果会比较好,即便存在并行计算,1个epoch的花费时间基本持平,但是就训练效果而言,小一点的batch size也会是效果好一些,noisy一些的路径会增加试错行,一般不会在critical point地方停止。
小一点的Batchsize 有个好处是,由于充满noise,因此一些狭窄的localminma是很容易跳过,会落入宽阔一点的localminma,容错性好,而fullbatch则会可能按照一个路径直接冲了进去,回不了头。
动量法:一般的梯度下降,会很容易停止在梯度为0点的地方,这个点可能是local minma,也可能是一个鞍点,甚至到了一个小小的局部最优点,紧接着是更好的局部最优点,但是都不会冲出去。因此引入动量,每次计算方向都会考虑之前走过的方向和大小。这样的话,就保留了之前运动的方向和大小,就像是小球,保留了一定的动量一样。即便当前坡度为0,也能轻易越过。
解决局部最优点的问题,可以借助batch size和动量法。
也可以参考以往的文章。
3:Learning Rate
按照不同的方向大小,自动自适应调节Learning Rate也是不错的选择,以往的文章里面讲过这类问题。
在训练一个模型时候,当loss不再改变,但是梯度不为0,可能是由于在山谷的的两侧横跳,这是因为learning rate不合适导致的,因此需要动态调节学习率。
在某一个方向上,比较平坦,learning rate调整大一些,步子迈开大一些。
在某一个方向上,比较陡峭,learning rate调整小一些,步子迈开小一些。
这样好比下山过程才会稳一些。
其中一个动态调整方法为Root Mean Square
还有一个是RMSProp方法
还有一种方式是:Adam
参考:https://blog.csdn.net/qq_29367075/article/details/108904066 和 https://blog.csdn.net/qq_29367075/article/details/108904066
4:分类问题
一般情况下,分类使用one-hot向量,输出地需要加上softmax。
损失函数一般有如下:
5:batch noramlization
如标准化:
这样会更快梯度下降,更容易收敛。深度网络中的每一层都可以加上normalization,
batchnorm如下: