MindSpore 高阶优化器
MindSpore 高阶优化器
MindSpore自研优化器THOR(Trace-based Hardware-driven layer-ORiented Natural Gradient Descent Computation),该优化器在ImageNet上训练ResNet50,使用MindSpore+8 Ascend 910 仅需66.7分钟,当使用256节点时仅需2.7分钟!
关于一二阶优化器,其中二阶优化器与一阶优化器相比收敛速度更快,但缺点是二阶信息矩阵求逆复杂度高,为
, 其中 n 为二阶信息矩阵维度,当模型参数量为
时,对应的二阶信息矩阵的大小为
。在深度学习模型中,
常常在数百万的量级,此时二阶信息矩阵的逆无法计算。因此如何降低二阶信息矩阵求逆的计算复杂度成为关键问题。
MindSpore针对该问题,提出了自研算法THOR,该算法是基于自然梯度法,对Fisher矩阵做了近似,自然梯度法中的
矩阵可以表示为:
其中
是网络模型的预测分布,
是其概率密度,
是需要网络模型的参数。
那THOR主要做了哪些改进呢,我们一起来看一下:
- 降低二阶信息矩阵更新频率
通过实验观察
矩阵的F范数(Frobenius norm),在前期变化剧烈,后期逐渐变稳定,从而假设
是一个马尔可夫过程,可以收敛到一个稳态分布π,其中
代表第k个迭代时的
矩阵。因此,在训练过程中逐步增大
矩阵的更新间隔,可以在不影响收敛速度的情况下,减少训练时间。例如在ResNet50中,更新间隔步数随着训练的进行越来越大,到后期每个epoch只需更新一次二阶信息矩阵,如下图所示。
THOR受KFAC启发,将
矩阵按层解耦来降低矩阵复杂度,分别针对每一层的
矩阵做实验,发现有些层的
矩阵趋于稳态的速度更快,因此在统一的更新间隔上,更加细粒度的去调整每一层的更新频率。THOR使用矩阵的迹作为判断条件,当迹的变化情况大于某一阈值时,更新该层的二阶信息矩阵,否则沿用上一个迭代的二阶信息矩阵,并且引入了停止更新机制,当迹的变化量小于某个阈值时,停止更新该层二姐信息矩阵,具体更新公式如下:
- 硬件感知矩阵切分
THOR在将
矩阵按层解耦的基础上,进一步假设每个网络层中的输入和输出块之间也是独立的,例如将每层网络的输入输出切分为n个块,这n个块之间即是独立的,根据该假设,对二阶信息矩阵做进一步的切分,从而提高了计算效率。THOR结合矩阵信息损失数据和矩阵性能数据确定了矩阵分块维度,从而大大提升
矩阵求逆时间。
那么如何确定矩阵分块维度的呢。具体方法为:
(1)根据
矩阵中维度最大的那一层,确定矩阵切分维度,拿ReseNet-50举例,网络层中的最大维度为2048,确定矩阵切分维度为[1,16,32,64,128,256,512,1024,2048];
(2)根据确定的矩阵维度,根据谱范数计算每个维度下的矩阵损失,具体公式为
其中
表示矩阵 X 的最大特征值, A 表示原始未分割矩阵,
表示分割后的矩阵。然后统计在该维度下损失小于1%的矩阵数量,最后通过除以总的矩阵数量得到标准化后的矩阵损失信息。
(3)根据确定的矩阵维度,计算每个维度下的矩阵求逆时间,再通过公式
得到每个维度下标准化后性能数据,其中
表示维度最小的矩阵的性能数据,
表示第n个维度下的性能数据。
(4)根据标注化后的矩阵损失信息和标准化后的性能数据绘图,如以ResNet50为例,可得到下图,图中交叉点为106,与128最接近,最后确定矩阵切分维度为128。
- 实验结果
下图展示了THOR在ResNet50+ImageNet,batchsize为256时一二阶上的训练曲线图。
图中的THOR,THOR_stop,THOR_NT分表表示 ,从图中可以看到THOR收敛所需迭代数大约是一阶的一半,且单step的时间与一阶相差也不大。相比一阶算法需要117min,二阶优化器端到端时间提速约40%。
THOR还测试了在不同batchsize下ResNet50+ImageNet的收敛结果,结果见下表,当batchsize为8192,使用256块Ascend 910时,只需2.7分钟精度即可收敛到75.9%,该结果在业界也是非常有竞争力的。MindSpore团队还会将THOR进一步应用到NLP领域中,如Bert和GPT-3,THOR在NLP任务上的表现。
MindSpore 高阶优化器相关推荐
- THOR:MindSpore 自研高阶优化器源码分析和实践应用
摘要:这篇文章跟大家分享下THOR的实践应用.THOR算法的部分内容当前已经在MindSpore中开源 本文分享自华为云社区<MindSpore 自研高阶优化器源码分析和实践应用>,原文作 ...
- 陈丹琦团队提出低内存高效零阶优化器MeZO,单卡A100可训练300亿参数模型
深度学习自然语言处理 原创 作者:辰宜 今天下午突然发现了一篇陈丹琦大佬的巨作~ 大家一起来简单瞅瞅. 本文旨在介绍一种用于fine-tuning语言模型(LM)的低内存优化器--MeZO,内存减少多 ...
- Matlab使用高阶求解器解决天体力学问题
使用ode78和ode89解决天体力学问题,该问题需要 ODE 求解器的每一步都具有高精度才能成功积分.和ode45都ode113无法使用默认容错来解决问题.即使使用更严格的错误阈值,ode89由于它 ...
- 总结机器学习优化器Optimizer
原谅小弟搬运 只为学习还是为了自己~~~ 以经典综述文献 An overview of gradient descent optimization algorithms为线索,结合一些优秀的文章,对目 ...
- 机器学习:各种优化器Optimizer的总结与比较
优化器总结 机器学习中,有很多优化方法来试图寻找模型的最优解.比如神经网络中可以采取最基本的梯度下降法. 梯度下降法(Gradient Descent) 梯度下降法是最基本的一类优化器,目前主要分为三 ...
- 华为昇思高阶API套件迎来全新升级!解决无人驾驶疑难杂症真得靠它!
点击蓝字 MindSpore 关注我们 对于程序员来说,拥有一款低门槛.易操作的深度学习开发工具包,可以说赢在了起跑线!来自华为的全场景AI框架昇思MindSpore在历经短短一年多时间的迭代,为专业 ...
- JAX-FLUIDS:可压缩两相流的完全可微高阶计算流体动力学求解器
原文来自微信公众号"编程语言Lab":论文精读 | JAX-FLUIDS:可压缩两相流的完全可微高阶计算流体动力学求解器 搜索关注"编程语言Lab"公众号(HW ...
- python开发基础04-函数、递归、匿名函数、高阶函数、装饰器
匿名函数 lamba lambda x,y,z=1:x+y+z 匿名就是没有名字 def func(x,y,z=1):return x+y+z匿名 lambda x,y,z=1:x+y+z #与函数有 ...
- linux串流windows,【新品速递】高阶计算机讯源:SOtM sMS-1000SQ Windows Edition串流播放器...
原标题:[新品速递]高阶计算机讯源:SOtM sMS-1000SQ Windows Edition串流播放器 SOtM来自韩国,旗下产品以串流播放与音响级网络周边配备为主,这部sMS-1000SQ W ...
最新文章
- 智能车大赛AI视觉组培训第一弹——基础篇
- 设置路径是服务器上的文件,设置服务器文件路径
- camel_Apache Camel 2.14中的更多指标
- 传统IDC转型有了新思路 Zstack除了混合云还有托管云
- 学好Python能做什么?有哪些从业方向?
- react router4 需要配置2遍BrowserRouter
- [转] 让Visual Studio生成Release版本的可执行文件
- 如何拆计算机主机箱,一种方便拆卸的计算机主机箱的制作方法
- 多线程:实现Callable接口
- Java基础学习总结(79)——Java本地接口JNI详解
- git笔记之解决eclipse不能提交jar等文件的问题
- 重学JavaScript系列之一_引用类型
- 68个Python内置函数详解,进阶必备!
- 单条知识:什么是平面束方程
- 电脑连手机热点找不到服务器的ip地址,电脑开热点手机连不上怎么连接
- java模拟器安卓7,指小游Java模拟器
- IT管理到底是做什么
- Linux系统load average异常值处理的trick
- 你知道PMU与PMU的区别吗?
- 无状态编程, lambda 表达式中传入的局部变量,为什么需要是不可变的(final)