当前位置: 首页 > 知识库问答 >
问题:

神经网络学习率和批次权重更新

谷泳
2023-03-14

我已经用Java编程了一个神经网络,现在正在研究反向传播算法。

我已经了解到权重的批量更新将导致更稳定的梯度搜索,而不是在线权重更新。

作为一个测试,我创建了一个100点的时间序列函数,这样x=[0..99]和y=f(x)。我创建了一个神经网络,有一个输入和一个输出,还有两个隐藏层,有10个神经元用于测试。在解决这个问题时,我所面临的是反向传播算法的学习速度。

我有100个输入点,所以当我计算每个节点的权重变化时,它实际上是一个和:

dw_{ij} = dw_{ij,1} + dw_{ij,2} + ... + dw_{ij,p}

其中p=100在这种情况下。

现在,权重更新变得非常巨大,因此我的错误反弹,很难找到最小值。我获得一些正确行为的唯一方法是将学习率设置为0.7/p^2。

是否有一些基于样本量设置学习率的一般规则?

共有2个答案

冀啸
2023-03-14

一个简单的解决方案是取一批的平均重量,而不是求和。这样,您只需使用0.7的学习率(或您喜欢的任何其他值),而无需担心优化另一个参数。

有关批量更新和学习率的更多有趣信息,请参阅Wilson(2003)的这篇文章。

金令
2023-03-14

http://francky.me/faqai.php#otherFAQs:

主题:什么学习率应该用于支持?

在标准backprop中,过低的学习率会使网络学习非常缓慢。过高的学习率会使权重和目标函数发散,因此根本没有学习。如果目标函数是二次的,就像在线性模型中一样,可以从Hessian矩阵计算出良好的学习率(Bertsekas和Tsitsiklis,1996)。如果目标函数有许多局部和全局最优,就像在具有隐藏单元的典型前馈NN中一样,则最优学习率在训练过程中经常会发生巨大变化,因为Hessian也会发生巨大变化。尝试使用恒定的学习率训练NN通常是一个乏味的过程,需要大量的尝试和错误。有关学习率和动量的选择如何与一些非常简单的网络中的数值条件相互作用的一些示例,请参阅ftp://ftp.sas.com/pub/neural/illcond/illcond.html

使用批处理训练,不需要使用恒定的学习率。事实上,根本没有理由使用标准的backprop,因为存在更高效、可靠和方便的批处理训练算法(请参阅“什么是backprop?”下的Quickprop和RPROP以及“什么是共轭梯度、Levenberg-马夸特等?”下提到的众多训练算法)。

backprop的许多其他变体已经发明出来。大多数人都有与标准backprop相同的理论缺陷:权重(步长)的变化幅度不应该是梯度幅度的函数。在权重空间的某些区域,梯度很小,需要较大的步长;当使用较小的随机权重初始化网络时,会发生这种情况。在权重空间的其他区域,梯度很小,您需要一个小的步长;当接近局部最小值时会发生这种情况。同样,大梯度可能需要小步或大步。许多算法试图调整学习速率,但任何将学习速率乘以梯度以计算权重变化的算法,在梯度突然变化时都可能产生不稳定的行为。Quickprop和RPROP的最大优点是,它们不会过度依赖于梯度的大小。传统的优化算法不仅使用梯度,还使用二阶导数或线搜索(或其组合)来获得良好的步长。

通过增量训练,在训练期间自动调整学习率的算法要困难得多。NN文献中出现了各种建议,但大多数都不起作用。Darken和Moody(1992)说明了其中一些建议的问题,不幸的是,他们没有提供解决方案。LeCun、Simard和PearlMutter(1993)以及Orr和Leen(1997)提供了一些有希望的结果,他们调整了动量而不是学习率。还有一种称为“迭代平均”或“Polyak平均”(Kushner和In1997)的随机近似变体,它在理论上通过保持权重值的运行平均值来提供最佳收敛率。我对这些方法没有个人经验;如果您有任何确凿的证据表明这些或其他自动设置学习率和/或增量训练动量的方法实际上适用于各种神经网络应用程序,请通知常见问题维护者(saswss@unx.sas.com)。

参考文献:

  • Bertsekas,D.P.和Tsitiklis,J.N.(1996),《神经动态规划》,马萨诸塞州贝尔蒙特:雅典娜科学出版社,ISBN 1-886529-10-8
  • Darken,C.和Moody,J.(1992),“迈向更快的随机梯度搜索”,Moody,J.E.,Hanson,S.J.,和Lippmann,R.P.,编辑
  • 神经信息处理系统进展4,加利福尼亚州圣马特奥:摩根·考夫曼出版社,第1009-1016页。Kushner,H.J.和Yin,G.(1997),《随机近似算法和应用》,纽约:Springer-Verlag。LeCun,Y.、Simard,P.Y.和Pearlmetter,B.(1993),“通过在线估计Hessian特征向量实现自动学习率最大化”,摘自Hanson,s.J.、Cowan,J.D.和Giles,
  • C、 L.(编辑),《神经信息处理系统的进展5》,加利福尼亚州圣马特奥:摩根·考夫曼,第156-163页。Orr,G.B.和Leen,T.K.(1997),“使用曲率信息进行快速随机搜索”,摘自
  • Mozer,M.C.、Jordan,M.I.和Petsche,T.,(编辑)神经信息处理系统进展9,剑桥,MA:麻省理工学院出版社,第606-612页

学分:

  • 档案名称:ai faq/神经网络/第1部分
  • 上次修改日期:2002年5月17日
  • URL:ftp://ftp.sas.com/pub/neural/FAQ.html
  • 维护人员:saswss@unx.sas.com(沃伦·S·萨尔)
  • 版权所有1997、1998、1999、2000、2001、2002,作者:Warren S.Sarle,Cary,NC,USA
 类似资料:
  • 深度神经网络的工作地点、原因和方式。从大脑中获取灵感。卷积神经网络(CNN)和循环神经网络(RNN)。真实世界中的应用。 使用深度学习,我们仍然是习得一个函数f,将输入X映射为输出Y,并使测试数据上的损失最小,就像我们之前那样。回忆一下,在 2.1 节监督学习中,我们的初始“问题陈述”: Y = f(X) + ϵ 训练:机器从带标签的训练数据习得f 测试:机器从不带标签的测试数据预测Y 真实世界很

  • 我最近开始实现一个前馈神经网络,我使用反向传播作为学习方法。我一直使用http://galaxy.agh.edu.pl/~vlsi/ai/backp_t_en/backprop.html作为指南。 然而,仅仅在第一个纪元之后,我的错误是0。在真正使用网络之前,我尝试了简单的网络结构: 4个二进制输入,1,1,0,0。 两个隐藏层,每个层4个神经元。 1个输出神经元,1.0应该=有效输入。 每个训练

  • 我正在建立一个分类神经网络,以便对两个不同的类进行分类。 所以这是一个二元分类问题,我正尝试用一个前馈神经网络来解决这个任务。 但是网络是不能学习的,事实上,在训练过程中,网络的精度是不变的。 具体而言,数据集由以下人员组成: 65673行22列。 其中一列是具有值(0,1)的目标类,而其他21列是预测器。数据集是这样平衡的: null 可以看到也有NaN值,但我不能删除它,因为在其他列中有值0是

  • 神经网络和深度学习是一本免费的在线书。本书会教会你: 神经网络,一种美妙的受生物学启发的编程范式,可以让计算机从观测数据中进行学习 深度学习,一个强有力的用于神经网络学习的众多技术的集合 神经网络和深度学习目前给出了在图像识别、语音识别和自然语言处理领域中很多问题的最好解决方案。本书将会教你在神经网络和深度学习背后的众多核心概念。 想了解本书选择的观点的更多细节,请看这里。或者直接跳到第一章 开始

  • 我创建了一个神经网络,其结构如下: Input1-Input2-输入层。 N0-N1-隐藏层。每个节点3个权重(一个用于偏移)。 N2——输出层。3个砝码(一个用于偏置)。 我正在尝试使用以下测试数据对其进行XOR函数训练: 0 1-期望结果:1 1 0-期望结果:1 0 0-所需结果:0 1 1-所需结果:0 训练后,测试的均方误差(当寻找1结果时){0,1}=0,我认为这很好。但是测试的均方误

  • 我试图用两个感知器网络做一个异或门,但由于某种原因,网络没有学习,当我在图中绘制误差的变化时,误差达到一个静态水平,并在该区域振荡。 目前我没有给网络添加任何偏见。 这是错误随着学习轮数的变化而变化。这是正确的吗?红色线是我所期望的错误将如何改变的线。