pytorch中的梯度裁剪

神经网络是通过梯度下降来学习的,在进行反向传播时,进行每一层的梯度计算,假设梯度都是比较大的值,计算到第一层的梯度时,会呈指数级增长,那么更新完的参数值会越来越大,产生梯度爆炸现象。一个比较常见的表现就是损失变成non。

梯度裁剪(Gradient Clipping)是一种防止梯度爆炸或梯度消失的技术,它可以在反向传播过程中对梯度进行缩放或截断,使其保持在一个合理的范围内。梯度裁剪有两种常见的方法:按梯度的绝对值截断或者按梯度的范数进行截断。pytorch给定了相应方法实现,这一步应该在更新参数前进行。

按值截断

c 复制代码
torch.nn.utils.clip_grad_value_(model.parameters(), value)

对一个参数的梯度进行裁剪,使其不超过一个指定的值,它接受两个参数:一个是模型的参数,一个是裁剪的值。它会对每个参数的梯度进行裁剪,使其在 [-value,value]的范围内。这样可以避免梯度过大或过小,影响模型的收敛。例子:

c 复制代码
import torch
import torch.nn as nn
 
# 定义一个简单的线性模型
model = nn.Linear(2, 1)
# 定义一个优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
# 定义一个损失函数
criterion = nn.MSELoss()
 
# 生成一些随机的输入和目标
x = torch.randn(4, 2)
y = torch.randn(4, 1)
 
# 前向传播
output = model(x)
# 计算损失
loss = criterion(output, y)
# 反向传播
loss.backward()
 
# 在更新权重之前,对梯度进行裁剪,使其不超过0.5
torch.nn.utils.clip_grad_value_(model.parameters(), clip_value=0.5)
 
# 更新权重
optimizer.step()

按范数截断

c 复制代码
torch.nn.utils.clip_grad_norm_(model.parameters(), threshold)

对一个参数的梯度进行裁剪,首先计算出梯度的范数,然后将其限制在一个最大值之内。这样可以防止在反向传播过程中梯度过大导致的数值不稳定问题。例子:

c 复制代码
import torch
import torch.nn as nn
import torch.optim as optim
 
# 假设我们有一个简单的全连接网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc = nn.Linear(10, 1)
 
    def forward(self, x):
        return self.fc(x)
 
# 创建网络、优化器和损失函数
model = Net()
optimizer = optim.SGD(model.parameters(), lr=0.01)
loss_fn = nn.MSELoss()
 
# 假设我们有一些随机输入数据和目标
data = torch.randn(5, 10)
target = torch.randn(5, 1)
 
# 训练步骤
outputs = model(data)  # 前向传播
loss = loss_fn(outputs, target)  # 计算损失
optimizer.zero_grad()  # 清零梯度
loss.backward()  # 反向传播,计算梯度
 
# 在优化器步骤之前,我们使用梯度裁剪
nn.utils.clip_grad_norm_(model.parameters(), max_norm=20, norm_type=2)
 
optimizer.step()  # 更新模型参数
相关推荐
摘星编程10 小时前
Cursor Pair Programming:在前端项目里用 AI 快速迭代 UI 组件
前端·人工智能·ui·typescript·前端开发·cursorai
工业互联网专业10 小时前
基于Spark的新冠肺炎疫情实时监控系统_django+spider
python·spark·django·vue·毕业设计·源码·课程设计
ZHOU_WUYI10 小时前
门控MLP(Qwen3MLP)与稀疏混合专家(Qwen3MoeSparseMoeBlock)模块解析
人工智能·llm
Yh87020310 小时前
2025年经济学专业女生必考证书指南:打造差异化竞争力
python
黄焖鸡能干四碗10 小时前
信息系统安全保护措施文件方案
大数据·开发语言·人工智能·web安全·制造
BYSJMG10 小时前
大数据毕业设计推荐:基于Spark的零售时尚精品店销售数据分析系统【Hadoop+python+spark】
大数据·hadoop·python·spark·django·课程设计
hallo12810 小时前
学习机器学习能看哪些书籍
人工智能·深度学习·机器学习
中國龍在廣州10 小时前
哈工大提出空间机器人复合框架,突破高精度轨迹跟踪
人工智能·深度学习·机器学习·计算机视觉·机器人
cetcht888810 小时前
安徽某能源企业积极推进运维智能化转型,引入高压配电房机器人巡检系统
运维·人工智能·物联网·机器人·能源
健康有益科技10 小时前
AI驱动健康升级:新零售企业从“卖产品”到“卖健康”的转型路径
大数据·人工智能·健康医疗·零售