大模型学习Day1

我来用盖房子的比喻帮你理解梯度消失Gradient Vanishing)和梯度爆炸(Gradient Exploding)的原理,再举几个生活中的例子!


 

  • 一句话总结梯度爆炸:
  1. 梯度消失和爆炸的本质是:神经网络反向传播时,梯度像滚雪球一样越乘越小(消失)或越乘越大(爆炸)

 


一、用盖房子理解反向传播

想象你是一个包工头,要盖一栋100层的楼。每一层楼的建造质量(梯度)会通过工人反馈逐层传递到一楼:

  • 反向传播:如果顶楼(第100层)的工人发现墙面歪了,他会告诉第99层的工人:你这一层的地基没打好,第99层再告诉第98直到传达到一楼。
  • 梯度消失:如果每层工人传递反馈时都打折扣(比如每次乘以0.5),传到一楼时信息已经变成 0.5100,几乎为零——底层工人根本不知道哪里错了,无法修正
  • 梯度爆炸:如果每层工人夸大反馈(比如每次乘以2),传到一楼时信息变成 2100,数值爆炸——底层工人收到离谱的指令,乱改一气,模型崩溃

二、生活中的例子

1. 梯度消失:传话游戏

  • 场景10个人排成一列传一句话,比如晚上吃火锅。每个人传话时都漏掉一两个字。
  • 结果:传到第10个人时,可能变成晚上啥?”——信息消失了。
  • 对应神经网络:深层网络中,如果每层梯度都小于1(比如用Sigmoid激活函数),反向传播时梯度越乘越小,底层参数几乎不更新。

2. 梯度爆炸:谣言传播

  • 场景:有人说某明星要来学校,每经过一个人,谣言被夸张成某明星带100个保镖来学校
  • 结果:传到第10个人时,变成某明星要买下学校!”——信息爆炸,完全失真。
  • 对应神经网络:如果每层梯度都大于1(比如权重初始化过大),反向传播时梯度指数级增长,导致参数剧烈震荡甚至溢出(出现NaN)。

三、为什么会出现梯度消失/爆炸?

数学本质:链式法则的连乘


四、如何解决?

1. 梯度消失

  • 换激活函数:用ReLU代替SigmoidReLU导数为1,不会让梯度衰减)。
  • 残差连接(ResNet:给网络加捷径,让梯度可以直接跳过某些层传递(类似传话时允许直接打电话给一楼)。
  • Batch Normalization:规范化每层输出,稳定梯度流动。

2. 梯度爆炸

  • 梯度裁剪(Gradient Clipping:设定阈值,超过就直接截断(比如传话时规定最多只能说3句话)。
  • 权重初始化:用XavierHe初始化,控制初始权重范围。
  • 权重正则化:给大权重施加惩罚,防止它们放飞自我

五、实际代码中的表现

python

# 梯度爆炸的典型报错:出现NaN

loss = ...

loss.backward()

optimizer.step()  # 如果梯度爆炸,参数更新后可能出现NaN,导致训练崩溃

# 梯度消失的表现:参数几乎不更新

for param in model.parameters():

    print(param.grad)  # 梯度接近零


总结

  • 梯度消失:深层网络底层听不到反馈,模型学不动(类似耳聋)。
  • 梯度爆炸:底层收到离谱指令,模型乱学(类似疯子)。
  • 解决方案:调整激活函数、初始化、网络结构(如ResNet)、梯度裁剪等。

实际中,现代神经网络(如TransformerResNet)通过这些方法基本解决了梯度问题,才能训练成百上千层的模型!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值