Skip to content

Latest commit

 

History

History
134 lines (101 loc) · 4.28 KB

lr_on_angel.md

File metadata and controls

134 lines (101 loc) · 4.28 KB

LR(Logistic Regression)

逻辑回归(Logistic Regression)模型是一种分类模型。它是最常见和常用的一种分类方法,在传统的广告推荐中被大量使用,朴实但有效。

1. 算法介绍

逻辑回归模型(logistic regression model)是一种分类模型。样本x属于类别y的概率P(y|x)服从logistic分布:

综合两种情况,有:

逻辑回归模型使用log损失函数,带L2惩罚项的目标函数如下所示:

其中:为L2正则项。

2. 分布式实现 on Angel

1. 模型存储

LR算法的模型可以抽象为一个1×N维的PSModel,记为w,如下图所示:

2. 算法逻辑

Angel MLLib提供了用mini-batch gradient descent优化方法求解的Logistic Regression算法。

  • worker:
    每次迭代,worker从PS拉取最新的w,用mini-batch gradient descent方法计算模型的更新值△w,将更新值△w推送给PS。

  • PS:
    每次迭代,PS接收到所有worker推送的更新值△w,取平均后叠加到w,得到新的模型。

    • 算法流程如下所示:
    • 算法逻辑如下所示:
  • 衰减的学习速率
    学习速率在迭代过程中衰减: 其中:

    • α为衰减系数
    • T为迭代次数

3. 运行 & 性能

输入格式

  • 数据的格式通过“ml.data.type”参数设置。支持“libsvm”、“dummy”两种数据格式,具体参考:Angel数据格式
  • 特征向量的维度通过参数“ml.feature.num”设置

参数

  • 算法参数

    • ml.epoch.num:迭代次数
    • ml.batch.sample.ratio:每次迭代的样本采样率
    • ml.sgd.batch.num:每次迭代的mini-batch的个数
    • ml.validate.ratio:每次validation的样本比率,设为0时不做validation
    • ml.learn.rate:初始学习速率
    • ml.learn.decay:学习速率衰减系数
    • ml.reg.l2:L2惩罚项系数
  • 输入输出参数

    • angel.train.data.path:输入数据路径
    • ml.feature.num:数据特征个数
    • ml.data.type:数据格式,支持"dummy"、"libsvm"
    • angel.save.modelPath:训练完成后,模型的保存路径
    • angel.log.path:log文件保存路径
  • 资源参数

    • angel.workergroup.number:Worker个数
    • angel.worker.memory.mb:Worker申请内存大小
    • angel.worker.task.number:每个Worker上的task的个数,默认为1
    • angel.ps.number:PS个数
    • angel.ps.memory.mb:PS申请内存大小

输出说明

提交命令

  • 训练任务
./bin/angel-submit \
    --action.type train \
    --angel.app.submit.class com.tencent.angel.ml.classification.lr.LRRunner  \
    --angel.train.data.path $input_path \
    --angel.save.model.path $model_path \
    --angel.log.path $logpath \
    --ml.epoch.num 10 \
    --ml.batch.num 10 \
    --ml.feature.num 10000 \
    --ml.validate.ratio 0.1 \
    --ml.data.type dummy \
    --ml.learn.rate 1 \
    --ml.learn.decay 0.1 \
    --ml.reg.l2 0 \
    --angel.workergroup.number 3 \
    --angel.worker.task.number 3 \
    --angel.ps.number 1 \
    --angel.ps.memory.mb 5000 \
    --angel.job.name=angel_lr_smalldata
  • 预测任务
./bin/angel-submit \
    --action.type predict \
    --angel.app.submit.class com.tencent.angel.ml.classification.lr.LRRunner  \
    --angel.load.model.path $model_path \
    --angel.predict.out.path $predict_path \
    --angel.train.data.path $input_path \
    --angel.workergroup.number 3 \
    --ml.data.type dummy \
    --angel.worker.memory.mb 8000  \
    --angel.worker.task.number 3 \
    --angel.ps.number 1 \
    --angel.ps.memory.mb 5000 \
    --angel.job.name angel_lr_predict

性能

  • 数据:视频推荐数据,5×10^7特征,8×10^7样本
  • 资源:
    • Spark:executor:50个,14G内存,4个core;driver:55G内存
    • Angel:executor:50个,10G内存,4个task;ps:20个,5G内存
  • 迭代100次时间:
    • Angel:20min
    • Spark:145min