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