梯度下降公式推导

梯度下降

@(机器学习)

1.梯度

 在微积分里面,对多元函数的参数求∂的偏导数,把求得的各个参数的偏导数以向量的形式表达出来,就是梯度。比如函数f(x,y),分别对$x$,$y$求偏导数,求得得梯度向量就是$(\frac{∂f}{∂x}, \frac{∂f}{∂y})^T$或者$\nabla f(x_0, y_0)$,如果是3个参数得向量梯度,就是$(\frac{∂f}{∂x}, \frac{∂f}{∂y}, \frac{∂f}{∂z})^T$,依此类推。

 那么这个梯度向量求出来有什么意义呢?他得意义从几何上讲,就是函数变化最快的地方(这里要理解成三维立体,不是二维图形了)。具体来说,对于函数$f(x, y)$在点$(x_0, y_0)$,沿着梯度向量的方向就是$(\frac{∂f}{∂x_0}, \frac{∂f}{∂y_0})^T$的方向是$f(x, y)$增加最快的地方。或者说,沿着梯度的方向,更加容易找到函数的最大值,反过来说,沿着梯度相反的方向,也就是$(-\frac{∂f}{∂x_0}, \frac{∂f}{∂y_0})^T$的方向,梯度减小的最快,也就是更加容易找到函数的最小值。

2.梯度下降与梯度上升

 在机器学习算法中,在最小化损失函数时,可以通过梯度下降来一步步迭代求解,得到最小化损失函数,和模型参数值。反过来,如果我们要求解损失函数最大值,这时就需要通过梯度上升的方法来解决了。

 梯度下降法和梯度上升法时可以互相转化的。比如我们需要求解损失函数$f(\theta)$的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数$-f(\theta)$的最大值,这时梯度上升法就派上用场了。

 下面详细介绍梯度下降法。

3.梯度下降法算法详解

3.1梯度下降的直观解释

 首先来看梯度下降的一个直观解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每步走到一个位置的时候,求解当前位置的梯度,沿着梯度的方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置的梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们到不了山脚,而是到了某一个局部的山峰低处。

 从上面的解释可以看出,梯度下降不一定找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法就一定是全局最优解。
Alt text

3.2梯度下降的相关概念

 在详细了解梯度下降的算法之前,我们先看看相关的一些概念。

  • 步长(Learning rate):步长决定了梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。
  • 特征(feature):指的是样本中的输入部分,比如2个单特征的样本$(x^{(0)}, y^{(0)})$,$(x^{(1)}, y^{(1)})$,则第一个样本特征为$x^{(0)}$,第一个样本的输出为$y^{(0)}$。
  • 假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,极为$h_{\theta}(x)$。比如对于单个特征的m个样本$(x^{(i)}, y^{(i)}) (i=1,2,3,...m)$,可以采用的拟合函数如下:$h_{\theta}(x)=\theta _0 + \theta _1x$
  • 损失函数(loss function):为了评估模型的好坏,通常用损失函数度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本$(x^{(i)}, y^{(i)}) (i=1,2,3,...m)$,采用线性回归,损失函数为:$$J(\theta_0, \theta_1)=\sum_{i=1}^m(h_\theta(x_i)-y_i)^2$$其中$x_i$表示第$i$个样本特征,$y_i$表示第$i$个样本对应的输出,$h_\theta(x_i)$为假设函数。

3.3梯度下降的详细算法

 梯度下降的算法可以有代数法和矩阵法(也称向量法)两种表示,如果对矩阵分析不熟悉,则代数法更加容易理解。不过矩阵法更加的简洁,且由于使用了矩阵,实现逻辑更加一目了然。这里先介绍代数法,在介绍句阵法。

3.3.1梯度下降法的代数方式描述

  • 先决条件:确认优化模型的假设函数和损失函数。
    • 比如对于线性回归,假设函数表示为$h_\theta(x_1, x_2, ...x_n) = \theta_0+\theta_1x_1+...+\theta_nx_n$,其中$\theta_i(i=0,1,2,...n)$为模型参数,$x_i(i=0,1,2,...n)$为每个样本的$n$个特征值。这样,假设函数可以表示为:$$h_\theta(x_0, x_1,...x_n)=\sum_{i=0}^n\theta_ix_i$$ 因此损失函数可以表示为:$$J(\theta_0, \theta_1,...\theta_n)=\frac1{2m}\sum_{j=0}^m(h_\theta(x_0^{(j)}+x_1^{(j)}+x_2^{(j)},...x_n^{(j)})-y_j)^2$$
  • 算法相关参数初始化:主要是初始化$\theta_0, \theta_1,...\theta_n$,算法终止距离$\epsilon$以及步长$\alpha$。在没有任何先验知识的时候,普遍将所有的$\theta$初始化为0,将步长初始化为1,在调优的时候在优化。
  • 算法过程:
  1. 确定当前位置的损失函数的梯度,对于$\theta_i$,其梯度表达式如下:$$\frac ∂{∂ \theta_i}J(\theta_0,\theta_1,\theta_2,...\theta_n)$$
  2. 用步长乘以损失函数的梯度,得到当前位置的下降距离:$$\alpha \frac ∂{∂ \theta_i}J(\theta_0,\theta_1,\theta_2,...\theta_n)$$
  3. 确定是否所有的$\theta_i$,梯度下降的距离都小于$\epsilon$,如果小于$\epsilon$则算法终止,当前的$\theta^T$即为最终结果。
  4. 更新所有的$\theta$,具体算法如下:$$\theta_j=\theta_j-\alpha \frac∂{∂ \theta}J(\theta_0,\theta_1,\theta_0,...\theta_n)$$
    • 下面开始计算$\alpha \frac∂{∂ \theta}J(\theta_0,\theta_1,\theta_0,...\theta_n)$:
      $$J(\theta_0,\theta_1,\theta_0,...\theta_n)=\frac1{2m}\sum_{j=0}^m(h_\theta(x_0^{(j)}+x_1^{(j)}+x_2^{(j)},...x_n^{(j)})-y_j)^2$$
      $$\alpha \frac ∂{∂ \theta_i}J(\theta_0,\theta_1,\theta_2,...\theta_n)=\frac1{m}\sum_{j=0}^m(h_\theta(x_0^{(j)},x_1^{(j)},...x_n^{(j)})-y_i)x_i^{(j)}$$
      所以迭代公式如下:$$\theta_i=\theta_i-\alpha\frac1{m}\sum_{j=0}^m(h_\theta(x_0^{(j)},x_1^{(j)},...x_n^{(j)})-y_i)x_i^{(j)}$$
      从这个例子可以看出当前点的梯度方向是由所有样本共同决定的,下面第四节会讲到梯度下降法的变种,他们主要的区别就是对样本的采取方法不同,在当前这一节,我们采用的是所有的样本。

3.3.2梯度下降法的矩阵方式描述

  1. 先决条件:和3.3.1类似,需要确认优化模型的假设函数和损失函数。对于线性回归,假设函数 $h_\theta(x_0, x_1, x_2, ...x_n) = \theta_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n$的矩阵表达式为:$$h_\theta(x)=X\theta$$其中$h_\theta (X)$为$m×1$的向量,$\theta$表示$(n+1)×1$的向量。其中$m$表示样本数,$n+1$表示特征数。
    损失函数表达式为:
    $$J(\theta)=\frac{1}{2}(X\theta-Y)^T(X\theta-Y)$$
    其中Y是样本的输出向量,维度为$m×1$。

  2. 算法相关参数初始化:$\theta$向量可以初始化为默认值,或者调优后的值。算法终止距离$\epsilon$,步长$\alpha$和3.3.1比没有变化。
  3. 算法过程:
    1. 确定当前位置的损失函数,对于$\theta$向量,其梯度表达式如下:$$\frac{∂}{∂\theta}J(\theta)$$
    2. 用步长乘以损失函数的梯度,得到当前位置下降的距离,即$\alpha\frac{∂}{∂\theta}J(\theta)$。
    3. 确定$\theta$向量里面的每个值,梯度下降的距离都小于$\epsilon$则算法终止,当前$\theta$向量即为最终结果。否则进入步骤4。
    4. 更新$\theta$向量,其更新表达式如下,更新完毕后进入步骤1。$$\theta=\theta-\alpha\frac{∂}{∂\theta}J(\theta)$$

 用线性回归的例子来描述计算过程,描述前,我们首先来看矩阵求导两个公式 $\$:
$$\frac{∂}{∂X}XX^T=\frac{∂}{∂X}X^TX=2X$$
$$\frac{∂}{∂\theta}X\theta=X^T$$
 现在我们在来看我们的损失函数偏导数推导:
$$\frac ∂{∂x}J(\theta)=\frac{∂J(\theta)}{∂(X\theta-Y)}\frac{∂(X\theta-Y)}{∂\theta}=(X\theta-Y)X^T$$
 所以最终迭代公式为:$$\theta=\theta-\alpha(X\theta-Y)X^T$$

3.4梯度下降的算法调优

 在使用梯度下降时,需要进行调优,哪些地方需要进行调优呢?

  1. 算法的步长选择。在前面的算法描述中,我提取到步长为1,但是实际上的取值取决于数据样本,可以多取一些值,从大到小,分别进行算法,看看迭代效果(最终的AUC,或者Loss),如果损失函数在变小,说明取值有效,否则要增大步长。前面说了,步长太大,会导致迭代过快,甚至有可能错过最优解,步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次尝试才能得到一个较为优的值。
  2. 算法参数的初始值选择,初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定拥有最优解。由于有局部最优解的风险,需要多次用不同的初始值运行算法,记得损失函数最小的值,选择损失函数最小化的初值。
  3. 归一化,由于样本不同特征的取值范围不一样,可能导致迭代速度很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征$x$,求出它的期望$\overline{x}$和标准差$std(x)$,然后转化为:$$\frac{x-\overline{x}}{std(x)}$$
    这样特征的新期望为0,新方差为1,迭代次数可以大大加快。

4.梯度下降法大家族(BGD, SGD, MBGD)

4.1批量梯度下降法(Batch Gradient Descent)

 批量梯度下降法,是梯度下降法最常用的形式,具体的做法也就是在更新参数时使用所有的样本来更新,这个方法对应于前面3.3.1的线性回归的梯度下降法,也就是说3.3.1的梯度下降法就是批量梯度下降法。
$$\theta_i=\theta_i-\alpha\frac1{m}\sum_{j=0}^m(h_\theta(x_0^{(j)},x_1^{(j)},...x_n^{(j)})-y_i)x_i^{(j)}$$
由于我们有m个样本,这里求梯度的时候使用了所有的样本来训练数据。

4.2随机梯度下降法(Stochastic Gradient Descent)

 随机梯度下降法,其实和批量梯度下降法类似,区别在于求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度,对应的更新公式:
$$\theta_i=\theta_i-\alpha(h_\theta(x_0^{(j)},x_1^{(j)},...x_n^{(j)})-y_i)x_i^{(j)}$$

 随机梯度下降法,和4.1的批量梯度下降是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法仅仅使用一个样本决定梯度的方向,导致解很有可能不是最优。对于收敛速度来说,由于随机梯度下降一次去迭代一个样本,导致迭代方向变化很大,不能很快收敛到局部最优解。
 那么,有没有一个重用的办法能够结合两种算法的优缺点呢?这就是小批量(mini batch)梯度下降法。

4.3小批量梯度下降法(Mini-batch Gradient Descent)

 小批量梯度下降法就是批量梯度下降和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,$1 \leq q \leq m$,一般可以取$x=10$,当然根据样本的数量,可以调整$x$的值,对应的更新公式是:
$$\theta_i=\theta_i-\alpha\frac1{q}\sum_{j=t}^{t+q-1}(h_\theta(x_0^{(j)},x_1^{(j)},...x_n^{(j)})-y_i)x_i^{(j)}$$

猜你喜欢

转载自www.cnblogs.com/moving-paul/p/8989638.html