我正在使用sklearn的逻辑回归函数,并想知道每个求解器实际上在幕后做什么来解决优化问题。
有人可以简单地描述“newton-cg”,“sag”,“lbfgs”和“liblinear”正在做什么吗?如果没有,任何相关链接或阅读材料也非常受欢迎。
提前多多感谢。
答案 0 :(得分:32)
好吧,我希望我参加聚会不晚!让我先尝试建立一些直觉,然后再挖掘大量信息( 警告 :这不是简短的比较)
假设h(x)
,接受输入,然后给我们提供估计的输出值。
这个假设可以像一个变量线性方程一样简单,..就我们所使用的算法类型而言,可以是一个非常复杂且冗长的多元方程(即线性回归,逻辑回归..etc )。
我们的任务是找到 最佳参数 (又称Thetas或Weights),这些参数会给我们带来 最小误差 >在预测输出中。我们将此错误称为 Cost or Loss Function (成本或损失函数) ,显然,我们的目标是 最小化 以获取该错误。最佳预测输出!
还需要回忆一下,参数值及其对成本函数的影响(即误差)之间的关系看起来像 钟形曲线 (即< strong> Quadratic ;请记住这一点,因为它非常重要)。
因此,如果我们从该曲线的任意点开始,并且继续获取停靠点的导数(即切线),那么我们将以所谓的 Global Optima 结束如下图所示:
如果我们以最小成本点(即全局最优值)取偏导数,则会发现切线的 斜率 = 0 (那么我们知道我们已经达到了目标)。
仅当我们具有凸成本函数时,该参数才有效,但如果没有,我们最终可能会陷入所谓的 局部最优值 强>;考虑以下非凸函数:
现在,您应该对我们正在做的事情与以下术语之间的hack关系有直观的认识:衍生,切线,成本函数 ,假设 ..etc。
侧面说明:上述直觉也与渐变下降算法(请参阅下文)有关。
线性近似:
给定一个函数f(x)
,我们可以在x=a
处找到它的切线。切线L(x)的等式为:L(x)=f(a)+f′(a)(x−a)
。
看看下面的函数图及其切线:
从该图我们可以看到,在x=a
附近,切线和函数几乎具有相同的图。有时,我们会使用切线L(x)
作为f(x)
附近函数x=a
的近似值。在这些情况下,我们将切线称为函数x=a
的线性近似。
二次近似:
类似于线性逼近,但是这次我们处理的是曲线,但我们无法使用切线找到 0 附近的点。
相反,我们使用抛物线(这是一条曲线,其中任何点与固定点或固定直线的距离相等),如下所示:
并且为了拟合一个好的抛物线,抛物线和二次函数都应具有相同的值,相同的一阶导数和二阶导数,...的公式为(出于好奇而已) :Qa(x) = f(a) + f'(a)(x-a) + f''(a)(x-a)2/2
现在我们应该准备进行详细的比较。
1。牛顿法
回想一下x处梯度下降步骤的动机:我们最小化了二次函数(即成本函数)。
牛顿的方法在某种意义上使用了 更好 的二次函数最小化。 更好,因为它使用二次逼近(即一阶和第二偏导数)。
您可以将其想象为Hessian( Hessian是阶为nxn 的二阶偏导数的方阵)的扭曲梯度下降。
此外,牛顿方法的几何解释是,每次迭代时,f(x)
都由xn
附近的二次函数逼近f(x)
,然后朝那个二次函数的最大值/最小值迈进(在较大的尺寸,这也可能是鞍点)。请注意,如果LIBLINEAR
恰好是二次函数,则一步就可以找到确切的极值。
缺点:
由于Hessian矩阵(即二阶偏导数计算),它的计算结果 昂贵 。
它吸引了 鞍点 (在多变量优化中很常见)(即,其偏导数在此输入应为最大值还是最小值上存在分歧的点)点!)。
2。内存有限的Broyden–Fletcher–Goldfarb–Shanno算法:
简而言之,它类似于牛顿法,但这里的Hessian矩阵使用梯度评估(或近似梯度评估)指定的更新 近似 。换句话说,使用逆Hessian矩阵的估计。
“有限内存”一词仅表示它只存储一些隐式表示近似值的向量。
如果我敢说,当数据集 小 时,与其他方法相比,L-BFGS的性能最佳,尤其是它节省了大量内存,但是其中有些“ 严重”的缺点是,如果不受保护,它可能不会收敛到任何东西。
3。大型线性分类库:
这是支持逻辑回归和线性支持向量机的线性分类(线性分类器通过基于特征的线性组合值即特征值做出分类决策来实现此目标)。
求解器使用坐标下降(CD)算法,该算法通过沿坐标方向或坐标超平面连续执行近似最小化来解决优化问题。
O(N)
是ICML 2008大规模学习挑战赛的获胜者。它适用于自动参数选择(也称为L1正则化),建议您在具有高维数据集时使用(建议用于解决大规模分类问题)
缺点:
如果函数的水平曲线不平滑,它可能会卡在非平稳点(即非最优)。
也不能并行运行。
它无法学习真正的多项式(多类)模型;取而代之的是,优化问题以“一对多休息”的方式分解,因此针对所有类别训练了单独的二进制分类器。
侧面说明:根据Scikit文档:由于历史原因,默认情况下使用“ liblinear”求解器。
4。随机平均梯度:
SAG方法可优化有限数量的光滑凸函数的和。与随机梯度(SG)方法一样,SAG方法的迭代成本与总和中项的数量无关。但是,与黑盒SG方法相比,通过 结合以前的梯度值存储,SAG方法可获得更快的收敛速度 。
当样本数量和特征数量都很大时,它比大型数据集的求解器更快。
缺点:
它仅支持L2惩罚。
它的存储成本{{1}},对于大的N可能不切实际(因为它会记住大约所有梯度的最新计算值)。
5。传奇:
SAGA求解器是SAG的变体,它还支持非平滑的 penalty = l1 选项(即L1正则化)。因此,这是 稀疏 多项式逻辑回归的首选求解器,并且也适合 非常大 数据集。
侧面说明:根据Scikit文档:SAGA求解器通常是最佳选择。