深度学习中的梯度消失与梯度爆炸
引入
在深度学习中,我们会听到梯度消失
与梯度爆炸
。这指的是梯度
变得极小或极大。
为什么在深层次网络中,才容易发生梯度消失
与梯度爆炸
呢?这带来什么负面的影响?该怎么样来避免这种极端情况?
梯度消失
与梯度爆炸
的原因
考虑一种极端情况,假设我们有一个层数很深的神经网络(L层),每层只有一个神经元,且激活函数g(z)=z。
* 如果权重都是0.5,则最终输出y就是0.5的L次方乘以x,可见这个值会随L增加而递减到非常小
* 如果权重都是1.5,则最终输出y就是1.5的L次方乘以x,可见这个值会随L增加而递增到非常大
这就是深层次网络中,网络层次对输出值影响巨大的基本原理。
* 权重矩阵只要比单位阵稍微大一点,在深层次网络中,激活函数将会成指数级递增
* 权重矩阵只要比单位阵稍微大一点,在深层次网络中,激活函数将会成指数级递减
推理到损失函数(导数、梯度)的计算中,也是一样的。
梯度消失
与梯度爆炸
的影响
梯度消失
与梯度爆炸
会导致模型的训练变得复杂:
* 不容易收敛,梯度下降算法会花费很长时间
* 梯度下降算法的收敛步长非常小
如何避免梯度消失
与梯度爆炸
权重矩阵的初始值,不能比1大很多,也不能比1小很多。所以,初始化权重值的大小设置合理,就不容易发生梯度消失
与梯度爆炸
。
根据研究,我们可以用下面的值来初始化权重
np.random.randn(_shape_)*np.sqrt(1/n)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构