Independently Recurrent Neural Network(IndRNN):Building A Longer and Deeper RNN

阅读并整理《Independently Recurrent Neural Network(IndRNN):Building A Longer and Deeper RNN》论文,并解析其TensorFlow实现代码。
文章提出一种独立的循环神经网络,该网络可以用下面的公式表示。

这里U是一个vector,圈点符号表示的是Hadamard product这样每一层中的神经元就相互独立的在更新对于第n个神经元,隐含状态hn,thn,th_{n,t}可以表示为hn,t=σ(WnXt+Unhn,t−1+bn)hn,t=σ(WnXt+Unhn,t−1+bn)h_{n,t}=\sigma(W_{n}X_{t}+U_{n}h_{n,t-1}+b_{n}).这样使得下一层的某一个神经元与上一层所有神经元建立联系(上一层的输出作为这一层某一个神经元的输入),但与当前层的神经元没有联系,也就是所谓的相互独立。
这个网络公式方面实际上并不难,但作者对该网络的优势进行了很好的描述,下面逐一来看。

The gradient backpropagation throgh time for an IndRNN

下面来看公式看看IndRNN是如处理gradient vanishing and exploding 的 :
对于n-th个神经元hn,t=σ(WnXt+Unhn,t−1)hn,t=σ(WnXt+Unhn,t−1)h_{n,t}=\sigma(W_{n}X_{t}+U_{n}h_{n,t-1})这里为了计算简洁先不考虑偏置。
定义我们要优化的目标函数在T时刻为JnJnJ_{n},那么我们就可以表示出梯度在传到 t 时刻是多少。
∂Jn∂hn,t=∂Jn∂hn,T∂Jn,T∂hn,t=∂Jn∂hn,T∏k=tT−1σhn,k+1σhn,k∂Jn∂hn,t=∂Jn∂hn,T∂Jn,T∂hn,t=∂Jn∂hn,T∏k=tT−1σhn,k+1σhn,k\frac {\partial J_{n}} {\partial h_{n,t}} = \frac {\partial J_{n}} {\partial h_{n,T}} \frac {\partial J_{n,T}} {\partial h_{n,t}}=\frac {\partial J_{n}} {\partial h_{n,T}}\prod\limits^{T-1}_{k=t}\frac {\sigma h_{n,k+1}} {\sigma h_{n,k}}
=∂Jn∂hn,T∏k=tT−1σ′n,k+1Un=∂Jn∂hn,T∏k=tT−1σn,k+1′Un=\frac {\partial J_{n}} {\partial h_{n,T}}\prod\limits^{T-1}_{k=t}\sigma' _{n,k+1} U_n
=∂Jn∂hn,TUT−tn∏k=tT−1σ′n,k+1=∂Jn∂hn,TUnT−t∏k=tT−1σn,k+1′=\frac {\partial J_{n}} {\partial h_{n,T}}U_n^{T-t}\prod\limits^{T-1}_{k=t}\sigma' _{n,k+1}

从公式中可以看到,梯度仅仅与UT−tnUnT−t U_n^{T-t} 和σ′n,k+1σn,k+1′\sigma' _{n,k+1}有关,其中UT−tnUnT−t U_n^{T-t} 项是很容易调节的,这里的激活函数也往往属于某一特定范围。
而传统的RNN的梯度表示为:∂Jn∂hTUT−tn∏k=tT−1diag(σ′k+1)UT∂Jn∂hTUnT−t∏k=tT−1diag(σk+1′)UT\frac {\partial J_{n}} {\partial h_{T}}U_n^{T-t}\prod\limits^{T-1}_{k=t}diag(\sigma' _{k+1}) U^T这里的diag(σ′k+1)diag(σk+1′)diag(\sigma' _{k+1})是一个Jacobian matrix 。从IndRNN的公式中我们可以看到IndRNN的梯度仅与当前的weight相关,在特定的学习率的作用下这个权重只会有较小的更新,而Jacobian matrix的更新与特征值有关涉及到所有神经元的权重,因此每一个小的矩阵发生一点点的改变将会让该矩阵发生很大的波动。所以作者认为IndRNN的训练要比传统RNN更稳健。

下面设计方法来调整指数项到一个合适的范围从而使得IndRNN具有一定的长短期记忆。

假设T时刻的梯度能够传到t时刻,并记此时的梯度为∈∈\in,只要保证对于每一个神经元满足:|Un|∈[∈∏T−1k=tσ′n,k+1−−−−−−−−√(T−t),+∞]|Un|∈[∈∏k=tT−1σn,k+1′(T−t),+∞]|U_n|\in[\sqrt [(T-t)]{\frac{\in}{\prod_{k=t}^{T-1}\sigma'_{n,k+1}}},+\infty],这样梯度就不会在t时刻消失。
同样为了防止梯度在t时刻过大,此时需要满足:|Un|∈[γ∏T−1k=tσ′n,k+1−−−−−−−−√(T−t),+∞]|Un|∈[γ∏k=tT−1σn,k+1′(T−t),+∞]|U_n|\in[\sqrt [(T-t)]{\frac{\gamma}{\prod_{k=t}^{T-1}\sigma'_{n,k+1}}},+\infty],这里的γγ\gamma是最大的梯度用来保证梯度传到此时可不至于爆炸。
此时引入relu作为激活函数时当前神经元的权重就被限制在|Un|∈[0,γ−−√(T−t)]|Un|∈[0,γ(T−t)]|U_n|\in[0,\sqrt[(T-t)]{\gamma}]范围内

开源实现
Tensorflow:
https://github.com/batzner/indrnn
Keras:
https://github.com/titu1994/Keras-IndRNN
Pytorch:
https://github.com/StefOe/indrnn-pytorch
https://github.com/theSage21/IndRNN
https://github.com/zhangxu0307/Ind-RNN
Chainer:
https://github.com/0shimax/chainer-IndRNN

Independently Recurrent Neural Network相关推荐

  1. 论文分享-->Independently Recurrent Neural Network (IndRNN): Building A Longer and Deeper RNN

    本周开始,我将一周分享和总结三篇关于自然语言处理方面的论文及其开源代码(如果有的话),以期在三个月后的校招面试中能招架住面试官的各种提问. 本篇论文中了 C V P R 2018 CVPR\ 2018 ...

  2. How to Visualize Your Recurrent Neural Network with Attention in Keras

    Neural networks are taking over every part of our lives. In particular - thanks to deep learning - S ...

  3. (zhuan) Recurrent Neural Network

    Recurrent Neural Network 2016年07月01日 Deep learning Deep learning 字数:24235 this blog from: http://jxg ...

  4. Recurrent Neural Network系列2--利用Python,Theano实现RNN

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  5. 深度学习之递归神经网络(Recurrent Neural Network,RNN)

    为什么有bp神经网络.CNN.还需要RNN? BP神经网络和CNN的输入输出都是互相独立的:但是实际应用中有些场景输出内容和之前的内 容是有关联的. RNN引入"记忆"的概念:递归 ...

  6. 论文学习15-Table Filling Multi-Task Recurrent Neural Network(联合实体关系抽取模型)

    文章目录 abstract 1 introduction 2.方 法 2.1实体关系表(Figure-2) 2.2 The Table Filling Multi-Task RNN Model 2.3 ...

  7. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  8. 【李宏毅机器学习】Recurrent Neural Network Part1 循环神经网络(p20) 学习笔记

    李宏毅机器学习学习笔记汇总 课程链接 文章目录 Example Application Slot Filling 把词用向量来表示的方法 1-of-N encoding / one-hot Beyon ...

  9. 2021李宏毅机器学习课程笔记——Recurrent Neural Network

    注:这个是笔者用于期末复习的一个简单笔记,因此难以做到全面详细,有疑问欢迎大家在评论区讨论 I. Basic Idea 首先引入一个例子,槽填充(Slot Filling)问题: Input: I w ...

最新文章

  1. google浏览器的地址栏(url)和文本框中英文字母都是全角
  2. ant design select 坑总结
  3. Qt Creator比较文件
  4. Oracle数据库备份报错12514,Oracle数据库备份导出时,出错:ORA-12514
  5. 【bzoj3442】学习小组 费用流
  6. string的反转输出以及char型字符串的反转输出
  7. 将 30 万行代码从 Flow 迁移到 TypeScript 是一种怎样的体验?
  8. PK 想说爱你不容易
  9. FFmpeg之yuv镜像(十八)
  10. 对比iOS中的四种数据存储
  11. Android获取下载文件名称及类型
  12. 董明珠:格力100%不会爆雷
  13. TVS瞬态抑制二极管,如何判断正负极?
  14. 用Actix写的一个类似于Facemash的小项目总结
  15. 反思腾讯:大数据与AI时代的危与机
  16. linux 音频文件切割_Linux命令之大文件分割
  17. ROS自主驾驶割草机
  18. C#获取汉字首字母,多音拼音
  19. 【雅思大作文考官范文】——第十三篇:'traditions and technology' essay
  20. 再一次被入侵之潜伏的挖矿病毒

热门文章

  1. Navicat如何连接远程服务器的MySQL
  2. 局域网ping不通,提示:无法访问目标主机
  3. 夏季宝宝饮食要注意 五大饮食守则要牢记
  4. 数据防泄漏安全软件选择分析
  5. 智能手机的发展未来:2017 苹果 10 周年秋季发布会解析
  6. A股市场全景分析系列—从每日涨停个股分析热门板块与题材
  7. NPS如何成为流量增长破局点
  8. 基于ZU19EG的4路100G 网络 DPU的PCIe 加速计算卡
  9. 《银行法律法规》一、经济金融基础知识——4、银行体系
  10. tp5 php array_merge合并函数array_column(id值不见)处理办法(创建合成合拼数组)(foreach 记录集)