简单粗暴PyTorch之优化器

news/2024/10/21 5:50:20/

优化器

  • 一、优化器属性与方法
  • 二、pytorch中的优化器

一、优化器属性与方法

pytorch的优化器:
管理并更新模型中可学习参数的值,使得模型输出更接近 真实标签

导数:函数在指定坐标轴上的变化率
方向导数:指定方向上的变化率
梯度:一个向量,方向为方向导数取得最大值的方向

在这里插入图片描述
基本属性
• defaults:优化器超参数
• state:参数的缓存,如momentum的缓存
• params_groups:管理的参数组,list中有个字典
• _step_count:记录更新次数,学习率调整中使用

基本方法
• zero_grad():清空所管理参数的梯度
pytorch特性:张量梯度不自动清零
在这里插入图片描述
• zero_grad():清空所管理参数的梯度
• step():执行一步更新

• zero_grad():清空所管理参数的梯度
• step():执行一步更新
• add_param_group():添加参数组
在这里插入图片描述
• zero_grad():清空所管理参数的梯度
• step():执行一步更新
• add_param_group():添加参数组

常用在优化器参数的保存与加载
• state_dict():获取优化器当前状态信息字典
• load_state_dict() :加载状态信息字典
在这里插入图片描述
学习率(learning rate):
控制更新的步伐

Momentum(动量,冲量):
结合当前梯度与上一次更新信息,用于当前更新

让更新保持一个惯性
指数加权平均:  v t = β ∗ v t − 1 + ( 1 − β ) ∗ θ t v 100 = β ∗ v 99 + ( 1 − β ) ∗ θ 100 = ( 1 − β ) ∗ θ 100 + β ∗ ( β ∗ v 98 + ( 1 − β ) ∗ θ 99 ) = ( 1 − β ) ∗ θ 100 + ( 1 − β ) ∗ β ∗ θ 99 + ( β 2 ∗ v 98 ) = ( 1 − β ) ∗ θ 100 + ( 1 − β ) ∗ β ∗ θ 99 + ( 1 − β ) ∗ β 2 ∗ θ 98 + ( β 3 ∗ v 97 ) = ( 1 − β ) ∗ β 0 ∗ θ 100 + ( 1 − β ) ∗ β 1 ∗ θ 99 + ( 1 − β ) ∗ β 2 ∗ θ 98 + ( β 3 ∗ v 97 ) 得到通式: = ∑ i N ( 1 − β ) ∗ β i ∗ θ N − i \begin{array}{l} \text { 指数加权平均: } \quad \mathrm{v}_{t}=\beta * v_{t-1}+(1-\beta) * \theta_{t} \\ \mathrm{v}_{100}=\beta * v_{99}+(1-\beta) * \theta_{100} \\ =(1-\beta) * \theta_{100}+\beta *\left(\beta * v_{98}+(1-\beta) * \theta_{99}\right) \\ =(1-\beta) * \theta_{100}+(1-\beta) * \beta * \theta_{99}+\left(\beta^{2} * v_{98}\right) \\ =(1-\beta) * \theta_{100}+(1-\beta) * \beta * \theta_{99}+(1-\beta) * \beta^{2} * \theta_{98}+\left(\beta^{3} * v_{97}\right) \\ =(1-\beta) * \beta^{0}* \theta_{100}+(1-\beta) * \beta^{1} * \theta_{99}+(1-\beta) * \beta^{2} * \theta_{98}+\left(\beta^{3} * v_{97}\right) \\ \text{得到通式:}\\ =\sum_{i}^{N}(1-\beta) * \beta^{i} * \theta_{N-i} \end{array}  指数加权平均vt=βvt1+(1β)θtv100=βv99+(1β)θ100=(1β)θ100+β(βv98+(1β)θ99)=(1β)θ100+(1β)βθ99+(β2v98)=(1β)θ100+(1β)βθ99+(1β)β2θ98+(β3v97)=(1β)β0θ100+(1β)β1θ99+(1β)β2θ98+(β3v97)得到通式:=iN(1β)βiθNibeta越小记忆周期越短
在这里插入图片描述
原始梯度下降公式: w i + 1 = w i − l r ∗ g ( w i ) w_{i+1}=w_{i}-l r * g\left(w_{i}\right) wi+1=wilrg(wi)

pytorch中更新公式 v i = m ∗ v i − 1 + g ( w i ) w i + 1 = w i − l r ∗ v i \begin{array}{c} v_{i}=m * v_{i-1}+g\left(w_{i}\right) \\ w_{i+1}=w_{i}-l r * v_{i} \end{array} vi=mvi1+g(wi)wi+1=wilrvi

  𝒘𝒊+𝟏:第i+1次更新的参数
  lr:学习率
  𝒗𝒊 :更新量
  m:momentum系数
  𝒈(𝒘𝒊): 𝒘𝒊的梯度
eg: v 100 = m ∗ v 99 + g ( w 100 ) = g ( w 100 ) + m ∗ ( m ∗ v 98 + g ( w 99 ) ) = g ( w 100 ) + m ∗ g ( w 99 + m 2 ∗ v 98 = g ( w 100 ) + m ∗ g ( w 99 ) + m 2 ∗ g ( w 98 ) + m 3 ∗ v 97 \begin{aligned} v_{100} &=m * v_{99}+g\left(w_{100}\right) \\ &=g\left(w_{100}\right)+m *\left(m * v_{98}+g\left(w_{99}\right)\right) \\ &=g\left(w_{100}\right)+m * g\left(w_{99}+m^{2} * v_{98}\right.\\ &=g\left(w_{100}\right)+m * g\left(w_{99}\right)+m^{2} * g\left(w_{98}\right)+m^{3} * v_{97} \end{aligned} v100=mv99+g(w100)=g(w100)+m(mv98+g(w99))=g(w100)+mg(w99+m2v98=g(w100)+mg(w99)+m2g(w98)+m3v97

二、pytorch中的优化器

  1. optim.SGD
    pytorch中最常用也是最实用的优化器
    主要参数:
    • params:管理的参数组
    • lr:初始学习率
    • momentum:动量系数,贝塔
    • weight_decay:L2正则化系数
    • nesterov:是否采用NAG
optim.SGD(params, lr=<object object>, momentum=0, dampening=0, weight_decay=0, nesterov=False)
  1. optim.Adagrad:自适应学习率梯度下降法
  2. optim.RMSprop: Adagrad的改进
  3. optim.Adadelta: Adagrad的改进
  4. optim.Adam:RMSprop结合Momentum,
    《Adam: A Method for Stochastic Optimization》
  5. optim.Adamax:Adam增加学习率上限
  6. optim.SparseAdam:稀疏版的Adam
  7. optim.ASGD:随机平均梯度下降
  8. optim.Rprop:弹性反向传播
  9. optim.LBFGS:BFGS的改进

http://www.ppmy.cn/news/342660.html

相关文章

联盛德W100之STM32 SPI扫网DEMO

联盛德W100之STM32 SPI扫网DEMO SPI接线描述 PINSTM32W100&#xff08;SPI_1&#xff09;INTPA2PB09CSPA4PB10CLKPA5PB08MOSIPA7PB11MISOPA6PB12 STM32 UART 接线&#xff08;串口1&#xff09; 波特率 115200&#xff0c;8&#xff0c;N&#xff0c;1&#xff0c;可查看打印…

学生DW网页设计作业成品 HTML+CSS+JS大作业——汽车设备营销企业模板(13页) 静态HTML网页设计模板

HTMLCSSJS大作业——汽车设备营销企业模板(13页) 静态HTML网页设计模板 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日…

小程序简单的登录界面

造轮子系列复制粘贴&#xff0c;不多说 <view class""><view class"logo h400 flex jc-ai-center"><image src"../../assets/images/yh.png"></image></view><view class"ipt-wrap"><view cla…

vscode使用小技巧

vscode全网最详细使用教程&#xff08;让你编码快上10倍&#xff09; 一、快速编写HTML代码 初始化 HTML文档需要包含一些固定的标签&#xff0c;比如、、等&#xff0c;现在你只需要1秒钟就可以输入这些标签。比如输入“!”或“html:5”&#xff0c;然后按Tab键&#xff1a…

wordpress常用调用标签

调用头部&#xff1a;<?php get_header(); ?> 调用底部&#xff1a;<?php get_footer(); ?> 调用自定义模板文件&#xff1a;<?php get_template_part(list-head); ?> 路径&#xff1a;<?php bloginfo(template_url); ?> 缩略图&#xff1a;&l…

【html/css】前端入门案例:画盒子

一、环境准备 【vscode】前端环境配置 二、画盒子 输入英文的感叹号&#xff01;并回车&#xff0c;然后不断按Tab直到文本编辑光标在body标签内。输入.red.green.red并回车。html代码部分完毕。在head标签最后写入style标签。写入css样式代码 .red {w100h100bc:red; } .gr…

页面滚动table头部悬浮

页面滚动头部悬浮&#xff0c;一般都会首相想到监听滚动条离顶部高度然后给需要悬浮的部分position设置成fixed&#xff0c;在一般布局里面是可以的&#xff0c;不过在table布局里面&#xff0c;如果要fixed悬浮thead里面的th会发现宽度样式都乱了。只能想其他办法了&#xff0…

小程序云开发教程五: 图片上传及发表文字的实现

微信给了我们存储空间以及图片上传的功能&#xff0c;我们怎么可以轻易放过呢&#xff1f; 先看看界面&#xff1a; 二话不说&#xff0c; 先实现界面&#xff1a; <!--pages/pulish/pulish.wxml--> <view classflexDownC><view classflexDownC w100> <…