神经网络只能单独的处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,在我们处理某些任务时,要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。输入和输出都是等长的序列。这里使用RNN循环神经网络来处理这类问题。
一、RNN循环神经网络
循环神经网络会记忆之前的信息,并利用之前的信息影响后面节点的输出。隐藏层之间的结点是有连接的,输入不仅包括输入层的输出还包括上时刻隐藏层的输出。
循环神经网络首先把所有的输入值进行词组的分解
隐藏层的作用是对序列数据提取特征
h2 的计算和 h1 类似,在计算时,每一步使用的参数 U、W、b 都是一样的,也就是说每个步骤的参数都是共享的,这就 RNN 的一个重要特点,参数共享。
这样的一条链状神经网络代表了一个递归神经网络,可以认为它是对相同神经网络的多重复制,每一时刻的神经网络会传递信息给下一时刻。
二、循环神经网络的数学定义
输入为x1,x2,…,xt对应的隐状态为h1,h2,…,ht
输出为y1,y2,…,yt,如,则经典RNN的运算过程可以表示为
ht=f(Uxt+Wht−1+b)
yt=softmax(Vht+c)
其中,U,W,V,b,c均为参数,而f()表示**函数
三、RNN解决的问题
由于RNN循环神经网络具有记忆功能,它可以解决语音识别、语言模型、机器翻译
RNN缺点:长时依赖问题
长时依赖是这样的一个问题,当预测点与依赖的相关信息距离比较远的时候,就难以学到该相关信息。例如在句子“我出生在中国,……,我会说中国话”中,若要预测末尾“中国话”,我们需要用到上下文“中国”。理论上,递归神经网络是可以处理这样的问题的,但是实际上,常规的递归神经网络并不能很好地解决长时依赖,好的是LSTMs可以很好地解决这个问题。
RNN虽然理论上可以很漂亮的解决序列数据的训练,但是它会有梯度消失时的问题,当序列很长的时候问题尤其严重。因此,上面的RNN模型一般不能直接用于应用领域。在语音识别,手写书别以及机器翻译等NLP领域(自然语言处理)实际应用比较广泛的是基于RNN模型的一个特例LSTM。
四、LSTM网络
LSTM:避免RNN梯度消失解决长依赖问题。传统的神经网络没有记忆功能,RNN可以通过不停的将信息循环操作,保证信息存在,RNN可以利用以前的信息对当前任务进行相应的操作,如果这次任务的有用信息与需要进行处理信息的地方之间的距离较远,这样容易导致RNN不能学习到有用的信息,导致推导任务失败,造成梯度消失或梯度爆炸。
五、LSTMs的核心思想
LSTM的核心是细胞状态,用贯穿细胞的水平线表示。
细胞状态像传送带一样。它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个RNNs。LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。门能够有选择性的决定让哪些信息通过。
门的结构:
一个sigmoid层和一个点乘操作的组合。(0表示不能通过,1表示可以通过)
①LSTM的第一步就是决定细胞状态需要丢弃哪些信息。(忘记门的sigmoid)
2.下一步是决定给细胞状态添加哪些新的信息。(输入门决定更新哪些信息)利用h(t-1)和xt得到新的候选细胞信息Ct~ ,可能会被更新到细胞信息中。
更新细胞信息的步骤:通过忘记门选择忘记旧细胞的一部分,通过输入门选择添加候选细胞信息Ct~ 的一部分得到新的细胞信息Ct~
3.更新完细胞状态后需要根据输入的ht-1 和xt 来判断输出细胞的哪些状态特征,(sigmoid层得到判断条件与tanh层得到(-1,1)之间值的向量相乘)得到了最终该RNN单元的输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深度学习—RNN循环神经网络&LSTM解决长依赖问题 - Python技术站