当前位置:   article > 正文

深入理解RNN与LSTM_lstm与rnn关系

lstm与rnn关系

循环神经网络(Recurrent Neural Network)基础

深度学习领域,神经网络已经被用于处理各类数据,如CNN在图像领域的应用,全连接神经网络在分类问题的应用等。随着神经网络在各个领域的渗透,传统以统计机器学习为主的NLP问题,也逐渐开始采用深度学习的方法来解决。如由Google Brain提出的Word2Vec模型,便将传统BoW等统计方法的词向量方法,带入到了以深度学习为基础的Distribution Representation的方法中来,真正地将NLP问题带入了深度学习的练兵场。当然,RNN的模型并非局限于NLP领域,而是为了解决一系列序列化数据的建模问题,如视频、语音等,而文本也只是序列化数据的一种典型案例。

RNN的特征在于,对于每个RNN神经元,其参数始终共享,即对于文本序列,任何一个输入都经过相同的处理,得到一个输出。在传统的全连接神经网络的结构中,神经元之间互不影响,并没有直接联系,神经元与神经元之间相互独立。而在RNN结构中,隐藏层的神经元开始通过一个隐藏状态所相连,通常会被表示为 h t h_t ht。在理解RNN与全连接神经网络时,需要对两者的结构加以区分,通常,FCN会采用水平方式进行可视化理解,即每一层的神经元垂直排列,而不同层之间以水平方式排布。但在RNN的模型图中,隐藏层的不同神经元之间通常水平排列,而隐藏层的不同层之间以垂直方式排列,如图所示,在FCN网络中,各层水平布局,隐藏层各神经元相互独立,在RNN中,各层以垂直布局,而水平方向上布局着各神经元。注意:RNN结构图只是为了使得结构直观易理解,而在水平方向上其实每个A都相同,对于每个时间步其都是采用同一个神经元进行前向传播。

FCN与RNN对比

RNN的前向传播

在RNN中,序列数据按照其时间顺序,依次输入到网络中,而时间顺序则表示时间步的概念。在RNN中,隐藏状态极为重要,隐藏状态是连接各隐藏层各神经元的中介值。如上图,在第一层中,在时间步 t t t,RNN隐藏层神经元得到隐藏状态 h t ( 1 ) h_{t}^{(1)} ht(1),在时间步 t + 1 t+1 t+1,则接受来自上一个时间步的隐藏层输出 h t ( 1 ) h_{t}^{(1)} ht(1),得到新的隐藏状态 h t + 1 ( 1 ) h_{t+1}^{(1)} ht+1(1)。而从垂直方向上看,各层之间,也通过隐藏状态所连接,对于 L 1 L_1 L1 L 2 L_2 L2 L 2 L_2 L2在水平的时间轴上,各神经元通过隐藏状态 h t ( 2 ) h_{t}^{(2)} ht(2)连接,而层间还将接受前一层的 h t ( 1 ) h_{t}^{(1)} ht(1)的值来作为 x t x_t xt的值,从而获得到该层新的隐藏状态。因此,RNN是一个在水平方向和垂直方向上,均可扩展的结构(水平方向上只是人为添加的易于理解的状态,在工程实践中不存在水平方向的设置)。

根据RNN的定义,可以简单地给出RNN的前向传播过程:

h t = g ( W x t + V h t − 1 + b ) h_t=g\left(Wx_{t}+Vh_{t-1}+b\right) ht=g(Wxt+Vht1+b)

如上式,对于某一层, W 、 V 、 b W、V、b WVb均为模型需要学习的参数,通过上图RNN结构图的对应,则应为 L 1 L_1 L1层水平方向所有神经元的参数,**同一层的RNN单元参数相同,即参数共享。**若考虑多层RNN,则可将上式改为:

h t [ i ] = g ( W [ i ] h t [ i − 1 ] + V [ i − 1 ] h t − 1 [ i ] + b [ i ] ) h_{t}^{[i]}=g\left(W^{[i]}h_{t}^{[i-1]}+V^{[i-1]}h_{t-1}^{[i]}+b^{[i]}\right) ht[i]=g(W[i]ht[i1]+V[i1]ht1[i]+b[i])

为了简化研究,下文统一对单层RNN进行讨论。

值得注意的是,单层RNN前向传播可做如下变换:

W x t + V h t = [ W V ] × [ x t h t − 1 ] Wx_t+Vh_t=\left[

WV
\right]\times\left[
xtht1
\right] Wxt+Vht=[WV]×[xtht1]

为此,我们不妨将参数进行统一表示: W = [ W ; V ] W=\left[W;V\right] W=[W;V],其中 [ ⋅ ; ⋅ ] [\cdot;\cdot] [;]表示拼接操作,则前向传播变为 h t = g ( W [ h t − 1 ; x t ] ⊤ + b ) h_t=g\left(W[h_{t-1};x_t]^{\top}+b\right) ht=g(W[ht1;xt]+b)

再获得隐藏状态后,若需要获得每一个时间步的输出,则需要进一步进行线性变换:

o t = V h t + b o ,      y t = g ( o t ) o_t=Vh_t+b_o, \;\;y_t=g(o_t) ot=Vht+bo,yt=g(ot),其中 V 、 b V、b Vb为参数, g ( ⋅ ) g(\cdot) g()为激活函数,如softmax。

RNN单元

针对单层RNN,可采用上述结构进行描述。

RNN的反向传播

为简化分析,选用RNN的最后时间步的隐藏状态(无输出层)直接作为输出层,即 o u t p u t = h t = g ( W [ h t − 1 ; x t ] ⊤ + b ) output=h_t=g\left(W\left[h_{t-1};x_{t}\right]^{\top}+b\right) output=ht=g(W[ht1;xt]+b),若为分类问题,则 g ( ⋅ ) g(\cdot) g()通常为Softmax。定义问题的损失函数为 J ( θ ) = L o s s ( o u t p u t , y ∣ θ ) J(\theta)=Loss\left(output,y|\theta\right) J(θ)=Loss(output,yθ),则在进行反向传播时,需要计算 W 、 b W、b <

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/354574?site
推荐阅读
相关标签
  

闽ICP备14008679号