momentum

【PyTorch】PyTorch中的梯度累加

梦想与她 提交于 2020-03-08 03:40:56
PyTorch中的梯度累加 使用PyTorch实现梯度累加变相扩大batch PyTorch中在反向传播前为什么要手动将梯度清零? - Pascal的回答 - 知乎 https://www.zhihu.com/question/303070254/answer/573037166 这种模式可以让梯度玩出更多花样,比如说梯度累加(gradient accumulation) 传统的训练函数,一个batch是这么训练的: for i,(images,target) in enumerate(train_loader): # 1. input output images = images.cuda(non_blocking=True) target = torch.from_numpy(np.array(target)).float().cuda(non_blocking=True) outputs = model(images) loss = criterion(outputs,target) # 2. backward optimizer.zero_grad() # reset gradient loss.backward() optimizer.step() 获取loss:输入图像和标签,通过infer计算得到预测值,计算损失函数; optimizer.zero_grad()

论文阅读-Cross-Iteration Batch Normalization

你。 提交于 2020-03-03 19:35:24
对msra的工作都比较关注,最近刚好看到了这篇对传统bn进行改进的论文。 论文地址: https://arxiv.org/abs/2002.05712 github地址: https://github.com/Howal/Cross-iterationBatchNorm openreview: https://openreview.net/forum?id=BylJUTEKvB 作者应该是投ICLR杯具了,不过个人觉得比较值得少花些时间读一读。 论文开门见山的指出 batchsize的大小直接影响了BN的效果,见图1中的绿色线,batchsize在小于16后的分类准确率急剧下降 。作者在本文提出了一种叫做cross-iteration BN的方法,通过泰勒多项式去估计几个连续batch的统计参数,可以很大程度缓解此问题,如图1中的蓝色线,在batchsize逐渐变小时,效果依然稳定,并且accuracy始终高于GN的效果。 (论文必备图,一图告诉你我有多nb) 1. Revisiting Batch Normalization 从实现的角度来说,BN对特征进行了一种白化操作,可以减少internal covariate shift,具体的可以查看原文。 这里作为对比可以回忆下几种比较常见的归一化方法 BatchNormalization,LayerNormization

损失函数优化器总结

一世执手 提交于 2020-02-28 00:54:28
# adadelta optimizer = tf.train.AdadeltaOptimizer(learning_rate=0.001, rho=0.95, epsilon=1e-8, use_locking=False, name="Adadelta") # adagrad optimizer = tf.train.AdagradOptimizer(learning_rate=0.001, initial_accumulator_value=0.1, use_locking=False, name="Adagrad") # adam optimizer = tf.train.AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8, use_locking=False, name="Adam") # ftrl optimizer = tf.train.FtrlOptimizer(learning_rate=0.001, learning_rate_power=-0.5, initial_accumulator_value=0.1, l1_regularization_strength=0.0, l2_regularization_strength=0.0, use_locking=False

线性回归方程推导

扶醉桌前 提交于 2020-02-09 13:25:28
https://blog.csdn.net/joob000/article/details/81295144 理论推导   机器学习所针对的问题有两种:一种是回归,一种是分类。回归是解决连续数据的预测问题,而分类是解决离散数据的预测问题。线性回归是一个典型的回归问题。其实我们在中学时期就接触过,叫最小二乘法。   线性回归试图学得一个线性模型以尽可能准确地预测输出结果。   先从简单的模型看起:   首先,我们只考虑单组变量的情况,有: 使得   假设有m个数据,我们希望通过x预测的结果f(x)来估计y。其中w和b都是线性回归模型的参数。   为了能更好地预测出结果,我们希望自己预测的结果f(x)与y的差值尽可能地小,所以我们可以写出代价函数(cost function)如下:   接着代入f(x)的公式可以得到:   不难看出,这里的代价函数表示的是预测值f(x)与实际值y之间的误差的平方。它对应了常用的欧几里得距离简称“欧氏距离”。基于均方误差最小化来求解模型的方法我们叫做“最小二乘法”。在线性回归中,最小二乘法实质上就是找到一条直线,使所有样本数据到该直线的欧式距离之和最小,即误差最小。   我们希望这个代价函数能有最小值,那么就分别对其求w和b的偏导,使其等于0,求解方程。   先求偏导,得到下面两个式子:   很明显,公式中的参数m,b,w都与i无关,简化时可以直接提出来

Disable momentum scrolling on Chrome for Android

天涯浪子 提交于 2020-01-22 12:49:25
问题 I'm looking for a way to disable the momentum scrolling on Chrome for Android device. I have a div with a fixed height and I want to be able to scroll the content of that div but without the smooth effect. On iOS it's easy, I just havn't add the "-webkit-overflow-scrolling: touch", but it looks like Chrome for Android apply this automatically. When I inspect the code with Chrome -> Device inspection I don't see this property so I think that Chrome do that nativly and I havn't found a way to

优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

一个人想着一个人 提交于 2020-01-07 06:52:02
在机器学习、深度学习中使用的优化算法除了常见的梯度下降,还有 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而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性

各种优化方法总结比較(sgd/momentum/Nesterov/adagrad/adadelta)

人盡茶涼 提交于 2020-01-02 02:11:36
前言 这里讨论的优化问题指的是,给定目标函数f(x),我们须要找到一组參数x。使得f(x)的值最小。 本文下面内容如果读者已经了解机器学习基本知识,和梯度下降的原理。 SGD SGD指stochastic gradient descent,即随机梯度下降。是梯度下降的batch版本号。 对于训练数据集,我们首先将其分成n个batch,每一个batch包括m个样本。我们每次更新都利用一个batch的数据。而非整个训练集。 即: x t + 1 = x t + Δ x t Δ x t = − η g t 当中。 η 为学习率, g t 为x在t时刻的梯度。 这么做的优点在于: 当训练数据太多时。利用整个数据集更新往往时间上不显示。batch的方法能够降低机器的压力,而且能够更快地收敛。 当训练集有非常多冗余时(相似的样本出现多次),batch方法收敛更快。以一个极端情况为例。若训练集前一半和后一半梯度同样。那么如果前一半作为一个batch,后一半作为还有一个batch。那么在一次遍历训练集时,batch的方法向最优解前进两个step,而总体的方法仅仅前进一个step。 Momentum SGD方法的一个缺点是,其更新方向全然依赖于当前的batch。因而其更新十分不稳定。 解决这一问题的一个简单的做法便是引入momentum。 momentum即动量,它模拟的是物体运动时的惯性

force-stop momentum scrolling on iphone/ipad in javascript

元气小坏坏 提交于 2020-01-01 08:46:20
问题 Is it possible to force-stop momentum scrolling on iphone/ipad in javascript? Extra: pretty sure this is pie in the sky, but for bonuspoints (honor and kudos), after dom-manipulation and a scrollTo applied, resume scroll with the same momentum before the forced stop. How to? 回答1: This is actually very possible when using fastclick.js. The lib removes the 300ms click delay on mobile devices and enables event capturing during inertia/momentum scrolling. After including fastclick and attaching

Batch Normalization

只谈情不闲聊 提交于 2019-12-29 14:37:59
Abstract 1 问题 Internal Covariate Shift: 训练神经网络主要就是让各个层学习训练数据的分布。在深度神经网络的训练过程中,之前层(之前的任何一层)的参数的发生变化,那么前一层的输出数据分布也会发生变化,也即当前层的输入数据分布会发生变化。由于网络层的输入数据的分布本身都在发生变化,那么训练过程中,当前神经网络层将要持续的学习适应新的数据分布。所以,当一个学习系统的输入数据分布发生变化时,我们说它在经历 Internal Covariate Shift。 由于以上原因,在神经网络训练中, 学习率 需要比较小,并且需要谨慎的进行 参数初始化 ,并且在使用 饱和非线性 的激活函数时效果很不好。 2 解决方法 每一个mini-batch进行一次batch normalization。 3 效果 可以使用更大的学习率 -> 加速训练过程,不必过于担心参数初始化,有时可以省略dropout。 1. Introduction 神经网络在优化时,通常采用SGD或其变种(momentum, Adagrad等), 实际中通常采用批量梯度下降。 SGD虽然简单有效,但需要谨慎调节超参数,尤其是学习率和初始参数值。训练过程也较为复杂,因为之前层中任何一点小的参数的变化,在层数加深的过程中,都会使当前层的输入数据分布有很大变化。所以网络层需要不断适应新的数据分布,也就是面临