机器学习梯度下降算法

机器学习梯度下降算法

当模型和损失函数形式较为简单时,误差最小化问题的解可以直接用公式表达出来,这类解叫作解析解,例如文章机器学习线性回归与最小二乘法中讲解的算法就属于此类。然而,大多数机器学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失函数的值,这类解叫作数值解。在求解数值解的优化算法中,梯度下降算法被广泛使用。

梯度

在微积分里面,对多元函数的参数求偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})^T,简称\nabla f(x,y)。对于在点(x_0,y_0)的具体梯度向量就是(\frac{\partial f}{\partial {x_0}}, \frac{\partial f}{\partial {y_0}})^T或者\nabla f(x_0,y_0)

梯度向量从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y),在点(x_0,y_0),沿着梯度向量(\frac{\partial f}{\partial {x_0}}, \frac{\partial f}{\partial {y_0}})^T的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是-(\frac{\partial f}{\partial {x_0}}, \frac{\partial f}{\partial {y_0}})^T的方向,函数减少最快,也就是更加容易找到函数的最小值。

梯度下降

在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到模型参数值。

首先来看看梯度下降的一个直观解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是沿着当前最陡峭的方向向下走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们无法走到山脚,而是到了某一个局部的山谷。从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

下面我们从数学上解释梯度下降算法的计算过程和思想。

    \[\theta^1=\theta^0-\alpha \nabla J(\theta)\]

此公式的意义是:J是关于\theta的损失函数,我们当前所处的位置为\theta ^0点,要从这个点走到J的最小值点,也就是山底。首先我们要确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是\alpha,走完这段步长,就到达了\theta^1这个点。

\alpha在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过\alpha来控制每一步走的距离,\alpha不能太大也不能太小,太小可能迟迟走不到最低点,太大可能会错过最低点。

梯度下降算法的矩阵描述

我们以线性回归模型f(X) = X \theta为例,其中X为样本特征矩阵,\theta为模型参数向量。

损失函数为:

    \[J(\theta)=(X\theta-Y)^T(X\theta-Y)\]

J(θ)的梯度为:

    \[\nabla J(\theta)=X^T(X\theta-Y)\]

则θ的更新表达式为:

    \[\theta := \theta-\alpha X^T(X\theta-Y)\]

我们需要给\theta设定一个初始值,并给\alpha设定一个合适的值,按照上面的更新表达式迭代设定的次数,便能得到使J(\theta)最小化的\theta值。

类比下山的场景:给\theta设定的初始值代表着下山的起始位置,J(\theta)的梯度代表着山上当前点最陡峭的方向,\alpha代表着从山上当前点沿最陡峭的方向所走的距离,每一次迭代计算得到\theta则组成了下山的路径,当J(\theta)取得最小值时代表着走到了山脚,而此时\theta的值就是我们想要计算得到的最终结果了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注