目录
1.梯度下降的定义
梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解无约束优化问题,如机器学习算法的模型参数,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。
如下面的二次函数,如何求得它的最值?
通常的做法是先求导,然后令
,求得x=0,于是在x=0就是原函数的最小值(即最优解)。但是计算机不是人,在没有给它具体规则时,它就是一台冷冰冰的机器,什么都不懂。
的图像:
我们知道:导数为非负时,原函数是递增的;导数为非时原函数是递减的。
现在,我们看下计算机是怎么工作的呢?
1、随机一个变量x,假如加入x=10, ,原函数递增且f(10)=100
2、取一个比x小的数x1=x-1,,原函数递增且f(9)=81
3、取一个比x1小的数x2=x1-1, ,原函数递增且f(8)=64
……
n、取xn=0,,原函数递增且f(0)=0
n+1、取xn+1 =-1;,原函数递减且f(-1)=1
在每一次计算中,同时比较f(x)和上一次的值,如果小于上一个值,继续往下计算,如果大于上一个值,证明已经获得局部最优值,可以停止计算。其中x每次减少的值在实际中可以通过自动学习获取得到;有两种方法可以作为计算结束的条件,指定循环周期或比较f(x)不再减少。
这就是梯度学习的简单解释,那么梯度的真正原理是什么呢?
2.梯度下降学习的原理
梯度下降要解决的问题有两个:
- 变量往哪个方向改变,损失函数会下降得最快?
- 变量改变多大,才使损失函数下降明显,最快地使目标函数达到最优值,且不会错过了最优值?
2.1 微分
微分的意义通常有两个:
1)在函数图像中,表示某点的切线斜率
2)函数的变化率
比如,单变量的微分:
多变量的微分,即对每个变量的微分:
2.2梯度
梯度就是对损失函数的各个变量进行微分后的向量,如:
损失函数:
各个变量的微分:
梯度表示:
可以看出,在单变量函数中,梯度就是函数的微分;而在多变量函数中,梯度是一个向量,这个向量各项值是各个变量的微分值。因为向量有方向,这个方向代表的就是函数在给定点上升最快的方向。同样在梯度前面加负号,就表示这个方向是函数给定点下降最快的方向。
于是,就解决了第一个问题:变量往哪个方向改变,损失函数会下降得最快?
下面看变量 的变化情况,假如
表示变量
所在的位置为
那么第
位置可以表示为:
即现在的位置时 ,那么函数
从这个点走到最优值那个点,那么沿着梯度的反方向,走一步的步长。也就是α ,在梯度下降学习中成为学习率,它不能太大也不能太小;太大了可能错误最优值,太小了,可能计算太慢。
于是,我就解决了第二个问题:变量改变多大,才使损失函数下降明显,最快地使目标函数达到最优值,且不会错过了最优值?
回到 的例子
微分:
假如我们设置学习率α=0.2 ,这个可以随意设置。
梯度下降的计算公式为:
那么梯度下降迭代计算的过程如下:
我们看一个多变量的例子:
假如:
3.批量随机下降
使用整个数据集(the complete dataset)去计算代价函数的梯度。即每次使用全部数据计算梯度然后更新参数,批量梯度下降法会很慢,并且很难处理不能载入内存的数据集。
计算步骤:
1)从硬盘读取全部数据到内存中;
2)每次一次计算完求和后,就进行参数更新;
3) 然后重复上面每一步;
4.随机批量下降
批量梯度下降法计算较慢,收敛时间长。随机梯度下降法达到更快的计算,收敛时间更短。随机梯度下降法的第一步是随机化整个数据集,在每次迭代仅选择一个训练样本去计算代价函数的梯度,然后更新参数。即使是大规模数据集,随机梯度下降法也会很快收敛。随机梯度下降法得到结果的准确性可能不会是最好的,但是计算结果的速度很快。计算步骤:
1)随机初始化参数;
2) 第一步:挑选第一个训练样本并更新参数;
3. 第二步:选第二个训练样本,继续更新参数;
4. 然后进行第三步…直到第n步;
5. 直到达到全局最小值