机器学习之梯度下降

简介: 我们需要寻找一个最合适的函数(模型)就需要找到一个最好的优化方法(optimization problem)。在实际的计算中我们会先定义一个Loss函数

20210319131403495.png

梯度下降



我们需要寻找一个最合适的函数(模型)就需要找到一个最好的优化方法(optimization problem)。在实际的计算中我们会先定义一个Loss函数


20210319133005603.png

当有两个参数时,我们需要随机选取两个值作为起点Randomly start at 𝜃0就是我们的初始点的位置


20210319132409862.png


分别计算两个值的偏微分。接着初始值减去计算得到偏微分值最后得到了一组新的参数。然后以此类推就可以得到新的一系列的参数。


20210319132803189.png

终上所述得到的函数应该是:


20210319132931266.png


使用图形展示就是:


20210319133227376.png


调整学习率(Tuning your learning rates)


20210319133855928.png


黑色的是Loss梯度曲线。

红色的是学习率 适度情况下最合适的方法。

蓝色的线是学习率过低,需要很长的时间去学习,不是很合适。

绿色的是学习率过大直接跳过了最合适的点。

黄色的直接跳过了整个loss范围。

终上所述:学习率的大小在loss的选取中非常的重要,有些时候可以说是至关重要。

如图的内容只能够展示1-2个参数的情况,3个及以上参数则无法用该办法展示。


我们可以通过画出不同学习率和Loss之间关系的图来查看一个比较好的结果。


20210319134628394.png


通过上图的方式可以非常形象的看到各个系列之间的情况。


自适应学习率(Adaptive Learning Rates)


通常学习率是随着参数的更新而改变的(越来越小)

刚开始距离我们的最佳值距离比较大需要大跨步的进行追击,但是当距离越来越近为了不跨过最好的那个点,我们要放慢脚步逐步的去查找。然后就会出现随着参数数据的更新学习率越来越小。

比如我们可以把学习率设置成这样子:


20210319140212541.png


当然这种还是要看实际情况进行选择。


Adagrad


将每个参数的学习率除以其先前导数的均方根(Divide the learning rate of each parameter by the root mean square of its previous derivatives)

我们先取任意一个参数w。计算改时间的学习率。


20210319141037868.png

20210319141214849.png

𝜎𝑡:参数w之前导数的均方根


紧接着拿wt减去之前的值。


20210319141432194.png

这个值里面的学习率是单独的,不同时间的w所对应的值都是不一样的


20210319141610814.png


举例解析:

假设初始值是w0,计算w0所在点的微分该点的学习率就是 𝜂0/𝜎0*g0

其中:g0 = 𝜕𝐿(𝜃0)/𝜕𝑤


20210319141914448.png


接下去我们继续计算w1的值


20210319142540585.png


继续计算w2的值


20210319142506771.png


以此类推:


20210319142611582.png


根据之前的规律我们可以把格式写出来:


20210319142916295.png


经过公式化简,可以得到最后的结果:


20210319143011910.png


该办法随着时间越来越长,最后下降的速度也会非常的慢需要大家看实际情况进行选择。

号外、号外:李宏毅老师推荐Adam效果比较好比较稳定密码,适合小白,如果是大佬就自己根据实际情况进行 选择。


参数和坡度(Gradient)也有关系,当Gradient越大参数就会越大。

在公式中学习率会越来越小但是Gradient会越来越大,造成了一种比较奇怪的地方。

解释一:这是一种反差。

官方解释:假设只有一个常数(如下图)我们选取的初始点(x0)的微分(切线)就是最合适的点

如下图x0跨一步最后的距离是到原点的距离,也就相当于x0的切线。


20210319144432117.png


当我们的微分越大也就代表它距离我们的原点就越远,踏出去的步伐最好就是和微分成正比 (前提就是只考虑一个参数)

  • 多个参数
    当有两个参数时,我们只考虑w1时得到的结果确实是符合上面说的。


20210319145049335.png


我们看单独考虑w2时c和d也符合上面的结果。


20210319145248770.png

当我们跨象限进行查看,如a和c一起看。c的值比较大,a的值比较小,但是a距离远点比c更远。


20210319145554159.png


我们的计算公式中除了切线以外还有一个分母,那么这个分母有什么作用是怎么样来的?


20210319145636611.png


当我们做二次微分以后就得到了这样子一个分母,也就是一次微分和二次微分成反比


2021031914581173.png


当我们考虑了二次微分以后,不同的位置的角度和平滑度都会有所展示,表现的更加的具体。


20210319150315846.png


在Adagrad中利用分母的值(多个点的均方根)来反映二次导的大小。如果比较平滑多个值就会比较小,如果陡峭结果就会很大。


随机梯度下降(Stochastic Gradient Descent)


普通的梯度下降:


20210319150753629.png


随机梯度下降:

随机取一轮计算我们的Loss,该Loss只考虑这个点的参数。


20210319151016502.png


最后计算的时候只计算某个值的梯度下降情况


20210319151110829.png


两个梯度下降进行对比:


20210319151258612.png


左边计算完所有的数据才显示,右边的每次都显示虽然最后的结果可能比较无序,但是有20个不同的内容。天下武功唯快不破左边走了一步 右边已经走了20步。可能性就会更大。


特征缩放(Feature Scaling)


20210319151705940.png


如上图左边的比例不是对称的x1和x2比例不是对称的大小并不是一致,在特征缩放中建议把两边的值进行缩放,缩放到同一个比例内。


20210319151939893.png


假设x1和x2的比例相差比较大的时候,w1做大变动y才会有比较细微的变化然而w2做比较小的变化y就会有比较大的变化。

最后的结果和上图一样,w1上比较平滑,w2上比较陡峭。


20210319152356371.png


如果x1和x2是同 比例的比较接近的最后的结果都是比较平滑的。两边的影响力是相同的。最后获取 结果也是比较容易的


20210319152903227.png

缩放最常见的就是把值减去平均值然后除以方差得到的最后结果均值都是0,方差都是1。


梯度下降中的数学


2021031915382215.png

如何快速的求出我们某个点一定范围内最小的点?


20210319154116234.png

可以通过上面的公式进行计算。

如果有多个值就可以用下面的公式:


20210319154636818.png20210319154926708.png20210319154935693.png20210319154944209.png20210319154957773.png


梯度下降的限制


众所周知:有些时候他会卡在某个“最低值”(谷底)。有些时候会卡在不是谷底但是微分值是0的地方。很多时候虽然Loss值很低但是不一定是最低点。


传说中的飞桨社区最菜代码人,让我们一起努力!

记住:三岁出品必是精品 (不要脸系列

目录
相关文章
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
梯度下降求极值,机器学习&深度学习
梯度下降求极值,机器学习&深度学习
60 0
|
机器学习/深度学习 算法 索引
深入探讨梯度下降:优化机器学习的关键步骤(三)
深入探讨梯度下降:优化机器学习的关键步骤(三)
|
2月前
|
机器学习/深度学习 算法 Python
“探秘机器学习的幕后英雄:梯度下降——如何在数据的海洋中寻找那枚失落的钥匙?”
【10月更文挑战第11天】梯度下降是机器学习和深度学习中的核心优化算法,用于最小化损失函数,找到最优参数。通过计算损失函数的梯度,算法沿着负梯度方向更新参数,逐步逼近最小值。常见的变种包括批量梯度下降、随机梯度下降和小批量梯度下降,各有优缺点。示例代码展示了如何用Python和NumPy实现简单的线性回归模型训练。掌握梯度下降有助于深入理解模型优化机制。
32 2
|
2月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
2月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
4月前
|
机器学习/深度学习 算法 Python
【绝技揭秘】Andrew Ng 机器学习课程第十周:解锁梯度下降的神秘力量,带你飞速征服数据山峰!
【8月更文挑战第16天】Andrew Ng 的机器学习课程是学习该领域的经典资源。第十周聚焦于优化梯度下降算法以提升效率。课程涵盖不同类型的梯度下降(批量、随机及小批量)及其应用场景,介绍如何选择合适的批量大小和学习率调整策略。还介绍了动量法、RMSProp 和 Adam 优化器等高级技巧,这些方法能有效加速收敛并改善模型性能。通过实践案例展示如何使用 Python 和 NumPy 实现小批量梯度下降。
44 1
|
4月前
|
机器学习/深度学习 算法 Python
探索机器学习中的梯度下降优化算法
【8月更文挑战第1天】在机器学习的广阔天地里,梯度下降法如同一位勇敢的探险家,指引我们穿越复杂的数学丛林,寻找模型参数的最优解。本文将深入探讨梯度下降法的核心原理,并通过Python代码示例,展示其在解决实际问题中的应用。
88 3
|
6月前
|
机器学习/深度学习 人工智能 算法
【机器学习】深度探索:从基础概念到深度学习关键技术的全面解析——梯度下降、激活函数、正则化与批量归一化
【机器学习】深度探索:从基础概念到深度学习关键技术的全面解析——梯度下降、激活函数、正则化与批量归一化
79 3
|
7月前
|
机器学习/深度学习 人工智能 算法
【人工智能】<吴恩达-机器学习>批量梯度下降&矩阵和向量运算概述
【1月更文挑战第26天】【人工智能】<吴恩达-机器学习>批量梯度下降&矩阵和向量运算概述
|
7月前
|
机器学习/深度学习 人工智能
【人工智能】<吴恩达-机器学习>单变量的线性回归&认识梯度下降
【1月更文挑战第26天】【人工智能】<吴恩达-机器学习>单变量的线性回归&认识梯度下降