Angel 实现FFM 一、对于Angel 和分布式机器学习的简单了解
Angel是腾讯开源的一个分布式机器学习框架。是一个PS模式的分布式机器学习框架。
https://github.com/Angel-ML/angel 这是github地址。
我了解的分布式机器学习概述:
对于分布式机器学习,有些简单的了解,听过一些概念。最近正在看《分布式机器学习 算法、理论与实践》这本书,我觉得这本书很不错。一下内容也是我的一个读书总结。
分布式机器学习分为 数据和模型划分模块,单机优化模块,通信模块,数据和模型的聚合模块。
分布式机器学习从并行方式来说分为数据并行和模型并行。数据并行是指训练数据规模太大,无法存储在一个节点上,需要把这些数据分配到各个机器上。
数据划分的方式分为对训练样本进行划分和对每个样本的特征维度进行划分。
对训练样本进行划分也分为随机采样法和基于置乱切分的方法。随机采样法是通过有放回抽样,根据每个节点的容量为期分配相应的样本数。这种方式可以保证每个节点的局部数据和整体数据是独立同分布的。但是这么做也有弊端就是如果数据量大,代价比较高。另一个是某些低频的样本可能会在抽样的过程中被遗漏。
另一种是根据基于置乱切分的方法,也就是将样本乱序排列,然后根据每个节点机器的容量,为其分配相应数量的样本。这个方法实现简单,效率相对较高。每个节点在训练的时候仅适用本地数据。在训练一定轮数之后也可以再重新合并数据,重新划分一次。这种方式无限等价于无放回抽样,但是独立同分布的假设是等价于有放回抽样。但是这种方式应该是实际使用比较多的方式。
模型并行,主要是指模型如何在分布式环境下进行并行,是一个节点上包含整个模型还是每个节点只包含一部分模型。主要是线性模型的并行和神经网络的并行。在Angel1.5的LR和FM中模型是保存在参数服务器,每次节点从参数服务器获取所需的一部分参数,在需要更新参数时候将更新的部分推送到参数服务器。深度模型的话一般可以按网络的层次进行划分。
对于分布式机器学习的学习算法,我理解有两种情况。一种是每个节点使用本地的单机机器学习优化算法,然后将各个节点训练的模型进行融合。这种在Angel1.4实现FM LR是这种方式。这种模型融合的方式对于线性模型来说,如果损失函数关于参数是凸函数时,各个部分的模型之间直接加和求平均是比单个模型要好,并且有收敛的理论保证。但是对于神经网络这种就不成立了。另一种是使用分布式机器学习算法,根据各个节点计算的梯度来更新权重。这种我能想到比较直观的就是PS模式,由参数服务器来接受梯度更新模型的参数。
通信部分的话,通信部分按拓扑结构划分,可以分为1、基于迭代Map/Reduce的通信拓扑,比如SparkMLib。优点是可以利用现有的分布式系统,简单高效的完成分布式学习任务。但是运算节点和模型存储节点没有很好的隔离,只能支持同步的通信方式,也就是所有mapper完成之后才开始进入reduce阶段。
2、基于参数服务器的通信拓扑。这种是把工作节点和模型节点分开。工作节点负责处理本地的训练样本,从参数服务器获取最新的参数,或者将参数更新发送到参数服务器。这种的好处是各个工作节点之间不需要保持同步了,工作节点与服务器之间的通信方式更加灵活。多个参数服务器可以分开存储一个较大的模型,每个参数服务器存储模型的一部分。
3、基于数据流的通信拓扑,这种的代表是tensorflow。这种我理解是把模型抽象成一个计算图模型,用一个有向无环图来表示。图中的每个节点表示一个数据处理的算子,边表示数据流动的方向。
Angel 实现FFM 一、对于Angel 和分布式机器学习的简单了解的更多相关文章
- Spark MLBase分布式机器学习系统入门:以MLlib实现Kmeans聚类算法
1.什么是MLBaseMLBase是Spark生态圈的一部分,专注于机器学习,包含三个组件:MLlib.MLI.ML Optimizer. ML Optimizer: This layer aims ...
- 分布式机器学习系统笔记(一)——模型并行,数据并行,参数平均,ASGD
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 文章索引::"机器学 ...
- 微软分布式机器学习工具包DMTK——初窥门径
在现在机器学习如日中天的大背景下,微软亚洲研究院的实习岗位中,机器学习组的工作也是维护DMTK,参与算法改进,那么在此之前我们得了解DMTK是个啥. DMTK由一个服务于分布式机器学习的框架和一组分布 ...
- Adam:大规模分布式机器学习框架
引子 转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/46676515 又是好久没写博客,记得有一次看Ng大神的訪谈录,假设每周读三篇论文, ...
- 分布式机器学习框架:MxNet 前言
原文连接:MxNet和Caffe之间有什么优缺点一.前言: Minerva: 高效灵活的并行深度学习引擎 不同于cxxnet追求极致速度和易用性,Minerva则提供了一个高效灵活的平台 ...
- 8.6.zookeeper应用案例_分布式共享锁的简单实现
1.分布式共享锁的简单实现 在分布式系统中如何对进程进行调度,假设在第一台机器上挂载了一个资源,然后这三个物理分布的进程都要竞争这个资源,但我们又不希望他们同时 进行访问,这时候我们就需要一个协调器, ...
- 分布式机器学习:逻辑回归的并行化实现(PySpark)
1. 梯度计算式导出 我们在博客<统计学习:逻辑回归与交叉熵损失(Pytorch实现)>中提到,设\(w\)为权值(最后一维为偏置),样本总数为\(N\),\(\{(x_i, y_i)\} ...
- 分布式机器学习:同步并行SGD算法的实现与复杂度分析(PySpark)
1 分布式机器学习概述 大规模机器学习训练常面临计算量大.训练数据大(单机存不下).模型规模大的问题,对此分布式机器学习是一个很好的解决方案. 1)对于计算量大的问题,分布式多机并行运算可以基本解决. ...
- 分布式机器学习:模型平均MA与弹性平均EASGD(PySpark)
计算机科学一大定律:许多看似过时的东西可能过一段时间又会以新的形式再次回归. 1 模型平均方法(MA) 1.1 算法描述与实现 我们在博客<分布式机器学习:同步并行SGD算法的实现与复杂度分析( ...
随机推荐
- Javaweb程序打包或exe执行文件
java程序的打包与发布 这里主要是讲解一下怎样将 Java程序打包成独立运行的exe程序包,以下这种方法应该是最佳的解决方案了.NetDuke的EXE程序包了是使用这种方案制作的.在操作步骤上还是比 ...
- Groovy中的面向对象
Groovy中的面向对象 前面说到groovy支持脚本和类,前面一节已将简单说了脚本和类之间的关系,这一节主要介绍一下groovy中类的相关知识,即面向对象相关知识. 1.类型 1.1 原始类型 gr ...
- Hadoop讲解
1.简介 Hadoop是一款开源的大数据通用处理平台,其提供了分布式存储和分布式离线计算,适合大规模数据.流式数据(写一次,读多次),不适合低延时的访问.大量的小文件以及频繁修改的文件. *Hadoo ...
- 后缀树 & 后缀数组
后缀树: 字符串匹配算法一般都分为两个步骤,一预处理,二匹配. KMP和AC自动机都是对模式串进行预处理,后缀树和后缀数组则是对文本串进行预处理. 后缀树的性质: 存储所有 n(n-1)/2 个后缀需 ...
- mysql 数据操作 单表查询 concat_ws() 定义显示格式
有个需求用concat以这种格式打印查询 mysql> select concat(name,':',age) from employee; +----------------------+ | ...
- SSH secure shell 权威指南(转载)
本书是一本介绍通信安全的书籍,如果你想保障你的通信安全,本书能给你一个很好的解决方案.本书从ssh协议介绍起,到具体的开源实现和商业实现.但本书同时介绍开源实现和商业实现,给人感觉比较乱.注意:由于o ...
- centos7 安装python3.6 及模块安装演示
目录: 下载python3.6 安装python3.6的依赖 编译安装 更改链接 更改yum脚本的python依赖 修改gnome-weaktool配置文件 修改urlgrabber配置文件 1.下载 ...
- UVA大模拟代码(白书训练计划1)UVA 401,10010,10361,537,409,10878,10815,644,10115,424,10106,465,10494
白书一:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=64609#overview 注意UVA没有PE之类的,如果PE了显示WA. UVA ...
- Sparsity稀疏编码(三)
稀疏编码(sparse coding)和低秩矩阵(low rank)的区别 上两个小结介绍了稀疏编码的生命科学解释,也给出一些稀疏编码模型的原型(比如LASSO),稀疏编码之前的探讨文章 ...
- ZOJ Monthly, March 2018 Solution
A - Easy Number Game 水. #include <bits/stdc++.h> using namespace std; #define ll long long #de ...