循环神经网络

1、基础神经网络

神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y,结构图如下:

preview

将神经网络模型训练好之后,在输入层给定一个x,通过网络之后就能够在输出层得到特定的y,那么既然有了这么强大的模型,为什么还需要RNN(循环神经网络)呢?

2、RNN引入原因

1、只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的

2、某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的

3、RNN结构

首先看一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:

某一时刻的展开计算

preview

隐藏层的值St不仅取决于Xt而且还取决于S(t-1)

4、RNN变体-双向RNN

双向RNN认为当前词不仅依赖于序列之前的元素,也跟之后的元素有关,这在序列挖掘中也是很常见的事实。

在双向RNN的基础上,每一步由原来的一个隐藏层变成了多个隐藏层,构建了深层双向RNN

5、LSTM

5.1、LSTM引入原因

传统RNN每一步的隐藏单元只是执行一个简单的tanh或ReLU操作,很难处理长期依赖问题。为此提出了LSTM(Long Short Term Memory)从语料中学习到长期依赖关系。

传统RNN每个模块内只是一个简单的tanh层,而LSTM中有4个;3个sigmoid层,1个tanh层

 

5.2、LSTM内部结构详解

5.2.1、LSTM的四个状态

首先使用LSTM的当前输入x(t)  和上一个状态传递下来的 h(t-1) 拼接训练得到四个状态

其中, z(i) , z(f) ,z(o) 是由拼接向量乘以权重矩阵之后,再通过一个 sigmiod 激活函数转换成0到1之间的数值,来作为一种门控状态。而 z 则是将结果通过一个 tanh激活函数将转换成-1到1之间的值(这里使用 tanh 是因为这里是将其做为输入数据,而不是门控信号)。

5.2.2、LSTM内部三个阶段

1. 忘记阶段。这个阶段主要是对上一个节点传进来的输入进行选择性忘记。简单来说就是会 “忘记不重要的,记住重要的”。

忘记门:(z(f)),把ht−1和xt拼接起来,传给一个sigmoid函数,该函数输出0到1之间的值,这个值乘到细胞状态Ct−1上去,sigmoid函数的输出值直接决定了状态信息保留多少。对上一个节点传来的输入进行选择性忘记

具体来说是通过计算得到的 z(f) (f表示forget)来作为忘记门控,来控制上一个状态的 c(t-1) 哪些需要留哪些需要忘。

 

 

2. 选择记忆阶段。这个阶段将这个阶段的输入有选择性地进行“记忆”。主要是会对输入 x(t) 进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的 z表示。而选择的门控信号则是由 z(i) (i代表information)来进行控制。

控制门:z(i);对输入进行选择性记忆。

上一步的细胞状态Ct−1已经被忘记了一部分,接下来本步应该把哪些信息新加到细胞状态中呢?这里又包含2层:一个tanh层用来产生更新值的候选项C~t,tanh的输出在[-1,1]上,说明细胞状态在某些维度上需要加强,在某些维度上需要减弱;还有一个sigmoid层(输入门层),它的输出值要乘到tanh层的输出上,起到一个缩放的作用,极端情况下sigmoid输出0说明相应维度上的细胞状态不需要更新。在那个预测下一个词的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。

 

3. 输出阶段。这个阶段将决定哪些将会被当成当前状态的输出。主要是通过 z(o) 来进行控制的。并且还对上一阶段得到的 z 进行了放缩(通过一个tanh激活函数进行变化)。

输出门:z(o),控制哪些信号的输出。

4、与普通RNN类似,输出 y(t) 往往最终也是通过 h(t) 变化得到。

 

6、GRU

GRU(Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种。和LSTM(Long-Short Term Memory)一样,也是为了解决长期记忆和反向传播中的梯度等问题而提出来的。

我们在我们的实验中选择GRU是因为它的实验效果与LSTM相似,但是更易于计算。

6.1、GRU的输入输出结构

有一个当前的输入 x(t) ,和上一个节点传递下来的隐状态(hidden state) h(t-1) ,这个隐状态包含了之前节点的相关信息。

结合 x(t) 和 h(t-1),GRU会得到当前隐藏节点的输出 y(t) 和传递给下一个节点的隐状态 h(t) 。

6.2 GRU的内部结构

6.2.1、门控制信息

首先,我们先通过上一个传输下来的状态 h(t-1) 和当前节点的输入 x(t) 来获取两个门控状态。如下图2-2所示,其中 r 控制重置的门控(reset gate), z 为控制更新的门控(update gate)。

GRU的两个门结构:

重置门:(reset gate) 

更新门:(update gate)

重置门控来得到 “重置”之后的数据 ,选择关键数据

tanh激活函数来将数据放缩到-1~1的范围内

这里的 h' 主要是包含了当前输入的 x(t) 数据。有针对性地对 x(t) 添加到当前的隐藏状态,相当于”记忆了当前时刻的状态“。类似于LSTM的选择记忆阶段。

6.2.2、GRU的门结构

 

6.2.3、更新阶段

更新阶段同时进行了遗忘了记忆两个步骤。通过更新门控z来进行控制;忘记传递下来的 h(t-1) 中的某些维度信息,并加入当前节点输入的某些维度信息。

更新表达式:

 

(1-z)*h(t-1) :表示对原本隐藏状态的选择性“遗忘”。这里的 (1-z) 可以想象成遗忘门(forget gate),忘记 h(t-1) 维度中一些不重要的信息。

z*h' : 表示对包含当前节点信息的 h' 进行选择性”记忆“。看做是对 h' 维度中的某些信息进行选择。

 

可以看到,这里的遗忘 (1-z )和选择 z 是联动的。也就是说,对于传递进来的维度信息,我们会进行选择性遗忘,则遗忘了多少权重( 1-z),我们就会使用包含当前输入的  中所对应的权重进行弥补  。以保持一种”恒定“状态。

 

实际上可以看成对应于LSTM中的hidden state;上一个节点传下来的 h' 则对应于LSTM中的cell state。1-z对应的则是LSTM中的 z(f) forget gate,那么 z我们似乎就可以看成是选择门 z(i) 

 

6.2.4、GRU的优缺点

GRU输入输出的结构与普通的RNN相似,其中的内部思想与LSTM相似。

与LSTM相比,GRU内部少了一个”门控“,参数比LSTM少,但是却也能够达到与LSTM相当的功能。考虑到硬件的计算能力时间成本,因而很多时候我们也就会选择更加”实用“的GRU啦。

 

 

https://zhuanlan.zhihu.com/p/30844905 (RNN详解)

https://zhuanlan.zhihu.com/p/37644325 (RNN变体)

https://zhuanlan.zhihu.com/p/37644325 (LSTM过程详细介绍)

https://zhuanlan.zhihu.com/p/32085405 (LSTM公式详细拆解)

https://zhuanlan.zhihu.com/p/32481747 (GRU)

https://www.bilibili.com/video/BV12i4y1g7xe?p=2 (吴恩达序列模型视频)

http://fooplot.com/ (画图软件)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值