【李宏毅机器学习】Gradient Descent_1 梯度下降(p5、p6、p7 )学习笔记

李宏毅机器学习学习笔记汇总
课程链接


Review

在第三步,找一个最好的function,解一个optimization最优化的问题
loss function越小越好
在这里插入图片描述
假设θ有两个变量,一个 θ 1 θ_1 θ1 一个 θ 2 θ_2 θ2,随机初始化一个 θ 0 θ^0 θ0,随后反复进行下图步骤
在这里插入图片描述
将其可视化后,如下图

  • 随机选一个初始位置 θ 0 θ^0 θ0
  • 计算在 θ 0 θ^0 θ0点的 参数对loss function的gradient梯度(红色箭头)
  • 更新参数:把梯度乘以learning rate(η),取负号,即为蓝色箭头,再加上 θ 0 θ^0 θ0,得到 θ 1 θ^1 θ1(,以此类推不断重复)
  • 再计算 θ 1 θ^1 θ1的梯度,得到下一个红色箭头
  • 更新参数:每次要走的方向,都是红色箭头的相反方向(因为要取负号)梯度的方向是上升最快的方向,负梯度的方向是下降最快的方向。
  • 。。。。。。
    在这里插入图片描述

Gradient Descent Tips

Tip1: Tuning your learning rate 小心微调你的学习率

  • learning rate 太小了:走的会很慢,但是终究会走到local minimum
  • learning rate 太大了:走的很快,但是无法走到最低点,容易越更新,loss越大
    所以必须选取一个合适的学习率

一维二维的时候可以可视化一下,观察参数对于loss的影响
在这里插入图片描述
如何自动调学习率呢?
通常,learning rate是随着参数的更新,越来越小的

  • 在起始点时候,离最低点较远,可以用较大的learning rate
  • 在几轮参数更新之后,距离最低点较近了,所以要减小learning rate,使其可以收敛到最低点
    • eg:在第t次更新时, η t = η / t + 1 \eta^t = \eta/\sqrt{t+1} ηt=η/t+1
  • 但是只有这样是不够的。
    • 应该不同的参数有不同的学习率
      在这里插入图片描述

针对上面的问题,有很多小技巧:
1、Adagrad 自适应梯度下降法
每一个参数的学习率都除以之前算出来的微分值的root mean square均方根
在这里插入图片描述

Vanilla Gradient descent普通的梯度下降
在这里插入图片描述

举个例子:
初始值 w 0 w^0 w0,在该点的微分 g 0 g^0 g0,learning rate 是 η 0 / σ 0 \eta^0/\sigma^0 η0/σ0
指数加权平均,可以抑制梯度震荡,从而避免步度太大!

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

有一个矛盾的地方?梯度越大,学习率越小
在这里插入图片描述
在突然遇到一个特别大/小的梯度的时候,可以理解为加了一个惯性,相对于过去的相对梯度大小,随时间做了一个平滑。
在这里插入图片描述
对于一个参数来说,计算得到的微分越大,距离原点越远。(只在考虑一个参数的函数才成立)
在这里插入图片描述
多个参数的情况,不成立:

在这里插入图片描述
把二次微分考虑进来
在这里插入图片描述
在这里插入图片描述

只比较a和c的微分值是不够的,需要比较 他们的微分值除以各自的二次微分值。
弹幕大佬的发言:联想:速度、加速度、加速度的变化速度,所以相除得到的是个单位长度

adagrad是在没有增加的任何额外运算的情况下,看能否估计一下二次微分的值,即 分母用一阶微分的均方根近似代替二阶微分,减少计算量。


在sample够多的情况下,可以发现,在平滑峡谷里,一次微分较小,在比较尖的峡谷i,一次微分较大
在这里插入图片描述

弹幕大佬发言:

  • 我觉得这里解释的过于纠结了,前面一位弹幕发的好,就是避免梯度曝炸和消失,在学习率上做调整,仅此而已,没必要扯到二次求导
  • 我觉得是这样,在避免冗余运算的同时尽可能保证合理的梯度

Tip 2 Stochastic Gradient Descent SGD随机梯度下降

在这里插入图片描述

传统方法loss本就应该考虑所有的training examples
在这里插入图片描述
但是SGD的想法不同,每次只(随机/按顺序)选取一个x出来,即看一个example就更新一次参数。公式上,去掉外面的求和符号,但是内部的不可以去掉,因为里面是对于一个x的所有参数求和的。
在这里插入图片描述

好处:

  • 原来的方法:看完所有examples后,更新一次参数,比较稳定,走的方向是按照gradient建议的方向
  • SGD的方法:看到一个example,就更新一次参数
    SGD只看一个的情况下,步伐很小且散乱,方向未必和梯度建议的方向一致,但是相反!SGD是快的,因为不用计算所有的loss
    在这里插入图片描述

Tip 3 Feature Scaling 特征缩放

假设要做regression,feature有两个x1(宝可梦进化前CP值)和x2(生命值),若x1和x2的分布的range很不一致,则做scaling,使其分布range变得一致。(相当于归一化了,不同特征分布统一到一个范围比如0-1)
在这里插入图片描述

w1x1和w2x2,若x2>x1,则w2的影响大,x1的影响小,w1的变化对y的影响比较小,则w1最后对loss的影响也比较小

弹幕大佬发言:

  • 从优化上讲,就是目标函数条件数比较差,导致梯度下降很慢
  • 数据预处理,解决神经网络第一层输入零均值化

正圆不论从哪个点开始都是会朝着中心点走,做参数更新的时候会更有效率
在这里插入图片描述


x i r x^r_i xir:第r个example的第i个component
对第r个example的第i个component,减去所有data的第i个component的mean m i m_i mi,再除以所有data的第i个component的standard deviation σ i \sigma_i σi
所有的参数集都化为 均值为零方差为一的参数集

弹幕大佬发言:
StandardScaler:
作用:去均值和方差归一化。且是针对每一个特征维度来做的,而不是针对样本。

在这里插入图片描述

Gradient Descent

在这里插入图片描述

下图错误,eg learning rate太大、本身就有可能变大
在这里插入图片描述

后面是讲解数学基础,,听不下去,俺先放弃了,这个坑留着以后再补
在这里插入图片描述

李宏毅机器学习学习笔记汇总
课程链接


emmmm打了两个游戏。。。

1、永远不知道 local minimum 是不是global minimum

2、演示了一下梯度下降,,,,

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值