03-神调教神经网络的方法

1753601148289

对于上述左右的训练结果,如果单纯从损失函数来看,右边是要优于左边的。但是,右边对实际数据的预测却反而不如左侧,这种在训练数据上表现良好,但是在没见过的数据上表现糟糕的现象,就叫做过拟合。而在没见过的数据上的表现,就叫做泛化能力

1753601367857

造成过拟合的原因是什么呢?从上述例子中可以看出,训练数据本身是个很简单的规律,但是模型太复杂了,把噪声和随机波动也给学会了,这就导致了过拟合,这时候需要简化模型的复杂度。同时,也可以通过增加训练样本的方式来缓解过拟合。在无法添加更多样本的情况下,可以在原有样本的基础上,通过裁剪、翻转、加噪声等方式来增加样本数量,这种做法叫做数据增强。这种做法不仅仅添加了样本,还使得模型不会因为一点点小的变化产生剧烈的反应,从而提升了模型的泛化能力。


有没有什么办法能抑制参数的野蛮增长呢?

回顾参数的训练过程,参数的更新是基于损失函数的梯度,向梯度的反方向调整的。可以在损失函数中将参数本身的值加上去,这样在梯度下降的过程中,如果说新的参数没有让损失函数变小那么多,导致新的损失函数反而是变大的,那么此时的调整就是不合适的,因此一定程度上抑制了参数的野蛮增长。

1753603053787

除了可以用参数的绝对值和,还可以使用参数的平方和,这样参数大的时候,抑制的效果就更好了。把新添加的项叫惩罚项,把通过这种向损失函数中添加权重抑制参数野蛮增长的方法叫做正则化,添加绝对值和的方法叫做L1正则化(关联数学中的L1范数),添加平方和的方法叫做L2正则化(关联数学中的L2范数)。同时引入参数来控制惩罚的力度,叫做正则化系数,类似这种控制参数的参数叫做超参数

1753602939343

还有一种方法是Dropout,在训练过程中,随机将一部分参数置零,这样在训练过程中,模型就不会过于依赖某一个参数,从而在一定程度上抑制了过拟合。


其他问题:

  • 梯度消失:网络越深,梯度反向传播时越来越小,导致参数更新困难;
  • 梯度爆炸:梯度值越来越大,导致参数的调整幅度失去控制;
  • 收敛过慢:陷入局部最优或者来回震荡;
  • 计算开销过大:数据规模过于庞大,每次完整的前向传播和反向传播非常耗时;
  • ……

解决方法:

  • 梯度裁剪
  • 残差网络
  • 权重初始化
  • 归一化
  • 动量法、RMSProp、Adam等自适应优化器来加速收敛
  • mini-batch:训练数据分批次,减少单次训练开销
  • ……