本篇笔记将介绍深度学习中几种优化算法,SGD,Momentum,Nestrov,AdaGrad,RMSprop和Adam的理解以及简单的python实现
一、SGD
随机梯度下降法不用多说,每一个参数按照梯度的方向来减小以追求最小化损失函数
更新方式
Python实现
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
在梯度下降的基础上加入了动量,即前面的梯度将会影响本轮的梯度方向
更新方式
Python实现
class Momentum:
def __init__(self, lr=0.01, momemtum=0.9):
self.lr = lr
self.momemtum = momemtum
self.v = None
def update(self, params, grads):
if self.v is None:
self.v = {}
for key, val in params.items():
self.v[key] = np.zeros_like(val)
for key in params.keys():
self.v[key] = self.momemtum * self.v[key] - self.lr * grads[key]
params[key] += self.v[key]
三、Nestrov
Nestrov也是一种动量更新的方式,但是与普通动量方式不同的是,Nestrov为了加速收敛,提前按照之前的动量走了一步,然后求导后按着梯度再走一步