参数的更新的方法:
类型 定义 公司 图像 优点 缺点 代码结构
关系:为了改正SGD的缺点,下面我们将介绍Momentum、AdaGrad、Adam这3 种方法来取代SGD。
- SDG
定义:
使用参数的梯度,沿梯度方向更新参数,并重复这个步骤多次,从而逐渐靠 近最优参数,这个过程称为随机梯度下降法(stochastic gradient descent), 简称SGD。朝着当前所在位置的坡度最大的方向前进,就是SGD的策略。
公司:
这里把需要更新的权重参数记为W,把损失函数关于W的梯度记为 。 η表示学习率,实际上会取0.01或0.001这些事先决定好的值。式子中的← 参数的更新 表示用右边的值更新左边的值。
优点:不过比起胡乱地搜索参数空间,也算是“聪 明”的方法。
SGD的缺点:
虽然SGD简单,并且容易实现,但是在解决某些问题时可能没有效率。
梯度在很多地方并没有指向最低处。也就是说梯度变换小的地方,不好用。
SGD低效的根本原因是,梯度的方向并没有指向最小值的方向。
代码结构:
class SGD:
def __init__(self, lr=0.01):
self.lr = lr
def update(self, params, grads):
for key in params.keys():
params[key] -= self.lr * grads[key]
改进方法之一:
Momentum(动量):
公司//定义:多加了一个速度av.
和前面的SGD一样,W表示要更新的权重参数, 表示损失函数关 于W的梯度,η表示学习率。这里新出现了一个变量v,对应物理上的速度,也就是导数,权值。式(6.3)表示了物体在梯度方向上受力,在这个力的作用下,物体的速度增 加这一物理法则。式(6.3)中有αv这一项。在物体不受任何力时,该项承担使物体逐渐减 速的任务(α设定为0.9之类的值),对应物理上的地面摩擦或空气阻力。
图像:
代码:
class Momentum:
"""Momentum SGD"""
def __init__(self, lr=0.01, momentum=0.9):
self.lr = lr # 学习率
self.momentum = momentum #Momentum(动量),该项承担使物体逐渐减 速的任务(α设定为0.9之类的值),对应物理上的地面摩擦或空气阻力。
self