速度梯度

优化器算法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而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性

(Review cs231n) Optimized Methods

蹲街弑〆低调 提交于 2019-12-27 17:30:45
Mini-batch SGD的步骤: 1.Sample a batch of data 2.Forward prop it through the graph,get loss 3.backprop to calculate the gradient 4. updata the parameters using the gradient The initialization of weights is important. 如果 初始化过小, 经过激活后网络中权值的update就会 趋于0;如果过大,就可能出现梯度爆炸;尝试xavier initialization main loop: while True: data_batch = dataset.sample_data_batch() loss = network.forward(data_batch) loss = network.backward() x += -learning_rate * dx 不同的参数更新方案有不同的优化途径和优化速度,SGD方法是所有方法中最慢的。 The problems of SGD and why SGD is slow? 假设一个损失函数空间,损失函数的垂直方向非常陡峭,水平方向非常shallow 水平方向上的梯度非常小,垂直方向上梯度很大。 更新方式如上,补救的一种方式是 动量更新:

深度学习各种优化函数详解

寵の児 提交于 2019-12-05 07:39:12
深度学习各种优化函数详解 深度学习中有众多有效的优化函数,比如应用最广泛的SGD,Adam等等,而它们有什么区别,各有什么特征呢?下面就来详细解读一下 一、先来看看有哪些优化函数 BGD 批量梯度下降 所谓的梯度下降方法是无约束条件中最常用的方法。假设f(x)是具有一阶连续偏导的函数,现在的目标是要求取最小的f(x) : min f(x) 核心思想:负梯度方向是使函数值下降最快的方向,在迭代的每一步根据负梯度的方向更新x的值,从而求得最小的f(x)。因此我们的目标就转变为求取f(x)的梯度。 当f(x)是凸函数的时候,用梯度下降的方法取得的最小值是全局最优解,但是在计算的时候,需要在每一步(xk处)计算梯度,它每更新一个参数都要遍历完整的训练集,不仅很慢,还会造成训练集太大无法加载到内存的问题,此外该方法还不支持在线更新模型。其代码表示如下: for i in range(nb_epochs): params_grad = evaluate_gradient(loss_function, data, params) params = params - learning_rate * params_grad 1 2 3 我们首先需要针对每个参数计算在整个训练集样本上的梯度,再根据设置好的学习速率进行更新。 公式表示如下: 假设h(theta)是我们需要拟合的函数,n表示参数的个数

如何设置batchsize

匿名 (未验证) 提交于 2019-12-03 00:13:02
batchsize过小:每次计算的梯度不稳定,引起训练的震荡比较大,很难收敛。 batchsize过大: (1)提高了内存利用率,大矩阵乘法并行计算效率提高。 (2)计算的梯度方向比较准,引起的训练的震荡比较小。 (3)跑完一次epoch所需要的迭代次数变小,相同数据量的数据处理速度加快。 缺点:容易内容溢出,想要达到相同精度,epoch会越来越大,容易陷入局部最优,泛化性能差。 batchsize设置:通常10到100,一般设置为2的n次方。 原因:计算机的gpu和cpu的memory都是2进制方式存储的,设置2的n次方可以加快计算速度。 来源:博客园 作者: 乐呵的太阳 链接:https://www.cnblogs.com/happytaiyang/p/11617551.html