Mxnet (27): 小批量随机梯度下降(Minibatch-SGD)

2024-04-17 19:58

本文主要是介绍Mxnet (27): 小批量随机梯度下降(Minibatch-SGD),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前为止,梯度学习的方法中有两个极端: 一次使用所有的数据计算梯度和更新参数;一次计算一次梯度。

1 向量化和缓存

决定使用小批量的主要原因是计算效率。当考虑并行化到多个GPU和多个服务器时很好解释。我们需要向每一个GPU至少发送一个图像,假设每个服务器8个GPU一共16个服务器,那么我们的最小批次已经达到了128。

在单个GPU甚至CPU来看,情况更加微妙。设备的内存类型千奇百怪,用于计算的单元也不尽相同,而且服务器之间的带宽限制也是不同的。例如,CPU的寄存器数量比较少,之后是L1,L2高速缓存,某些情况下还有L3(内核间的共享缓存)。处理器能够处理比主存储器接口提供的更多的任务:

  • 具有16个内核和AVX-512矢量化功能的2GHz CPU最多可以处理 2 ⋅ 1 0 9 ⋅ 16 ⋅ 32 = 1 0 12 2⋅10^9⋅16⋅32=10^{12} 21091632=1012 字节数每秒。GPU的功能很容易超过这个100倍。但是,中端服务器处理器的带宽可能不会超过100 GB / s,即不到保持处理器所需带宽的十分之一。
  • 随机开始访问的时候开销很大,而顺序一直访问则相对开销较小。

减轻这个约束的方法是使用CPU缓存的层次结构。层次结构够快能够应付处理器的数据需求。这是深度学习中批处理的底层驱动力。简单举例,矩阵相乘 A = B C \mathbf{A} = \mathbf{B}\mathbf{C} A=BC。我们有许多方法计算获得 A \mathbf{A} A

1.可以通过 A i j = B i , : C : , j ⊤ \mathbf{A}_{ij} = \mathbf{B}_{i,:} \mathbf{C}_{:,j}^\top Aij=Bi,:C:,j, 即:通过点积的方式逐个元素计算。

  1. 可以通过 A : , j = B C : , j ⊤ \mathbf{A}_{:,j} = \mathbf{B} \mathbf{C}_{:,j}^\top A:,j=BC:,j, 即,可以一次计算一列,同样也可以一次计算一排。
  2. 可以简单的通过 A = B C \mathbf{A} = \mathbf{B} \mathbf{C} A=BC计算
  3. 我们可以讲 B \mathbf{B} B C \mathbf{C} C 拆分成较小的矩阵然后一次一块的计算 A \mathbf{A} A

按照第一个方法,我们每次计算元素的时候,每一次我们计算 A i j \mathbf{A}_{ij} Aij时,都需要将一行和一列向量复制到CPU中。由于矩阵元素是按顺序排列的,我们从内存中两个向量时,需要访问他们不行相交的位置,造成读取上的浪费。 第二种方式更加合理,我们可以在遍历 B B B进行计算时保留列向量 C : , j \mathbf{C}_{:,j} <

这篇关于Mxnet (27): 小批量随机梯度下降(Minibatch-SGD)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912707

相关文章

智能优化算法改进策略之局部搜索算子(六)--进化梯度搜索

1、原理介绍     进化梯度搜索(Evolutionary Gradient Search, EGS)[1]是兼顾进化计算与梯度搜索的一种混合算法,具有较强的局部搜索能力。在每次迭代过程中,EGS方法首先用受进化启发的形式估计梯度方向,然后以最陡下降的方式执行实际的迭代步骤,其中还包括步长的自适应,这一过程的总体方案如下图所示:     文献[1]

智能优化算法改进策略之局部搜索算子(四)--梯度搜索法

2、仿真实验 以海洋捕食者算法(MPA)为基本算法。考察基于梯度搜索的改进海洋捕食者算法(命名为GBSMPA) vs. 海洋捕食者算法(MPA)  在Sphere函数上的比较      在Penalized1函数上的比较    在CEC2017-1上的比较    在CEC2017-3上的比较 在CEC2017-4上的比较 代码获取:

urfread刷算法题day4|27. 移除元素+复习

27. 移除元素 题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums

Pytorch(5)-----梯度计算

一、问题     如何使用Pytorch计算样本张量的基本梯度呢?考虑一个样本数据集,且有两个展示变量,在给定初始权重的基础上,如何在每次迭代中计算梯度呢? 二、如何运行     假设有x_data 和 y_data 列表,计算两个列表需要计算损失函数,一个forward通道以及一个循环中的训练。     forward函数计算权重矩阵和输入张量的乘积。 from torch imp

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-27含并行连结的网络GoogLeNet

27含并行连结的网络GoogLeNet import torchfrom torch import nnfrom torch.nn import functional as Fimport liliPytorch as lpimport matplotlib.pyplot as pltclass Inception(nn.Module):# c1--c4是每条路径的输出通道数def

Udacity机器学习入门笔记——自选算法 随机森林

自选三个算法之一: 随机森林参数调整学习(Google自带翻译ε=(´ο`*)))) http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html 在ud120-projects\choose_your_own\your_algorithm.py中添加以下代码 fr

慎投!新增7本期刊被“On Hold“,14本影响因子下降!

本周投稿推荐 SSCI • 中科院2区,6.0-7.0(录用友好) EI • 各领域沾边均可(2天录用) CNKI • 7天录用-检索(急录友好) SCI&EI • 4区生物医学类,0.5-1.0(录用率99%) • 1区工程类,6.0-7.0(进展超顺) • IEEE(TOP),7.5-8.0(实力强刊) On Hold:新增7本期刊有风险 自科睿唯安发布最新影响因子

【Rust日报】 2019-03-27

重磅:MeiliES - 事件源数据库 一个事件源数据库跟 Kafka 或 Rabbit MQ 类似,但是会把事件存储在磁盘上,没有上限。这个数据库服务的一个作用是,把一个流的所有事件发布给所有订阅客户端(事件按接收顺序存储)。一个客户端可以指定从哪一个编号的事件开始读取,这样就可以仅仅通过读取新事件消息来从崩溃状态中恢复。 不过,MeiliES 也可以做消息队列使用? MeiliES 内部用了

当Windows台式电脑或笔记本电脑随机关机时,请先从这8个方面检查

序言 你的Windows笔记本电脑或PC是否意外关闭?笔记本电脑电池故障、电源线松动、过热、电源设置错误、驱动程序过时或电脑组件故障等问题都可能是罪魁祸首。如果你对这个问题感到沮丧,试试这些解决方案。 进行一些初步检查 与从电池中获取电力的笔记本电脑不同,台式电脑依靠与外部电源的稳定连接来保持接通。如果电源线与电脑或插座的连接不牢固,即使是轻微的干扰也会扰乱电源流,导致关机。因此,请检查电源

【Rust日报】 2019-05-27:toast - 支持在docker容器中运行任务的工具

Rust中文社区翻译小组招募 #activity #RustChina 首批任务:Rust官网翻译 这里有详细说明 https://github.com/rust-lang/www.rust-lang.org/blob/master/TRANSLATIONS.md 欢迎加入Rust翻译小组参与,QQ群聊号码:716348056 ,QQ群是一个联络点,后续会组建微信群、tg群等。 (有参与