当前位置: 代码迷 >> 综合 >> Graduent Descent
  详细解决方案

Graduent Descent

热度:78   发布时间:2023-12-03 21:05:15.0

k,s)

1、梯度下降

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)
如果w = w(x, y, z), x = x(t), y = y(t), z = z(t)
在这里插入图片描述
▽w就是梯度向量,简称梯度
将微分值转换为梯度的形式:(迭代参数w时,w1=w0-学习率 * 梯度的反方向
在这里插入图片描述
在这里插入图片描述
由以上图发现,梯度红绿下降曲线还是比较难辨别的

(1)Vanilla Gradient descent

迭代式子:
在这里插入图片描述

  • 对于每个特征xi,都有不同的学习率
  • 一开始的是离最小值较远的,可以选择相对较大的学习率,随着迭代次数的增加,选择较小的学习率
    在这里插入图片描述

(2)Adagrad

迭代式子:
在这里插入图片描述
分母为过去所有微分值的均方根值
在这里插入图片描述
最终变成以下式子:
在这里插入图片描述

Adagrad式子分析:

在这里插入图片描述
前面算出的梯度一直为很小,突然求得一个较大的梯度,此时分母也会变大,从而使步长为较小的值,保证了随着迭代次数的增加,步长逐渐减小。

缺点:若迭代次数很大的时候,步长很小,会出现Loss值几乎不变的情况

(3)Stochastic Gradient Descent

  • BGD(批量梯度下降):
    批量梯度下降是,求出一个维度中所有的数据,取个平均来当做每一次梯度下降的step.这样做虽然准确,但是每次要计算一个维度的所有数据的梯度,花费资源较大.所以才有了随机梯度下降的思想:每次只随机取一个维度中的一条数据求梯度,来当做这个维度梯度下降的step.
    在这里插入图片描述
    在这里插入图片描述
  • Stochastic Gradient Descent:一个样本更新一次
    计算一个样本的Loss就更新一次参数w,能够更快的更新参数
    在这里插入图片描述
    区别:
    在入图片描述
    BGD总是综合所有数据的梯度,取到的下降至一直很平滑,SGD随机抽取一条数据作为参数,步子很不稳定.但是最终都可以到达函数的最优解位置.虽然看起来SGD比BGD的误差要大一些,但是SGD随着迭代次数的增加,误差会越来越小.

(4)迭代技巧:Feature Scaling特征归一化

  • 如下图,若参数x1取值较小,而x2取值较大,当x1,x2发生变化的时候,x2预测的y会引起相对x1预测的y出现较大的变化。
  • 观察左图:当迭代参数的时候,梯度下降方法只是求出变化最大的方向前进,而不是直接朝着最小值的方向更新,这样会导致走很多弯曲的路线
  • 而右图:梯度变化最大的方向就是直接指着最小值的方向更新,加快迭代速度。
    在这里插入图片描述

(5)Question:梯度更新Loss并不是一定下降

只有学习率为无穷小的时候,才能满足梯度下降,从而使Loss不断减小
在这里插入图片描述

(6)梯度下降的限制

梯度更新在微分值为0或者局本最小的时候,便无法再迭代。
在这里插入图片描述

(7)Epoch、BatchSize概念

假设您有一个包含200个样本(数据行)的数据集,并且您选择的Batch大小为5和1,000个Epoch。

这意味着数据集将分为40个Batch,每个Batch有5个样本。每批五个样品后,模型权重将更新。

这也意味着一个epoch将涉及40个Batch或40个模型更新。

有1000个Epoch,模型将暴露或传递整个数据集1,000次。在整个培训过程中,总共有40,000Batch。
在这里插入图片描述
GPU运算时,用批量梯度下降计算速度会更快(有更多的矩阵运算):
在这里插入图片描述