3

深度学习(七)——LSTM, 神经元激活函数进阶

 2 years ago
source link: http://antkillerfarm.github.io/dl/2017/06/22/Deep_Learning_7.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

RNN(续)

http://blog.csdn.net/aws3217150/article/details/50768453

递归神经网络(RNN)简介

http://blog.csdn.net/heyongluoyao8/article/details/48636251

循环神经网络(RNN, Recurrent Neural Networks)介绍

http://mp.weixin.qq.com/s?__biz=MzIzODExMDE5MA==&mid=2694182661&idx=1&sn=ddfb3f301f5021571992824b21ddcafe

循环神经网络

http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/

Backpropagation Through Time算法

https://baijia.baidu.com/s?old_id=560025

Tomas Mikolov详解RNN与机器智能的实现

https://sanwen8.cn/p/3f8sRTh.html

为什么RNN需要做正交初始化?

http://blog.csdn.net/shenxiaolu1984/article/details/71508892

RNN的梯度消失/爆炸与正交初始化

https://mp.weixin.qq.com/s/vHQ1WbADHAISXCGxOqnP2A

看大牛如何复盘递归神经网络!

https://mp.weixin.qq.com/s/0V9DeG39is_BxAYX0Yomww

为何循环神经网络在众多机器学习方法中脱颖而出?

https://mp.weixin.qq.com/s/-Am9Z4_SsOc-fZA_54Qg3A

深度理解RNN:时间序列数据的首选神经网络!

https://mp.weixin.qq.com/s/ztIrt4_xIPrmCwS1fCn_dA

“魔性”的循环神经网络

https://mp.weixin.qq.com/s/BqVicouktsZu8xLVR-XnFg

完全图解RNN、RNN变体、Seq2Seq、Attention机制

https://mp.weixin.qq.com/s/gGGXKT2fTn2xPPvo7PE8IA

像训练CNN一样快速训练RNN:全新RNN实现,比优化后的LSTM快10倍

https://mp.weixin.qq.com/s/OltT-GFDVxaiukb1HVSY3w

通俗讲解循环神经网络的两种应用

https://mp.weixin.qq.com/s/PZMmjT9eXL7rU2pxkQWTiw

从90年代的SRNN开始,纵览循环神经网络27年的研究进展

https://mp.weixin.qq.com/s/7LcqRGPYX6JXpY_0hbjmbA

循环神经网络(RNN)入门帖:向量到序列,序列到序列,双向RNN,马尔科夫化

本篇笔记主要摘自:

http://www.jianshu.com/p/9dc9f41f0b29

理解LSTM网络

LSTM结构图

为了解决原始RNN只有短时记忆的问题,人们又提出了一个RNN的变种——LSTM(Long Short-Term Memory)。其结构图如下所示:

和RNN的时序展开图类似,这里的每个方框表示某个时刻从输入层到隐层的映射

我们首先回顾一下之前的模型在这里的处理。

MLP的该映射关系为:

h=σ(W⋅x+b)

RNN在上式基础上添加了历史状态ht−1:

ht=σ(W⋅[ht−1,xt]+b)

LSTM不仅添加了历史状态ht−1,还添加了所谓的细胞状态Ct−1,即上图中图像上部的水平横线。

神经网络的设计方式和其他算法不同,我们不需要指定具体的参数,而只需要给出一个功能的实现机制,然后借助误差的反向传播算法,训练得到相应的参数。这一点在LSTM上体现的尤为明显。

LSTM主要包括以下4个步骤(也可称为4个功能或门):

  • 决定丢弃信息

这一部分也被称为忘记门

  • 确定更新的信息

这一部分也被称为输入门

  • 更新细胞状态

显然,在这里不同的参数会对上述4个功能进行任意组合,从而最终达到长时记忆的目的。

上面的公式中,⋅表示Dot product,而∗表示eltwise product。

在一般的神经网络中,激活函数可以随意选择,无论是传统的sigmoid,还是新的tanh、ReLU,都不影响模型的大致效果。(差异主要体现在训练的收敛速度上,最终结果也可能会有细微影响。)

但是,上述标准LSTM模型中,tanh函数可以随意替换,而sigmoid函数却不能被替换,切记。

sigmoid用在了各种gate上,产生0~1之间的值,这个一般只有sigmoid最直接了。

tanh用在了状态和输出上,是对数据的处理,这个用其他激活函数也可以。

forget bias的初始值可以设为以1为均值,这对于训练很有好处,这就是tensorflow中forget_bias参数的来历。参见论文:

《An Empirical Exploration of Recurrent Network Architectures》

LSTM的变体

上图中的LSTM变体被称为peephole connection。其实就是将细胞状态加入各门的输入中。可以全部添加,也可以部分添加。

上图中的LSTM变体被称为Coupled Input and Forget Gate(CIFG)。它将忘记和输入门连在了一起。

上图是一个改动较大的变体Gated Recurrent Unit(GRU)。它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。

http://www.csdn.net/article/2015-06-05/2824880

深入浅出LSTM神经网络

https://mp.weixin.qq.com/s/y2kV4ye2zr1HYvZd3APeWA

难以置信!LSTM和GRU的解析从未如此清晰

https://blog.csdn.net/zhangxb35/article/details/70060295

RNN, LSTM, GRU公式总结

https://zhuanlan.zhihu.com/p/25821063

循环神经网络——scan实现LSTM

http://blog.csdn.net/a635661820/article/details/45390671

LSTM简介以及数学推导(FULL BPTT)

http://blog.csdn.net/dark_scope/article/details/47056361

RNN以及LSTM的介绍和公式梳理

https://mp.weixin.qq.com/s/x3y9WTuVFYQb60eJvw02HQ

如何解决LSTM循环神经网络中的超长序列问题

https://mp.weixin.qq.com/s/IhCfoabRrtjvQBIQMaPpNQ

从任务到可视化,如何理解LSTM网络中的神经元

https://mp.weixin.qq.com/s/GGpaFZ0crP_NQ564d79hFw

LSTM、GRU与神经图灵机:详解深度学习最热门的循环神经网络

https://mp.weixin.qq.com/s/0bBTVjkfAK2EzQiaFcUjBA

LSTM入门必读:从基础知识到工作方式详解

https://mp.weixin.qq.com/s/jcS4IX7LKCt1E2FVzLWzDw

LSTM入门详解

https://mp.weixin.qq.com/s/MQR7c57NL4b5i4MRA2JgWA

用Python实现CNN长短期记忆网络!

http://mp.weixin.qq.com/s/V2-grLPdZ66FOiC2duc-EA

如何判断LSTM模型中的过拟合与欠拟合

http://blog.csdn.net/malefactor/article/details/51183989

深度学习计算模型中“门函数(Gating Function)”的作用

https://mp.weixin.qq.com/s/ORLpqqV8pOv-pIagi8yS1A

在调用API之前,你需要理解的LSTM工作原理

https://mp.weixin.qq.com/s/BzlFbweHEJ3z7dSIGmd-QA

深度学习基础之LSTM

https://mp.weixin.qq.com/s/lbHTDdzPbYn2Ln4aihGujQ

人人都能看懂的LSTM

https://mp.weixin.qq.com/s/LI6TsPjzIaa8DxDu3UaV1A

门控循环单元(GRU)的基本概念与原理

https://mp.weixin.qq.com/s/LcdmXgAFpiIoHMIIXECC9g

人人都能看懂的GRU

https://mp.weixin.qq.com/s/m_cOjUHwvW496Gv9_aYgpA

LSTM和循环神经网络基础教程

https://blog.csdn.net/taoqick/article/details/79475350

学会区分RNN的output和state

神经元激活函数进阶

在《深度学习(二)》中,我们探讨了ReLU相对于sigmoid函数的改进,以及一些保证深度神经网络能够训练的措施。然而即便如此,深度神经网络的训练仍然是一件非常困难的事情,还需要更多的技巧和方法。

激活函数的作用

神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。

假设一个神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。

加入非线性激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。因此,激活函数是深度神经网络中不可或缺的部分。

注意:其实也有采用线性激活函数的神经网络,亦被称为linear neurons。但是这些神经网络,基本只有学术价值而无实际意义。

理论上来说,只要是非线性函数,都有做激活函数的可能性。然而不同的激活函数其训练成本是不同的。

虽然OpenAI的探索表明连浮点误差都可以做激活函数,但是由于这个操作的不可微分性,因此他们使用了“进化策略”来训练模型,所谓“进化策略”,是诸如遗传算法之类的耗时耗力的算法。

https://mp.weixin.qq.com/s/d9XmDCahK6UBlYWhI0D5jQ

深度线性神经网络也能做非线性计算,OpenAI使用进化策略新发现

https://mp.weixin.qq.com/s/PNe2aKVMYjV_Nd7qZwGuOw

理解激活函数作用,看这篇文章就够了!

ReLU的缺点

深度神经网络的训练问题,最早是2006年Hinton使用分层无监督预训练的方法解决的,然而该方法使用起来很不方便。

而深度网络的直接监督式训练的最终突破,最主要的原因是采用了新型激活函数ReLU。

但是ReLU并不完美。它在x<0时硬饱和,而当x>0时,导数为1。所以,ReLU能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。但随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为神经元死亡

ReLU还经常被“诟病”的另一个问题是输出具有偏移现象,即输出均值恒大于零。偏移现象和神经元死亡会共同影响网络的收敛性。实验表明,如果不采用Batch Normalization,即使用MSRA初始化30层以上的ReLU网络,最终也难以收敛。

为了解决上述问题,人们提出了Leaky ReLU、PReLU、RReLU、ELU、Maxout等ReLU的变种。

Leaky ReLU:

f(x)={xif x>0axotherwise

这里的a是个常数,如果是个vector的话,那么就是PReLU了。

f(x)={xif x≥0a(ex−1)otherwise

Maxout

Maxout Networks是Ian J. Goodfellow于2013年提出的一大类激活函数。

上图是Maxout Networks的结构图。传统的激活函数一般是这样的形式:σ(Wx+b)

Maxout Networks将Wx+b这部分运算,分成k个组。每组的w和b都不相同。然后对每组计算结果zij取最大值。

从这个意义来说,ReLU可以看做是Maxout的特殊情况,即:

y=max(W1x+b1,W2x+b2)=max(0,Wx+b)

更多的情况参见下图:

从Maxout Networks的角度来看,ReLU和DropOut实际上是非常类似的。

http://blog.csdn.net/hjimce/article/details/50414467

Maxout网络学习


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK