梯度的概念¶
梯度是微积分中一个很重要的概念
-
在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率;
-
在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向;
这也就说明了为什么我们需要千方百计的求取梯度!我们需要到达山底,就需要在每一步观测到此时最陡峭的地方,梯度就恰巧告诉了我们这个方向。梯度的方向是函数在给定点上升最快的方向,那么梯度的反方向就是函数在给定点下降最快的方向,这正是我们所需要的。所以我们只要沿着梯度的反方向一直走,就能走到局部的最低点!
梯度下降举例¶
单变量函数的梯度下降
我们假设有一个单变量的函数 :J(θ)=θ2
函数的微分:J′(θ)=2θ
初始化,起点为:θ0=1
学习率:α=0.4
我们开始进行梯度下降的迭代计算过程:
(1)θ0=1(2)θ1=θ0−α∗J′(θ0)=1−0.4∗2=0.2(3)θ2=θ1−α∗J′(θ1)=0.04(4)θ3=0.008(5)θ4=0.0016
如图,经过四次的运算,也就是走了四步,基本就抵达了函数的最低点,也就是山底
多变量函数的梯度下降
我们假设有一个目标函数 :J(θ)=θ12+θ22
现在要通过梯度下降法计算这个函数的最小值。我们通过观察就能发现最小值其实就是 (0,0)点。但是接下 来,我们会从梯度下降算法开始一步步计算到这个最小值! 我们假设初始的起点为: θ0=(1,3)
初始的学习率为:α=0.1
函数的梯度为:ΔJ(θ)=<2θ1,2θ2>
进行多次迭代:
Θ0=(1,3)Θ1=Θ0−αΔJ(Θ)=(1,3)−0.1(2,6)=(0.8,2.4)Θ2=(0.8,2.4)−0.1(1.6,4.8)=(0.64,1.92)Θ3=(0.512,1.536)Θ4=(0.4096,1.2288)⋮Θ10=(0.10737418240000003,0.32212254720000005)⋮Θ50=(1.1417981541647683e−5,3.425394462494306e−5)⋮Θ100=(1.6296287810675902e−10,4.888886343202771e−10)
我们发现,已经基本靠近函数的最小值点
1.4 梯度下降(Gradient Descent)公式¶
θi+1=θi−α∂∂θiJ(θ)
- 1) α是什么含义?
α在梯度下降算法中被称作为 学习率 或者 步长 ,意味着我们可以通过α来控制每一步走的距离,控制参数不要走太快,错过了使损失函数取最小值的点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以α的选择在梯度下降法中往往是很重要的!α不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点!
- 2) 为什么梯度要乘以一个负号?
梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号
我们通过两个图更好理解梯度下降的过程
所以有了梯度下降这样一个优化算法,回归就有了"自动学习"的能力
-
优化动态图演示¶
2. 梯度下降优化原理¶
2.1梯度下降的相关概念复习¶
在详细了解梯度下降的算法之前,我们先复习相关的一些概念。
步长(Learning rate):
- 步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。 用前面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。
特征(feature):
- 指的是样本中输入部分,比如2个单特征的样本(x(0),y(0)),(x(1),y(1)),则第一个样本特征为x(0),第一个样本输出为y(0)。
假设函数(hypothesis function):
- 在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)。 比如对于单个特征的m个样本(x(i),y(i))(i=1,2,...m),可以采用拟合函数如下: hθ(x)=θ0+θ1x。
损失函数(loss function):
- 为了评估模型拟合的好坏, 通常用损失函数来度量拟合的程度。 损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。
- 在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本(xi,yi)(i=1,2,...m),采用线性回归,损失函数为:
J(θ0,θ1)=∑i=1m(hθ(xi)−yi)2
2.2 梯度下降法的推导流程¶
1) 先决条件: 确认优化模型的假设函数和损失函数。
比如对于线性回归,假设函数表示为 hθ(x1,x2,...,xn)=θ0+θ1x1+...+θnxn, 其中θi(i=0,1,2...n)为模型参数,xi(i=0,1,2...n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征x0=1 ,这样
hθ(x0,x1,⋯,xn)=∑i=0nθixi
同样是线性回归,对应于上面的假设函数,损失函数为:
J(θ0,θ1,⋯,θn)=12m∑j=0m(hθ(x0(j),x1(j),⋯,xn(j))−yj)2
2) 算法相关参数初始化,
主要是初始化θ0,θ1...,θn,算法终止距离ε以及步长α 。在没有任何先验知识的时候,可以将所有的θ 初始化为0, 将步长初始化为1。在调优的时候再 优化。
3) 算法过程:
3.1) 确定当前位置的损失函数的梯度,对于θi,其梯度表达式如下:
∂∂θiJ(θ0,θ1,⋯,θn)
3.2) 用步长乘以损失函数的梯度,得到当前位置下降的距离,即
α∂∂θiJ(θ0,θ1,⋯,θn)
对应于前面登山例子中的某一步。
3.3) 确定是否所有的θi,梯度下降的距离都小于ε,如果小于ε则算法终止,当前所有的θi(i=0,1,...n)即为最终结果。否则进入步骤4.
4)更新所有的θ ,对于θi,其更新表达式如下。更新完毕后继续转入步骤1。
θi+1=θi−α1m∑j=0m(hθ(x0(j),x1(j),⋯,xn(j))−yj)xi(j)
下面用线性回归的例子来具体描述梯度下降。假设我们的样本是:
(x1(0),x2(0),⋯,xn(0),y0),(x1(1),x2(1),⋯,xn(1),y1),(x1(m),x2(m),⋯,xn(m),ym)
损失函数如前面先决条件所述:
J(θ0,θ1,⋯,θn)=12m∑j=0m(hθ(x1(j),x2(j),⋯,xn(j))−yj)2
则在算法过程步骤1中对于θi 的偏导数计算如下:
∂∂θiJ(θ0,θ1,⋯,θn)=1m∑j=0m(hθ(x1(j),x2(j),⋯,xn(j))−yj)xi(j)
由于样本中没有x0上式中令所有的x0j为1.
步骤4中θi的更新表达式如下:
θi+1=θi−α1m∑j=0m(hθ(x0(j),x1(j),⋯,xn(j))−yj)xi(j)
从这个例子可以看出当前点的梯度方向是由所有的样本决定的,加1m 是为了好理解。由于步长也为常数,他们的乘积也为常数,所以这里α1m 可以用一个常数表示。
在下一节中,会介绍梯度下降法的变种,他们主要的区别是 对样本的采用方法不同。这里我们采用的是用所有样本