ZONEOUT: REGULARIZING RNNS BY RANDOMLY PRESERVING HIDDEN ACTIVATIONS翻译

本文主要是介绍ZONEOUT: REGULARIZING RNNS BY RANDOMLY PRESERVING HIDDEN ACTIVATIONS翻译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验代码github:https://github.com/teganmaharaj/zoneout

摘要

我们提出了zoneout,这是一种用于正则化RNN的新方法。 在每个时刻,zoneout随机地令某些隐藏单元保持其上一时刻的值。像dropout一样,zoneout使用随机噪声来训练伪集合,从而改善泛化。并且,通过保留而不是丢弃隐藏单元,梯度信息和状态信息更容易通过时间传播,如在前馈随机深度网络中那样。我们对各种RNN的正则化器进行了实证研究,发现zoneout可以在各个任务中显着提高性能。我们在Penn Treebank和Text8数据集上的字符和单词级语言建模中,使用相对简单的模型达到了较好的结果,并结合循环批量标准化(Cooijmans等,2016),在排列顺序MNIST上产生了最好的结果。

1.介绍

正则化神经网络可以显着提高性能,正如早期正则化方法(如dropout及其循环的变种)的广泛使用所表明的那样。在本文中,我们用一种叫做zoneout的新方法解决了循环神经网络(RNNs)中的正则化问题。
  RNN通过使用依赖于输入的转换操作将新的输入映射到其隐藏状态,顺序地构造任意长度序列的固定长度表示。然而,在序列的不同时刻重复应用相同的转换操作,会使得动态RNN对隐藏状态中的微小扰动敏感;这种动态转换可以指数地放大这些扰动的成分。Zoneout旨在提高RNN对隐藏状态扰动的鲁棒性,从而正则化这种动态转换过程。
  像dropout一样,zoneout会在训练期间注入噪音。但是,在dropout时,zoneout不是将某些单位的激活设置为0,而是随后将某些单位的激活替换为上一时刻的激活。与dropout一样,我们在测试时使用随机噪声的期望。这导致了一种简单的正则化方法,可以通过时间应用于任何RNN架构,并且在理论上可以扩展到其状态随时间变化的任何模型。
  与dropout相比,zoneout很有吸引力,因为它可以保留通过网络前向和后向的信息流。正如我们在实验中观察到的那样,这有助于消除梯度消失问题。
  我们还使用排列顺序MNIST数据集,使用Penn Treebank和Text8数据集进行语言建模,根据经验评估分类上的zoneout,展示跨任务的竞争或最好的性能。特别地,我们表明zoneout与其他提出的RNN正则化方法更好地发挥作用,包括最近提出的dropout变体。

2.相关工作

2.1 与Dropout的关系

Zoneout可以看作是对修改后的计算图中某些节点的dropout的选择性应用,如图1所示。在zoneout中,不是丢弃(设置为0),而是设置隐藏态单元区域为它们之前的 价值( h t = h t − 1 h_{t} = h_{t-1} ht=ht1)并输出。像dropout一样,Zoneout可以被视为训练伪合奏的一种方式,其使用随机“identity-masking”而不是zero-mask来注入噪声。我们推测identity-masking更适合RNN,因为它使网络更容易保留前一个时刻的信息,并且有助于而不是阻碍梯度信息向后流动,正如我们通过实验证明的那样。
在这里插入图片描述

2.2 RNNs中的Dropout

最初dropout在RNN中的成功应用仅将dropout应用于前馈连接(“向上堆叠”),而不是循环连接(“通过时间向前传递”), 但是最近的一些工作提出了不受这种方式限制的方法。Bayer等人成功地将fast dropout应用于RNN,这是一种对dropout的确定性近似。
  Semeniuta等将recurrent dropout应用于LSTM记忆单元(或GRU状态)的更新,即它们丢弃LSTM/GRU中的输入/更新门。像zoneout一样,他们的方法可以防止在GRU / LSTMS的状态/单元中丢失长期记忆,但是zoneout通过精确保留单元的激活来实现这一点。当zoneout LSTM的隐藏状态(不是记忆单元)时,这种差异是最显著的,因为在recurrent dropout中没有与之相似的操作。尽管饱和输出门或输出非线性会导致recurrent dropout遭受梯度消失,但在这种情况下,zoneout单元仍能有效地传播梯度。此外,虽然recurrent dropout方法在LSTM和GRU中的应用不同,但zoneout通用于任何依次建立其输入的分布式表示的模型,包括vanilla RNN
  为了防止记忆的丢失,Moon等人提出了rnnDrop。这种技术相当于在每个时刻使用相同的dropout mask,作者在实验中表现出改进的语音识别性能。然而,Semeniuta等表明,在rnnDrop测试时采取期望时,过去隐藏状态的影响力随着dropout概率的降低而呈指数下降;这对于涉及长期依赖性的任务来说是有问题的。
  Gal(2015)提出了另一种在每个时刻使用相同mask的技术。在变分推理的推动下,它们会丢弃输入和输出嵌入和LSTM门中的权重矩阵行,而不是丢弃单元的激活。所提出的变分RNN技术在Penn Treebank的单词级语言建模上实现了73.4的单模型最新测试困惑度。

2.3 与STOCHASTIC DEPTH的关系

Zoneout也可以被视为stochastic depth的单位版本,stochastic depth随机丢弃整个前馈残差网络层(ResNets),这相当于同时Zoneout出层的所有单元。在典型的RNN中,每个时刻都有一个新的输入,导致stochastic depth的初始实现问题。在RNN中Zoneout整个层意味着完全忽略相应时刻的输入,而Zoneout出单个单元允许RNN考虑其输入序列的每个元素。我们还发现在循环网络中使用残差连接导致不稳定,可能是由于RNN中的参数共享。与我们的工作同时,Singh等人为ResNets提出zoneout,称之为SkipForward。在他们的实验中,zoneout的表现优于stochastic depth,dropout和他们提出的Swapout技术(该技术随机地丢弃一个或两个恒等或残差连接)。与Singh等人不同,我们对RNN应用zoneout,发现它优于stochastic depth和循环dropout。

2.4 有选择更新隐藏单元

像zoneout一样,clockwork RNNs(Koutnik等,2014)和hierarchical RNNs(Hihi&Bengio,1996)在每个时刻都只更新一些单位的激活,但它们的更新是周期性的,而zoneout是随机的。受clockwork RNNs的启发,我们尝试了针对不同单元使用不同更新速率或计划的zoneout变体,但未发现任何性能优势。 Hierarchical multiscale LSTMs(Chung et al。,2016)使用直接估计器学习不同单元的更新概率,并结合最近提出的层归一化(Ba et al) al。,2016),在各种任务中取得较好结果。正如作者所指出的,他们的方法可以被解释为自适应zoneout的依赖于输入的形式。
  在最近的工作中,Ha等人使用超网络动态缩放主LSTM网络的行权重,当在一个双层网络中进行层归一化时,在字符级Penn Treebank上实现最好的1.21 BPC。这种缩放可以被视为变分LSTM的自适应可微分版本(Gal,2015),并且可以类似地用于创建自适应的,可微分的版本的zoneout。 最近的工作条件是区域出现的概率(衡量预测状态和实际状态之间的差异),并在enwik8上设定了新的技术水平(Rocki等,2016)。

3 ZONEOUT和措施

我们现在详细解释zoneout,并与RNNs中的其他形式的dropout进行比较。我们首先回顾一下循环神经网络(RNNs)。

3.1 循环神经网络

循环神经网络顺序地处理数据 x 1 , x 2 , . . . , x T x_1,x_2,...,x_T x1,x2,...,xT,构造相应的表示序列, h 1 , h 2 , . . . . , h T h_1,h_2,....,h_T h1,h2,....,hT。每个隐藏状态都被训练(隐式)以记住和强调前面输入的所有任务相关方面,并通过转换运算符 τ \tau τ合并新输入,转换运算符 τ \tau τ将上一时刻隐藏状态和当前输入转换为新隐藏状态: h t = τ ( h t − 1 , x t ) h_t = \tau(h_{t-1},x_t) ht=τ(ht1,xt)根据伯努利masks的矢量 d t d_t dt,Zoneout通过将原始转换运算符 τ ~ \tilde{\tau} τ~与恒等运算符(与dropout中使用的空运算符相对)混合来修改这些动态
Z o n e o u t : τ = d t ⊙ τ ~ + ( 1 − d t ) ⊙ 1 d r o p o u t : τ = d t ⊙ τ ~ + ( 1 − d t ) ⊙ 0 Zoneout:\qquad\tau=d_t \odot \tilde{\tau}+(1-d_t)\odot1 \\ dropout:\qquad \tau=d_t \odot \tilde{\tau}+(1-d_t)\odot0 Zoneout:τ=dtτ~+(1dt)1dropout:τ=dtτ~+(1dt)0
其中, 1 1 1 0 0 0为两个向量

3.2 长短期记忆

在长短期记忆RNNs(LSTMs)中,隐藏状态被分为用于内部存储长期记忆的记忆单元 c t c_t ct和用作时刻 t t t状态表示的隐藏状态 h t h_t ht。在最广泛使用的LSTM公式中, c t c_t ct h t h_t ht是通过四个“门”计算的,包括遗忘门 f t f_t ft,它通过按元素元素相乘,直接将 c t c_t ct连接到前一个时刻的记忆单元 c t − 1 c_{t-1} ct1。遗忘门使得记忆单元记住其先前值的大部分(不是全部)。其他门控制单元的( i t , g t i_t,g_t it,gt)和 o u t ( o t ) out(o_t) out(ot)中的信息流。每个门都有一个权重矩阵和偏置向量; 例如,遗忘门具有 W x f W_{xf} Wxf W h f W_{hf} Whf b f b_f bf。为简洁起见,我们将这些写为 W x W_x Wx W h W_h Wh b b b
  一个LSTM被定义如下:
i t , f t , o t = σ ( W x x t + W h h t − 1 + b ) g t = t a n h ( W x g x t + W h g h t − 1 + b g ) c t = f t ⊙ c t − 1 + i t ⊙ g t h t = o t ⊙ t a n h ( c t ) i_t,f_t,o_t = σ(W_xx_t + W_hh_{t−1}+b)\\ g_t = tanh(W_{xg}x_t + W_{hg}h_{t−1}+b_g)\\ c_t = f_t\odot c_{t−1}+i_t\odot g_t \\ h_t = o_t\odot tanh(c_t) it,ft,ot=σ(Wxxt+Whht1+b)gt=tanh(Wxgxt+Whght1+bg)ct=ftct1+itgtht=ottanh(ct)
  LSTM中的dropout的一个简单应用是将零屏蔽(zero-mask)用于记忆单元和隐藏状态中的一个或两个,而不改变门的计算 ( i , f , o , g ) (i,f,o,g) (i,f,o,g)。例如,丢弃记忆单元,改变 c t c_t ct的计算,如下所示:
c t = d t ⊙ ( f t ⊙ c t − 1 + i t ⊙ g t ) c_t=d_t\odot (f_t\odot c_{t−1}+it\odot gt) ct=dt(ftct1+itgt)
  然而,备选方案比比皆是。零屏蔽可以应用于门,单元和状态的任何子集。例如,Semeniuta等人对输入门进行零屏蔽:
c t = ( f t ⊙ c t − 1 + d t ⊙ i t ⊙ g t ) c_t=(f_t\odot c_{t−1}+d_t\odot i_t\odot g_t) ct=(ftct1+dtitgt)
  当像这样屏蔽输入门时,没有来自输入 x t x_t xt或隐藏状态 h t − 1 h_{t-1} ht1附加贡献,并且记忆单元的值根据遗忘门简单地衰减。
在这里插入图片描述
  在zoneout中,隐藏状态和记忆单元的值随机地要么保持其先前的值,要么像往常一样更新。这后续时刻之间引入了随机恒等连接:
c t = d t c ⊙ c t − 1 + ( 1 − d t c ) ⊙ ( f t ⊙ c t − 1 + i t ⊙ g t ) h t = d t h ⊙ h t − 1 + ( 1 − d t h ) ⊙ ( o t ⊙ t a n h ( f t ⊙ c t − 1 + i t ⊙ g t ) ) c_t =d^c_t\odot c_{t−1}+(1−d^c_t)\odot (f_t\odot c_{t−1} + i_t\odot g_t)\\ h_t=d^h_t\odot h_{t−1}+(1−d^h_t)\odot (o_t\odot tanh(f_t\odot c_{t−1}+i_t\odot g_t)) ct=dtcct1+(1dtc)(ftct1+itgt)ht=dthht1+(1dth)(ottanh(ftct1+itgt))
  我们通常对记忆单元和隐藏态使用不同的zoneout屏蔽。我们还尝试了一种循环dropout的变体,它重复使用输入dropout屏蔽来zoneout对应的输出门:
c t = ( f t ⊙ c t − 1 + d t ⊙ i t ⊙ g t ) h t = ( ( 1 − d t ) ⊙ o t + d t ⊙ o t − 1 ) ⊙ t a n h ( c t ) c_t = (f_t\odot c_{t−1}+d_t\odot it\odot g_t)\\ h_t = ((1−d_t)\odot o_t+d_t\odot o_{t−1})\odot tanh(c_t) ct=(ftct1+dtitgt)ht=((1dt)ot+dtot1)tanh(ct)
  此变体的动机是防止网络被(通过输出门)强制暴露未更新的记忆单元,因此可能包含误导性信息。

这篇关于ZONEOUT: REGULARIZING RNNS BY RANDOMLY PRESERVING HIDDEN ACTIVATIONS翻译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228467

相关文章

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

Kimichat使用案例026:AI翻译英语PDF文档的3种方法

文章目录 一、介绍二、腾讯交互翻译TranSmart https://transmart.qq.com/三、沉浸式翻译三、谷歌网页翻译 一、介绍 短的文章,直接丢进kimichat、ChatGPT里面很快就可以翻译完成,而且效果很佳。但是,很长的PDF文档整篇需要翻译,怎么办呢? 二、腾讯交互翻译TranSmart https://transmart.qq.com/ 软件

Creating custom and compound Views in Android - Tutorial(翻译)

Creating custom and compound Views in Android - Tutorial(翻译) 译前的: 之前做了三篇学习笔记,从知乎上面看到了这篇英文的推荐,总的来说可以是一篇导读,没有相关的学习,看这篇,可以作为一个学习脉络导向;有相关的学习底子,可以作为一个基础夯实、思维理清。没想到一翻译就是四个多小时…英语渣,很多词句都不太准确,幸好有之前的学习基础打底…

redis翻译2

分区:如何在多个Redis实例之间分割数据。 分区是将您的数据分割为多个Redis实例的过程,因此每个实例只包含您的密钥的一个子集。本文档的第一部分将向您介绍分区的概念,第二部分将向您展示Redis分区的备选方案。 为什么分区很有用 在Redis中进行分区有两个主要目标: 它允许更大的数据库,使用许多计算机的内存总和。如果不进行分区,您仅限于单台计算机可支持的内存量。它允许将计算能力扩

redis翻译1

文档 注意:Redis文档也可以在redis-doc github存储库中以原始(计算机友好)格式提供。Redis文档根据知识共享署名 - 相同方式共享4.0国际许可协议发布。 用Redis编程 Redis实施的完整命令列表以及每个命令的详细文档。流水线:了解如何一次发送多个命令,节省往返时间。Redis Pub / Sub:Redis是一个快速而稳定的Publish / Subscri

使用python3读取Excel,导出翻译供iOSAndroid使用

在日常工作中,我们在开发app的时候,经常有这么一种场景:     对于一个UI效果,如果存在多语言支持(国际化支持),我们往往希望事先在需要做翻译的地方标注对应的翻译标识符(这里我们称之为Key)。如果UI页面比较多的话,累积起来的Key就会很多。最后应用到项目中,我们就需要翻译人员针对每个Key给定不同语言下的显示值(这里我们称之为Value)。在一个项目中,如果翻译较多,涉及到的语言多的话

【翻译】RUST无锁编程

本文内容译自Lock-freedom without garbage collection,中间有少量自己的修改. 人们普遍认为,垃圾收集的一个优点是易于构建高性能的无锁数据结构。对这些数据结构进行手动内存管理并不容易,而 GC 使其变得非常简单。这篇文章表明,使用 Rust,可以为并发数据结构构建一个内存管理 API: 使得实现无锁数据结构和 有GC的语言(如Java) 一样容易;静态保护以防

【翻译】微软对 Rust 的热爱是怎么回事?

原文地址:https://visualstudiomagazine.com/articles/2020/06/02/rust-love.aspx?m=1原文作者:David Ramel (06/02/2020)译者:【 Jancd 】校对:【 Rust 日报小组 】 微软已经管理了几种流行的编程语言 - C#,TypeScript,F#,那为什么微软也和广大开发者一样也喜欢 Rust 呢?

Prompt 提示词工程:翻译提示

近期在对计算机学习时,许多内容需要看原始的英文论文,对于我这种学渣来说特别不友好,🤷🏻‍♀️无奈只能一边看翻译,一边学习。 之前有搜到过专门的翻译工具,无奈都是按照字数算费用的,对于十分抠门的的我来说,这不大可能。通过对大模型的了解,以及大模型翻译的质量,遂萌发了通过大模型进行翻译工作的想法,经过一些测试,效果还是不错的,这里为后期工具开发做一些提示词的收集和整理。 以下提示词在工程中

语法制导的翻译和属性文法

属性的分类 1.综合属性 重写规则(产生式)左部符号的属性是综合属性。一个结点相应文法符号的属性值通过语法分析树中它的子节点的属性之值计算(自底向上) 2.继承属性 出现在重写规则右部的符号的属性。一个结点相应文法符号的属性之值,通过语法树中它的兄弟节点与父节点相应文法符号的属性值来计算(自顶向下) 3.内在属性 不会出现在属性定义性出现集合中的属性。一般为终结符的属性。