optimizer(三) Adam 系列

本文介绍了Adam优化器系列,包括基础版Adam、AdamW、Adamax、NAdam和RAdam。Adam结合了RMSProp的自适应学习率与动量法,通常比SGD表现更好。AdamW通过正确实现权重衰减提供了改进,Adamax是Adam的变种,NAdam引入了Nesterov动量,RAdam通过动态控制学习率避免局部最优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

### 不同变种的Adam优化器及其特点 #### Adam Adam是一种广泛使用的自适应学习率方法,其核心在于通过一阶矩估计和二阶矩估计来动态调整每个参数的学习率。然而,在某些情况下,由于二阶动量的影响,可能导致算法难以找到全局最优解[^1]。 ```python optimizer = torch.optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999)) ``` #### Adamax 作为Adam的一个变体,Adamax保留了Adam的主要特性,但在实现上有所不同。具体来说,它采用了无穷范数代替L2范数来进行更新操作。这种变化使得Adamax更适合处理具有稀疏梯度的任务,尽管会带来一定的计算开销增加[^2]。 ```python optimizer = torch.optim.Adamax(model.parameters(), lr=0.001, betas=(0.9, 0.999)) ``` #### RMSprop 虽然严格意义上不属于Adam家族的一员,但是RMSprop同样属于自适应学习率优化算法之一。相比Adam而言,RMSprop更侧重于解决长期依赖问题,并且对于非稳态环境表现良好。不过需要注意的是,当面对复杂模型训练时,可能需要更多的调参工作。 ```python optimizer = torch.optim.RMSprop(model.parameters(), lr=0.01, alpha=0.99) ``` #### Self-Attention GAN (SAGAN) 不同于上述种基于梯度下降原理设计出来的优化器,Self-Attention机制被引入到生成对抗网络中形成了一类新的架构——即SAGAN。该结构特别适合用于涉及高维数据集(如高清图片)生成任务当中,因为注意力机制能够帮助捕捉远距离像素间的关系从而提高生成质量[^3]。 ```python import torch.nn as nn from torchvision.models import resnet50 class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() # 定义生成器的具体层... class Discriminator(nn.Module): def __init__(self): super(Discriminator, self).__init__() backbone = resnet50(pretrained=True) layers = list(backbone.children())[:-1] self.feature_extractor = nn.Sequential(*layers) discriminator = Discriminator() generator = Generator() criterion = nn.BCELoss() # 或其他损失函数 optimizer_D = torch.optim.Adam(discriminator.parameters()) optimizer_G = torch.optim.Adam(generator.parameters()) for epoch in range(num_epochs): for i, data in enumerate(dataloader): real_images = data['image'].to(device) valid = Variable(Tensor(real_images.size(0), 1).fill_(1.0), requires_grad=False) fake = Variable(Tensor(real_images.size(0), 1).fill_(0.0), requires_grad=False) optimizer_D.zero_grad() z = Variable(torch.randn((real_images.shape[0], latent_dim)).to(device)) gen_imgs = generator(z) d_real_loss = criterion(discriminator(real_images), valid) d_fake_loss = criterion(discriminator(gen_imgs.detach()), fake) d_loss = (d_real_loss + d_fake_loss) / 2 d_loss.backward() optimizer_D.step() optimizer_G.zero_grad() g_loss = criterion(discriminator(gen_imgs), valid) g_loss.backward() optimizer_G.step() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值