循环神经网络(RNN)
Posted Godwinwin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环神经网络(RNN)相关的知识,希望对你有一定的参考价值。
循环神经网络(RNN)
文章目录
注意!!!!!!!
博主第一次发布的文章有点生疏,写得不够好,没有考虑到一些图片的大小以及一些小细节,本次文章主要是当成博主自己的心得笔记,如果能帮助到大家那更好,大伙嘴下留情啊!!!!!!!
在文章的最后有参考视频,小伙伴们如果还有疑惑可以看下面的参考视频,或许能对你有帮助!!!
RNN模型的作用
当序列数据需要考虑其本身的顺序性,比如天气、股票价格、语音等事件序列数据,RNN模型适合训练序列数据。
为什么要使用RNN而不是用MLP?
多层感知模型(Multilayer Perception Model)的短板在于:它输入端的神经元数量是预先设定的,每一个神经元都代表一个字或词,当在序列中增加输入信息的话(也就是加入新的字或词),模型就很难处理。
为什么难处理呢? 原因是每增加一个新的字或词,就相应的增加一个神经元,根据MLP结构,也就是全连接,会导致所有权重需要重新训练。
RNN模型则避免了这个问题,它在每期计算中会同时考虑当期输入值和前期状态值,并利用相同的模型架构循环下去。
RNN输入与输出
-
one to many
-
many to one
-
n to n
- n to m
RNN模型
简单RNN模型
- 符号定义:
H_i-1
: 上期状态期Hi
: 当期状态值x_i
: 输入值tanh(w_x +w_hH_0 + b)
: 激活函数
- BPTT(Backpropagation Through Time)
同样的,BPTT也会导致梯度消失和梯度爆炸,因为tanh取值范围为(-1,1),因此就需要LSTM模型和GRU模型。
LSTM(Long Short-Term Memory)长短期记忆模型
- LSTM模型
- 可以看出有3个sigmoid函数和2个tanh函数:sigmoid函数的取值范围在(0,1),而tanh函数的取值范围为(-1,1),因此sigmoid函数可以作为闸门,用来控制信息流出的比例;而tanh函数能够控制信息的增减方向,并把值锁在-1到1的区间内。
-
三扇门
- 遗忘门(forget gate)
- 输入门(input gate)
- 输出门(output gate)
- 遗忘门
- 输入门
- 输出门
- 相比简单RNN模型,LSTM增加了记忆状态C这一元素。
-
SLTM原理
- 上期状态值 C t − 1 C_t-1 Ct−1通过遗忘门过滤到本期的部分,加上本期新增的部分决定 C t C_t Ct
-
来到遗忘门:上期过滤的部分通过sigmoid函数的遗忘门来控制。
-
遗忘门的值为0时,意味着上期记忆完全遗忘。
-
遗忘门的值为1时,上期值记忆完全保留。
-
其公式为: f t = s i g m o i d ( w f ∗ [ H t − 1 , x t ] ) f_t = sigmoid(w_f*[H_t-1,x_t]) ft=sigmoid(wf∗[Ht−1,xt])
-
- 来到输入门:sigmoid控制信息流出的比例;tanh控制信息流出的方向,上期状态值的sigmoid函数和tanh函数两者相乘得到本期新增的记忆部分,它与前期记忆流入的部分相加,得到当期的记忆状态值。
- sigmoid公式为: i t = s i g m o i d ( w i ∗ [ H t − 1 , x t ] ) i_t = sigmoid(w_i*[H_t-1,x_t]) it=sigmoid(wi∗[Ht−1,xt])
- tanh公式为: u t = t a n h ( w u ∗ [ H t − 1 , x t ] ) u_t = tanh(w_u*[H_t-1,x_t]) ut=tanh(wu∗[Ht−1,xt])
- ==本期记忆状态值 C t C_t Ct==公式为: C t = C t − 1 ∗ f t + u t ∗ i t C_t = C_t-1*f_t + u_t*i_t Ct=Ct−1∗ft+ut∗it
- 其中 f t f_t ft表示的是遗忘门的sigmoid函数: f t = s i g m o i d ( w f ∗ [ H t − 1 , x t ] ) f_t = sigmoid(w_f*[H_t-1,x_t]) ft=sigmoid(wf∗[Ht−1,xt])
- ==本期记忆状态值 C t C_t Ct==公式为: C t = C t − 1 ∗ s i g m o i d ( w f ∗ [ H t − 1 , x t ] ) + t a n h ( w u ∗ [ H t − 1 , x t ] ) ∗ s i g m o i d ( w i ∗ [ H t − 1 , x t ] ) C_t = C_t-1*sigmoid(w_f*[H_t-1,x_t]) + tanh(w_u*[H_t-1,x_t])*sigmoid(w_i*[H_t-1,x_t]) Ct=Ct−1∗sigmoid(wf∗[Ht−1,xt])+tanh(wu∗[Ht−1,xt])∗sigmoid(wi∗[Ht−1,xt])
-
最后来到输出门:输出门的sigmoid函数和当期记忆值 C t C_t Ct的tanH值相乘,得到本期的输出值 H t H_t Ht**, C t C_t Ct和 H t H_t Ht会循环流入至T+1期,参与到下期的计算。
-
sigmoid函数: o t = s i g m o i d ( w o ∗ [ H t − 1 , x t ] ) o_t = sigmoid(w_o*[H_t-1,x_t]) ot=sigmoid(wo∗[Ht−1,xt])
-
==本期输出值 H t H_t Ht==公式为: H t = o t ∗ t a n h ( c t ) H_t = o_t*tanh(c_t) Ht=ot∗tanh(ct)
-
=&
以上是关于循环神经网络(RNN)的主要内容,如果未能解决你的问题,请参考以下文章
-