25-随机梯度下降法

随机梯度下降法

1. 概念

  我们之前学习的梯度下降法一直是要我们最优化的那个损失函数相应在某一点的 θ θ θ 那个梯度值准确的求出来。
在这里插入图片描述
  那么通过推导的这个公式可以看出来,要想求出这个准确的梯度来,在这个式子中每一项都要对所有的样本( m m m 个)进行一下计算,前面是有一个求和计算的,那么这样的一个下降法通常又叫做批量梯度下降法(Batch Gradient Descent)。也就是说,每一次计算的过程都要将样本中所有的信息批量的进行计算,但是这显然就带来了一个问题,如果我们的 m m m 非常大,也就是我们的样本量非常大的话,那么计算这个梯度本身也就是非常耗时的。那么基于这个问题,相应的,有没有一些改进的方案呢?

  其实非常容易,由于每一个式子中,都对 m m m 个样本进行了计算,我们为了取平均,还除了一个 m m m ,所以一个自然衍生的想法就是我们可不可以每一次只对其中一个样本进行计算呢?基于这样的想法,我们就可以将上述式子变成:
在这里插入图片描述
  在这里,我们把求和符号去掉,同时对于这个 i i i 来说,我们每次都取固定的一个 i i i,相应的,我们在括号外就不需要再除以 m m m 了,直接乘以 2 就好了。当然了,我们也可以将上面的式子进行向量化:
在这里插入图片描述
  这个向量化的方式和之前是一样的,只不过此时对于我们的 X b Xb Xb 来说,我们每次只取 X b Xb Xb 的一行进行计算就好了,我们使用这样一个式子来当作我们搜索的方向,是不是可以呢?这里需要特别注意一点,这里说的是搜索的方向,而不是梯度的方向,因为这个式子已经不是损失函数的梯度了,只不过我们观察梯度这个式子设想一下,每一次我们都随机取出一个 i i i,对于随机取的这个 i i i,然后用下列式子进行计算:
在这里插入图片描述
  通过这个式子计算得到的也是一个向量,也可以表达一个方向,我们向这个方向进行搜索,不停的迭代,能不能得到我们损失函数的最小值呢?那么这样的一个思想它的实现思路叫做随机梯度下降法(Stochastic Gradient Descent)

在这里插入图片描述
  随机梯度下降法的搜索过程如上图所示。可以回忆一下,如果是使用梯度下降法,我们从外面的一点开始搜索,将会坚定不移的朝着一个固定的方向,也就是我们整个损失函数的最小值的那个方向向前移动。但是随机下降梯度法由于不能保证我们每次得到的方向一定是我们损失函数减小的方向,更不能保证一定就是减小速度最快的那个方向,所以我们的搜索路径就会形成这样的一种路径,这就是随机的特点,它具有不可预知性。不过实验结论告诉我们,即使如此,我们通过随机梯度下降法通常依然能够差不多的来到我们整个损失函数的最小值点附近,虽然它可能不会像梯度下降法那样一定来到最小值点。但是当我们的 m m m 非常大的话,很多时候我们可能更愿意使用随机梯度下降法,用一定的精度换取一定的时间

  而且在具体实现的时候,有一个非常重要的技巧。在我们随机梯度下降法的过程中,这个学习率( η η η)的取值变得很重要,这是因为在我们随机梯度下降法的过程中如果我们的学习率一直取一个固定值的话,很有可能在一定程度上我们随机梯度下降法已经来到这个最小值中心左右的位置了,但是由于这个随机的过程不够好,我们的 η η η 又是一个固定值,慢慢的又跳出了这个最小值所在的位置,所以在实际中我们希望在随机梯度下降法中我们的学习率是逐渐递减的,那么我们就可以设计一个函数来让我们的学习率( η η η )随着梯度下降法循环次数的增加,相应的 η η η 值越来越小,你可能已经想到了,最简单的方法就是使用倒数的形式(i_iters 表示循环次数):
在这里插入图片描述
  不过,这样的一个实现有的时候会有一些问题,当我们的循环次数比较少的时候,我们的 η 下降得太快了。比如说,i_iters 从 1 变到 2,我们的 η η η 一下就下降了 50%,如果 i_iters 从 10000 增长到 10001 的话,我们的 η η η 才下降了万分之一,那么前后 η η η 值下降的比率相差太大了,所以通常在具体实现的时候,我们在分母上添加一个常数 b b b,后面我通常给 b b b 的取值为 50:
在这里插入图片描述
  在分子的位置,如果我们固定取 1 的话,有时候可能也达不到我们想要的效果,所以我们让我们的分子也取一个常数 a a a
在这里插入图片描述
  所以,我们可以将 a a a b b b 看成随机梯度下降法对应的两个超参数,不过在之后的学习中,不对这两个超参数做调整,我们选用一个经验上比较好的值, a a a = 5, b b b = 50。但不管怎样,在随机梯度下降法中为了得到比较好的收敛结果,我们的学习率应该随着我们循环的次数的增加逐渐递减的。

  事实上,这种逐渐递减的思想是模拟退火的思想。所谓的模拟退火的思想,其实就是模拟我们在自然界的情况下,比如说,打造钢铁需要用火炼,在这个过程中,火炼的温度是从高逐渐到低冷却的,也就是所谓的退火的过程,那么这个冷却的函数是和时间 t t t 相关的。所以,有的时候,我们也将 η η η 的值写做:
在这里插入图片描述


2. 实现

  我相信我已经将随机梯度下降的原理介绍清楚了,下面我们就来具体代码实现一下。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


  我在下一篇博客将会对我们的线性回归算法在里面封装我们的随机梯度下降法对应的训练的过程,以及在 s k l e a r n sklearn sklearn 中使用随机梯度下降法。

  具体代码见 25 随机梯度下降法.ipynb

猜你喜欢

转载自blog.csdn.net/qq_41033011/article/details/109099363
今日推荐