写点什么

ASGD

  • 2019-11-29
  • 本文字数:1833 字

    阅读完需:约 6 分钟

ASGD

简介

Asynchronous Stochastic Gradient Descent (ASGD)异步的随机梯度下降在深度学习模型的训练中经常被用到,但是会存在 delayed gradients 的问题,就是当一个 worker 向参数 server 端提交它算出的梯度时,server 端其实已经被其它 worker 更新好多次了。因此该工作提出了梯度补偿的概念,主要方法是利用梯度函数的泰勒展开去有效逼近 loss 函数的 Hessian 矩阵。通过在 cifar 和 imagenet 数据集上验证,实验结果显示,新的方法 DC-ASGD 性能优于同步 SGD 和异步 SGD,几乎接近序列 SGD 的性能。

ASGD 介绍

传统的 SGD,更新公式为:



其中,wt 为当前模型,(xt, yt)为随机抽取的数据,g(wt; xt, yt)为(xt, yt)所对应的经验损失函数关于当前模型 wt 的梯度,η为步长/学习率。


同步随机梯度下降法(Synchronous SGD)在优化的每轮迭代中,会等待所有的计算节点完成梯度计算,然后将每个工作节点上计算的随机梯度进行汇总、平均并上面的公式更新模型。之后,工作节点接收更新之后的模型,并进入下一轮迭代。由于 Sync SGD 要等待所有的计算节点完成梯度计算,因此好比木桶效应,Sync SGD 的计算速度会被运算效率最低的工作节点所拖累。


异步随机梯度下降法(Asynchronous SGD)在每轮迭代中,每个工作节点在计算出随机梯度后直接更新到模型上,不再等待所有的计算节点完成梯度计算。因此,异步随机梯度下降法的迭代速度较快,也被广泛应用到深度神经网络的训练中。然而,Async SGD 虽然快,但是用以更新模型的梯度是有延迟的,会对算法的精度带来影响。如下图:



在 Async SGD 运行过程中,某个工作节点 Worker(m)在第 t 次迭代开始时获取到模型的最新参数 [公式] 和数据(xt, yt),计算出相应的随机梯度 [公式] ,并将其返回并更新到全局模型 w 上。由于计算梯度需要一定的时间,当这个工作节点传回随机梯度[公式]时,模型[公式]已经被其他工作节点更新了τ轮,变为了 [公式] 。也就是说,Async SGD 的更新公式为:



可以看到,对参数[公式]更新时所使用的随机梯度是 g(wt),相比 SGD 中应该使用的随机梯度 g(wt+τ)产生了τ步的延迟。因而,我们称 Async SGD 中随机梯度为“延迟梯度”。


延迟梯度所带来的最大问题是,由于每次用以更新模型的梯度并非是正确的梯度,因为 g(wt) ≠ g(wt+τ),所以导致 Async SGD 会损伤模型的准确率,并且这种现象随着机器数量的增加会越来越严重。


因此 DC-ASGD 算法设计了一种可以补偿梯度延迟的方法,他们首先研究了正确梯度 g(wt+τ)和延迟梯度 g(wt)之间的关系,我们将 g(wt+τ)在 wt 处进行泰勒展开得到:



其中,∇g(wt)为梯度的梯度(loss fuction 的 Hessian 矩阵,因此梯度 g(wt)是 loss 函数关于参数 wt 的导数)。H(g(wt))为梯度的 Hessian 矩阵。那么如果将所有的高阶项都计算出来,就可以修正延迟梯度为准确梯度了。然而,由于余项拥有无穷项,并且计算量十分复杂,所以无法被准确计算。因此,可用上述公式中的一阶项进行延迟补偿:



但是上面的公式还是要计算∇g(wt)(参数的 Hessian 矩阵),但是在 DNN 中有上百万甚至更多的参数,计算和存储 Hessian 矩阵∇g(wt)很困难。因此,寻找 Hessian 矩阵的一个良好近似是能否补偿梯度延迟的关键。根据费舍尔信息矩阵的定义,梯度的外积矩阵是 Hessian 矩阵的一个渐近无偏估计:



其实,进一步可以写成:[公式] 。


又可知,在 DNN 中用 Hessian 矩阵的对角元素来近似表示 Hessian 矩阵,可在显著降低运算和存储复杂度的同时还可以保持算法精度,于是我们采用外积矩阵的 diag(G(wt))作为 Hessian 矩阵的近似。为了进一步降低近似的方差,我们使用一个(0,1]之间参数λ来对偏差和方差进行调节。另外由于:



综上,带有延迟补偿的异步随机梯度下降法(DC-ASGD):

具体算法

算法 1 中,worker m 从参数服务器中 pull 最新的模型参数 w,然后计算得到梯度 [公式] 后 push 到参数服务器中。


算法 2 中,当参数服务器接收到 worker m 算出来的梯度 [公式]后,利用梯度补偿公式算出下一个时间刻参数服务器正确的参数。如果参数服务器接受到 worker m 的 pull 参数请求时,将当前参数服务器的参数 wt 备份成 w_bak,并将 wt 发送给 worker m。


实验

在 CIFAR10 数据集和 ImageNet 数据集上对 DC-ASGD 算法进行了评估,实验结果显示:DC-ASGD 算法与 Async SGD 算法相比,在相同的时间内获得的模型准确率有显著的提升,并且也高于 Sync SGD,基本可以达到 SGD 相同的模型准确率。


本文转载自 Alex-zhai 知乎账号。


原文链接:https://zhuanlan.zhihu.com/p/80978479


2019-11-29 08:002258

评论

发布
暂无评论
发现更多内容

计算机网络体系结构

淡泊明志、宁静致远

TCP 网络结构

王者荣耀商城异地多活架构设计

张靖

#架构实战营

Flutter 应用程序中使用 GridTile 小部件

坚果

28天写作 12月日更

高质量的缺陷分析:让自己少写 bug

阿里技术

技术管理 技术人生 内容合集

PMI 的野望

Franklin 许峰

DevOps 敏捷 Lean 规范敏捷 PMI

热门招聘丨 XTransfer史上最全产品技术岗位公开招聘

XTransfer技术

产品 技术 招聘 XTransfer

揭开神秘面纱,如何组织一次分布式压测

博睿数据

如何写好代码?

阿里技术

技术管理 技术人生 内容合集

安装TortoiseGit教程 手把手教学

Z.

git 工具 安装 Tortoisegit

阿里技术 技术人成长| 内容合集

阿里技术

技术管理 技术人生 技术专题合集

如何优雅的关闭 Java 线程池

淡泊明志、宁静致远

线程池

三年磨一剑,高德体验优化总结

阿里巴巴终端技术

ios android 性能优化 移动开发 客户端

EMQ X 企业版 v4.4.0 发布:新增三项集成支持、增强异常诊断能力

EMQ映云科技

云原生 物联网 IoT mqtt 规则引擎

Flutter 高性能、多功能的全场景滚动容器原理与实践

阿里巴巴终端技术

flutter 移动开发 客户端

架构实战 - 模块七

唐敏

架构实战营

第七模块总结

张靖

#架构实战营

让“美”势不可挡,DataPipeline助力全球知名化妆品企业数字化营销再提速

DataPipeline数见科技

大数据 中间件 数据融合 数据迁移 数据管理

恒源云(GPUSHARE)_文本数据扩增时,哪些单词 (不) 应该被选择?

恒源云

深度学习 语音识别 语义

技术人如何自我成长?

阿里技术

技术管理 技术人生 内容合集

Python爬虫实战,pymysql模块,Python实现抓取音乐评论

Java全栈架构师

Python MySQL 数据库 程序员 面试

联想企业科技集团与京东耀弘签订战略合作协议 实现合作发展新跨越

科技大数据

【12月日更】浅谈Golang两种线程安全的map

小梁编程汇

golang 缓存 高性能 并发 多线程安全

一种播放远程TS格式媒体文件的新方案

Changing Lin

12月日更

百度翻译十周年:核心技术持续领先,日翻译量超千亿字符

科技热闻

2021年SASE融合战略路线图(一)

devpoint

SD-WAN sase 12月日更

国家质量基础设施(NQI)一站式服务平台,NQI云服务平台建设

a13823115807

质量基础设施一站式服务 一站式服务平台开发

技术三板斧:关于技术规划、管理、架构的思考

阿里技术

技术管理 技术人生 内容合集

百度API接口智能化测试探索与实践

百度开发者中心

自动化测试 API测试 智能化测试

多行内容超出...显示的终极解决方案

CRMEB

区块链数字版权,区块链数字藏品交易系统开发

a13823115807

#区块链# 区块链技术应用 区块链数字藏品

飞桨中国行——生产制造专场

百度大脑

人工智能

ASGD_文化 & 方法_Alex-zhai_InfoQ精选文章