AdaBatch 数值实验复现

[调参]batch_size的选择 [调参]batch_size的选择 链接:https://www.zhihu.com/question/61607442/answer/440944387 首先反对上面的尽可能调大batch size的说法,在现在较前沿的视角来看,这种观点无疑是有些滞后的。 关于这个问题,我们来看下深度学习三巨头之一的L... 阅读详情
一、AdaBatch: adaptive batch sizes for training deep neural networks 概述

使用 SGD 训练神经网络的时候需要精挑细选一个合适的批量,较小的 batch size 通常在较少的训练时间内神经网络就能收敛,但较大的 batch size 提供了更多的并行性,从而提高了计算效率。

论文(2017年,NVIDIA)《AdaBatch: adaptive batch sizes for training deep neural networks》开发了一种新的训练方法,在训练过程中自适应地增加批量,而不是在所有时间段选择固定大小的批量。原文的方法表现了小批量的收敛速度,同时实现了类似于大批量的性能。

原文的实验使用 Tesla P100 gpu 在 CIFAR10、CIFAR-100、ImageNet 数据集上训练了 AlexNet、ResNet 和 VGG 网络来分析 AdaBatch 方法。

原文的实验结果表明,在 4 个 NVIDIA Tesla P100 gpu 上,采用 AdaBatch 的训练可以提高性能达 6.25 倍(在单个 gpu 上也能小幅提高,但是 AdaBatch 能达到大 batch size 的能力使这个技术在多 gpu 并行上效率更高),而相对于采用固定批量的训练,准确率的变化不到1%(固定小批量的测试精度最高,固定大批量的训练有时甚至不收敛)。

结果也独立地验证了 AdaBatch 实际上可以取代学习率的衰减,并提高性能。特别地,原文证明了 AdaBatch 调度可以产生学习速率调度无法实现的加速。

二、实验复现
  • 程序

    原文实验代码官方已经开源在 GitHub:https://github.com/NVlabs/AdaBatch。

    由于 Python 和 PyTorch 的版本更迭,需要稍加 debug 后方可运行。代码基本按照原文和实验结果的图表来设定参数。

    Debug 完成的代码结果我们也开源在 GitHub:AdaBatch-numerical-experiments。使用 jupyter notebook 和 matplotlib 的绘图程序和保存下来的 npz 格式数值在这个 目录 下。

  • 实验设置及结果

    根据原文的实验设置,我们的复现实验使用 PyTorch1.6 和 1 块 NVIDIA-Tesla T4 gpu,在 CIFAR-10 和 CIFAR-100 数据集上训练 VGG、ResNet 和 AlexNet。在这些实验中,使用动量为 0.9,权重衰减为 5 × 1 0 − 4 5×10^{-4} 5×10−4 的 SGD,进行 100 个 epochs 的训练。

    初始学习率是 α = 0.01,每 20 个 epochs 衰减一次。对于 AdaBatch 方法,我们将学习率衰减权重设为 0.75,同时在相同的 20 个 epochs 间隔内成倍增加批量。0.75 倍的学习率衰减和批量倍增相结合,可以得出批量固定的情况下,有效学习率衰减的权重为 0.375;因此,我们使用学习率衰减为 0.375 的 FixedBatch(固定批量) 实验进行最直接的比较。

    对于 AdaBatch,批量在 100 个 epochs 内每 20 个 epochs 增加一倍,VGG19_BN 和 ResNet-20 的批量从 128 动态增大到 2048,AlexNet 的批量则从 256 倍增到 4096。

    对于 FixedBatch,批量在 100 个 epochs 内固定不变,分别进行最小 FixedBatch 和最大 FixedBatch 两次实验,对于 VGG19_BN 和 ResNet-20,固定批量是 128 和 2048,对于 AlexNet,固定批量是 256 和 4096。
    1-1
    上图显示了在 CIFAR-10 数据集上训练 VGG19_bn、ResNet-20 和 AlexNet 的 loss 下降曲线。可以看到在 100 个 epochs 内,loss 值在第 60 个 epoch 后开始趋于平缓,说明神经网络在 100 个 epochs 内基本能完成训练。

    我们也能看到 AdaBatch 和最小的 FixedBatch(128、256)的 loss 曲线几乎一致,但在最大的 FixedBatch(2048、4096)的时候,神经网络的 loss 相对于前者的没有下降足够低,说明固定的大批量训练使神经网络较难收敛,下面的实验测试误差也说明了这个问题。

    在 CIFAR-100 数据集上的训练也有同样的表现。
    1-2
    上图显示了 CIFAR-10 数据集上 VGG19_bn、ResNet-20 和 AlexNet 的测试误差。对于 AlexNet,FixedBatch 是 256 和 4096。对于 VGG19 和 ResNet-20,FixedBatch 是 128 和 2048。图上绘制了每个批量设置的一次测试误差。可以看到 AdaBatch 技术的平均测试误差在最小 FxiedBatch(128、256)的 1% 以内,但最大 FxiedBatch(2048、4096)的测试表现与原文有较大差距。1-3
    上图显示了相同网络和批量设置下,在 CIFAR-100 数据集上训练得到的类似结果。再次看到,AdaBatch 技术的测试误差在最小 FxiedBatch(128、256)的 1% 以内。但是最大 FixedBatch(2048、4096)的测试误差大得惊人,特别是 AlexNet 在最大 FixedBatch 4096 下的训练误差极大,无法收敛,可以说在 100 个 epochs 内训练无效。

    总之,最大 FixedBatch(2048、4096)的实验结果与原文实验相差较大,原因可能是原文选取的是多次实验的最佳结果。但是 AdaBatch 技术和最小 FxiedBatch(128、256)的实验几乎完美复现论文结果。

    原文的研究结果表明,学习率衰减策略和批量倍增策略是相关的和互补的,两者都可以用来达到类似的效果测试误差。然而,调整批量提供了额外的优势,即更好的计算效率和可伸缩性,而无需牺牲测试误差,下文的实验将验证这一结论。

    NetworkAda / FixBatch SizeForward Time (speedup)Backward Time (speedup)
    VGG19_BNFix1282406.46 sec. (1×)5160.00 sec. (1×)
    Ada128 - 20482342.10 sec. (1.03×)4865.32 sec. (1.06×)
    ResNet-20Fix1281024.36 sec. (1×)2105.98 sec. (speedup)
    Ada128 - 2048998.05 sec.(1.03 ×)1993.58 sec. (1.06×)
    AlexNetFix256339.57 sec. (1×)646.10 sec. (speedup)
    Ada256 - 4096244.06 sec.(1.39 ×)493.47 sec. (1.31×)

    上表量化了 AdaBatch 技术带来的一部分的计算效率改进。实验在 CIFAR-100 数据集上训练了 100 个 epochs 的时间。表中省略了最大的 FixedBatch,因为它们没有达到可比的测试误差。表中还省略了 CIFAR-10 的性能结果,因为它们是相似的数据集。对于测试的 ResNet-20 和 AlexNet,可以观察到 AdaBatch 的平均正向和反向传播运行时间比最小的 FixedBatch 更好,我们进行了两次以上的实验,都能轻易验证原文中这两个神经网络的实验效果。

  • 多 GPU 性能测试

    下面,我们的复现实验使用 PyTorch 的 torch.nn.parallel.DistributedDataParallel(model) 模型并行 API 和 torch.utils.data.distributed.DistributedSampler(train_dataset) 数据并行 API,对 3 个 Tesla T4 gpu 进行并行化,这与原文实验有差距,原文使用 4 个 Tesla P100 并行训练,但我们的超算上的同时空闲 GPU 没这么多,所以只使用了 3 个 T4 gpu。

    我们在 CIFAR-100 数据集上使用 VGG19_BN 和 ResNet-20 进行了实验,使用动量为 0.9,权重衰减为 5 × 1 0 − 4 5×10^{−4} 5×10−4 的 SGD。AdaBatch 从 128 每 20 个 epochs 倍增到 2048,初始学习率为 0.1,每 20 个周期学习率衰减 0.25 倍。进行 100 个 epochs 的训练。
    2-1
    2-2
    这是 AdaBatch 和 FixedBatch 方法在 CIFAR-100 数据集上的并行训练 VGG19_bn、Resnet-20 的前向(蓝色)、反向(橙色)传播用时和前向(红色)、反向(黑色)传播加速比。左纵轴是运行时间,右纵轴是加速比,横坐标是三个批大小策略(fixed128、adabatch128-2048、multi gpu adabatch128-2048)。图表的条形图表现了一次并行训练的前、反向传播用时,折线图表现了加速比。

    与 baseline 固定批量(128)设置相比,我们发现多 gpu 并行训练的 AdaBatch128-2048 的前向传播加速比为 3.28 ×(VGG19_BN)和 2.29 ×(ResNet-20);反向传播加速比为 1.52×(VGG19_BN)和 2.50×(ResNet-20),测试误差小于 2%。请注意,由于众所周知的观察发现,大批量生产速度更快,因此实现了加速。注意到原文的方法扩展到更多的gpu也是有用的,这是由于使用了渐进的批量大小。

三、复现结论

原文开发了一个自适应批大小方案 AdaBatch,在训练过程中动态地改变批量大小。综合我们的复现实验,基本可以得出和原文相同的结论:在 AlexNet、ResNet 和 VGG 神经网络架构以及 CIFAR-10、CIFAR-100 和 ImageNet 数据集上使用 AdaBatch 技术,我们可以得到小批量的更好的测试精度,同时获得通常与大批量相关的更高性能。

在我们的复现实验中,最大的 FixedBatch(2048、4096)无法收敛到最小的 FixedBatch(128、256)的测试误差,但是 AdaBatch 可以。这些结果表明,AdaBatch 获得了与最小的 FixedBatch 相同的测试误差,但具有大批量训练的高效优势。由于批量逐渐变大,AdaBatch 很可能获得更高的性能和更快的训练速度。

实验结果还表明,所有 AdaBatch 设置的测试误差曲线与固定小批量曲线非常吻合。AdaBatch 的收敛速度在 Epoch 60 后减慢,但是最终测试误差与其他测试误差最小的曲线相似。这项实验表明,AdaBatch 可以在不显著改变测试误差的情况下,使批量达到更大的值。

复现实验难以达到论文中精度的方法 复现论文实验一直是一大难题,或者说复现实验达到论文中精度是一大难题。绝大部分时候我们很难复现到媲美原文的精度,这很大原因是神经网络的参数众多,优化技巧众多,参数初始化等一些列问题,一般论文中对不会对小细节的处理进行描述或者他们有着一些不为人知的“trick”,所以我们很多时候我们达不到他们的实验效果。 之前我曾尝试复现几篇论文的实验,花了很大力气总算搞出来的,但是结果实验结果与原文中精度总有2-3... 阅读详情

相关推荐

AdaBatch: Efficient Gradient Aggregation.pdf

We study a new aggregation operator for gradients coming from a mini-batch for stochastic gradient (SG) methods that allows a significant speed-up in the case of sparse optimization problems. We call this method AdaBatch and it only requires a few lines of code change com- pared to regular mini-batch SGD algorithms. We provide a theoretical insight to understand how this new class of algorithms is performing and show that it is equivalent to an implicit per-coordinate rescaling of the gradients, similarly to what Adagrad methods can do. In theory and in practice, this new aggregation allows to keep the same sample efficiency of SG methods while increasing the batch size. Experimentally, we also show that in the case of smooth convex optimization, our procedure can even obtain a better loss when increasing the batch size for a fixed number of samples. We then apply this new algorithm to obtain a parallelizable stochas- tic gradient method that is synchronous but allows speed-up on par with Hogwild! methods as convergence does not deteriorate with the increase of the batch size. The same approach can be used to make mini-batch provably efficient for variance-reduced SG methods such as SVRG.

深度学习——日常小点积累

写在前面 本文记录了日常遇到的和深度学习相关的一切知识,极其琐碎、杂乱,仅供个人记录,借鉴意义约为0哈哈哈。 卷积拆分 描述:比如将一个3乘3的卷积换为一个3乘1的卷积+一个1乘3的卷积。 特点:减少参数量 在哪见到: inception v3 ”学习Factorization into small convolutions的思想,将一个二维卷积拆分成两个较小卷积,例如将7*7卷积拆成...

s000da的博客 464

AdaBins:官方实施Adabins

阿达宾斯 正式实施 下载链接 您可以从下载经过预训练的模型“ AdaBins_nyu.pt”和“ AdaBins_kitti.pt” 您可以在下载NYU-Depth-v2官方测试集和KITTI Eigen拆分测试集的16位格式的预测深度 推理 将下载的砝码移至您选择的目录(此处将使用“ ./pretrained/”)。 然后,您可以像这样使用预训练的模型: from models import UnetAdaptiveBins import model_io from PIL import Image MIN_DEPTH = 1e-3 MAX_DEPTH_NYU = 10 MAX_DEPTH_KITTI = 80 N_BINS = 256 # NYU model = UnetAdaptiveBins . build ( n_bins = N_BINS , min_val = MIN

AdaBins:Depth Estimation using Adaptive Bins

文章目录 一、AdaBins处理的问题 二、AdaBins整体架构 1.MVIT 2.个人理解 一、AdaBins处理的问题? 并提出了全局信息处理如何帮助改进整体深度估计的问题。 提出了一种基于变换的体系结构块,该结构块将深度范围划分为每个图像自适应地估计其中心值的子块。最终深度值估计为面元中心的线性组合。 这是论文中给的GT深度分布图和预测的深度分布图,如果两者在深度分布上能够尽可能达到一致的话,其实就已经将损失降到了一定的程度 二、AdaBins整体...

Hu_Linson的博客 2462

什么是以太网链路聚合

以太网链路聚合技术通过将多个物理端口捆绑成逻辑端口,可显著提升网络性能。该技术能增加总带宽(各链路带宽之和)、提高可靠性(故障秒级切换)并实现智能负载分担。主要分为手工模式和基于LACP协议的动态模式,后者能检测链路故障更可靠。配置时需确保接口参数一致、模式匹配,适用于核心交换、服务器接入等场景。华为设备通过创建Eth-Trunk接口、指定LACP模式并添加成员接口即可完成部署。这项成熟技术能以低成本解决带宽瓶颈和可靠性问题,是构建高速稳定网络的关键方案。

lai_2020的博客 674

别再手动找触点了!EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战

本文详细解析EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战技巧,帮助电气设计工程师提升图纸操作效率。通过精简编号、路径栏显示和元件旁可视化三种模式的应用场景对比,结合快捷键肌肉记忆训练法,实现触点快速定位与管理,大幅减少手动查找时间。

weixin_42522964的博客 481

探索 AdaBins:一种智能图像分桶算法的高效实现

在计算机视觉领域,对图像进行像素级别的处理是一项基础且重要的任务。`AdaBins` 是一个开源项目,由 Shariq Farooq 创建,它提供了一种新颖的、自适应的图像直方图均衡化方法,旨在改善图像的对比度,尤其适用于低光照条件下的图像增强。 ## 项目简介 `AdaBins` 是一种基于深度学习的算法,其主要目标是通过对输入图像的每个像素值分配到相应的“bin”(或区间)中,来自动优化图

gitblog_00051的博客 661

使用ONNX Runtime在Java Web应用中部署深度学习模型

当应用场景需要集成深度学习模型进行推理时,直接在Java Web应用中集成深度学习框架可能会面临性能、兼容性等问题。为了将深度学习模型无缝集成到Java Web应用中,是一项广受认可且实用的方法。本篇文档将介绍如何将模型转换为ONNX格式,并通过ONNX Runtime Server进行部署,并通过Java Web应用调用以进行回归或预测任务。本方案的主要目标是实现以下功能:将PyTorch模型转换为ONNX格式。部署ONNX Runtime Server,加载ONNX模型并提供推理服务。

shysea2019的博客 8857

50系显卡安装pytorch3D

记录在复现AdaBins时,在5090显卡(pytorch2.8+cu12.8)上安装pytorch3D的过程。

2302_79485806的博客 661

[ vulhub漏洞复现篇 ] ActiveMQ反序列化漏洞复现(CVE-2015-5254)

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。......

qq_51577576的博客 4444

SAP RAP 里的 EML 全解:从语言定位到事务语义,再到真实案例的落地方式

摘要:EML(Entity Manipulation Language)是ABAP RAP模型的核心组件,作为ABAP的子集用于操作业务对象(BO)。它通过声明式语法(READ/MODIFY/EXECUTE/COMMIT)统一访问BO的行为与数据,并由RAP运行时自动处理校验、锁定、草稿管理等生命周期。EML将业务语义融入代码,确保与Fiori应用共享同一套校验逻辑,并通过FAILED/REPORTED/MAPPED管道传递错误与消息。其事务控制(IN LOCAL MODE与COMMIT ENTITIES)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 528

经典模型WDCNN中的AdaBN复现

WDCNN中的AdaBN复现

weixin_50642818的博客 4512

本地玩转AI还得靠这个,SillyTavern(酒馆)到底有多强?

SillyTavern是一款本地运行的LLM交互前端,支持文本生成、图像生成、语音合成等功能。它最初是TavernAI的分支,现已独立开发,社区活跃,功能更新频繁。SillyTavern通过前端UI和插件系统连接各种大模型后端,如OpenAI、KoboldAI等,用户可以在本地创建“虚拟酒馆”与各种角色对话。其功能亮点包括角色卡、角色记忆、世界设定、多人聊天室、自定义UI和行为脚本、插件扩展支持等。SillyTavern适合AI创作用户、AI工程师、LLM爱好者和AIGC创作者。它有两个维护分支:relea

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 8034

OpenCV----Adabins单目深度估计LibTorch推理

AdaBins LibTorch OpenCV depth estimation

qq_37172182的博客 1668

ANSYS软件二次开发(2):二次开发环境搭建与配置

ADK是ANSYS提供的一个开发工具包,它包含了用于二次开发的API、示例代码和开发指南。ADK支持Python和Tcl,但Python因其易用性和强大的社区支持,成为首选。在ANSYS软件中,自定义菜单与工具栏是实现二次开发的重要途径之一,它允许用户根据自己的需求和工作流程,创建个性化的操作界面。通过自定义菜单与工具栏,可以将常用的功能、自定义的脚本或宏命令整合到一起,提高工作效率。原因:材料参数输入错误,或者模型的物理假设与实际情况不符。解决方案仔细校验材料参数,确保与实验数据一致。

kkchenjj的博客 2202

1.DJI-payload SDK负载开发准备和硬件连接及运行示例代码

大疆psdk开发环境

哒宰的博客 1442

Adabins:Transformer+单目深度估计

Adabins:Depth Estimation using Adaptive Bins摘要1.Introduction2.Related Work3.Methodology3.1 Motivation3.2 Adabins Design3.3 Architecture description功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是

一个小垃圾的博客 8492

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深度学习中的三种梯度下降方式:批量(batch),随机(stochastic),小批量(mini-batch)

  1,批量梯度下降法(Batch Gradient Descent) :在更新参数时都使用所有的样本来进行更新。   优点:全局最优解,能保证每一次更新权值,都能降低损失函数;易于并行实现。   缺点:当样本数目很多时,训练过程会很慢。   2,随机梯度下降法(Stochastic Gradient Descent):在更新参数时都使用一个样本来进行更新。每一次跟新参数都用一个样本,更新很...

xiaotao_1的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

第七十四篇:机器学习优化方法及超参数设置综述

第七十四篇:机器学习优化方法及超参数设置综述 ps:很久没碰博客,长草了。。。应该坚持的。 摘 要 机器学习及其分支深度学习主要任务是模拟或者实现人类学习行为,这些学习方法近年来在目标分类、语音识别等各项任务中取得巨大突破。机器学的各种优化器极大了改善了学习模型的训练速度和泛化误差。优化方法和超参数作为观察训练模型的窗口,能够探索学习模型的结构和训练机制,是机器学习研究的重点之一。对机器学习的优化...

liaojiacai的博客 7668

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

My Jumble of Computer Vision

I am going to maintain this page to record a few things about computer vision that I have read, am doing, or will have a look at. Previously I’d like to write short notes of the papers that I have rea...

joshua_1988 1万+

【学术】60%学者反映实验无法复现?Nature给出五招!

追踪报道人工智能前沿IJAC将聚焦人工智能领域,每月集结国际顶刊AI领域最新封面推荐文章、最新科研资讯&科研观点,关注我们,与国际接轨、向一流看齐!在倡导开放科学、科研诚信的科研圈...

fengdu78的博客 2318

机器学习实战 AdaBoost算法 python3实现 R语言实现

机器学习实战里面对各种算法的解释都比较详尽,但是python的更新导致里面部分代码运行错误。在搜集了众多资料后发现并没有人跑来把机器学习实战这本书的python3写一下。可能大佬们觉得这小菜一碟,所以我在学习的时候把代码整理了一下放到这里希望可以帮助一些和我一样刚刚开始学习python,但是拿着一堆python2的代码无从下手的小码农们。本文原理部分来自网络。如有错误欢迎指正。其实AdaBoost...

weixin_41206770的博客 4284

学术论文中的“复现”一词用reproducibility 还是reproduction?

在学术论文中,reproducibility更常见,因为它强调实验结果在相同条件下的可靠性和一致性

阿正的梦工坊 1万+

【科研写作】Repeatability, Reproducibility, Replicability傻傻分不清

可重复性是指同一团队在相同的实验设置下,使用相同的测量程序和系统,通过多次试验获得一致的测量结果。对于计算实验,这意味着研究人员可以可靠地重复自己的计算。再现性是指不同团队能够使用相同的测量程序和系统,在相同的实验条件下(可以在相同或不同的位置),获得一致的测量结果。再现性强调的是独立验证的能力。复制性是指不同团队在不同的实验设置下,使用不同的测量系统,仍然能够获得一致的测量结果。复制性强调的是研究的普适性。

kanhao100的博客 4139

AdaBins pt模型转换为onnx

def transform_pt_to_onnx(): MIN_DEPTH = 1e-3 MAX_DEPTH_NYU = 10 N_BINS = 256 batch_size = 1 input_shape = (3, 480, 640) pretrained_path = "./model/AdaBins_nyu.pt" onnx_output_path = "./model/AdaBins_nyu.onnx" device = t.

ApathyT的博客 791
上一篇: 数据库范式实例:如何消除冗余和高效存取?
下一篇: sorted()、map()、filter()、reduce() 中的匿名函数:lambda
Skr.B
博客等级 码龄8年 1103粉丝 81原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Skr.B

WUHOOO~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值