前言

  • 上一节《机器学习之回归案例研究》中简单介绍了回归方程和过拟合。这一节详细介绍一下梯度下降法。

    learning rate

  • 学习率n与梯度下降的步长有关,若步长太短,则收敛数据太慢,若步长太长,则有可能错过错误率最低的点。如下图:

  • 图中黄色与绿色的步长便错过了最小的误差点。
  • 因此有一个简单的想法:为了不错过最小的误差点,同时还保持一定的收敛效率,我们可以对学习率做如下操作:
    • 在开始时,我们里目标很远,斜率比较陡的时候,设置学习率大一点;
    • 等快要接近目标时,便减少学习率,以免跳过目标点,因此可以将学习率n定义为迭代次数t的函数,如下图:

  • 但是又有一个问题,如果用这一个规则的学习率去求解所有回归问题问题的参数有点不太合理,能不能将参数w、b和学习率n的函数结合起来共同设置步长,这样处理不同问题的时候,更能适应相应的场合。

    Adagrad Gradient Descen

  • 将每个参数的学习率除以其先前导数的均方根。如图:



  • 图中gt为损失函数的导数,看着是不是很不厉害的样子,但是却有一个矛盾的地方,在前面我们讲在开始时,我们里目标很远,斜率比较陡的时候,设置学习率大一点,等快要接近目标时,便减少学习率,以免跳过目标点。
  • 可是在上图的公式中,gt很大时,步长的分母也很大,即步长很小,这与上面的叙述看起来矛盾,如图:

  • 这为什么呢?什么原因要这样设置呢?直观的原因时造成反差效果,在某次迭代中,gt可能会由某个很小的值变成一个特别大的值,或者由某个很大的值突然变成一个很小的值。如图:

  • 这还有一个疑问,大的梯度,真的需要大的步长吗?我们看一个图:

  • a点的梯度比c点的梯度小,但是很明显a点距最优点比c点距最优点要远,所以不一定就是大的梯度对应大的步长。
  • 假设上图中,a的横坐标为x0,曲线方程为y=ax^2 + bx + c。则a点到最优点的步长为:

  • 其中(2ax+b)为y的一阶导,2a为y的二阶导。因此我们有理由假设最优步长等于损失函数的一阶导除以二阶导,再乘以学习率n。但是对于很多比较复杂的损失函数来说,求二阶导的计算量非常大,因此我们用先前导数均方根的和近似二阶导,如图所示:

Stochastic Gradient Descen

  • Stochastic梯度下降法是每计算一次样本更新一次参数,而普通梯度下降法是计算所有的样本之后才更新参数。

Feature Scaling

  • 当样本的两个特征数值规模相差有点大时,为了节省训练时间,可以先对样本特征正则化,再进行训练。
  • 正则化的公式如下:

  • 其中xi为每个对应特征的样本值,mi为样本均值。