国际机器学习大会(ICML)即将于6月19日-24日在纽约召开,众多顶尖的科研人员与公司的人工智能实验室提交了最新研究论文。在此,雷锋网为大家分享著名学者 Yoshua Bengio 与谷歌 DeepMind 研究科学家等人合作的研究论文。最近业界对于“闸门”架构重新产生了兴趣,这种架构可以应用在图片或视频自动标题生成等广泛领域,虽然这项方法获得了成功,但是还存在关键问题。本片论文以引入噪音——看似违反直觉的“反人类”方法——解决了传统激活函数饱和效应难以优化的问题。
今年8月,谷歌 DeepMind CEO Demis Hassabis 也将参与雷锋网举办的人工智能与机器人创新大会。
Yoshua Bengio:人工智能领域的知名学者,在神经网络和深度学习领域的重要贡献广为人知,目前在蒙特利尔大学任职。
Caglar Gulcehre:蒙特利尔大学LISA实验室博士生,导师为Yoshua Bengio,研究领域包括机器学习、深度学习、自然语言处理、机器视觉等。
Misha Denil:谷歌 DeepMind 研究科学家,曾在牛津大学获得博士学位。
Marcin Moczulski:牛津大学博士生。
《噪音激活函数》
摘要
神经网络中常见的非线性激活函数会为训练带来困难,由于激活函数的饱和行为,可能会隐藏对于vanilla-SGD(只使用一阶梯度)来说,不可见的依存性。一个很好的例子就是,一些闸门机制使用软饱和激活函数来模拟数字逻辑电路的离散开关。我们提出注入合适的噪音,从而让梯度容易求导,即便是激活函数的无噪音应用会带来零梯度。大噪音会主导无噪音梯度,并让随机梯度下降可以进行更多探索。通过只在激活程序的问题部分增加噪音,我们让优化过程可以探索激活程序中退化(饱和)部分和良好部分的边界。我们还建立了联接来模拟退火,当噪音的数量退火下降,从而让优化硬目标函数更容易些。通过实验我们发现,用噪音变量替换饱和激活函数可以在很多情况下帮助优化,在不同的数据库和任务中产生顶尖的或者非常有竞争力的结果,尤其是在训练看起来最为困难的时候,例如,当必须通过课程学习来获得好结果的时候。
1、简介
类似ReLU和Maxout(Goodfellow等,2013)单元等分段线性激活函数的引入,对深度学习带来了深远的影响,并且成为一种催化剂,让更深的网络训练成为可能。多亏了 ReLU,我们第一次看到了纯监督下的深度网络可以进行训练(Glorot等,2011),而使用 tanh 非线性函数只能训练较浅的网络。关于最近兴起的对于这类分段线性激活函数(Glorot等,2011)的兴趣,一个说得通的理论是,因为它们使用SGD和反向传播算法进行优化,比使用 sigmoid 和 tanh 等平滑激活函数进行优化更加容易。最近我们可以在计算机视觉领域中看到分段线性函数的成功案例,这个领域中 ReLU 已经成为了卷积网络的默认之选。
我们提出了一种新技术来训练神经网络,当其输入很大时使用高度饱和的激活函数。主要的方法是在激活函数中的饱和状态注入噪音,并学习噪音等级。使用这种方法让我们发现,我们可以训练带有比之前更广泛的激活函数家族的神经网络。在激活函数中加入噪音已经在 ReLU 单元中有人考虑过,并且在前馈网络和 Boltzmann 机器中有过探索(Bengio等,2013;Nair & Hinton,2010)来鼓励单元进行更多探索,让优化更加容易。
在这之后,最近重现了一股对于更加制作精良的“闸门”架构的兴趣,例如LSTM(Hochreiter & Schmidhuber,1997)和GRU(Cho等,2014),以及对于包含神经注意机制的兴趣,这些机制已经用在NTM(Graves等,2014)、记忆网络(Weston等,2014)、自动图片标题(Xu等,2015b)、视频标题生成(Yao等,2015)以及广泛的应用领域(LeCun等,2015)。这些研究中经常出现的主线是对于软饱和非线性的使用,例如signoid或者softmax函数,来模拟数字逻辑电路的硬决策。虽然这项方法获得了成功,但是还有两项关键问题:
1、由于非线性函数仍然饱和,就会有消亡的梯度信息从闸门流入的问题;
2、由于非线性函数只会软饱和,它们没法让我们实现硬决策。
虽然闸门经常在软饱和状态运作(Karpathy等,2015;Bahdanau等,2014;Hermann等,2015),架构使得它们没法完全处于开放或关闭的状态。我们采用了一种新的方法,来解决这两项问题。我们的方法通过使用硬饱和非线性函数来解决第二个问题,这让闸门可以在饱和的时候可以做出完全开或关的决定。由于闸门可以是完全开放或关闭的,软闸门架构的泄露性也不会导致信息丢失。
通过引入硬饱和非线性函数,我们加剧了梯度流的问题,由于在饱和状态的梯度现在是精确的零,而非可以忽略的。然而,通过引入噪音到激活函数中,函数可以基于饱和量级而增长,我们鼓励随机探索。我们的研究基础是,现有的对分段线性激活函数中注入噪音的方法研究(Bengio等,2013;Nair&Hinton,2010;Xu等,2015a)。
在测试的时候,激活函数里的噪音可以用其期望值代替。我们的实验显示,结果产生的决定论网络在许多类型的任务中都优于软饱和网络,只要在现有的训练代码中简单地直接替代非线性函数,就能实现顶尖的运行表现。
我们提出的技术解决优化的难度,以及测试时针对闸门单元硬激活的难度,而且我们提出了一种进行神经网络模拟退火的方法。
Hannun等(2014)和Le等(2015)使用了带有 RNN 的 ReLU 激活函数。在这篇论文中我们成功证明了,使用带有闸门循环神经网络(例如 LSTM 和 GRU)的分段线性激活函数是可行的。
2、激活函数饱和化
定义 2.1. (激活函数)
激活函数是函数 h : R → R,在几乎所有地方都是可微的。
定义 2.2. (饱和)
一个具有导数 h’(x) 的激活函数 h(x) ,如果当 x→∞(resp. x → -∞)时,其极限为0,则被称为右(resp. 左)饱和。如果一个激活函数既左饱和也右饱和,则被称为饱和(没有资格)。
在循环神经网络中使用最常见的激活函数(例如 tanh 和 sigmoid)是饱和的。而且,它们是软饱和,意味着他们至在极限实现饱和。
定义 2.3. (硬和软饱和)
令 c 为一个常数,使得 x > c 意味着 h’(x) = 0,而且当 x < c 意味着 h’(x) = 0,∀x,则为左硬饱和。我们称 h(·) 为硬饱和(没有资格)如果它既左硬饱和、又右硬饱和。如果一个饱和激活函数只有在极限实现零梯度,我们称其为软饱和。
我们可以使用一个关于0的一阶泰勒展开,并将结果修剪到适合的范围内,从而创建一个硬饱和版本的软饱和函数。
举个例子,围绕0展开 tanh 和 sigmoid,x ≈ 0,我们分别获得 tanh 和 sigmoid 的线性函数 ut 和 us:
sigmoid (x) ≈ us (x) = 0.25x + 0.5 (1)
tanh (x) ≈ ut(x) = x. (2)
将线性近似结果修剪为:
hard - sigmoid (x) = max ( min ( us (x),1),0) (3)
hard - tanh (x) = max ( min ( ut (x),1),-1) (4)
这样创建的目的是为了引入围绕 0 的线性行为,让梯度在单元不饱和的时候容易流入,同时在饱和状态提供清晰的决策。
图1:不同激活函数的导数图。
硬 sigmoid 和硬 tanh 之所以能够进行清晰决策,是付出了饱和状态正好 0 梯度的代价。这会在训练时带来困难:激活前(在非线性前)一个很小但非无穷小的变化会帮助减少目标函数,导数则不会在梯度中反应出来。
在论文的其余部分我们会使用 h(x) 来指代一个一般的激活函数,使用 u(x) 来标记其以关于 0 的一阶泰勒展开为基础的线性化。当 x ≤ -2 或 x ≥ 2 时,硬 sigmoid 饱和;当 x ≤ -1 或 x ≥ 1 时,硬 tanh 饱和。我们用 xt 标记阈值。阈值的绝对值针对硬 sigmoid 时为 xt = 2,针对硬 tanh 时为 xt = 1。
高度非平滑梯度下降轨迹可能将参数带入一个状态,使得一个单元针对某一例子向着 0 梯度状态激活,它可能很难从这儿脱离,单元可能会卡在 0 梯度状态中。
当单元饱和、梯度消失,算法可能得需要许多训练例子和许多计算才能恢复。
3、用噪音激活函数退火
我们来考虑一个噪音激活函数 Θ(x, ζ ) ,其中我们已经注入了 iid 噪音 ζ 来代替一个饱和非线性函数,例如在之前部分介绍过的硬 sigmoid 和硬 tahn。在下一个部分,我们描述我们提出的噪音激活函数,这个函数已经在我们的实验中使用,但是这里我们希望考虑一个更大家族的此类噪音激活函数,使用一个随机梯度下降(SGD)用于训练。
令 ζ 具有变量 δ2 和平均数 0。我们希望随着我们慢慢为此噪音退火来描述发生的状况,从大的噪音等级 (δ → ∞)到根本没有噪音 ( δ → 0)。
我们还将更进一步,假设 Θ 可以当噪音等级变大时,其关于 x 的导数为:
图2:一个一维、非凸目标函数的例子,其中一个简单的梯度下降会表现很差。有了大噪音 | ζ | → ∞, SGD可以脱离鞍点和作为探索结果的局部极小值。当我们将噪音等级降火至 | ζ | → 0,SGD会最终汇聚到局部最小值 x* 之一。
在 0 噪音极限,我们修复一个决定论的非线性函数 Θ(x , 0 ),在我们的试验中是一个分段线性函数,这让我们可以了解那种我们想要学习的复杂函数。正如图2中所示,在大噪音极限可以获得大梯度,因为通过 Θ 进行反向传播会带来大导数。因此,噪音淹没了信号:就例子来说,参数上梯度比 δ = 0. SGD 时要大得多,因此只看到噪音,而且可以在参数空间内移动到任何地方,不会“看见”任何趋势。
退火也与信号噪音比有关,其中 SNR 可以定义为噪音方差的比例 δsignal 和 δnoise, 。 如果 SNR → 0,模型将进行纯粹随机的探索。当我们退火时 SNR 会增加,当 δnoise 趋近于0时,训练中探索的唯一来源将是随机梯度的蒙特卡洛模拟。
要让例如模拟退火(Kirkpatrick等,1983)和延续方法(Allgower & Georg,1980)等方法能在优化困难的非凸目标函数的情境下有所帮助,这正是我们所需的。具有高噪音的 SGD 可以自由探索空间的所有部分。随着噪音等级下降,它会更倾向于某些区域,其中信号足够强,可以被 SGD 所“看到”:当SGD 步骤数量有限时,噪音没有算出平均数,而且方差持续占据主导地位。然后,随着噪音等级降低,SGD 花更多的时间在“总体更好”的参数空间区域。随着噪音靠近0,我们在微调解决方案,靠近无噪音目标函数的最小值。一个相关的方法是在梯度中增加噪音,并为噪音退火,这种方法 Neelakantan等人(2015)也有过研究。Ge等(2015)证明了带有退火噪音的 SGD 会从整体汇聚到一个局部最小值,为了多项式次的迭代中的非凸目标函数。最近,Mobahi(2016)提出了一种优化方法,在损失函数上使用高斯平滑,这样退火权重噪音就是其蒙特卡洛模拟。
4、单元饱和时增加噪音
在我们提出的噪音激活背后有一个新想法,就是加入非线性的噪音数量与非线性的饱和度的量级是相称的。对于硬 sigmoid (x) 和硬 tanh(x) 来说,由于我们的噪音参数化,这意味着只有当硬非线性饱和时才增加噪音。这与之前提出的方法都不同,例如 Bengio(2013)提出的噪音激活器,当噪音刚好在一个激活器(ReLU)单元前增加时,与输入是在非线性函数的线性状态还是在饱和状态无关。
目的是为了在单元在非饱和(通常是线性)状态时保持训练信号干净,并在单元处于饱和状态时提供一些噪音信号。
h(x) 指代硬饱和激活函数,例如部分2介绍过的硬 sigmoid 和硬 tanh,我们考虑以下形式的噪音激活函数:
并且 s = μ + δζ 。其中 ζ 是一个从一些生成分布中获取的 iid 随机变量,参数 μ 和 δ(以下会进行讨论)用于从 ζ 中生成一个位置尺度族。
当单元饱和时,我们凭直觉将其输出绑定在阈值 t 并增加噪音。这种方法的准确行为取决于噪音 ζ 的类型和 μ 和 δ 的选择,我们可以随着 x 函数而选择,从而让一些梯度传播,即便是我们在饱和状态中。
一个我们希望 Θ 可以近似满足理想特特性是,它的预期值等于硬饱和激活函数,即:
如果 ζ 分布的平均为 0,那么令 μ = 0 可以满足这项特性,但是对于有偏的噪音必须对 μ 选择其他值。实际上,我们使用了轻度有偏的 Θ,实现了较好的结果。
出于直觉,我们希望当 x 深入饱和状态时增加更多的噪音,因为要将 h 去饱和化需要参数的大变化。相反的,当 x 靠近饱和阈值,参数的小变化就足够其脱离了。为了这个目的,我们在选择噪音大小时利用了最初的激活函数 h 机器线性化 u 之间的差异:
在未饱和状态,△的量为0,当 h 饱和,它与 |x| 和饱和阈值 xt 之间的距离等比例增长。我们还将 |△| 称为饱和量级。
我们试验了用 △ 来测量 δ 的不同方法,并通过实证发现以下方程的表现更好:
在方程9中,自由标量参数 p 在训练中习得。通过改变 p,模型能够调整噪音的量级,这还影响梯度的信号。超参数 c 改变噪音的标准方差的大小。
4.1. 饱和状态的导数
我们方法中的最简单情况下,我们从一个无偏分布(例如正态分布)中获得 ζ 。在这种情况下,我们选择 μ = 0 来满足方程7,因而我们将有:
由于我们对 δ(x) 进行了参数化,当 |x| ≤ xt, 我们的随机激活函数将精确按照线性函数 u(x) 来运行,到达一个熟悉的领域。因为 △ 将为 0。让我们暂时集中注意力考虑 |x| > xt 以及 h 饱和的情况。这种情况下,h(x) 的导数正好是 0,然而,如果我们限制条件在样本 ζ,我们就有了:
图3:在线性激活函数上增加高斯噪音的简单描绘,这将平均值带回硬饱和非线性 h(x)。它的线性化是 u(x),而且噪音激活是 Θ。h(x) - u(x) 的差异是 △,这是一个矢量,表明了线性化函数和实际函数之间的差异,在实际函数上噪音加入到 h(x)。注意,在函数的非饱和部分当 u(x) 和 h(u) 完全匹配时, △ 将为 0。
在非饱和状态,当 Θ'(x, ζ) = h'(x),优化可以利用 h 靠近原点的线性结构来调整其输出。在饱和状态,ζ 的随机性推动了探索,梯度仍然流回到 x,因为音量的大小取决于 x。为了重新迭代,我们在每一个点获取梯度信息即便 h 存在饱和度,而且在饱和状态梯度信息的方差取决于 δ'(x)ζ。
4.2. 将激活推向线性状态
带有无偏噪音方程的一个不满意之处就是,取决于 ζ 的值,Θ的梯度偶尔会指向错误的方向。这会引起一个倒回的信息,会将 x 推向的在 ζ 上平均恶化目标方程的方向。我们凭直接更希望当 h(x) 的梯度可以安全使用的时候,这些信息可以将饱和单元向一个非饱和状态“推回”。
一个简单的办法是确保噪音 ζ 永远是正的,并调整其信号来手动匹配 x 的信号。具体来说,我们可以设定:
当 ζ 和 δ 和原先一样, sgn 是信号函数,这样当 x 大于或等于 0 的时候, sgn(x) 为1,否则 sgn(x) 为-1。我们还在噪音的重参数化中使用了 ζ 的绝对值,这样噪音从一个半正态分布中取样。我们忽略了 ζ 的信号,这样噪音推动激活的方向是由 d(x) 决定的,并会指向 h(x)。将噪音的信号与 x 的信号相匹配,可以确保我们避免在噪音和反向传播的梯度信息之间信号取消。要将激活函数推向 h(x),当引入 α 偏见时,sgn(1-α) 是必须的。
在实践中,我们使用了超参数 α 来影响增加的术语,这样 1 附近的 α 近似满足以上条件,可以从图4中看到。我们可以以特定方式重写噪音术语 s,让噪音可以加入线性化函数或者加入 h(x)。△、u(x)和 h(x) 之间的关系在图4.1中展现出来,可以用方程11来表达。
我们试验了不同类型的噪音。实证中,就表现来说我们发现,半正态和正态噪音更好。在方程11中,我们提供了激活函数的方程,其中如果噪音从半正态分布中取样,则 ε = |ζ|;如果噪音从正态分布中取样,则 ε = ζ。
通过使用方程11,我们实现了噪音激活,这在我们的实验中应用了。
我们可以在方程12中看到,梯度可以遵循三种路径流入神经网络,线性路径 (u(x))、非线性路径(h(x))和随机路径(δ(x))。梯度流入这些不同路径,穿过不同层,让激活函数的优化更加简单。
在测试的时候,我们使用方程12的预期值来获得决定论的单元。
当 ε = ζ, Eζ[ε]为 0。否则,如果 ε = |ζ|,则Eζ[ε] 为 根号π
算法1:针对硬饱和函数使用半正态噪音的噪音激活函数。
为了说明 α 和硬 tanh 的噪音激活函数的影响,我们在图4中提供了随机激活函数的图表。
图4:我们的噪音激活函数使用不同 α 值时的随机行为,α 值从正态分布中取样,近似硬 tanh 非线性函数(深绿色)。
5、在函数输入中加入噪音
人们已经针对 ReLU 激活函数,研究了如何将固定标准方差的噪音增加到激活函数的输入中(Nair & Hinton,2010;Bengio等,2013)。
在方程14中,我们提供了一种噪音激活函数的参数化。Δ 可以像在方程9中一样习得,或者作为超参数固定。
方程5中的条件只有当 δ 为习得的时候才满足。通过实验我们发现,较小的 δ 值效果更好。当 δ 的值小且固定,随着 x 越来越大、距离阈值 xt 越来越远,噪音将激活推回线性状态的可能性也就越小。我们还调查了当激活饱和时注入输入噪音的影响:
6、实验结果
在我们的实验中,我们只在训练时使用了噪音:在测试时,我们将噪音变量替换为其期望值。我们在现有的实验设置中直接代替激活程序,没有改变之前设定的超参数。这样,我们可以通过在具有噪音激活函数的模型上仔细进行超参数调试来获得更好的结构。在我们所有的实验中,我们用范围 [-1, 1] 中的随机值初始化 p。
我们使用具有正态 (NAN)、半正态噪音(NAH)、函数输入中的正态噪音(NANI)、函数输入中带有习得的 δ 的正态噪音(NANIL)以及当单元饱和时注入函数输入的正态噪音(NANIS)。不同类型的噪音激活函数可以在这里获得:https://github.com/caglar/noisy_units.
6.1. 探索性分析
作为合理性验证,我们进行了一个小型控制实验,为了观察噪音单元的行为。
我们训练了3层的MLP,使用一个混合物中生成的数据库,混合物由3个平均值不同的高斯分布和标准方差合成。MLP的每一层包含8个隐藏单元。具有 tanh 和噪音-tanh 激活函数的模型都能几乎完美地完成这项任务。通过使用习得的 p 值,我们在图5和图6中展示了每一层、每一个单元的激活函数的散点图,以及每一层、每一单元关于其输出的导数函数。
图5:每一层、每一单元针对单元输入的导数。
图6:每一层学会的激活函数。
6.2. 学会执行
关于 Zaremba & Sutskever(2014)提出的短程序的输出预测问题,对于现代的深度学习架构来说是一个挑战。作者们必须使用课程学习(Bengio等,2009)让模型先获取较为简单的例子中的知识,然后随着训练深入,增加例子的难度。
我们将参照模型中所有的 sigmoid 和 tanh 非线性函数替换为噪音函数。为了避免数字稳定性问题,我们将默认的梯度范围从10变为5。当评估一个网络时,执行程序的长度(行数)设置为6、嵌套设置为3,这是这些任务发布代码的默认设置。参照模型和噪音激活模型都是用“综合”课程训练的,这是最复杂、也是表现最好的一个课程。
我们的结果显示,应用提出的激活函数比参照模型的运行效果更好。而且,结果显示了我们的方法很容易与非平凡训练课程相结合。我们的结果展示在表格1和图8中。
表格1:学会执行任务中噪音网络的表现。仅仅是改变激活函数到噪音中,就能带来大约2.5%的精度提升。
图7:Penntreebank数据库上,在单词层面LSTM语言模型验证困惑度的学习曲线。
图8:参照模型(Zaremba & Sutskever,2014)的训练曲线,及其“学习执行”任务中的噪音变量问题。噪音网络可以更快地汇聚,并达到更高的精度,显示了噪音激活可以帮助更好地优化此类难以优化的任务。
表格2:Penntreebank数据库词汇等级的比较级困惑度。在 Zaremba 等(2014)的代码中,我们只将 sigmoid 和 tanh 替换成了相应的噪音变量,并且观察到困惑度有显著的提升,这让这种方法成为这项任务最好的方法。
6.3. Penntreebank实验
我们训练了一个单词层面的基于Penntreebank的双层LSTM语言模型。我们使用与Zaremba等(2014)提出的同样的模型。我们只是将所有的 sigmoid 和 tanh 单元替换为噪音硬 sigmoid 和硬 tanh 单元。参照模型是一个从 Zeremba等(2014)而来的经过良好调试的很强的基线。对于噪音实验,我们使用了完全一样的设置,但是将梯度阈值从10降低到5。我们在表格2提供了不同模型的结果。就验证与测试表现来说,我们没有观察到从正态和半正态分布中增加噪音有很大的区别,但是噪音带来了显著的提升,这让我们的结果成为针对该任务我们所知道的最好的方法。
6.4. 神经机器翻译实验
我们基于 Europarl 数据库,使用神经注意模型(Bahdanau等,2014)训练了一个神经机器翻译(NMT)模型。我们将所有的 sigmoid 和 tanh 单元替换为噪音函数。我们通过乘以 0.01,缩小了初始为垂直比例的权重矩阵。评估是使用 nestest2011 测试库完成的。所有模型都用提前停止方法来训练。我们还比较了具有硬 tanh 和硬 sigmoid 单元的模型,而我们使用噪音激活的模型比这两个都更好,结果展示在表格4中。就英语到法语的机器翻译来说,我们再一次看到了实质性的进步(不只2个BLUE点)。
6.5. 图像标题生成实验
我们在一个用 Flickr8k 数据库训练的网络来评估我们的噪音激活函数。我们使用了 Xu 等(2015b)提出的软神经注意模型,作为我们的参照模型。我们通过乘以 0.01,缩小了初始为垂直比例的权重矩阵。正如在表格3中所示,我们可以获得比参照模型更好的结果,而且就 Metero 分数来说,我们的模型还优于 Xu 等(2015b)提供的最好的模型。
表格3:图片标题生成实验。
Xu 等(2015b)的模型是在情景和 LSTM 层上使用比率为0.5的信号丢失。正如表格3中所示,有和没有信号丢失的模型我们都已经尝试过了,在带有噪音激活函数的信号丢失时我们观察到了提升。但是主要的提升貌似来自于噪音激活函数的引入,因为没有信号丢失的模型已经优于参照模型。
6.6. 延续方法实验
我们进行了实验,来验证针对神经网络使用退火噪音,获得延续方法的效果。
我们设计了一个新的任务,其中有一个随机的整数数列,目标是预测数列中独特的数字。我们在输入序列中使用了一个 LSTM 网络,在 LSTM 的隐藏状态中进行了一个时间平均池化,来获得固定大小的矢量。我们将池化的 LSTM 表征输入一个简单的(具有一个隐藏层的)ReLU MLP,来预测输入数列中独特的数字元素。在实验里我们将输入数列的长度固定为26,输入值范围为 0 至 10。为了让噪音降火,我们开始用噪音标准方差的规模超参数进行训练,标准方差中 c = 30,将其退火值降至 0.5,使用时间表,其中,每200个微批次更新,t 的值就增加。当噪音退火与课程策略(开始先是短的序列,然后逐渐增加训练序列的长度)相结合,就获得了最好的模型。
表格5:在随机整数数列中寻找独特数字任务的实验结果。这体现了噪音等级退火的效果,让训练过程变为一个延续方法。噪音退火带来了比课程更好的结果。
在第二次测试中,我们使用了同样的退火步骤,用来在联想回忆任务中训练一个神经图灵机器(NTM)。我们用最少2个物品、做多16个物品来训练我们的模型。我们展示了带有控制器中噪音激活的 NTM 的结果,带有退火的噪音,并与一个常规 NTM 就验证错误进行比较。正如图9中可见,使用噪音激活的网络汇聚更快,很好地胜任了任务,而原始的网络没能实现低错误率。
图9:在联想回忆任务中NTM的验证学习曲线。带有噪音控制器的NTM可以汇聚更快,解决任务。
7、结论
神经网络中的非线性函数是福也是祸。它是福,因为它们让我们可以表征更加复杂的函数;它也是祸,因为那让优化过程更加困难。举个例子,我们在实验中发现,使用硬版本(因此更加非线性)的 sigmoid 和 tanh 非线性函数经常能够提升结果。过去人们提出过不同的策略,帮助解决训练一些深度网络时出现的优化问题,包括课程学习,这是延续方法的一种近似形式。早期研究还包括在训练中逐渐变得越来越硬的非线性函数的软化版本。受到这项过往研究的启发,我们引入了噪音激活的概念,作为一种在非线性函数中注入噪音的总体框架,大噪音让 SGD 可以更具有探索性。我们提出在激活函数注入噪音的时间点,或者在函数的输入,或者,如果不注入噪音单元便会饱和的话,就注入在输出,而且即使在这种情况下,也允许梯度流动。我们证明了我们的噪音激活函数更容易优化。而且,它实现了更少的测试错误率,由于注入激活函数的噪音同时也将模型常规化了。即便是固定噪音等级,我们也发现我们提出的噪音激活函数在不同的任务和数据库中优于使用 sigmoid 和 tahn 的函数,带来顶尖的或者非常有竞争力的结果,以及一个简单的修正,例如在PennTreebank。此外,我们发现通过噪音退火从而获取延续方法,可以进一步提升运行表现。