momentum

tf.train.MomentumOptimizer

匿名 (未验证) 提交于 2019-12-02 23:40:02
实现momentum算法的优化器。计算表达式如下(如果use_nesterov = False): accumulation = momentum * accumulation + gradient variable -= learning_rate * accumulation __init__ __init__( learning_rate, momentum, use_locking=False, name='Momentum', use_nesterov=False ) 构造一个新的momentum optimizer。 参数: learning_rate momentum use_lock:如果真要使用锁进行更新操作。 name:可选的名称前缀,用于应用渐变时创建的操作。默认为“动力”。 如果是真的,使用Nesterov动量。参见 Sutskever et al., 2013 。这个实现总是根据传递给优化器的变量的值计算梯度。使用Nesterov动量使变量跟踪本文中称为theta_t + *v_t的值。这个实现是对原公式的近似,适用于高动量值。它将计算NAG中的“调整梯度”,假设新的梯度将由当前的平均梯度加上动量和平均梯度变化的乘积来估计。 Eager Compatibility: 当启用了紧急执行时,learning_rate和momentum都可以是一个可调用的函数

24、神经网络优化算法比较

痴心易碎 提交于 2019-12-02 15:56:21
为高效找到使损失函数的值最小的参数,关于最优化(optimization)提了很多方法。 其中包括: SGD(stochastic gradient descent,随机梯度下降) Momentum(冲量算法) Adagrad Adam 各优化算法比较实验(python) # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from collections import OrderedDict class SGD: """随机梯度下降法(Stochastic Gradient Descent)""" 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] class Momentum: """Momentum SGD""" def __init__(self, lr=0.01, momentum=0.9): self.lr = lr self.momentum = momentum self.v = None def update(self, params, grads)

机器学习常见优化器

六月ゝ 毕业季﹏ 提交于 2019-11-28 16:32:18
在机器学习、深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化器,都是什么呢,又该怎么选择呢? 在 Sebastian Ruder 的这篇论文中给出了常用优化器的比较,今天来学习一下: https://arxiv.org/pdf/1609.04747.pdf 本文将梳理: 每个算法的梯度更新规则和缺点 为了应对这个不足而提出的下一个算法 超参数的一般设定值 几种算法的效果比较 选择哪种算法 0.梯度下降法深入理解 以下为个人总结,如有错误之处,各位前辈请指出。 对于优化算法,优化的目标是网络模型中的参数θ(是一个集合,θ 1 、 θ 2 、 θ 3 ...... )目标函数为损失函数L = 1/N ∑ L i (每个样本损失函数的叠加求均值)。这个损失函数L变量就是θ,其中L中的参数是整个训练集,换句话说,目标函数(损失函数)是通过整个训练集来确定的,训练集全集不同,则损失函数的图像也不同。那么为何在mini-batch中如果遇到鞍点/局部最小值点就无法进行优化了呢?因为在这些点上,L对于θ的梯度为零,换句话说,对θ每个分量求偏导数,带入训练集全集,导数为零。对于SGD/MBGD而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性

深度学习优化算法总结

夙愿已清 提交于 2019-11-28 15:39:28
前言 这里讨论的优化问题指的是,给定目标函数f(x),我们需要找到一组参数x(权重),使得f(x)的值最小。 本文以下内容假设读者已经了解机器学习基本知识,和梯度下降的原理。 SGD SGD指stochastic gradient descent,即随机梯度下降。是梯度下降的batch版本。 对于训练数据集,我们首先将其分成n个batch,每个batch包含m个样本。我们每次更新都利用一个batch的数据,而非整个训练集。即: 其中, η为学习率,g t 为x在t时刻的梯度。 这么做的好处在于: 当训练数据太多时,利用整个数据集更新往往时间上不显示。batch的方法可以减少机器的压力,并且可以更快地收敛。 当训练集有很多冗余时(类似的样本出现多次),batch方法收敛更快。以一个极端情况为例,若训练集前一半和后一半梯度相同。那么如果前一半作为一个batch,后一半作为另一个batch,那么在一次遍历训练集时,batch的方法向最优解前进两个step,而整体的方法只前进一个step。 Momentum SGD方法的一个缺点是,其更新方向完全依赖于当前的batch,因而其更新十分不稳定。解决这一问题的一个简单的做法便是引入momentum。 momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向