梯度下降算法详解( 二 )

梯度下降算法详解

文章插图
 
令:
梯度下降算法详解

文章插图
 
这是一个自变量是α的函数,我们将其命名为方向导数,其表明随着α的不同,方向不同,函数的变化率不同 。
至此,我们推出了,方向导数的概念,还记得我们的梯度下降算法的第二步是什么吗?
”找到相对于该位置而言下降最快的方向“
而我们的方向导数,本身代表的就是函数变化率与方向的关系,也就是说我们需要利用方向导数,找到使得函数变化率最大的方向
那么,问题来了,在哪一个方向上变化率最大呢?
寻找函数变化率最大的方向-梯度
我们可以这样改写,令:
梯度下降算法详解

文章插图
 
则:
梯度下降算法详解

文章插图
 
θ是两个向量的夹角
显然,当θ=0时,取得最大方向导数,也就说随着α的改变,当两个向量A和I是平行的时候,取得最大方向导数,而此时I的方向就是下式的方向:
梯度下降算法详解

文章插图
 
我们把上式称之为梯度,所以梯度方向是函数变化率最大的方向,更本质的说是函数增长最快的方向
所以,当我们需要最小化损失函数时,只需要使损失函数沿着负梯度前行,就能使损失函数最快下降 。
更高元函数
二元函数的推导结论同样可作用于更高元的函数 。
所以,高元函数在某点的梯度就是对每一个自变量求偏导,组成的一个向量,在该点的取值,该向量的方向就是函数在该点处增长最快的方向,显然,其负方向就是函数减少最快的方向
以下面的函数举个例子,这是一个有n+1个自变量的函数,自变量是θ:
梯度下降算法详解

文章插图
 
首先呢,随机化一个我们梯度下降的初始位置,全部为0吧,当然在神经网络中可不能如此随意:
梯度下降算法详解

文章插图
 
计算梯度,对每一个自变量求偏导:
梯度下降算法详解

文章插图
 
将初始化的值0,代入上式梯度,就可以得到一个具体的向量,为什么是一个具体的向量呢?这个你要自己想想了
而该向量的方向就是函数在该点增长最快的方向
那么,显然,我们需要往其负方向走一段距离,可是,如何往负方向走呢?其实一样的道理,该负方向同样将其分解到各个自变量的维度上,即其更新过程可写成:
梯度下降算法详解

文章插图
 
式中的减号表示往梯度的负方向改变
а为学习率,是一个大于0的数,它能控制沿着该方向走多长一段距离,不是步长
什么才是真正的步长?
一个式子说明足以,将当前位置θ代入下式,就是在该点处梯度下降的步长:
梯度下降算法详解

文章插图
 
所以步长是一个有方向和模长的矢量,当然也是符合我们直观上的理解的,你总要确定往哪个方向走以及步子迈多大 。
应用:线性回归的梯度下降解法首先,我们给出线性回归的损失函数,为了方便,不带正则项:
梯度下降算法详解

文章插图
 
其中:
梯度下降算法详解

文章插图
 

梯度下降算法详解

文章插图
 
其更新过程可写成:
梯度下降算法详解

文章插图
 
具体的梯度下降流程:
第一步:先随便假设一组θ,你要是喜欢可以全部取0
第二步循环迭代:
第一次迭代:
梯度下降算法详解

文章插图
 

梯度下降算法详解

文章插图
 
.......
梯度下降算法详解

文章插图
 


推荐阅读