李宏毅机器学习笔记2--梯度下降

课程的第二节讲的是线性回归中使用梯度下降时需要注意的点。

Tip 1: Tuning your learning rates

在这里插入图片描述

从上图也可以看出来,学习率对于在gradient descent时的影响还是蛮大的,所以在迭代过程中最理想的学习率可以在距离global minima远的地方大一些距离近的时候小一些,遇到local minima的时候可以有动量去跳过去……

Adgrad

课程中首先介绍了Adgrad,引入Adgrad后公式变为:
w t + 1 ← w t − η ∑ i = 0 t ( g i ) 2 g t w^{t+1} \leftarrow w^t - \frac{\eta}{\sqrt{\sum_{i=0}^t (g^i)^2}} g^t wt+1wti=0t(gi)2 ηgt

为什么要在学习率中引入均方根和呢?

引入想要解决的问题是不同参数上梯度的“陡峭程度”是不同的,如果使用相同的learning rate可能会使得不同参数迭代快慢不同,这会使得整体迭代效率变低(红色路径为现在,黑色为理想):在这里插入图片描述

然后如何解决呢?首先想到的解决方法便是使迭代速度快的稍慢些,实现这一方法最简单的便是除以表示迭代速度快慢的二阶导数来控制,如下图:
在这里插入图片描述
但是随之而来的问题是,上图中可以求解二阶导数然后作为分母,但是在实际中很多模型是十分复杂的,很难去求解二阶导数,这时候该怎么办呢?在这里插入图片描述
Adgrad想到利用一阶导数的平方之和开根号,为什么呢?
从上面PPT可以看出来平方和的大小也是可以间接的反应一阶导数的“陡峭程度”。

Adam

Adgrad有两个问题:

  1. 因为分母使用累加,梯度变化明显的点对于之后的迭代影响会一直很大,但我们知道这是不合理的,一个一阶导比较大的点和距离他比较远的点之间的关联并不大;
  2. 因为存在local minima,理想的迭代算法是可以近可能地跨过local minima。

针对这两个问题,Adam算法进行了相应的优化,伪代码见下:在这里插入图片描述
其中针对第一个问题的优化是: m t ← β 1 ⋅ m t − 1 + ( 1 − β 1 ) ⋅ g t m_t \leftarrow \beta_1 \cdot m_{t-1} + (1-\beta_1)\cdot g_t mtβ1mt1+(1β1)gt ,乘以一个小于1的系数后才进行累加,这样保证了其对于后续运算的影响是逐渐递减的。
针对第二个问题的优化是: v t ← β 2 ⋅ v t − 1 + ( 1 − β 2 ) ⋅ g t v_t \leftarrow \beta_2\cdot v_{t-1}+(1-\beta_2)\cdot g_t vtβ2vt1+(1β2)gt,这里其实是引入了动量概念,使得在到达local minima时分子并不会迅速降为零,有了跳出local minima的可能。

Adam算法比较成熟,在大多数场合也是很有效的,所以课程中李老师推荐训练模型时优先考虑使用Adam算法进行迭代。

Tip2: Stochastic Gradient Descent

在之前的训练过程中,是使用所有的样本集进行训练,这个过程比较慢,所以李老师在课程中建议使用Stochastic Gradient Descent来进行训练:在这里插入图片描述
简单说这就是对每一个样本求得Loss Function后直接进行参数更新,而不是传统的计算全部Loss Function之后累加求解,我记得现在使用更多的是将样本集分割为几份,然后每一份计算Loss Function后更新参数。

Tip3: Feature Scaling

归一化(?)主要是对样本集中不同特征的尺度进行规范,这样做的目的和Adgrad是类似的。在这里插入图片描述
在这里插入图片描述
实际操作也是比较简单的,就是减去均值后除以方差:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值