梯度消失与梯度爆炸
假设一个5层神经网络:输入层、3层隐藏层、输出层,其中每层只有一个神经元。
对于第层,输出为,其中;设损失函数为,那么在反向传播更新参数时,比如,其梯度为:
在深度学习的深层网络中:
如果权重值比较大,多次连乘会导致梯度指数增加,引起梯度爆炸的问题。
如果权重值比较小,多次连乘会导致梯度指数衰减,引起梯度消失的问题。
此外,如果是sigmoid激活函数,其导数的最大值为0.25,很容易引起梯度消失的问题。
解决梯度爆炸/消失的方法:
- 使用残差网络结构:即大名鼎鼎的resnet。
- 选择合适的激活函数以及权重初始值:如使用relu激活函数可以缓解梯度消失(因为其导数值恒为1)。
- batch normalization:对批样本的同一维度特征做归一化。
- 梯度剪切:当梯度大于某个阈值时,令其等于这个阈值,从而缓解梯度爆炸。
- 权重正则化:如L1、L2正则化防止梯度爆炸。L1正则化会使原最优解的元素产生不同量的偏移,并使某些元素为0,从而产生稀疏性;L2正则化的效果是对原最优解的每个元素进行不同比例的放缩。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)