神经网络训练无效果的原因分析

目录

1.局部最小值(local minima)与鞍点(saddle point)

2.批次(Batch)与动量(momentum)

3.自动调整学习率(learning rate)

4.loss损失函数也可能有影响 

5. 批次标准化(Batch Normalization)


1.局部最小值(local minima)与鞍点(saddle point)

        当loss无法下降时,可能梯度已经接近0了,这时,局部最小值(local minima)与鞍点(saddle point)都有可能,统称为critical point。 

         此时,需要判断属于哪种情况,计算Hessian即可:

  

 2.批次(Batch)与动量(momentum)

        在物理学的角度上,小球走到local minimal,当动量比较大的时候,会越过这个小坡。

        正常的梯度下降,每计算一次梯度,往它的反方向计算一次更新一次参数。

        加上动量的梯度下降,可以理解为更新的方向为Gradient的负反方向加上前一次移动的方向。

        另一种解读是,所谓的momentum,update的方向不是只考虑现在Gradient,而是考虑过去所有Gradient的总和。

 3.自动调整学习率(learning rate)

        前面在loss不下降的时候,我们说可能是critical point,但是也有可能是下面这种情况:

        learning rate应该为每一个参数特制化:

(1)最常见的一种修改学习率的方法是均方根,这种方法被用在Adagrad里面。

(2)可以自己调整现在的gradient的重要性—RMSProp。

(3)Adam: RMSProp + Momentum。

(4)Learning Rate Scheduling,使学习率 η随时间变化。

4.loss损失函数也可能有影响 

        在分类中,通常会加上softmax:

        如果是分类成两类,则更常用sigmoid,但其实这两者的方法结果是一样的。下面是损失函数:

        事实上,交叉熵在分类中是最常用的。在PyTorch中,CrossEntropyLoss这个函数已经包含了softmax,这两者是绑定在一起的。从图中可以看出,当 loss 很大时,MSE很平坦,不能梯度下降到 loss 小的地方,卡住了;但是交叉熵可以一路梯度下降下去。

 5. 批次标准化(Batch Normalization)

        希望对于不同的参数,对 loss 的影响范围都比较均匀,像下面的右图:

        方法是特征归一化(Feature Normalization):

        归一化之后,每个维度的特征的平均值为0,方差为1。一般来说,特征归一化使梯度下降收敛更快。后一步的输出同样也需要归一化,这些归一化都是针对于一个Batch的。一些比较有名的Normalization:

猜你喜欢

转载自blog.csdn.net/qq_22749225/article/details/125764719
今日推荐