前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >送书了!分布式人工智能算法详解

送书了!分布式人工智能算法详解

作者头像
计算机视觉
发布2021-01-28 10:06:29
6580
发布2021-01-28 10:06:29
举报
文章被收录于专栏:计算机视觉工坊

在分布式算法改进后,算法因为分布式情况,存在通信、等待、同步、异步等问题,导致算法的空间复杂度、时间复杂度,没有达到预想的情况,针对机器学习的单体算法和分布式算法的优化方法,本节就来介绍相关原理和实现方法

一、单体算法优化

针对机器学习的算法模块,我们需要将它定性成为不同的功能模块,对算法进行优化,并且拆解成为分布式的优化方法,本节先来探讨单体算法的优化方法。

我们先从简单的线性规划进行处理,线性回归的目标函数,如下所示:

如果使用梯度下降法法,每次更新模型,会随着数据量和数据维度,计算量进行线性增加,我们需要采用一些方法,降低它的计算规模。

1.随机梯度下降

最常用的单体优化算法,是随机梯度下降算法SGD。它采用对数据样本,进行随机采样,它的更新公式,如下所示:

它的算法描述,具体如下所示:

代码语言:javascript
复制
void Stochastic_gradient_descent()
{
  initialize:初始化w0参数
  Iterate:for t= 0,1,…,T-1 遍历所有样本
  Selecte:随机选取样本
  计算:获得梯度
  更新:更新参数
}

对于全局的样本,都用来计算,会取得数据损失函数的平均值,我们采用随机更新,随机抽取样本,可以大大减少计算量,使用随机梯度作为梯度的自然替代,可以极大提高学习效率。

2.随机坐标下降

除了随机梯度的方式,也可以使用随机坐标下降,对整体算法进行优化。它的原理是对模型维度进行随机采用,从而优化算法模型的训练,它的更新公式,如下所示:

代码语言:javascript
复制
void random_coordinate_descent()
{
  Initialize: 初始化w0参数
  Iterate:for t= 0,1,…,T-1 遍历所有样本
  Selecte:随机选取模型维度
  计算:获得梯度
  更新:更新参数
}

3.牛顿法

牛顿法,也是一个高效的优化算法,它的核心是使用泰勒展开式,来实现优化,它的更新公式,如下所示:

当我们使用一阶泰勒站开始,求取零点,计算方法如下所示:

由此,我们可以看出最优化求解,最终迭代的形式,归纳方程,如下所示:

求解目标函数最小值,不断迭代,沿着函数下降方向,逐步到达最优店,牛顿法,每次迭代步长值,如下所示:

当我们在实际的模型优化应用中,可以先对损失函数,进行一阶、二阶求导,具体如下所示:

(1)损失函数,如下所示:

(2)一阶求导,如下所示:

(3)二阶求导,如下所示:

最终求和公式,转换为一个矩阵乘法的转换,参与1和参数0之间的关系,可以求解如下所示:

其中H就是二阶导数的简化,它被称为hessian矩阵,J函数表示对参数的一阶求导,大写的X和y表示矩阵,这就是牛顿法应用在最优参数求解的应用。

二、分布式异步随机梯度下降

在本书中,我们介绍了几个经典的单机优化算法,在分布式系统下,我们还可以借助分布式的计算能力,再次提高优化效率,本节应用随机梯度下降算法为例,讲解分布式的算法优化方法。

假设我们有一个集群服务器,设置四个计算节点W1、W2、W3、W4,W1负责迭代两个模型参数a、d,W2负责迭代产生参数b、e,W3负责迭代产生参数c、f,W4作为最后的计算节点,产生参数g,把它们的参数传递顺序,以数字标注传递顺序。通过BSP协议,W1、W2、W3先将参数a、b、c传递给参数服务器,等待W4传递参数g给参数服务器,参数服务器根据获得的数据,计算平均真实梯度值,获得最新全局参数,同步全局参数到所有工作节点,计算节点W1、W2、W3获得参数,进入下次迭代,计算得到参数d、e、f。具体工作流程,如图1所示:

图1 分布式环境下参数的同步

在异步更新的情况下,传递参数的顺序和上面相同,它不用进行等待,W1、W2、W3传递参数给参数服务器后,会立即获得更新后的全局参数,进入下次迭代,这样会导致产生多个全局参数的版本。在异步环境下,使用梯度值对全局进行更新,对于算法的收敛影响比较大,如图2所示,是异步参数的更新情况:

图2 参数异步更新和变化

针对异步更新,残生多个全局参数,算法收敛的问题,我们可以进行如下处理:

(1)在计算节点上,分别计算梯度值,不直接发送给参数服务器,使用梯度值,计算本地权重参数。

(2)发送权重参数给参数服务器,参数服务器接收本地参数后,使用本地参数,更新全局参数。

(3)使用Wt表示当前参数服务器的全局参数,Wct表示计算节点传的参数值,Wt+1表示计算后的新全局参数,再引入变量α,表示本地参数在全局权重,最终它的计算公式如下所示:

在工作节点更新是,不完全参数服务器上的参数,每个计算节点,智能代表它这个节点的结果,全局更新时候,需要根据所有工作节点的参数值和权重,进行根性,这里可以使用线性插值法,具体计算如下所示:

(1)计算新的本地权值参数

(2)参数服务器,接收到某个计算节点的参数,更新它的参数公式,如下所示:

(3)合并上述两步,最终得到参数服务器参数,根据某个计算节点的权值参数,修正全局参数的公式,如下所示:

如果计算节点只有一个,和同步SGD算法的公式,也保持了一致。

算法的实现伪代码,如下所示:

客户端算法

代码语言:javascript
复制
void SGD_Client()
{
  ProcedureWork(Parameterw,Mini-batch-sizeNc
    Initialize:total gradientg = 0
    For all i∈{1...Nc} do
      g←g + ComputeGradient(data,w)
    End For
    Server.Update(c,g)
    stepc ←stepc +1
}

参数服务器算法

代码语言:javascript
复制
void SGD_Server()
{
  Procedure DispatchJob(Client c,Parameter wt)
    Call procedure Work(wt,Nc)for client c
  End
  Procedure Update(Client c,Gradient g)
    wt+1 ←wt − AdaGrad(g)
    t←t+1
    If c is the last client whose stepc =the server step then
      step←step+1
    End If
    If running then
      DispatchJob(c,wt)
    End If
  End
}

整体的运行工作流程,如图3所示:

图3 分布式异步SGD算法运行流程示意

以上我们就完成了随机梯度下降算法,在分布式异步环境的算法改进,关于其他的算法改进,读者可以参考上述原理,自行研究改进方法,适应应用环境。

本书摘自机械工业出版社---《分布式人工智能:基于TensorFlow RTOS与群体智能体系》一书,经授权刊登此公号。

《分布式人工智能基于TensorFlow、RTOS与群体智能体系》结合分布式计算、大数据、机器学习、深度学习和强化学习等技术,以群体智能为主线,讲述分布式人工智能的原理与应用。本书首先介绍分布式系统的概念、技术概况、计算框架、智能核心及体系架构等内容;然后介绍大数据框架、高速计算、海量存储及人工智能经典算法等内容;接着介绍大规模分布式系统架构与演进,以及群体智能与博弈等内容;最后搭建《星际争霸2》仿真环境,并开发相关的仿真对抗系统。

上述内容,如有侵犯版权,请联系作者,会自行删文。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机视觉工坊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本书摘自机械工业出版社---《分布式人工智能:基于TensorFlow RTOS与群体智能体系》一书,经授权刊登此公号。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档