Используя оптимизатор LBFGS в spark-ml, мы бы хотели поэкспериментировать с термином энтропийной регуляризации.
Функция стоимости LBFGS (класс LBFGS.CostFun) просто возвращает значение функции стоимости и ее градиент.Функция потерь вычисляется в коде Spark LBFGS как
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 Updater, L2 Updater).
Кто-нибудь знает о существующей реализации Entropic Updater для Spark?В конце концов, в худшем случае мы могли бы написать это сами - добавить термин энтропийного наказания к части потерь (как регул), однако, как это повлияет на градиент?Может ли кто-нибудь представить, как энтропийный термин / уравнение / код, определенный над вектором весов w, как:
повлияет на градиенты?