diff --git a/docs/algo/gbdt_on_angel.md b/docs/algo/gbdt_on_angel.md
index 05e9f3e1c..7cacd76d5 100644
--- a/docs/algo/gbdt_on_angel.md
+++ b/docs/algo/gbdt_on_angel.md
@@ -1,27 +1,28 @@
# GBDT on Angel
-**GBDT(Gradient Boosting Decision Tree):梯度提升决策树 [1][2]**,是一种集成使用多个弱分类器(决策树)来提升分类效果的机器学习算法,在很多分类和回归的场景中,都有不错的效果。
+> **GBDT(Gradient Boosting Decision Tree):梯度提升决策树 [1][2]**,是一种集成使用多个弱分类器(决策树)来提升分类效果的机器学习算法,在很多分类和回归的场景中,都有不错的效果。
-## 算法场景
+## 1. 算法介绍
![fileUsersandyyehooDocumentsMy20Work201703Angel开源文档GBDT-on-Angelgbdt-on-angel-1.png](/tdw/angel/uploads/A54C332C8CA44EF181B7B0E6854B9228/fileUsersandyyehooDocumentsMy20Work201703Angel开源文档GBDT-on-Angelgbdt-on-angel-1.png)
如图1所示,这是是对一群消费者的消费力进行预测的例子。简单来说,处理流程为:
- 1. 在第一棵树中,根节点选取的特征是年龄,年龄小于30的被分为左子节点,年龄大于30的被分为右叶子节点,右叶子节点的预测值为1;
- 2. 第一棵树的左一节点继续分裂,分裂特征是月薪,小于10K划分为左叶子节点,预测值为5;工资大于10k的划分右叶子节点,预测值为10
- 2. 建立完第一棵树之后,C、D和E的预测值被更新为1,A为5,B为10
- 3. 根据新的预测值,开始建立第二棵树,第二棵树的根节点的性别,女性预测值为0.5,男性预测值为1.5
- 4. 建立完第二棵树之后,将第二棵树的预测值加到每个消费者已有的预测值上,比如A的预测值为两棵树的预测值之和:5+0.5=5.5
- 5. 通过这种方式,不断地优化预测准确率。
+1. 在第一棵树中,根节点选取的特征是年龄,年龄小于30的被分为左子节点,年龄大于30的被分为右叶子节点,右叶子节点的预测值为1;
+2. 第一棵树的左一节点继续分裂,分裂特征是月薪,小于10K划分为左叶子节点,预测值为5;工资大于10k的划分右叶子节点,预测值为10
+2. 建立完第一棵树之后,C、D和E的预测值被更新为1,A为5,B为10
+3. 根据新的预测值,开始建立第二棵树,第二棵树的根节点的性别,女性预测值为0.5,男性预测值为1.5
+4. 建立完第二棵树之后,将第二棵树的预测值加到每个消费者已有的预测值上,比如A的预测值为两棵树的预测值之和:5+0.5=5.5
+5. 通过这种方式,不断地优化预测准确率。
-## **实现逻辑**
-### 1. 参数存储
-![fileUsersandyyehooDocumentsMy20Work201703Angel开源文档GBDT-on-Angelgbdt-on-angel-2.png](/tdw/angel/uploads/1F19EF3B9ABD49BBBAC2D8CF4D71EDC3/fileUsersandyyehooDocumentsMy20Work201703Angel开源文档GBDT-on-Angelgbdt-on-angel-2.png)
+## 2. 分布式实现 on Angel
+
+---
+### 1. 参数存储
如图2所示,为了优化算法性能,在参数服务器上,需要存储如下几个参数矩阵,包括:
@@ -61,10 +62,7 @@ GBDT的流程包括几大步骤
4. **分裂树节点:** PS并将分裂特征、分裂特征值和目标函数增益返回给Workder。Worker根据计算得到的最佳分裂点,创建叶子节点,将本节点的训练数据切分到两个叶子节点上。如果树的高度没有达到最大限制,则将两个叶子节点加入到待处理树节点的队列。
![fileUsersandyyehooDocumentsMy20Work201703Angel开源文档GBDT-on-Angelgbdt-on-angel-4.png](/tdw/angel/uploads/F93D941F7E6C4779A7E3F69E215A3EEE/fileUsersandyyehooDocumentsMy20Work201703Angel开源文档GBDT-on-Angelgbdt-on-angel-4.png)
-
-
-### 4. Angel的优势
-
+
从上面的算法逻辑剖析可以看出,GBDT这个算法,存在这大量的模型更新和同步操作,非常适合PS和Angel。具体来说,包括:
@@ -75,5 +73,11 @@ GBDT的流程包括几大步骤
3. **分布式训练:**最佳决策分裂点的技术,可以在多个PS服务器节点上并行进行,然后再同步给Worker,互不干扰
整体来看,Angel的PS优势,使得它在这个算法上,性能远远超越了Spark版本的GBDT实现,而和MPI版本的xgBoost也略胜一筹。
+
+## 3. 运行 & 性能
+
+### 输入格式
+### 参数
+### 性能
diff --git a/docs/algo/kmeans_on_angel.md b/docs/algo/kmeans_on_angel.md
index 78df78d08..29dd8050b 100644
--- a/docs/algo/kmeans_on_angel.md
+++ b/docs/algo/kmeans_on_angel.md
@@ -1,6 +1,10 @@
# KMeans
-## KMeans算法
-KMeans是一种简单的聚类算法,将数据集划分为多个簇,K为簇的个数,是一个提前设定的值。每个样本被划分到距离最近的簇。每个簇所有样本的几何中心为这个簇的簇心,样本到簇心的距离为样本到簇的距离。Kmeans算法一般以迭代的方式训练,如下所示:
+
+> KMeans是一种简单的聚类算法,将数据集划分为多个簇,K为簇的个数。传统的KMeans算法,有一定的性能瓶颈,通过PS实现的KMeans,在准确率一致的情况下,性能更佳。
+
+## 1. 算法介绍
+
+每个样本被划分到距离最近的簇。每个簇所有样本的几何中心为这个簇的簇心,样本到簇心的距离为样本到簇的距离。Kmeans算法一般以迭代的方式训练,如下所示:
![image.png](/tdw/angel/uploads/89523DACE2E547E385C1797297714B35/image.png)
其中:![xi.gif](/tdw/angel/uploads/574113621AFC4E36A47AEAB98DD66A58/xi.gif)代表第i个样本,![ci.gif](/tdw/angel/uploads/E809FF8E555442719B551C778935A579/ci.gif)代表与第i个样本距离最近的簇,![miui.gif](/tdw/angel/uploads/D080E78FD43346D7A698C9CFF7458F33/miui.gif)代表第j个簇的簇心。
@@ -9,16 +13,24 @@ KMeans是一种简单的聚类算法,将数据集划分为多个簇,K为簇
"Web-Scale K-Means Clustering"提出一种在朴素KMeans算法基础上改进的KMeans算法,用mini-batch方法训练,每次迭代选择一个mini-batch的样本更新簇心,如下所示:
![minibatchkmeans.png](/tdw/angel/uploads/9EDED211A2444A85913D7A6CF302A2E5/minibatchkmeans.png)
-## KMeans on Angel
+## 2. 分布式实现 on Angel
+
### 模型存储
Angel实现的KMeans算法将K个簇心存储在ParameterServer上,用一个K×N维的矩阵表示,其中:K为簇心的个数,N为数据的维度,即特征的个数。
+
### 模型更新
KMeans on Angel以迭代的方式训练,每次训练以上文提到的mini-batch KMeans算法更新簇心。
+
### 算法逻辑
KMeans on Angel的算法流程如下图所示:
![KMeansonAngel.png](/tdw/angel/uploads/6D56A5EAC512408DB980F8B53DB26B3B/KMeansonAngel.png)
-### 参数
-输入输出参数
+
+
+## 3. 运行 & 性能
+
+### 输入格式
+
+### 参数
* IO参数
* angel.train.data.path:输入数据路径
* ml.feature.num:数据特征个数
@@ -29,3 +41,5 @@ KMeans on Angel的算法流程如下图所示:
* ml.kmeans.center.num:K值,即簇的个数
* ml.kmeans.sample.ratio.perbath:每次迭代选择mini-batch样本的采样率
* ml.kmeans.c:学习速率参数
+
+### 性能
diff --git a/docs/algo/lda_on_angel.md b/docs/algo/lda_on_angel.md
index 63f98ec7e..698d63765 100644
--- a/docs/algo/lda_on_angel.md
+++ b/docs/algo/lda_on_angel.md
@@ -1,8 +1,12 @@
-# Latent Dirichlet Allocation
+# LDA(Latent Dirichlet Allocation)
+> LDA是一种常见的主题模型算法。简单来说它是一个贝叶斯概率生成模型,用于对文档集进行降维或者潜在语义分析。
-## LDA 模型
-LDA是一个贝叶斯概率生成模型,用于对文档集进行降维或者潜在语义分析。
+
+
+## 1. 算法介绍
+
+### 整体说明
给定一个语料库``$ C $``,该语料库由一系列文档`` $ \{D_1, \cdots, D_{M}\} $``构成。
每个文档``$ D_i $`` 则由一个序列的词构成,``$ D_i = (t_1, t_2, \cdots, t_{N_i}) $``。
语料库中的词整体构成了一个词汇表``$ V $``。
@@ -18,7 +22,7 @@ LDA模型对每个文档的生成过程进行了建模。
中采样出该词的话题``$ z_{dn} $``,
然后再从多项分布``$ Mult(\phi_{z_{dn}}) $``中采样出单词``$ w_{dn} \in V $``。
-## Gibbs Sampling
+### Gibbs Sampling
求解LDA模型的过程通常使用Gibbs Sampling方法,通过采样出大量符合后验分布的样本``$ z_{dn} $``,
从而对每个文档的话题分布和话题的词分布进行估计估计。
目前对LDA的Gibbs Sampling方法有大概6中,包括Collapsed Gibbs Sampling(CGS),SparseLDA,
@@ -48,7 +52,8 @@ F+LDA通过将概率公式进行了分解成两部分``$ C_{dk} \frac{C_{wk} + \
对于另一个部分,F+LDA采用F+树来进行查找,可以将复杂度降低到O(logK)。
从而F+LDA的复杂度为``$ O(K_d) $``,``$ K_d $``是文档-话题矩阵中非零元素的个数。
-## 分布式训练
+## 2. 分布式训练 on Angel
+
在Angel中进行LDA模型的训练,整体的框架如下图所示。
对于LDA模型中的两个较大的矩阵``$ C_w $``和``$ C_d $``,
我们将C_d矩阵划分到不同的worker上,将C_w矩阵划分到不同的server上。
@@ -57,7 +62,17 @@ F+LDA通过将概率公式进行了分解成两部分``$ C_{dk} \frac{C_{wk} + \
![Architecture for LDA on Angel](../img/lda_ps.png)
-## 参数和数据格式
+## 3. 运行 & 性能
+
+### 输入格式
+
+输入数据分为多行,每行是一个文档,每个文档由一系列的词id构成,词id之间由空格隔开
+
+```math
+ wid_0, wid_1, ..., wid_n
+```
+
+### 参数
* 数据参数
* angel.train.data.path: 输入数据路径
@@ -68,7 +83,5 @@ F+LDA通过将概率公式进行了分解成两部分``$ C_{dk} \frac{C_{wk} + \
* angel.lda.topic.num:话题个数
* angel.lda.worker.parallel.num:worker内部并行度
-输入数据分为多行,每行是一个文档,每个文档由一系列的词id构成,词id之间由空格隔开
-```math
-wid_0, wid_1, ..., wid_n
-```
\ No newline at end of file
+### 性能
+
diff --git a/docs/algo/lr_on_angel.md b/docs/algo/lr_on_angel.md
index 4d447a1cf..1c7a685f7 100644
--- a/docs/algo/lr_on_angel.md
+++ b/docs/algo/lr_on_angel.md
@@ -1,5 +1,9 @@
-# LogisticRegression
-## 逻辑回归模型
+# LogisticRegression
+
+> 逻辑回归模型(logistic regression model)是一种分类模型。它是最常见和常用的一种分类方法,在传统的广告推荐中被大量使用,朴实但有效。
+
+## 1. 算法介绍
+
逻辑回归模型(logistic regression model)是一种分类模型。样本x属于类别y的概率P(y|x)服从logistic分布:
![](http://i.imgur.com/5UZuenh.gif)
综合两种情况,有:
@@ -8,12 +12,36 @@
![3.png](/tdw/angel/uploads/3A11081478244509AFB192FBC8C19283/3.png)
其中:![](http://i.imgur.com/c0AJnPE.gif) 为L2正则项。
-## Gradient Descent LR on Angel
+## 2. 分布式实现 on Angel
+
Angel MLLib提供了用mini-batch gradient descent优化方法求解的Logistic Regression算法,算法逻辑如下
-![sgdCode.png](/tdw/angel/uploads/9875CF7F229C478BBB5CEB366B33E83E/sgdCode.png)
-学习速率在迭代过程中衰减,其中N为迭代次数,α为衰减系数,T为迭代次数:![6.gif](/tdw/angel/uploads/D31BABAED76C49C0B69D9C0C8FAB38FC/6.gif)。
+![sgdCode.png](/tdw/angel/uploads/9875CF7F229C478BBB5CEB366B33E83E/sgdCode.png)
+
+学习速率在迭代过程中衰减,其中
+
+* N为迭代次数
+* α为衰减系数
+* T为迭代次数
+
+![6.gif](/tdw/angel/uploads/D31BABAED76C49C0B69D9C0C8FAB38FC/6.gif)
-### Gradient Descent LR 参数
+## 3. 运行 & 性能
+
+### 输入格式
+
+数据的格式通过“ml.data.type”参数设置;数据特征的个数,即特征向量的维度通过参数“ml.feature.num”设置。
+
+LR on Angel支持“libsvm”、“dummy”两种数据格式,分别如下所示:
+
+* **dummy格式**
+
+每行文本表示一个样本,每个样本的格式为"y index1 index2 index3 ..."。其中:index特征的ID;训练数据的y为样本的类别,可以取1、-1两个值;预测数据的y为样本的ID值。比如,属于正类的样本[2.0, 3.1, 0.0, 0.0, -1, 2.2]的文本表示为“1 0 1 4 5”,其中“1”为类别,“0 1 4 5”表示特征向量的第0、1、4、5个维度的值不为0。同理,属于负类的样本[2.0, 0.0, 0.1, 0.0, 0.0, 0.0]被表示为“-1 0 2”。
+
+ * **libsvm格式**
+
+每行文本表示一个样本,每个样本的格式为"y index1:value1 index2:value1 index3:value3 ..."。其中:index为特征的ID,value为对应的特征值;训练数据的y为样本的类别,可以取1、-1两个值;预测数据的y为样本的ID值。比如,属于正类的样本[2.0, 3.1, 0.0, 0.0, -1, 2.2]的文本表示为“1 0:2.0 1:3.1 4:-1 5:2.2”,其中“1”为类别,"0:2.0"表示第0个特征的值为2.0。同理,属于负类的样本[2.0, 0.0, 0.1, 0.0, 0.0, 0.0]被表示为“-1 0:2.0 2:0.1”。
+
+### 参数
* 算法参数
* ml.epochnum:迭代次数
* ml.batch.sample.ratio:每次迭代的样本采样率
@@ -23,16 +51,7 @@ Angel MLLib提供了用mini-batch gradient descent优化方法求解的Logistic
* ml.learn.decay:学习速率衰减系数
* ml.reg.l2:L2惩罚项系数
-## ADMM LR on Angel
-## 其它
-* 数据格式
- 数据的格式通过“ml.data.type”参数设置;数据特征的个数,即特征向量的维度通过参数“ml.feature.num”设置。
-LR on Angel支持“libsvm”、“dummy”两种数据格式,分别如下所示:
- * dummy格式:
- 每行文本表示一个样本,每个样本的格式为"y index1 index2 index3 ..."。其中:index特征的ID;训练数据的y为样本的类别,可以取1、-1两个值;预测数据的y为样本的ID值。比如,属于正类的样本[2.0, 3.1, 0.0, 0.0, -1, 2.2]的文本表示为“1 0 1 4 5”,其中“1”为类别,“0 1 4 5”表示特征向量的第0、1、4、5个维度的值不为0。同理,属于负类的样本[2.0, 0.0, 0.1, 0.0, 0.0, 0.0]被表示为“-1 0 2”。
- * libsvm格式:
- 每行文本表示一个样本,每个样本的格式为"y index1:value1 index2:value1 index3:value3 ..."。其中:index为特征的ID,value为对应的特征值;训练数据的y为样本的类别,可以取1、-1两个值;预测数据的y为样本的ID值。比如,属于正类的样本[2.0, 3.1, 0.0, 0.0, -1, 2.2]的文本表示为“1 0:2.0 1:3.1 4:-1 5:2.2”,其中“1”为类别,"0:2.0"表示第0个特征的值为2.0。同理,属于负类的样本[2.0, 0.0, 0.1, 0.0, 0.0, 0.0]被表示为“-1 0:2.0 2:0.1”。
* 输入输出参数
* angel.train.data.path:输入数据路径
@@ -47,10 +66,9 @@ LR on Angel支持“libsvm”、“dummy”两种数据格式,分别如下所
* angel.worker.task.number:每个Worker上的task的个数,默认为1
* angel.ps.number:PS个数
* angel.ps.memory.mb:PS申请内存大小!
-
-* 其它参数配置
- * 模型输出路径删除:
- 为了防止误删除模型,Angel默认不自动删除模型输出路径的文件。如果需要删除,要在Angel参数框内填入angel.output.path.deleteonexist=true
+
+
+### 性能
diff --git a/docs/algo/mf_on_angel.md b/docs/algo/mf_on_angel.md
index f2c2f17ce..06f161124 100644
--- a/docs/algo/mf_on_angel.md
+++ b/docs/algo/mf_on_angel.md
@@ -1,6 +1,12 @@
# Matrix Factorization
-## Matrix Factorizaiton模型
-Matrix Factorizaiton是推荐系统中常用的一种矩阵分解的算法,为表示方便简称为MF。MF的主要思想是把用户、商品的特征抽象为k维向量表示。
+
+> Matrix Factorizaiton是推荐系统中常用的一种矩阵分解的算法,为表示方便简称为MF。它是一种在推荐系统中,非常常用的算法。
+
+## 1. 算法介绍
+---
+
+MF的主要思想是把用户、商品的特征抽象为k维向量表示。
+
用户-商品评分矩阵(简称评分矩阵),是推荐系统中常用的数据表示方法,用一个矩阵表示用户对商品的打分。矩阵的每行代表一个用户,每列代表一个商品,每个元素代表对应用户对商品的评分,如图一所示。在大多数情况下商品数量巨大,每个用户只对极小部分商品有评分,所以评分矩阵一般非常稀疏,即评分矩阵中的绝大多数元素为0。MF算法把评分矩阵分解为用户-特征矩阵(简称用户矩阵)和特征-商品矩阵(简称商品矩阵)。
![1.png](/tdw/angel/uploads/41EFDBCC6F0548E1BA4240118A989355/1.png)
设数据集有M个用户,N个商品:评分矩阵用Y表示,Y的维度为:M×N,![yij.png](/tdw/angel/uploads/5303BCB37772422C965811336815E717/yij.png)表示第i个用户对第j个商品的评分;MF算法把评分矩阵Y分解为用户矩阵U和商品矩阵V的乘积,U的维度为M×k,每一行代表一个用户![ui.png](/tdw/angel/uploads/007ACE90A9AB4F3CA89D94F239953F17/ui.png),![ui.png](/tdw/angel/uploads/007ACE90A9AB4F3CA89D94F239953F17/ui.png)是一个k维特征向量;V的维度为k×N,每一列代表一个商品![vj.png](/tdw/angel/uploads/49109016B0C943A38B99FF6D2DD730B7/vj.png), ![vj.png](/tdw/angel/uploads/49109016B0C943A38B99FF6D2DD730B7/vj.png)是一个k维特征向量;k是MF算法指定的值,代表特征向量的维度。我们以用户向量![ui.png](/tdw/angel/uploads/007ACE90A9AB4F3CA89D94F239953F17/ui.png)和商品向量![vj.png](/tdw/angel/uploads/49109016B0C943A38B99FF6D2DD730B7/vj.png)的乘积作为用户i对商品j评分的预测值,记为![yij.png](/tdw/angel/uploads/5303BCB37772422C965811336815E717/yij.png)。
@@ -18,29 +24,49 @@ MF算法的学习目标是最小化预测评分与真实评分之间的差距:
![updateu.png](/tdw/angel/uploads/ED34DF3E8EDE443DA78EF8DAC1AD3177/updateu.png)
![update_v.png](/tdw/angel/uploads/C8ECE56829D641159476ECA86DF9791A/update_v.png)
-## Matrix Factorization on Angel
-
+## 2. 分布式实现 on Angel
+---
### 模型存储
* 商品矩阵存放在PS,用户矩阵存放在Worker,PS和Worker间传输商品矩阵V即可,不需要传输用户矩阵U。
* 由用户向量的更新公式可知,用户向量的计算只和这个用户的评分数据有关,用户间相互独立,因此我们把用户矩阵U按照用户切分成多个子块存储在多个Worker,每个Worker只计算自己训练数据相关的用户的向量,记为:U-part,维度是:这个Worker分配到的用户数×k。
### 模型计算
Angel用梯度下降法学习MF模型,为了减少计算量和网络通信、提高计算效率,对算法做了以下设计:
+
* 因为商品向量的计算只和对它的评分相关,Worker上的训练数据可能只包含商品集合中的一部分商品的评分信息,这个Worker只能计算出这部分商品向量的梯度值,对无评分的商品计算的梯度值永远等于0,所以每次迭代只从PS拉取有评分的商品的向量即可,是整个商品矩阵的一个子集,记为V-sub矩阵。
+
* 当商品数量很大且k是一个比较大的值时,V-sub矩阵仍然可能超过了单个Worker的内存,而商品向量之间的更新相互独立,所以我们设计分批更新V-sub矩阵。每次迭代分成多个批计算,每批只从PS获取V-sub的一部分,用这部分商品向量更新Worker的用户矩阵,计算这部分商品向量的更新值推送给PS。
+
![计算.png](/tdw/angel/uploads/6B5AE537F6BA46FA9443EBDABCBA3A92/计算.png)
### 算法逻辑
+
Matrix Factorization on Angel的算法逻辑如下所示:
![code.png](/tdw/angel/uploads/A5D331880D334CD49174D563BE0FE020/code.png)
-## 其它
-### 数据格式
-训练数据的格式为“用户ID,商品ID:评分,…,商品:评分”,一个用户的所有评分存储在一行。如下图所示:ID为0的用户对ID为1、66、99、1001的商品评分分别为4、2、4、1;ID为1的用户对ID为77的商品评分为3
+
+## 3. 运行 & 性能
+
+---
+
+### 输入格式
+
+MF训练数据的格式:
+
+```
+ 用户ID,商品ID:评分,…,商品:评分
+```
+
+一个用户的所有评分存储在一行。
+
+如下图所示:
+
+* ID为0的用户对ID为1、66、99、1001的商品评分分别为4、2、4、1
+* ID为1的用户对ID为77的商品评分为3
![data.png](/tdw/angel/uploads/D9458B653F7D4F47AA506CC9F9EAFF6C/data.png)
### 参数
-* 算法IO参数
+* IO参数
* angel.train.data.path:输入数据路径
* angel.save.modelPath:商品特征矩阵保存路径
* angel.ml.mf.usermodel.output:用户特征矩阵保存路径
@@ -51,3 +77,6 @@ Matrix Factorization on Angel的算法逻辑如下所示:
* ml.mf.lambda:正则化系数
* ml.mf.eta:学习速率
* ml.mf.row.batch.num:每次迭代的batch数
+
+
+### 性能对比
\ No newline at end of file
diff --git a/docs/algo/svm_on_angel.md b/docs/algo/svm_on_angel.md
index 16368f93d..8a03d3a72 100644
--- a/docs/algo/svm_on_angel.md
+++ b/docs/algo/svm_on_angel.md
@@ -1 +1,11 @@
-# Support Vector Machine(SVM)
\ No newline at end of file
+# Support Vector Machine(SVM)
+
+> 算法简要介绍
+
+## 1. 算法介绍
+## 2. 分布式实现 on Angel
+## 3. 运行 & 性能
+
+### 输入格式
+### 参数
+### 性能