参数服务器学习笔记

参考文献:http://papers.nips.cc/paper/4687-large-scale-distributed-deep-networks.pdf

译文:http://blog.sina.com.cn/s/blog_81f72ca70101kuk9.html

引用自:http://www.36dsj.com/archives/19932

“训练过程开始后,所有的训练计算机从参数服务器更新当前参数,然后利用当前参数以及本机器上的训练数据,计算得到当前的梯度,通过贪婪式方法,训练到不能再训练为止,然后将参数的更新量提交给服务器,再获取新的参数进行更新。

在这个过程中,出现了不同机器在同步时间上的一个大问题。具体阐述如下:梯度下降这种方法,在计算梯度的时候,一定要知道当前参数的具体值,梯度是针对某一个具体的参数值才有意义的。但是,由于在这个系统中,计算机非常多,当计算机A从服务器上获得参数值后,完成梯度的计算得到步进量的时候,可能在它提交结果之前,计算机B已经修改了参数服务器上的参数了。也就是说,A所得到的步进量,并不是针对当前的参数值的。

论文中,作者注意到了这个问题,但是故意不去理会,结果训练结果居然不错。作者的解释是:这是一种歪打正着的现象。

为什么能够歪打正着呢?有可能是这样的:非凸问题,本来就不是梯度下降法能够解决的。如果不存在同步难题,那么随着训练的深入,结果肯定会收敛到某一个局部最优解上面去。而现在这种同步问题,恰好能够有助于跳出局部最优解。因此最终的训练结果还算不错。

作者并没有证明,这种方式,对于寻找全局最优一定是有帮助的。对于最终的结果是否一定是经验最优的,也没有证明。因此我感觉,深度学习里面,这种超高维参数的最优结果的寻优,是一个很值得深入研究的问题。它对于最终的效果也确实影响很大。”

上文可以发现,参数服务器有一特性,就是它的随机性,这种随机性的出现不但没有降低最终模型的精确度,反而有利于寻找最优结果。通过一张图,大家可以明白其原理:

 


可见,由于参数服务器这种非同步性,往往会使最优结果跨过局部最优解,出现一种外打正着的现象。当然,如上面引用所说,最优结果的寻解是个值得深入研究的问题,目前能做的也只是逼近而已。

关于参数服务器的架构,可以用这张图来解释:


A server node in the server group maintains a partition of the globally shared parameters. Server nodes communicate with each other to replicate and/or to migrate parameters for reliability and scaling.

Each worker group runs an application. A worker typically stores locally a portion of the training data to compute local statistics such as gradients. Workers communicate only with the server nodes (not among themselves), updating and retrieving the shared parameters via push and pull.

There is a scheduler node for each worker group. It assigns tasks to workers and monitors their progress. If workers are added or removed, it reschedules unfinished tasks.

 

总之,参数服务器的更新过程其实很简单,关键在于读懂它的三层结构,理解其异步性、随机性,以及其节点间的独立性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值