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

相关文章

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理

AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应对这些挑战,动量法应运而生。本文将详细介绍动量法的原理,包括动量的概念、指数加权移动平均、参数更新等内容,最后通过实际示例展示动量如何帮助SGD在参数更新过程中平稳地前进。

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随

HDD 顺序和随机文件拷贝和存储优化策略

对于机械硬盘(HDD),顺序拷贝和随机拷贝涉及到磁头的移动方式和数据的读取/写入模式。理解这些概念对于优化硬盘性能和管理文件操作非常重要。 1. 顺序拷贝 定义: 顺序拷贝指的是数据从硬盘的一个位置到另一个位置按顺序连续读取和写入。这意味着数据在硬盘上的位置是线性的,没有跳跃或回溯。 特点: 磁头移动最小化:由于数据是连续的,磁头在读取或写入数据时只需要在磁盘的一个方向上移动,减少了寻道时

什么是GPT-3的自回归架构?为什么GPT-3无需梯度更新和微调

文章目录 知识回顾GPT-3的自回归架构何为自回归架构为什么架构会影响任务表现自回归架构的局限性与双向模型的对比小结 为何无需梯度更新和微调为什么不需要怎么做到不需要 🍃作者介绍:双非本科大四网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发,目前开始人工智能领域相关知识的学习 🦅个人主页:@逐梦苍穹 📕所属专栏:人工智能 🌻gitee地址:x

算法:将数组随机打乱顺序,生成一个新的数组

一、思路 核心:缩小原数组的可随机取数范围 1、创建一个与原数组长度相同的新数组; 2、从原数组的有效的可取数范围 (不断缩小) 中随机取出一个数据,添加进新的数组; 3、将取出的随机数与原数组的最后一个数据进行置换; 4、重复步骤2和3。 二、代码 public class ArrayRandomTest {//将数组随机打乱顺序,生成一个新的数组public static int