神经网络- 深度学习optimizer的选择

optimizer是在训练中,运用到的训练方法,最常用的是梯度下降法,去寻找最优loss,tf中常见的optimizer有:

通过Dr.Sebastian Ruder 的论文An overview of gradient descent optimization algorithms来详细了解一些优化器的选择。

论文地址:https://arxiv.org/pdf/1609.04747.pdf

1. 首先讨论 Batch gradient descent, 公式为: θ = θ ? η · ?θJ(θ)

BDG采用整个训练集来计算cost function对参数的梯度,由于这种方法是在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手,而且不能投入新数据实时更新模型。

for i in range(nb_epochs):
  params_grad = evaluate_gradient(loss_function, data, params)
  params = params - learning_rate * params_grad

2.Stochastic gradient descent, 公式为:θ = θ ? η · ?θJ(θ; x (i) ; y (i) )

和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新, 对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余,而 SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。

for i in range(nb_epochs):
  np.random.shuffle(data)
  for example in data:
    params_grad = evaluate_gradient(loss_function, example, params)
    params = params - learning_rate * params_grad

代码可以看出,在数据集中循环,每次样本做梯度下降更新。

缺点:更新频繁,会造成 cost function 有严重的震荡

BGD 可以收敛到局部极小值,当然 SGD 的震荡可能会跳到更好的局部极小值处。当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。

3. Mini-batch gradient descent, 公式:θ = θ ? η · ?θJ(θ; x (i:i+n) ; y (i:i+n) )

MBGD 每一次利用一小批样本,即 n 个样本进行计算, 这样它可以降低参数更新时的方差,收敛更稳定,另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。和 SGD 的区别是每一次循环不是作用于每个样本,而是具有 n 个样本的批次。

for i in range(nb_epochs):
  np.random.shuffle(data)
  for batch in get_batches(data, batch_size=50):
    params_grad = evaluate_gradient(loss_function, batch, params)
    params = params - learning_rate * params_grad

batch_size通常为:50~256。

缺点: 

不过 Mini-batch gradient descent 不能保证很好的收敛性:

1. learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离。(有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小 learning rate,不过这个阈值的设定需要提前写好,这样的话就不能够适应数据集的特点)

2. 此外,这种方法是对所有参数更新时应用同样的 learning rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新。

3. 另外,对于非凸函数,还要避免陷于局部极小值处,或者鞍点处,因为鞍点周围的error 是一样的,所有维度的梯度都接近于0,SGD 很容易被困在这里。

函数凹凸性:

鞍点:一个光滑函数的鞍点邻域的曲线,曲面,或超曲面,都位于这点的切线的不同边。

原文地址:https://www.cnblogs.com/ChrisInsistPy/p/9510650.html

时间: 2024-08-27 00:39:01

神经网络- 深度学习optimizer的选择的相关文章

人工神经网络 深度学习 MLP RBF RBM DBN DBM CNN 整理学习

注:整理自向世明老师的PPT 内容提要 1 发展历史 2 前馈网络(单层感知器,多层感知器,径向基函数网络RBF) 3 反馈网络(Hopfield网络,联想存储网络,SOM,Boltzman及受限的玻尔兹曼机RBM,DBN,CNN) 发展历史 单层感知器 1 基本模型 2 如果激励函数是线性的话,可用最小二乘直接计算 3 如果激励函数是sifmoid function,可迭代更新(一次性或者逐样本更新) 上式只做了简单的求导展开,很容易推导 多层感知器 1 基本模型 2 举例(含有一个隐含层的多

神经网络深度学习 学习小记

一.sigmod function出现的必要性: 为什么不直接用stage function?在feedback时,假如说我们现在用的是stage function,直接用楼梯式的跳跃函数,我们每次做很小的参数改动时.如果说这个之前这个参数使函数值落在0-1 改变的那一块区域,即便我们做的change很小,但是很有可能直接导致函数最后的0改为1 ,假如这只是输入层改变为1 ,但是这个1 的改变会影响后续太多的网络结构,也就是说stage function会使网络波动过大.而sigmod函数的平滑

分享《解析卷积神经网络深度学习实践手册》+PDF+魏秀参

下载:https://pan.baidu.com/s/1PIFgdKULw_dWtJAvoTHFJA 更多资料学习:http://blog.51cto.com/14087171 版权说明:本人无版权,请您在体验电子版书籍的同时,支持正版,购买正版书籍!!! 首页如下图 原文地址:http://blog.51cto.com/14087171/2323402

吴裕雄--天生自然 神经网络人工智能项目:基于深度学习TensorFlow框架的图像分类与目标跟踪报告(续一)

1.3 项目计划 第一周:深入学习和了解神经网络的工作原理,学习卷积的相关理论. 第二周:使用python的TensorFlow库,编写神经网络深度学习代码,搭建神经网络层,并且了解其工作原理和相关的计算.相关参数的传递等,到htttps://www.kaggle.com/moltean/fruits下载fruits压缩包,对数据进行初步的处理. 第三周:使用TensorFlow搭建卷积神经网络,采用训练集数据对测试集数据进行预测:完成数据可视化,显示每个文件夹中第5张图片.使用Tensorbo

深度学习在美团点评推荐平台排序中的应用--学习笔记

写在前面:据说下周就要xxxxxxxx, 吓得本宝宝赶紧找些广告的东西看看 gbdt+lr的模型之前是知道怎么搞的,dnn+lr的模型也是知道的,但是都没有试验过 深度学习在美团点评推荐平台排序中的运用 原创 2017-07-28 潘晖 美团点评技术团队 美团点评作为国内最大的生活服务平台,业务种类涉及食.住.行.玩.乐等领域,致力于让大家吃得更好,活得更好,有数亿用户以及丰富的用户行为.随着业务的飞速发展,美团点评的用户和商户数在快速增长.在这样的背景下,通过对推荐算法的优化,可以更好的给用户

深度学习在美团点评推荐平台排序中的运用

深度学习在美团点评推荐平台排序中的运用 原文地址:https://tech.meituan.com/dl.html 潘晖 美团点评搜索推荐团队 ·2017-07-28 14:33 美团点评作为国内最大的生活服务平台,业务种类涉及食.住.行.玩.乐等领域,致力于让大家吃得更好,活得更好,有数亿用户以及丰富的用户行为.随着业务的飞速发展,美团点评的用户和商户数在快速增长.在这样的背景下,通过对推荐算法的优化,可以更好的给用户提供感兴趣的内容,帮用户更快速方便的找到所求.我们目标是根据用户的兴趣及行为

深度学习性能提升的诀窍

深度学习性能提升的诀窍[转载] 原文: How To Improve Deep Learning Performance 作者: Jason Brownlee 提升算法性能的想法 这个列表并不完整,却是很好的出发点.我的目的是给大家抛出一些想法供大家尝试,或许有那么一两个有效的方法.往往只需要尝试一个想法就能得到提升.我把这个列表划分为四块: · 从数据上提升性能 · 从算法上提升性能 · 从算法调优上提升性能 · 从模型融合上提升性能 性能提升的力度按上表的顺序从上到下依次递减.举个例子,新的

深度学习能否取代其他机器学习算法

[编者按]深度学习在最近两年非常火爆,但深度学习能否取代其他机器学习算法?纽约大学研究生Ran Bi根据Quora上的一个讨论总结了不同的观点,CSDN编辑将其翻译如下,并加上一些国内人工智能专家的观点,供大家参考. 深度学习迅速地成长起来了,并且以其疯狂的实证结果着实令我们惊奇.Quora上有一个关于深度学习是否会让其他的机器学习算法过时的讨论.特别地,相关的算法,如反向传播.HMM会像感知机一样过时吗? 这很难回答.Google DeepMind研发工程师Jack Rae对此有一个有趣的回答

吴恩达-深度学习-课程笔记-8: 超参数调试、Batch正则化和softmax( Week 3 )

1 调试处理( tuning process ) 如下图所示,ng认为学习速率α是需要调试的最重要的超参数. 其次重要的是momentum算法的β参数(一般设为0.9),隐藏单元数和mini-batch的大小. 第三重要的是神经网络的层数和学习率衰减 adam算法的三个参数一般不调整,设定为0.9, 0.999, 10^-8. 注意这些直觉是ng的经验,ng自己说了,可能其它的深度学习研究者是不这么认为的. 那么如何选择参数呢?下面介绍两个策略,随机搜索和精细搜索. 早一代的机器学习算法中,如下