【Python】科研代码学习:十一 Optimization (Optimizer, Scheduler)

【Python】科研代码学习:十一 Optimization [Optimizer, Schedule]

  • Optimizer 前置知识
    • 优化器在 `torch` 中的调用
    • 优化器在 `transformers` 中的调用
      • `AdamW` 优化器
  • Scheduler 前置知识
    • 调度器在 `transformers` 中的调用

Optimizer 前置知识

  • 什么是 Optimizer 优化器?首先来学习一下
    【知乎:优化器-optimizer 汇总】
    在这里插入图片描述

在这里插入图片描述

按照这里的学习文章,说一下重要的内容,讲一下基本逻辑;优点;缺点
Optimizer 优化器就是有如下不同的版本,主要解决的是关于梯度、学习率、样本批次、权重等计算

  • SGD (Stochastic Gradient Descent) 随机梯度下降法
    每次选取哪个样本是随机的;更新速度快;损失波动大
  • BGD (Batch Gradient Descent) 批量梯度下降法
    每次将所有样本的梯度求和;梯度更新平滑;内存消耗大,容易进入局部最优解
  • MBGD (Mini-batch Gradient Descent) 小批量梯度下降法
    每一次利用一小批样本 n 梯度计算;收敛更稳定,速度较快;没有考虑数据集的稀疏度影响
    一般 n=50~256
  • Momentum 动量梯度下降法
    考虑了梯度方向的惯性;减少权重优化中的震荡问题;缺少一些减速的适应性
  • NAG (Nesterov Accelerated Gradient) 牛顿动量梯度下降法
    Momentum 的改进,用了二阶指数平滑;表现更好;没有考虑不同参数的重要程度
  • AdaGrad (Adaptive Gradient Algorithm) 自适应学习率梯度下降法
    可以对学习率自动调整;减少了学习率的手动调节;学习率会收缩到很小
  • Adam
    学习了 AdagradMomentum ;能适应系数梯度,缓解梯度震荡;
  • AdamW
    将权重衰减和学习率解耦;实验结果显示比 Adam 有更好的泛化性能

优化器在 torch 中的调用

  • PyTorch 中最常用的优化器是:
torch.optim.SGD:随机梯度下降优化器
torch.optim.Adam:自适应矩估计优化器
torch.optim.Adagrad:自适应梯度优化器optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

优化器在 transformers 中的调用

  • 【HF官网-Doc-Transformers-Optimization】
    在 API 中,主要就是如下几个:
    AdamW (PyTorch)
    AdaFactor (PyTorch)
    AdamWeightDecay (TensorFlow)
  • 现在主流是用 AdamW 的,就介绍一下这个吧

AdamW 优化器

  • 首先看一下源码,哦,他就是从 torch.Optimizer 继承过来的,实现了自己的一个类 AdamW。看一下参数
    params(Iterable[nn.parameter.Parameter]):提供模型的参数
    lr(float):学习率,默认为 0.001
    betas(Tuple[float,float]),即Adam中的 (b1,b2),默认为 (0.9,0.999)
    eps:epsilon,默认为 1e-06
    weight_decay:解耦后的权重缩减,默认为 0.0
    correct_bias(bool):是否修复 Adam 中的偏差值 bias,默认为 True
    在这里插入图片描述
  • 方法:step(),表示一步优化步骤。
  • 用法一:可以作为 torch.optimizer 类,自己实现一个 torch.nn,直接使用
  • 用法二:比较方便的是搭配 transformers 中的 trainingArguments
    参考 【Python】科研代码学习:七 TrainingArguments,Trainer
    TrainingArguments 中,可以设置 optim 属性,默认即为 adamw_torch;可以设置 weight_decay, adam_beta1, adam_beta2, adam_epsilon 等属性的值

Scheduler 前置知识

  • 而什么又是 Scheduler 调度器呢?
    Scheduler 调度器主要是,对于已经选择好的优化器 Optimizer,利用epoch、时间等变化对学习率进行调整
    【学习率】torch.optim.lr_scheduler学习率10种调整方法整理
    可以看一下 torch.optim.lr_scheduler 中为我们提供的一些调度器
    LambdaLR:初始 lr 乘以给定函数
    MultiplicativeLR:当前 lr 乘以给定函数
    StepLR:以固定间隔成倍衰减初始 lr
    MultiStepLR:以设定的时间间隔成倍衰减初始 lr
    ExponentialLR:指数衰减初始 lr
    CosineAnnealingLR:余弦函数式变化 lr
    ReduceLROnPlateau:当某一指标不再提升时,降低 lr
    CyclicLR:周期调整 lr
    CosineAnnealingWarmRestarts:余弦退火

调度器在 transformers 中的调用

  • 首先最重要的一个,是 SchedulerType
    相当于,我们通过这个类似枚举类,来指明我们使用的是哪种调度器
    可以看一下,有线性的,余弦的,多项式的,常数的,带预热的等
    ※详细可以看官网API,每个调度器如何影响lr
    在这里插入图片描述

  • 比如这个是带预热的余弦调度器
    在这里插入图片描述

  • 最主要的还是配合 TrainingArguments 使用
    参考 【Python】科研代码学习:七 TrainingArguments,Trainer
    TrainingArguments 中,可以设置 lr_scheduler_type ,无需我们自己创建一个调度器,HF会按照输入的调度器名字,自动创建对应的调度器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/537635.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024考研计算机考研复试-每日重点(第十九期)

公众号“准研计算机复试”,超全大佬复试资料,保姆级复试,80%的题目都是上岸大佬提供的。 研宝们,App更新啦! 操作系统: 10.★什么是中断? 中断是指计算机运行过程中,出现某些意外时…

android MMKV数据持久化缓存集合

前言 最近在使用mmkv缓存的时候 发现没有集合缓存 非常不方便 自己写一个方法 MMKV public class MmkvUtils {private MmkvUtils() {throw new UnsupportedOperationException("u cant instantiate me...");}public static void init() {MMKV.initialize(LeoUtils…

R语言lavaan结构方程模型(SEM)实践技术应用

基于R语言lavaan程序包,通过理论讲解和实际操作相结合的方式,由浅入深地系统介绍结构方程模型的建立、拟合、评估、筛选和结果展示的全过程。我们筛选大量经典案例,这些案例来自Nature、Ecology、Ecological Applications、Journal of Ecolog…

Linux动态追踪——ftrace

目录 摘要 1 初识 1.1 tracefs 1.2 文件描述 2 函数跟踪 2.1 函数的调用栈 2.2 函数调用栈 2.3 函数的子调用 3 事件跟踪 4 简化命令行工具 5 总结 摘要 Linux下有多种动态追踪的机制,常用的有 ftrace、perf、eBPF 等,每种机制适应于不同的场…

分享一个可以查看进程虚拟内存占用的 shell 脚本

分享一个可以查看进程虚拟内存占用的 shell 脚本 来源:https://gceasy.io/gc-recommendations/long-pause-solution.jsp 这里命名为 show_process_swap.sh #!/bin/bash # Get current swap usage for all running processes # Erik Ljungstrom 27/05/2011 # Mo…

Windows C++ 使用WinAPI实现RPC

demo下载地址:https://download.csdn.net/download/2403_83063732/88958730 1、创建IDL文件以及acf文件(创建helloworld.idl helloworld.acf) 其中IDL文件: import "oaidl.idl"; import "ocidl.idl"; [ …

嵌入式教学实验箱_操作教程:2-26 交通灯控制实验

一、实验目的 掌握GPIO引脚配置方法和定时器控制LED的原理,并实现交通灯的闪烁控制。 二、实验原理 StarterWare StarterWare是一个免费的软件开发包,它包含了示例应用程序。StarterWare提供了一套完整的GPIO寄存器配置接口,简化了开发步…

缓存把我坑惨了..

故事 春天,办公室外的世界总是让人神往的,小猫带着耳机,托着腮帮,望着外面美好的春光神游着… 一声不和谐的座机电话声打破这份本该属于小猫的宁静,“hi,小猫,线上有个客户想购买A产品规格的商…

【开发工具学习_Xshell介绍与安装】

开发工具学习_Xshell介绍与安装 开发工具学习_Xshell介绍与安装Xshell介绍Xshell安装 开发工具学习_Xshell介绍与安装 Xshell介绍 Xshell [1]是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主…

spring中事务失效的场景有哪些?

异常捕获处理 在方法中已经将异常捕获处理掉并没有抛出。 事务只有捕捉到了抛出的异常才可以进行处理,如果有异常业务中直接捕获处理掉没有抛出,事务是无法感知到的。 解决:在catch块throw抛出异常。 抛出检查异常 spring默认只会回滚非检…

Linux symfonos

信息搜集 https://yutianqaq.github.io/ 赛博雨天 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10deb9u6 (protocol 2.0) | ssh-hostkey: | 2048 ab:5b:45:a7:05:47:a5:04:45:ca:6f:18:bd:18:03:c2 (RSA) | 256 a0:5f:40:0a:0a:…

国产化三防笔记本丨亿道国产加固笔记本FT-2000/4处理器

国产化加固笔记本是指采用国产操作系统和处理器,通过技术手段对其进行硬件加固、软件加密、数据安全等多方面加强处理的产品。这种笔记本电脑通常被用于政府项目、金融行业等对安全性要求极高的领域。 在国产化加固笔记本中,硬件加固是重要的一环。为了保…