MegEngine 使用小技巧:使用 Optimizer 优化参数

Posted MegEngine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MegEngine 使用小技巧:使用 Optimizer 优化参数相关的知识,希望对你有一定的参考价值。

MegEngine 的 optimizer 模块中实现了大量的优化算法, 其中 Optimizer 是所有优化器的抽象基类,规定了必须提供的接口。 同时为用户提供了包括 SGD, Adam 在内的常见优化器实现。

神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为优化(optimization)。而由于参数空间复杂、参数数量庞大等原因,使得神经网络的优化问题非常难。

MegEngine 的 optimizer 模块中实现了大量的优化算法, 其中 Optimizer 是所有优化器的抽象基类,规定了必须提供的接口。 同时为用户提供了包括 SGD, Adam 在内的常见优化器实现。 这些优化器能够基于参数的梯度信息,按照算法所定义的策略对参数执行更新。

以 SGD 优化器为例,优化神经网络模型参数的基本流程如下:

from megengine.autodiff import GradManager
import megengine.optimizer as optim
 
model = MyModel()
gm = GradManager().attach(model.parameters())
optimizer = optim.SGD(model.parameters(), lr=0.01)  # lr may vary with different model
 
for data, label in dataset:
    with gm:
        pred = model(data)
        loss = loss_fn(pred, label)
        gm.backward(loss)
        optimizer.step().clear_grad()
  • 我们需要构造一个优化器,并且传入需要被优化的参数 Parameter;

  • 在反向传播,计算出梯度后执行 step 方法,参数将基于梯度信息进行一次优化;

  • 通过执行 clear_grad 方法,清空参数的梯度。

为何需要手动清空梯度?

梯度管理器执行 backward 方法时, 会将当前计算所得到的梯度以累加的形式积累到原有梯度上,而不是直接做替换。 因此对于新一轮的梯度计算,通常需要将上一轮计算得到的梯度信息清空。 何时进行梯度清空是由人为控制的,这样可允许灵活进行梯度的累积。

Optimizer 构造函数中还可接受一个含有优化器默认参数的字典(如含有学习率、动量、权重衰减系数等等), 这些信息可以通过 state_dictload_state_dict 获取和加载。更多详细内容见:Optimizer 状态字典

附:

「MegEngine 使用小技巧」系列文章,重点输出 MegEngine 及周边工具的使用技巧,如有催更或投稿,欢迎联系我们哦~

技术交流 QQ 群:1029741705;Bot 微信:megengine-bot

更多 MegEngine 信息获取,您可以:查看文档GitHub 项目,或加入 MegEngine 用户交流 QQ 群:1029741705。欢迎参与 MegEngine 社区贡献,成为 Awesome MegEngineer,荣誉证书、定制礼品享不停。

国产深度学习框架MegEngine,旷视打造,三月底即将开源

机器之心报道
机器之心编辑部

2020 年我们应该选择哪一种深度学习框架?现在又有了一个新选择,据可靠消息,来自旷视 Brain++的 核心深度学习框架即将于 3 月底开源。旷视将通过开源和开放的形式将其强大的算力、各类 SOTA 模型和框架资源赋能给所有开发者和高校师生使用。

这一完全由国人自主研发,曾经支持过旷视所有领先技术的框架,势必将会引来人们的广泛关注。

在重磅介绍 MegEngine 之前,我们不得不向大家介绍一下旷视的人工智能算法平台——Brain++。 旷视首席科学家、旷视研究院院长孙剑曾表示: 「旷视 Brain++ 让规模化算法训练成为可能。 」简单地理解,拥有能批量生产算法的 Brain++,对旷视来说就是生产力的跃迁。 让旷视的开发者来从拓荒期快速走上现代化的进程。


旷视 Brain++总体上可以大体分为三部分,其中即将开源的深度学习算法开发框架 MegEngine 是核心,其次是提供算力调度支持的深度学习云计算平台 MegCompute,以及用于提供数据服务和管理的数据管理平台 MegData。 起家于计算机视觉的旷视之所以能够快速发展,屡屡在 AI 竞赛中屠榜,其背后的奥义在于: 旷视通过 Brain++实现了算法创新上的小步快跑和自给自足,再进一步深究,其成功最根本的原因在于旷视的核心框架效果确实非同一般。

然而在各家厂商不断开源 AI 工具的今天,旷视将自己的「杀手锏」推向整个社区究竟经过了何种考量? 这还要从深度学习框架的发展历程说起。

国产深度学习框架之路

什么是框架? 就是前人已经开辟了一条路,后来者只需要跟着这条路走就对了。

众所周知,人工智能风雨六十余载,是深度学习的出现让人工智能产业的发展曲线走向新的拐点。 然而早期的研发人员没有任何「前人之路」可走。 在深度学习的萌芽时期,Theano 这样的元老级框架就曾指导我们写出第一批强大的神经网络; 而后 TensorFlow 等继承者让神经网络的编写逐渐变得像搭积木一样简单。

深度学习的第一批探路者很多都是海外的知名学者,其背靠的深度学习框架也多是海外开发者创建与维护。 从最开始蒙特利尔大学与伯克利大学提出的 Theano、Caffe 框架,到现在谷歌与 Facebook 维护的 TensorFlow、 PyTorch,深度学习框架的主流已经从学术机构转向了科技巨头。

既然框架基本都是开源的,国内科技企业还需要重新自研一套吗? 答案是肯定的, 所以 DL 框架从高校转移到企业,是因为AI从不是局限于象牙塔里的学问,而必须面 向真实的场景问题; 是因为它们能用于生产,能作用于各种实际业务。 目前国内有很多技术领先的科技企业,它们都有着独特的业务场景与问题。 这为研发自主的深度学习框架,构建更完美的硬件、算法系统提供了契机。 百度开源的 PaddlePaddle 在自然语言处理等方面具有优异的积累 华为即将开源的 Mindspore,强调了软硬件协调及移动端部署的能力。

对于开源工具的选择就像「什么是最棒的计算机语言」这个问题一样,开发者们各有偏爱也各有槽点,从目前形势来看 PyTorch 和 TensorFlow 无疑是最流行的,国内的框架正积极发展。

但作为计算机视觉技术全球领先的创业公司,旷视研究院内部却从未用过 TensorFlow 或 PyTorch 来做 AI 技术和产品的研发。 因为旷视成立当初,AI 开发工具就是匮乏的,旷视在拓荒的过程中形成了自己的一套打法,造出了自己用起来顺手的一套工具。

 2014 年,旷视研究院搭建了 Brain++ 的核心引擎——MegEngnie,并将这套算法框架在公司内部推广使用。 随着旷视在海量的计算机视觉任务和业务场景中的日积月累,这套深度学习框架在旷视已经被打磨的锃亮,旷视有 1400 多名研发者,他们都在使用自己的框架训练、部署算法,即便有新同学加入也能快速学习上手,融入到旷视的研发生态中。

旷视深度学习框架 MegEngine 整体架构

据了解,正是依托于这套贯穿公司研发全流程的框架,旷视开发出了一系列可部署在云端、边缘侧以及移动端的深度神经网络。 其中对业界影响较大的比如 ShuffleNet,这是一套极高效的、轻量化移动端卷积神经网络, 可以在基于 ARM 的移动设备上实现比 AlexNet 快 20 倍的速度,效率比谷歌的 MobileNet 还要高。

发展到今天,旷视 MegEngine 已经经历了 5 年多的打磨,在深度学习框架的基础上,旷视将这套 AI 开发工具升级为一个套件工具,将数据管理和计算资源统筹与框架整合为一个平台——Brain++由此诞生,至少对于旷视来说,这套三位一体的算法平台是提升 AI 企业生产力的根本。

正是有了这样端到端的解决方案,旷视在世界各项人工智能竞赛中屡屡夺冠,2017 年至 2019 年间,旷视曾一举拿下 COCO 三连冠。 COCO 是人工智能领域最具影响力的通用物体检测挑战赛,在计算机视觉领域享有很高声誉。

旷视这套生产力平台的高效和易用性来源于实践。 依据业务的真实需求构建框架,是一条更加面向实际的开辟之路,国内各大自主 AI 框架都在积极探索着它们的方向。 而对于开发者而言,跟着它们探索的成果,就能针对国内业务场景做出最合适与好用的算法。 正因为自主 AI 框架很有意义,旷视等公司的努力,也得到了国家的支持。

2019 年 8 月,在 WAIC 人工智能大会上,旷视和华为、京东、中国平安、小米等企业一同入选了国家人工智能开放创新平台。 在图像感知方面,科技部宣布将基于旷视自主研发的人工智能算法平台 Brain++ 及整合能力建设「图像感知国家新一代人工智能开放创新平台」,该平台将面向全国科研人员开放,帮助实现先进深度神经网络在云端、移动端及边缘端计算平台的部署。

轻快好省,旷视 MegEngine 从自用走向开源

旷视内部研发人员根据自用经验介绍,MegEngine 的架构先进且支持训练推理一体化,开发者可以利用最新的技术、最合理的 API、最好用的展现方式实现自己的构想,在性能、易用性等方面都有独到的特点。

目前,旷视 MegEngine 主要支持旷视内部的算法开发工作,尤其是计算机视觉的深度优化等和大规模分布式训练。 经过 5 年工业实践与「身经百赛」的验证,旷视 MegEngine 正逐渐走向成熟,一些独有的特性也逐渐凸显。
 
首先在运算速度上,旷视 MegEngine 具备高性能计算核心,动态静态结合的内存优化机制运算速度更快,且占用更少的内存资源; 其次在易用性上,MegEngine 封装了平台细节,且接口兼容 PyTorch,新人用户可快速上手; 最后,MegEngine 还支持多种硬件平台和异构计算,整个框架既可用于训练又同时支持推理,实现模型一次训练,多设备部署,能够免除了不必要的转换流程导致的性能下降和精度损失。

除以上性能,MegEngine 据称也为 IoT 和视觉任务进行了特别的优化,广泛支持各种芯片。 通过领先的量化计算支持,其可以通过统一量化模型来支持多种设备,同时支持低于 8bit 的网络推理。

坐稳计算机视觉大厂、AI 独角兽位置的旷视,在 AI 产业的路上一路披荆斩棘,如今他们希望将自己用得得心应手的开发工具通过开源、开放的方式 回馈后人,帮助高校师生、传统产业和中小企业用于人工智能算法开发,以期降低传统产业与人工智能技术融科的门槛,激发更多人参与到人工智能生态的建设中来。

据埃森哲近日发布的《人工智能:助力中国经济增长》报告预测,到 2035 年,AI 有望将中国经济年增长速度从 6.3% 重新提升至 7.9%。 在未来,人工智能将为经济发展贡献力量,而在这个过程中,我们会掌握越来越多属于自己的核心技术。

旷视 MegEngine 的开源,或许会成为一个开始。


文为机器之心报道,转载请联系本公众号获得授权
✄------------------------------------------------
加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com
投稿或寻求报道:content @jiqizhixin.com
广告 & 商务合作:bd@jiqizhixin.com

以上是关于MegEngine 使用小技巧:使用 Optimizer 优化参数的主要内容,如果未能解决你的问题,请参考以下文章

MegEngine 使用小技巧:量化

如何使用 MegEngine 生态落地一个算法

国产深度学习框架MegEngine,旷视打造,三月底即将开源

天元MegEngine训练推理

MegEngine Inference 卷积优化之 Im2col 和 winograd 优化

提速还能不掉点!深度解析 MegEngine 4 bits 量化开源实现