白话梯度下降法

来源:互联网 发布:python ssh 远程执行 编辑:程序博客网 时间:2024/04/29 23:15

https://closure.blog.ustc.edu.cn/?p=19


梯度下降法作为一种最优化算法,通常也称最速下降法,这种算法算得上机器学习里面求解各式model的神器,理解并灵活应用对model的求解具有重要意义。


一、梯度

首先介绍一下梯度的概念

1. 二元函数梯度定义 设在区域内具有一阶连续导数,点,则向量

称为在点的梯度,记作,即

2. 二元函数梯度与方向导数的关系

在点可微分,是与方向同向的单位向量,则

其中                  

时,方向导数取得最大值,这个最大值就是梯度的模

由上知:函数在一点的梯度是个向量,它的方向是函数在这点的方向导数取得最大值的方向,它的模等于方向导数的最大值

在几何上表示一个曲面这曲面被平面是常数)所截得曲线的方程为面上的投影是一条平面曲线,它在平面直角坐标系中的方程为,对上一切点,已给函数的函数值都是,称的等值线.

不同时为零,则等值线上任一点处的一个单位法向量为

这表明的方向与等值线上这点的一个法线方向相同.

而沿这个方向的方向导数就等于于是

这一关系式表明函数在一点的梯度方向等值线在这点的一个法线方向相同,它的指向为从数值较低的等值线指向数值较高的等值线.梯度的模就等于函数在这个法线方向的方向导数



二、梯度下降法

1、值问题——求导解法:

在理解梯度下降法之前,我们先来简单回顾下高中数学里面的极值问题:给定一个方程f(k),求解该方程的为极小值时,k的取值是多少?其中:

f(k) = {k^2} - 4k

按照高中的思路,我们对f(k)求导,然后令导数为0,求解的k值即为所求,如下所示:

\begin{array}{l}{f^'}\left( k \right) = \frac{{\partial f\left( k \right)}}{{\partial k}} = 2k - 4 = 0\\\Rightarrow k = 2\\\end{array}

所以,当f(k)取极小值时,k=2,如图1所示:

图1

2、极值问题——迭代与梯度下降法求解

在复杂的实际问题中,有时求导解法很难计算;迭代法通过从一个初始估计出发寻找一系列近似解来解决数学问题的过程,其一系列近似解会收敛到问题的精确解。其基本形式如下所示,其中a为学习速率:

{k_{t + 1}} = {k_t} - \alpha �\times g\left( {{k_t}} \right)

我们以第一部分的极值问题为例,f(k)最小时,k等于2. 假设初始化k0=0,如何一步步迭代让kt趋近最优解2?

图2

主观上分析,我们可知,要让k向最优值逼近,g(kt)要满足两个条件:

(1) g(kt)要能使k向最优值方向逼近;

(2) 当kt达到最优解的时候,g(kt)要等于0。

对于第一点很好理解,第二点可能有点迷糊,我们简单分析下:当kt达到最优解的时候,我们期望下一步迭代不会跑出最优解之外,即kt+1要等于kt,即:

{k_{t + 1}} = {k_t} \Rightarrow \alpha �\times g\left( {{k_t}} \right) = 0 \Rightarrow g\left( {{k_t}} \right) = 0

下面的核心问题:即是寻找一个g(kt)满足上述两个要求。我们令g(kt)为f(k)的导数,即g(k)=2k-4看其是否满足(学习速率为0.3):

(1)当k0=0时:

{k_1} = {k_0} - 0.3 \times g\left( {{k_0}} \right) = �- 0 - 0.3 \times \left( { - 4} \right) = 1.2

(2)当k1=1.2时:

{k_2} = {k_1} - 0.3 \times g\left( {{k_1}} \right) = 1.2 - 0.3 \times \left( { - 1.6} \right) = 1.68

(3)当k2=1.68时:

{k_3} = {k_2} - 0.3 \times g\left( {{k_2}} \right) = 1.68 - 0.3 \times \left( { - 0.64} \right) = 1.872

图3

我们发现:随着迭代过程的不断进行,g(kt)可以使k向最优值逼近,且当k离最优值越近时,g(kt)的绝对值越来越小,当达到最优值的时候,g(kt)等于0,满足条件。

这里有个问题,读者可能会有一些疑问:学习速率a的取值为什么是0.3?实际上学习速率a可以取任意0到1之间的小数, 但是不同的取值对迭代的过程有不同的影响:

(1)当a取值较大时,即梯度下降迭代的步长较大,梯度下降迭代过程较快,可以快速迭代到最优解附近,但是可能一直在最优解附近徘徊,无法计算出最优解;

(2)当a取值较小时,即梯度下降迭代的步长较小,梯度下降迭代过程较慢,但是其迭代出的解精度相对(1)更高。

具体的不同的实际问题可能需要不同的学习速率的取值。 

没错,上述的迭代算法就是梯度下降法的过程。现在我们更加形式化的给出梯度下降法的定义:

\begin{array}{l}{K^*} = \arg \min \left( {F\left( K \right)} \right) \\\Rightarrow {K_{t + 1}} = {K_t} - \alpha �\times \frac{{\partial F\left( K \right)}}{{\partial K}} \\\end{array}

直白理解就是:求一个函数F(K)最小值所满足的参数K,我们用梯度下降法计算时,参数K按照梯度的方向(导数)不断迭代。

总结:

梯度学习作为一种求解最优参数的迭代算法,其可以广泛应用于机器学习各式model参数的求解中。在机器学习中,我们定义model的误差函数,求解model参数可以转化为求解误差函数最小值所满足的参数,这样即可以把model的求解转化为梯度下降法的求解。后面,我将详细描述梯度下降法在各式机器学习model中的应用。   


这篇文章转自Closure  原文地址:https://closure.blog.ustc.edu.cn/?p=19


    0 0