梯度消失和梯度爆炸是人工智能领域出现的高频词汇,这篇文章对其进行简要介绍。
概念
- 梯度消失就是指在网络反向传播过程中由于链式求导法则不断的累积,如果每一层的梯度都小于1,由于累乘效应,出现了某些参数的梯度非常小的现象。在使用这些梯度更新梯度的时候参数值基本没有发生变化,因此就出现了网络训练停滞、模型无法继续优化的问题。
- 梯度爆炸与之刚好相反,在网络反向传播过程中由于链式求导法则的累乘效应,在每一层梯度都大于1的时候,就可能会出现某些参数的梯度非常大。在使用这些梯度更新参数的时候就会导致参数变化过大,就会出现损失函数震荡的现象。
梯度消失和梯度爆炸的解决方案
- 预训练和fine-tuning
- 就是将一些在公开训练集上训练好的模型参数加载到自己对应的模型中,这样损失函数通常就能稳定的优化。
- 梯度裁剪
- 梯度裁剪是一个针对梯度爆炸的解决方案,也就是说将梯度限制在某个阈值范围内,如果梯度超过的这个阈值,那么就将其设置为这个阈值。
- 正则化
- 正则化也是一种限制梯度爆炸的解决方案,同时也有限制过拟合的作用。
- 使用relu、leakrelu、elu等激活函数
- 梯度消失通常是因为损失函数选择sigmoid导致的,而relu激活函数在正数部分梯度是恒等于1的,由于1不会累积加权的特性,自然就可以避免梯度消失或梯度爆炸现象。但是relu同样有缺点,作为分段函数,relu在负数部分恒为0,导致一些神经元无法被激活。而leakyrelu、elu就可以避免这个问题。
- BN(batch nor