神经网络中的优化器

一.网络训练流程

prediction = net(x)    # input x and predict based on x
loss = loss_func(prediction, y)     # must be (1. nn output, 2. target) 计算损失
optimizer.zero_grad()   # lear gradients for next train  梯度清零进行下一次训练
loss.backward()         # backpropagation, compute gradients 反向传播计算每个参数的梯度
optimizer.step()        #通过梯度来更新网络参数

二.优化器作用

优化模型中的参数来降低loss

三.常见的几种优化器

Batch Gradient Descent (BGD)

由于这种方法是在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手,现在使用的比较少

Stochastic Gradient Descent (SGD随机梯度下降)

从数据集中随机抽取一部分样本来迭代更新参数。

SGD并不是每次迭代都向着整体最优化方向。所以虽然训练速度快,但是准确度下降,并不是全局最优。虽然包含一定的随机性,但是从期望上来看,它是等于正确的导数的。在训练过程中损失函数会有波动

缺点:损失函数在某个方向变化很快但在另外个方向变化很慢(鞍点),SGD就会在变化慢的方向来回,导致变化快的方向不会有很大的跨度。

解决此缺点引入参数动量(momentum)一般设置为0.9

引入动量后,sgd更新的梯度不仅仅是当前的梯度,还要加上上一步的梯度

神经网络中的优化器_第1张图片
神经网络中的优化器_第2张图片
神经网络中的优化器_第3张图片

Adagrad (Adaptive gradient algorithm)

简单来讲,设置全局学习率之后,每次通过,全局学习率逐参数的除以历史梯度平方和的平方根,使得每个参数的学习率不同

特点:对于梯度较大的参数,那么学习率就会变得较小;而对于梯度较小的参数,那么学习率就会变得较大,这样就会使在陡峭的区域下降速度快,平缓的区域下降速度慢。,缺点是,它的缺点是分母会不断积累,这样学习率就会收缩并最终会变得非常小

神经网络中的优化器_第4张图片

RMSprop

相比于AdaGrad的历史梯度:

RMSProp增加了一个衰减系数来控制历史信息的获取多少:

神经网络中的优化器_第5张图片

Adam:Adaptive Moment Estimation

这个算法是另一种计算每个参数的自适应学习率的方法。相当于 RMSprop + Momentum

你可能感兴趣的:(Python基础知识,深度学习)