火花ml-lib多层感知器分类器的熵正则化

时间:2019-02-03 17:10:31

标签: apache-spark apache-spark-ml entropy

使用spark-ml中的LBFGS优化器,我们将尝试使用熵正则化项。

LBFGS成本函数(类LBFGS.CostFun)仅返回成本函数值及其梯度。损失函数在LBFGS的Spark代码内部计算为

    val regVal = updater.compute(w, Vectors.zeros(n), 0, 1, regParam)._2
    loss = lossSum / numExamples + regVal

梯度部分以及正则化如下:

// The following gradientTotal is actually the regularization part of gradient.
          // Will add the gradientSum computed from the data with weights in the next step.
          val gradientTotal = w.copy
          axpy(-1.0, updater.compute(w, Vectors.zeros(n), 1, 1, regParam)._1, gradientTotal)

          // gradientTotal = gradientSum / numExamples + gradientTotal
          axpy(1.0 / numExamples, gradientSum, gradientTotal)

不幸的是,据我所知,Spark没有实现熵更新器(只有四个:ANNUpdater,SimpleUpdater,L1更新器,L2更新器)。

有人知道Spark的现有Entropic Updater实现吗? 最终,在最坏的情况下,我们可以自己编写它-将熵罚项添加到损失部分(作为regVal)是微不足道的,但是,这将如何影响梯度?有人可以提供在权重向量w上方定义的方式/方程式/代码熵项:

entropy

会影响渐变吗?

0 个答案:

没有答案