docs/algo/softmax_on_angel.md
Softmax回归也称为多元逻辑回归,既通过逻辑回归算法处理多分类问题。不同于二元逻辑回归,softmax可归可处理K个类别变量的分类问题。
在逻辑回归中,给出测试输入x,希望假设可以针对同一样本在不同的k(其中,k=1,...,K)值下估计概率 P(y=k|x)的值。假设将会输出K维向量(该向量元素值和为1),结果给出K个类别对应的估计概率值。假设概率估计函数表达如下:
其中,
因此,对应的损失函数表达式为:
对于上述表达式,我们也通常通过迭代方式优化求解。这里给出迭代过程的梯度表达式:
softmax算法模型 softmax算法仅由单个输入层组成,该输入层可为“dense”或“sparse”,同逻辑回归算法,softmax模型的输出只有一个,即分类结果。不同与逻辑回归的是,softmax的损失函数采用了softmax loss。
softmax regression训练过程 Angel实现了用梯度下降方法优化,迭代训练得到softmax模型,每次迭代worker和PS上的逻辑如下:
softmax预测结果
支持"dense"、"libsvm"和"dummy"三种数据格式,其中"libsvm"格式举例如下:
1 1:1 214:1 233:1 234:1
dummy格式如下:
1 1 214 233 234
../../bin/angel-submit \
-Dml.epoch.num=20 \
-Dangel.app.submit.class=com.tencent.angel.ml.core.graphsubmit.GraphRunner \
-Dml.model.class.name=com.tencent.angel.ml.classification.SoftmaxRegression \
-Dangel.train.data.path=$traindata \
-Dangel.save.model.path=$modelout \
-Dml.feature.index.range=$featureNum \
-Dml.feature.num=$featureNum \
-Dml.data.validate.ratio=0.1 \
-Dml.data.label.trans.class="SubOneTrans" \
-Dml.data.type=libsvm \
-Dml.learn.rate=0.1 \
-Dml.reg.l2=0.03 \
-Daction.type=train \
-Dml.num.class=$classNum \
-Dangel.workergroup.number=10 \
-Dangel.worker.memory.mb=10000 \
-Dangel.worker.task.number=1 \
-Dangel.ps.number=4 \
-Dangel.ps.memory.mb=10000 \
-Dangel.task.data.storage.level=memory \
-Dangel.job.name=angel_train
../../bin/angel-submit \
-Dml.epoch.num=20 \
-Dangel.app.submit.class=com.tencent.angel.ml.core.graphsubmit.GraphRunner \
-Dml.model.class.name=com.tencent.angel.ml.classification.SoftmaxRegression \
-Dangel.train.data.path=$traindata \
-Dangel.load.model.path=$modelout \
-Dangel.save.model.path=$modelout \
-Dml.feature.index.range=$featureNum \
-Dml.feature.num=$featureNum \
-Dml.data.validate.ratio=0.1 \
-Dml.data.label.trans.class="SubOneTrans" \
-Dml.data.type=libsvm \
-Dml.learn.rate=0.1 \
-Dml.reg.l2=0.03 \
-Daction.type=inctrain \
-Dml.num.class=$classNum \
-Dangel.workergroup.number=10 \
-Dangel.worker.memory.mb=10000 \
-Dangel.worker.task.number=1 \
-Dangel.ps.number=4 \
-Dangel.ps.memory.mb=10000 \
-Dangel.task.data.storage.level=memory \
-Dangel.job.name=angel_inctrain
../../bin/angel-submit \
-Dml.epoch.num=20 \
-Dangel.app.submit.class=com.tencent.angel.ml.core.graphsubmit.GraphRunner \
-Dml.model.class.name=com.tencent.angel.ml.classification.SoftmaxRegression \
-Dangel.predict.data.path=$predictdata \
-Dangel.load.model.path=$modelout \
-Dangel.predict.out.path=$predictout \
-Dml.feature.index.range=$featureNum \
-Dml.feature.num=$featureNum \
-Dml.data.label.trans.class="SubOneTrans" \
-Dml.data.type=libsvm \
-Daction.type=predict \
-Dml.num.class=$classNum \
-Dangel.workergroup.number=10 \
-Dangel.worker.memory.mb=10000 \
-Dangel.worker.task.number=1 \
-Dangel.ps.number=4 \
-Dangel.ps.memory.mb=10000 \
-Dangel.task.data.storage.level=memory \
-Dangel.job.name=angel_predict