美文网首页图像分割
图像语义分割实践(五)优化器与学习率

图像语义分割实践(五)优化器与学习率

作者: 智能之心 | 来源:发表于2022-04-30 22:37 被阅读0次

概述

在数据制作环节中,提到minibatch思想用于数据批次量获取,是一种优化器思想,而该文则是对各种优化器进行介绍。
优化器:最小化损失函数算法,把深度学习当炼丹的话,优化器就是炉子,决定火候大小,炉子属性等,在深度学习监督学习的模型中,常用梯度下降法求解最优参数;
学习率:在优化器中,决定着梯度下降的速度,炉子调整火候的时间点;

Pytorch中,torch.optim 提供优化器类型选择,torch.optim.lr_scheduler 提供学习率调整策略;

优化器策略

优化器(“炉子”)的属性分析

1.根据每次更新使用的样本数量产生的梯度下降方法

梯度下降方法(Gradient Descent)变体如图所示,BGD全样本训练,计算量太大,计算速度慢;SGD太过震荡,容易陷入鞍点找不到最优点;MBGD训练稳定,计算速度快;

BGD, MBGD, SGD梯度下降法收敛过程.png

SGD 公式
v_t=η∇_θJ(θ_{t−1}) \\θ_t=θ_{t-1}−v_t
即使采用MBGD的方法仍然有很大难题,还不能保证良好的收敛性。

  • 学习率选择和设计问题;
  • 参数更新都在同一个学习率下更新的,实际训练特征出现频率少的需要更大的学习率;

2.根据局部历史梯度对当前梯度进行平滑方法

由 SGD -> Momentum
v_t = γ v_{t−1} + η \nabla_θ J(θ_{t−1}) \\ θ_t = θ_{t-1} − v_t
Momentum,动量法, 除了保留∇_θJ(θ_{t−1})该位置的梯度向量,同时加入v_{t−1}考虑上一次梯度向量,保证更新的梯度方向不会过分偏离上一次梯度,从而方向抖动不会很明显,前进方向由惯性动量决定,因此,γ称为动量超参。可以看出,缺陷还是很明显的,所有参数还是无法逃离共享同一个学习率的命运。

由 Momentum -> Nesterov Accelerated Gradient
v_t = \gamma v_{t−1} + \eta \nabla_θ J(θ_{t−1} - \gamma v_{t−1}) \\ θ_t = θ_{t-1} − v_t
Nesterov Accelerated Gradient,NAG加速动量法,当前位置梯度加入-γv_{t−1}近似预测未来的权重,部分RNN网络上表现良好,比Momentum震荡幅度会小,“冲坡”不至于太快 。

# NAG加速动量法
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3, momentum=0.9, nesterov=True)

3.根据自动调整梯度下降方法

Adagrad(Adaptive Gradient 自适学习率应梯度下降)
n_t = n_{t-1} + g_t^2, \quad \quad [ 其中,g_t为当前梯度] \\ \Delta θ_t = - \frac{\eta}{\sqrt{n_t + \epsilon }} . g_t , \quad \quad [\epsilon防止分母为0而已]
其中,\Delta θ_t项是 θ_t 的差值,更新较频繁的θ_t累计的n_t越大,分母越大,学习率变小,从而θ_i的学习率就调小。因此,Adagrad对于更新频率较低的参数用较大的学习率,对于更新频率较高的参数用较小的学习率。

有的时候学习速率收敛的过快会导致模型在训练到局部最优解前就停止参数更新。为了解决这个问题,人们提出了RMS Prop梯度下降法
Adadelta & Rmsprop
θ_t=θ_{t−1}−\eta RMS[g]_{t−1} . g_{t−1}
优点是不需要指定学习率

Adaptive Moment Estimation(Adam)
本质是带 Momentum 的 RMSProp 方法,新手推荐该方法,万金油。

# Adam
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3, momentum=0.9, nesterov=True)

几个优化器的梯度下降过程如图所示

1.优化器寻找最优点的收敛过程.gif

学习率策略

PyTorch提供的学习率调整策略分为三大类,分别是

  • 有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和余弦退火(CosineAnnealing)。
  • 自适应调整:自适应调整学习率 ReduceLROnPlateau。
  • 自定义调整:自定义调整学习率 LambdaLR。
    注:PyTorch提供的学习率调整策略, 学习率调整策略接在优化器后头即可,torch.optim.lr_scheduler为代码接口。
# 对构建的模型选择 optimizer       :: torch.optim
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
# 对optimizer选择 learning_rate   :: torch.optim.lr_scheduler
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=500, gamma=0.9)

各类 optimizer 的原理
自适应学习率优化器伪代码
优化器推导公式
优化器文字描述推荐
优化器方法
pythorch优化器学习率写法
md符号
【Pytorch 】笔记七:优化器源码解析和学习率调整策略
【Pytorch 】笔记六:初始化与18种损失函数的源码解析
kaggle学习率示例:https://www.kaggle.com/code/isbhargav/guide-to-pytorch-learning-rate-scheduling/notebook

在MFC全局使用UDP

相关文章

  • 图像语义分割实践(五)优化器与学习率

    概述 在数据制作环节中,提到minibatch思想用于数据批次量获取,是一种优化器思想,而该文则是对各种优化器进行...

  • 2018-04-21 语义分割Semantic segmenta

    按难易程度进行分类:从易到难*--->*** 一、易 1、图像语义分析学习(一):图像语义分割的概念与原理以及常用...

  • Unet图像分割

    Unet网络是一种图像语义分割网络,图像语义分割网络让计算机根据图像的语义来进行分割,例如让计算机在输入下面下图,...

  • 图像分割常用指标及MIoU计算

    一、语义图像分割结果定义 语义图像分割结果,可分为True Positive、False Positive、Tru...

  • 计算机视觉-语义分割

    什么是语义分割 我们都知道,图像是由许多像素(Pixel)组成,而「语义分割」顾名思义就是将像素按照图像中表达语义...

  • 图像语义分割实践(二)数据增强与读取

    图像语义分割实践(二)数据增强与读取 Pytorch数据加载顺序 神经网络模型训练过程需要进行梯度更新,梯度更新可...

  • 语义图像分割概览

    摘要:本文讨论如何利用卷积神经网络进行语义图像分割的任务。 语义图像分割,目标是将图像的每个像素标记为所表示的相关...

  • 图像分割

    一、语义分割  图像语义分割的目标是标记图像每个像素的类别。因为我们需要预测图像中的每个像素,所以此任务通常被称为...

  • 【转载】语义分割中的深度学习方法全解:从FCN、SegNet到各

    http://www.sohu.com/a/155907339_610300 图像语义分割就是机器自动从图像中分割...

  • [CS231n]Lecture 2 Image Classifi

    本节内容:图像分类概述、KNN、线性分类器 图像分类是计算机视觉的核心问题。 问题 :语义分割的鸿沟。图像仅仅是一...

网友评论

    本文标题:图像语义分割实践(五)优化器与学习率

    本文链接:https://www.haomeiwen.com/subject/cekuyrtx.html