梯度下降法与牛顿迭代法 求拟合参数

我一直以为两者是相同的。。。原来SGD是一阶梯度,而牛顿迭代法是二阶梯度。

SGD(Stochastic Gradient Descent,随机梯度下降法)和New-ton Method(牛顿迭代法) 

梯度下降法,牛顿法,高斯-牛顿迭代法,附代码实现:https://blog.csdn.net/piaoxuezhong/article/details/60135153

梯度下降法与牛顿法的解释与对比:https://www.cnblogs.com/happylion/p/4172632.html

梯度下降法、牛顿迭代法、共轭梯度法:https://wenku.baidu.com/view/81ba70fc915f804d2a16c149.html

梯度下降和牛顿迭代:https://blog.csdn.net/qjzcy/article/details/51946304

SGD(Stochastic Gradient Descent,随机梯度下降法)中随机一词是指的样本随机选取,没有特别含义。

Stochastic gradient descent (often shortened to SGD), also known as incremental gradient descent, is a stochastic approximation of the gradient descent optimization and iterative method for minimizing an objective function that is written as a sum of differentiable functions. In other words, SGD tries to find minima or maxima by iteration.

SGD,又称为增量梯度递减,是一种随机梯度下降优化逼近以及使目标函数最小的迭代方法,目标函数可写为差分函数之和。换句话说,SGD努力通过迭代寻找最小或最大。

Both statistical estimation and machine learning consider the problem of minimizing an objective function that has the form of a sum:

统计估计和机器学习都考虑最小化目标函数的问题:

where the parameter w which minimizes Q(w) is to be estimated. Each summand function Qi is typically associated with the  i-th observation in the data set (used for training).

其中使Q(w)最小的参数w是需要估计的。每一个相加的sum函数Qi一般与数据集中的第i个观测(用于训练的数据)相关。

In classical statistics, sum-minimization problems arise in least squares and in maximum-likelihood estimation (for independent observations). The general class of estimators that arise as minimizers of sums are called M-estimators. However, in statistics, it has been long recognized that requiring even local minimization is too restrictive for some problems of maximum-likelihood estimation.[1] Therefore, contemporary statistical theorists often consider stationary points of the likelihood function (or zeros of its derivative, the score function, and other estimating equations).

在典型的统计学中,总和最小问题出现在最小二乘和最大似然估计(独立观测)中。通常的一类作为总和最小的估计者叫M-估计者。然而,在统计学中,一直以来认识到哪怕是要求局部最小对于最大似然估计也太严格了。因此,当代统计理论者通常考虑似然函数的平稳点(或导数为零的点,得分函数,和其他的估计等式)。

The sum-minimization problem also arises for empirical risk minimization. In this case,  Qi(w) is the value of the loss function at i-th example, and Q(w) is the empirical risk.

这类总和最小问题也出现在最小风险估计中。在这种例子中,Qi(w)是损失函数在第i个例子的值,而Q(w)是最小风险。

When used to minimize the above function, a standard (or "batch") gradient descent method would perform the following iterations :

当用于最小化上式时,一个标准的(或“包”)梯度下降方法将如下面的迭代进行:

(推导方法参加机器学习课程)

where η is a step size (sometimes called the learning rate in machine learning).

其中η是步长(有时在机器学习中称为学习率)。

In many cases, the summand functions have a simple form that enables inexpensive evaluations of the sum-function and the sum gradient. For example, in statistics, one-parameter exponential families allow economical function-evaluations and gradient-evaluations.

在很多情况下,被加函数有简单的形式,使不费时。

However, in other cases, evaluating the sum-gradient may require expensive evaluations of the gradients from all summand functions. When the training set is enormous and no simple formulas exist, evaluating the sums of gradients becomes very expensive, because evaluating the gradient requires evaluating all the summand functions' gradients. To economize on the computational cost at every iteration, stochastic gradient descent samples a subset of summand functions at every step. This is very effective in the case of large-scale machine learning problems.

Newton's method(牛顿迭代法)

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。

设r是  的根,选取  作为r的初始近似值,过点  做曲线  的切线L,L的方程为  ,求出L与x轴交点的横坐标  ,称x1为r的一次近似值。过点 做曲线  的切线,并求该切线与x轴交点的横坐标  ,称  为r的二次近似值。重复以上过程,得r的近似值序列,其中,  称为r的  次近似值,上式称为牛顿迭代公式。

用牛顿迭代法解非线性方程,是把非线性方程  线性化的一种近似方法。把  在点  的某邻域内展开成泰勒级数  ,取其线性部分(即泰勒展开的前两项),并令其等于0,即  ,以此作为非线性方程  的近似方程,若  ,则其解为  , 这样,得到牛顿迭代法的一个迭代关系式:  。
已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。
以上是关于求方程的根,那么求方程的参数呢?
设方程为Q(w)
那么怎么根据样本求w?Q(w,x)=y
迭代法求方程参数就两步:(1)找到搜索方向;(2)迭代的步长。应该先采集样本并标上标签y吧。
对泰勒公式上的导数再用一次泰勒公式则可以得到

为什么非得用二次泰勒公式而不用第一次的泰勒公式近似法呢(牛顿迭代用于求近似和求最优以及与泰勒公式的关系)?(函数为Loss函数,求Loss最小)Loss=y-Estimate(w,x)

方向一定要是使Loss最小的方向。也就是梯度方向,那么大小呢?步长。(梯度与导数的关系)

那么梯度下降法跟牛顿迭代法有什么不同呢?

梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

梯度:对于可微的数量场  ,以  为分量的向量场称为f的梯度或斜量。梯度下降法(gradient descent)是一个最优化算法,常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型。
顾名思义,梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)。
其迭代公式为  ,其中  代表梯度负方向,  表示梯度方向上的搜索步长。梯度方向我们可以通过对函数求导得到,步长的确定比较麻烦,太大了的话可能会发散,太小收敛速度又太慢。一般确定步长的方法是由线性搜索算法来确定,即把下一个点的坐标看做是ak+1的函数,然后求满足f(ak+1)的最小值的 即可。
因为一般情况下,梯度向量为0的话说明是到了一个极值点,此时梯度的幅值也为0.而采用梯度下降算法进行最优化求解时,算法迭代的终止条件是梯度向量的幅值接近0即可,可以设置个非常小的常数阈值。
举一个非常简单的例子,如求函数  的最小值。
利用梯度下降的方法解题步骤如下:
1、求梯度, 
2、向梯度相反的方向移动  ,如下
 ,其中,  为步长。如果步长足够小,则可以保证每一次迭代都在减小,但可能导致收敛太慢,如果步长太大,则不能保证每一次迭代都减少,也不能保证收敛。
3、循环迭代步骤2,直到  的值变化到使得  在两次迭代之间的差值足够小,比如0.00000001,也就是说,直到两次迭代计算出来的  基本没有变化,则说明此时  已经达到局部最小值了。
4、此时,输出  ,这个  就是使得函数  最小时的  的取值 。
Matlab代码:
%% 最速下降法图示
% 设置步长为0.1,f_change为改变前后的y值变化,仅设置了一个退出条件。
syms x;f=x^2;
step=0.1;x=2;k=0;         %设置步长,初始值,迭代记录数
f_change=x^2;             %初始化差值
f_current=x^2;            %计算当前函数值
ezplot(@(x,f)f-x.^2)       %画出函数图像
axis([-2,2,-0.2,3])       %固定坐标轴
hold on
while f_change>0.000000001                %设置条件,两次计算的值之差小于某个数,跳出循环
    x=x-step*2*x;                         %-2*x为梯度反方向,step为步长,!最速下降法!
    f_change = f_current - x^2;           %计算两次函数值之差
    f_current = x^2 ;                     %重新计算当前的函数值
    plot(x,f_current,'ro','markersize',7) %标记当前的位置
    drawnow;pause(0.2);
    k=k+1;
end
hold off
fprintf('在迭代%d次后找到函数最小值为%e,对应的x值为%e
',k,x^2,x)

  综上所述,梯度下降法与牛顿迭代法都属于迭代法,但是梯度下降法是一阶偏导,而牛顿迭代法是二阶微分而且有Hessian矩阵。两者各有优缺点。

原文地址:https://www.cnblogs.com/2008nmj/p/8857873.html