1、梯度

我们对一个多元函数求偏导,会得到多个偏导函数。这些导函数组成的向量,就是梯度。一元函数的梯度可以理解为就是它的导数。梯度就是对一个多元函数的未知数求偏导,得到的偏导函数构成的向量就叫梯度。

我们求解一元函数的时候有一种办法是对函数求导得到导函数,令导函数为零得到这个函数的解析解。那我们可以理解为求解一元函数时利用让一元函数的梯度变为0的时候,梯度所在的位置就是函数的最优解。

梯度中元素(导函数)的个数的个数同未知数的个数是对应,每一个未知数都可以像求解一元一次函数一样,通过它所对应的梯度求得最优解。其实求解多元函数和一元函数的道理是一样的,只不过函数是一元的时候,梯度中只有一个导函数,函数时多元的时候,梯度中有多个导函数。当我们把梯度中的所有偏导函数都变为0的时候,就可以找到每个未知数的对应解。

 

2、梯度下降

梯度下降就是让梯度中所有偏导函数都下降到最低点(0)的过程。

 梯度下降中的下降,意思是让函数的未知数随着梯度的方向运动。什么是梯度的方向呢?把这一点带入到梯度函数中,结果为正,那我们就把这一点的值变小一些,同时就是让梯度变小些;当这一点带入梯度函数中的结果为负的时候,就给这一点的值增大一些。总之,所有参数的梯度为0就可以得到最优解。

梯度下降又叫做批量梯度下降,简称BGD。

梯度下降求二元函数极值 梯度下降 求导_梯度下降

函数在点或的移动过程如何用公式来表达呢?

梯度下降求二元函数极值 梯度下降 求导_数据_02

梯度下降的公式,它背后的理论依据是泰勒展开式。

  

3、学习率

让点沿着梯度方向下降慢慢求得最优解的过程我们叫做学习,学习率就是用来限制他每次学习别太过"用功"的。

梯度下降求二元函数极值 梯度下降 求导_数据_03

根据参数更新的公式:

梯度下降求二元函数极值 梯度下降 求导_数据_02

可以知道,模型每次下降都是减去梯度的值,当这个梯度值过大的时候,点下降的step就过大了,一次性迈过了最低点,导致函数无法找到最优解。学习率就是来限制这种情况的。我们让梯度乘以一个很小的数,虽然增加了它到达最低点的step数,但是可以让图二这种情况发生概率降低。

 

4、随机梯度下降SGD

批量梯度下降是,求出一个维度中所有的数据,取个平均来当做每一次梯度下降的step。这样做虽然准确,但是每次要计算一个维度的所有数据的梯度,花费资源较大。所以才有了随机梯度下降的思想:每次只随机取一个维度中的一条数据求梯度,来当做这个维度梯度下降的step。公式如下:

梯度下降求二元函数极值 梯度下降 求导_数据_05

可以看出,随机梯度下降和梯度下降公式的区别就是,里边的x由矩阵x变成了x的分量

梯度下降求二元函数极值 梯度下降 求导_最优解_06

为了更好的让大家理解梯度下降和随机梯度下降的区别,看下图:

梯度下降求二元函数极值 梯度下降 求导_梯度下降求二元函数极值_07

BGD总是综合所有数据的梯度,取到的下降至一直很平滑,SGD随机抽取一条数据作为参数,步子很不稳定。但是最终都可以到达函数的最优解位置。虽然看起来SGD比BGD的误差要大一些,但是SGD随着迭代次数的增加,误差会越来越小。

最后,SGD因为每次只随机抽取一条数据来做梯度下降,计算代价比SGD小的不是一点半点。所有后边无论机器学习还是深度学习,对SGD的应用是非常非常广泛的。

在SGD和BGD中间,还有一个集合了两种下降法的有点的办法:mini-bach-GD,你猜一猜他是啥? 对了,是随机抽取小批量数据来做下降,但是用的并不多。