3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

引言:

我们根据高数中所学的梯度定义知道,二元函数中梯度方向是f(x,y)增长最快的方向,注意:这里我们的f(x,y)是凸函数,我们尝试可以从这里去理解。

1)梯度下降算法

接着上节课讲的,我们昨天先把一元函数(一维)的“下降”介绍了一下。那么同样的,二元函数也可以类比用这种方法,趋向于极值。例图如下:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

这里,我们想让c变小,这也就意味着,我们需要让C的变化量3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法一直小于0。我们从微积分出发,C的变化量如下式:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

然后我们将其自变量向量化,得到如下:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

再将偏导数向量化,得到如下:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

那么公式(7),就变成了:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

因为这里我们只能对deltaV进行操作,所以这里我们将其设为:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

这里伊塔是学习率,那么,我们可以惊喜的看到公式9中的deltaC是负数了,因为如下:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

显然,只要我们不断的对deltv更新,那么我们每次得到的deltaC都是负数,那么C是不断减小的,直到达到极值

哈哈,最难理解的完成了,撒花,MUA。

这里,我们根据梯度更新准则可以引出下面的公式:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

这里的wk和bl分别趋向c(w,b)的最小值方向,然后我们反复更新deltaV直到得到二元函数(代价函数)的最小值

总结一下:

我们其实要做的工作就是对w和b,一直重复求偏导

这里要注意几点:

  • 我们得到结果可能是局部最优,因为我们找到的是极值。
  • 目标函数必须是凸函数。
  • 学习率(learning rate)自动减小。参见一元函数图像,导数绝对值总是减小的。

但实际上梯度下降不是最完美的,有几个事导致错误,让我们无法得到全局最小值,这个后面再说。

2)随机梯度下降算法

我们现在已经解决了怎么减小C函数值的方法,只要求偏导就可以了。但是这里还有一个问题,我们现在回顾一下代价函数。这个cost是平均cost值。这就意味着我们需要对每一个x进行求梯度值(偏导),这个计算量就很大了。为了解决这个问题,就提出了随机梯度下降算法。

其核心思想就是:在大的数据集中取一个随机小的样本,对该样本进行求梯度。这里的前提条件是:我们默认为小样本所得到的梯度均值是和数据集的样本数据梯度均值是差不多。如下:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

这样我们在数据集中,先随机选取样本,而后对其训练输入,我们得到的梯度如下:

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法

然后再选取另一组小样本数据训练,直到我们把数据集中所有数据训练完毕为止。这样我们完成了一个迭代期(epoch)。

希望有志同道合的小伙伴关注我的公众平台,欢迎您的批评指正,共同交流进步。

3.神经网络与深度学习(二)—梯度下降算法与随机梯度下降算法