我是靠谱客的博主 着急哑铃,最近开发中收集的这篇文章主要介绍【深度学习基础知识 - 03】梯度消失和梯度爆炸的概念及解决方案概念梯度消失和梯度爆炸的解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
梯度消失和梯度爆炸是人工智能领域出现的高频词汇,这篇文章对其进行简要介绍。
概念
- 梯度消失就是指在网络反向传播过程中由于链式求导法则不断的累积,如果每一层的梯度都小于1,由于累乘效应,出现了某些参数的梯度非常小的现象。在使用这些梯度更新梯度的时候参数值基本没有发生变化,因此就出现了网络训练停滞、模型无法继续优化的问题。
- 梯度爆炸与之刚好相反,在网络反向传播过程中由于链式求导法则的累乘效应,在每一层梯度都大于1的时候,就可能会出现某些参数的梯度非常大。在使用这些梯度更新参数的时候就会导致参数变化过大,就会出现损失函数震荡的现象。
梯度消失和梯度爆炸的解决方案
- 预训练和fine-tuning
- 就是将一些在公开训练集上训练好的模型参数加载到自己对应的模型中,这样损失函数通常就能稳定的优化。
- 梯度裁剪
- 梯度裁剪是一个针对梯度爆炸的解决方案,也就是说将梯度限制在某个阈值范围内,如果梯度超过的这个阈值,那么就将其设置为这个阈值。
- 正则化
- 正则化也是一种限制梯度爆炸的解决方案,同时也有限制过拟合的作用。
- 使用relu、leakrelu、elu等激活函数
- 梯度消失通常是因为损失函数选择sigmoid导致的,而relu激活函数在正数部分梯度是恒等于1的,由于1不会累积加权的特性,自然就可以避免梯度消失或梯度爆炸现象。但是relu同样有缺点,作为分段函数,relu在负数部分恒为0,导致一些神经元无法被激活。而leakyrelu、elu就可以避免这个问题。
- BN(batch normalization)
- BN可以加速网络收敛提升训练的稳定性,它把每一层神经网络的任意神经元输入值的分布规范为正态分布,如果采用sigmoid激活函数,那么就可以使得激活函数的输入落在梯度较大的区域,因此就能一定程度解决梯度消失的问题。
- 使用类似ResNet的跳线结构
- 由于离输出近的层学习效果好,而由于链式求导法则的影响可能会导致梯度消失或者梯度爆炸,因此可以模仿ResNet在网络的中间增加跳线结构,这样对应层求导梯度时候由于跳线的连接可以增加一个让梯度无损传播的通路,从而避免梯度消失或者梯度爆炸。
- LSTM等结构
- 在NLP领域中,LSTM有时也会被用于对抗梯度现象,这是由于其具有复杂的门结构来控制梯度更新。
博主会持续更新一些深度学习相关的基础知识以及工作中遇到的问题和感悟,喜欢请关注、点赞、收藏。
最后
以上就是着急哑铃为你收集整理的【深度学习基础知识 - 03】梯度消失和梯度爆炸的概念及解决方案概念梯度消失和梯度爆炸的解决方案的全部内容,希望文章能够帮你解决【深度学习基础知识 - 03】梯度消失和梯度爆炸的概念及解决方案概念梯度消失和梯度爆炸的解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复