Scikit-learn 中 SGDClassifier 最优学习率的公式

The formula for the optimal learning rate in the SGDClassifier in Scikit-learn

我找不到 SGDClassifier in Scikit-learn when the learning_rate='optimal', in the original C++ source code of this same function https://leon.bottou.org/projects/sgd

的学习率公式

SGDClassifier in Scikit-learn中提到的公式:

这个正确的公式是在原始 SGDClassifier 代码中使用的,还是在移植到 Scikit-learn 时发生了变化? 另外 t0 到底代表什么(在文档中只提到它是用启发式确定的)?

让我们浏览一下源代码和公式。

Sklearn 规定了以下公式:eta = 1/(alpha* (t+t_0))。在 Leon Bottou 的网站上,我们找到表达式 eta = eta_0 / (1 + lambda eta_0 t).

让我们稍微改写后一个公式:

eta = eta_0 / (1 + lambda eta_0 t)
    = 1 / ( 1/eta_0 + lambda t )
    = 1 / ( lambda * ( 1/eta_0 *  1/lambda  + t)).

如果现在 lambda = alpha 和来自 sklearn 的 t_01/(eta_0*alpha) 相同,公式是相同的。现在让我们看一下源代码:https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/sgd_fast.pyx#L657

在第 657 行,我们看到 optimal_init = 1.0 / (initial_eta0 * alpha)optimal_init 变量只是 t_0 与我们在第 679 行中看到的公式不同的名称:eta = 1.0 / (alpha * (optimal_init + t - 1)).

所以公式是一样的