关于深度学习的优化器(optimizer)

网上对优化器的描述是动态调节学习率,根据我调试代码的经验:

优化器是优化不同参数导数的大小,在计算的时候会赋值调整导数值,对其学习率并不会改变

查看学习率的代码:

optimizer.param_groups[0]['lr']

简略介绍一下三种优化器


动量法(momentum)

假设中心是loss函数的最低点,横轴为w,纵轴为b

dw明显小于db(相同距离下,b值变化更大)

正常情况下:行进路线

加入动量法(公式如下):db较大,且有正有负,故dB会变小;dw虽小,但方向一直为正,故累积后会变大。

dW_t=0.9dW_{t-1}+dw \\ dB_t=0.9dB_{t-1}+db

经过动量法的变化(红线):


RMSprop算法

拿上面的图用,因为两种算法目的相同,更快收敛,朝最优点以最快的速度行进。

公式如下

\epsilon是防止除数为零,dw2是dw的平方,实际的dW和dB和上面方法效果差不多。

实际类似一个缩放的过程(normalization?),将一个椭圆变成了圆。

adam算法

上面两种方法的结合

从最后一行的公式,可以看到V来自动量法,分母来自RMSprop算法。


最后还是提示一下,优化器并不能改变学习率,优化器是针对每一个参数进行的优化,最后改变的只是导数的大小,当然还是应用的梯度下降的方法。至少当你去pytorch检查学习率时,发现它是没有变化的。

详细内容可参考:



【[双语字幕]吴恩达深度学习deeplearning.ai】 中关于优化器的章节

pytorch调整学习率

scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=2, gamma=0.9)

#可以根据epoch,或者batch数选择步长,放在相应的代码位置
for epoch in range(num_epochs):
    for data in dataloader:
         #训练代码
        optimizer.step()
        scheduler.step()#将step放在opimezer之后,这个位置是每两个batch更新一次学习率

可参考官网进行学习(有不同的学习率调节器)

pytorch官网docicon-default.png?t=N7T8https://pytorch.org/docs/stable/optim.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值