梯度下降
我们需要寻找一个最合适的函数(模型)就需要找到一个最好的优化方法(optimization problem)。在实际的计算中我们会先定义一个Loss函数
当有两个参数时,我们需要随机选取两个值作为起点Randomly start at 𝜃0就是我们的初始点的位置
分别计算两个值的偏微分。接着初始值减去计算得到偏微分值最后得到了一组新的参数。然后以此类推就可以得到新的一系列的参数。
终上所述得到的函数应该是:
使用图形展示就是:
调整学习率(Tuning your learning rates)
黑色的是Loss梯度曲线。
红色的是学习率 适度情况下最合适的方法。
蓝色的线是学习率过低,需要很长的时间去学习,不是很合适。
绿色的是学习率过大直接跳过了最合适的点。
黄色的直接跳过了整个loss范围。
终上所述:学习率的大小在loss的选取中非常的重要,有些时候可以说是至关重要。
如图的内容只能够展示1-2个参数的情况,3个及以上参数则无法用该办法展示。
我们可以通过画出不同学习率和Loss之间关系的图来查看一个比较好的结果。
通过上图的方式可以非常形象的看到各个系列之间的情况。
自适应学习率(Adaptive Learning Rates)
通常学习率是随着参数的更新而改变的(越来越小)
刚开始距离我们的最佳值距离比较大需要大跨步的进行追击,但是当距离越来越近为了不跨过最好的那个点,我们要放慢脚步逐步的去查找。然后就会出现随着参数数据的更新学习率越来越小。
比如我们可以把学习率设置成这样子:
当然这种还是要看实际情况进行选择。
Adagrad
将每个参数的学习率除以其先前导数的均方根(Divide the learning rate of each parameter by the root mean square of its previous derivatives)
我们先取任意一个参数w。计算改时间的学习率。
𝜎𝑡:参数w之前导数的均方根
紧接着拿wt减去之前的值。
这个值里面的学习率是单独的,不同时间的w所对应的值都是不一样的
举例解析:
假设初始值是w0,计算w0所在点的微分该点的学习率就是 𝜂0/𝜎0*g0
其中:g0 = 𝜕𝐿(𝜃0)/𝜕𝑤
接下去我们继续计算w1的值
继续计算w2的值
以此类推:
根据之前的规律我们可以把格式写出来:
经过公式化简,可以得到最后的结果:
该办法随着时间越来越长,最后下降的速度也会非常的慢需要大家看实际情况进行选择。
号外、号外:李宏毅老师推荐
Adam
效果比较好比较稳定密码,适合小白,如果是大佬就自己根据实际情况进行 选择。
参数和坡度(Gradient)也有关系,当Gradient越大参数就会越大。
在公式中学习率会越来越小但是Gradient会越来越大,造成了一种比较奇怪的地方。
解释一:这是一种反差。
官方解释:假设只有一个常数(如下图)我们选取的初始点(x0)的微分(切线)就是最合适的点
如下图x0跨一步最后的距离是到原点的距离,也就相当于x0的切线。
当我们的微分越大也就代表它距离我们的原点就越远,踏出去的步伐最好就是和微分成正比 (前提就是只考虑一个参数)
- 多个参数
当有两个参数时,我们只考虑w1时得到的结果确实是符合上面说的。
我们看单独考虑w2时c和d也符合上面的结果。
当我们跨象限进行查看,如a和c一起看。c的值比较大,a的值比较小,但是a距离远点比c更远。
我们的计算公式中除了切线以外还有一个分母,那么这个分母有什么作用是怎么样来的?
当我们做二次微分以后就得到了这样子一个分母,也就是一次微分和二次微分成反比
当我们考虑了二次微分以后,不同的位置的角度和平滑度都会有所展示,表现的更加的具体。
在Adagrad中利用分母的值(多个点的均方根)来反映二次导的大小。如果比较平滑多个值就会比较小,如果陡峭结果就会很大。
随机梯度下降(Stochastic Gradient Descent)
普通的梯度下降:
随机梯度下降:
随机取一轮计算我们的Loss,该Loss只考虑这个点的参数。
最后计算的时候只计算某个值的梯度下降情况
两个梯度下降进行对比:
左边计算完所有的数据才显示,右边的每次都显示虽然最后的结果可能比较无序,但是有20个不同的内容。天下武功唯快不破
左边走了一步 右边已经走了20步。可能性就会更大。
特征缩放(Feature Scaling)
如上图左边的比例不是对称的x1和x2比例不是对称的大小并不是一致,在特征缩放中建议把两边的值进行缩放,缩放到同一个比例内。
假设x1和x2的比例相差比较大的时候,w1做大变动y才会有比较细微的变化然而w2做比较小的变化y就会有比较大的变化。
最后的结果和上图一样,w1上比较平滑,w2上比较陡峭。
如果x1和x2是同 比例的比较接近的最后的结果都是比较平滑的。两边的影响力是相同的。最后获取 结果也是比较容易的
缩放最常见的就是把值减去平均值然后除以方差得到的最后结果均值都是0,方差都是1。
梯度下降中的数学
如何快速的求出我们某个点一定范围内最小的点?
可以通过上面的公式进行计算。
如果有多个值就可以用下面的公式:
梯度下降的限制
众所周知:有些时候他会卡在某个“最低值”(谷底)。有些时候会卡在不是谷底但是微分值是0的地方。很多时候虽然Loss值很低但是不一定是最低点。
传说中的飞桨社区最菜代码人,让我们一起努力!
记住:三岁出品必是精品 (不要脸系列)