美文网首页
循环神经网络 RNN

循环神经网络 RNN

作者: mmmwhy | 来源:发表于2018-07-29 13:12 被阅读37次

    概述

    循环神经网络(Recurrent Neural Networks ,以下简称RNN),它广泛的用于自然语言处理中的语音识别,手写书别以及机器翻译等领域。 更多见 iii.run

    而对于这类问题,RNN则比较的擅长。那么RNN是怎么做到的呢?RNN假设我们的样本是基于序列的。比如是从序列索引1到序列索引\tau的。对于这其中的任意序列索引号t,它对应的输入是对应的样本序列中的x^{(t)}

    而模型在序列索引号t位置的隐藏状态h^{(t)},则由x^{(t)}和在t−1位置的隐藏状态h^{(t−1)}共同决定。在任意序列索引号t,我们也有对应的模型预测输出o^{(t)}

    通过预测输出o^{(t)}和训练序列真实输出y^{(t)},以及损失函数L^{(t)},我们就可以用DNN类似的方法来训练模型,接着用来预测测试序列中的一些位置的输出。

    RNN模型

    image

    上图中左边是RNN模型没有按时间展开的图,如果按时间序列展开,则是上图中的右边部分。我们重点观察右边部分的图。

    这幅图描述了在序列索引号t附近RNN的模型。其中:

    • x^{(t)}代表在序列索引号t时训练样本的输入。同样的,x^{(t−1)}x^{(t+1)} 代表在序列索引号t−1t+1时训练样本的输入。

    • h^{(t)}代表在序列索引号t时模型的隐藏状态h^{(t)}x^{(t)}h^{(t−1)}共同决定。

    • o^{(t)}代表在序列索引号t时模型的输出o^{(t)}只由模型当前的隐藏状态h^{(t)}决定。

    • L^{(t)}代表在序列索引号t时模型的损失函数

    • y^{(t)}代表在序列索引号t时训练样本序列的真实输出。

    • U,W,V这三个矩阵是我们的模型的线性关系参数,它在整个RNN网络中是共享的,体现了RNN的模型的“循环反馈”的思想。

    RNN前向传播算法

    对于任意一个序列索引t隐藏状态h^{(t)}输入x^{(t)}前一个隐藏状态h^{(t-1)}得到。

    hint: 我把隐藏状态理解为时间序列中该时间事件的内部真实状态。

    • 隐藏状态
      h^{(t)} = \sigma(z^{(t)}) = \sigma(Ux^{(t)} + Wh^{(t-1)} +b )
      其中 \sigma 为RNN的激活函数,主要为tanh,b为线性偏执。

    • 模型的输出
      序列索引号t时模型的输出o^{(t)}的表达式比较简单:
      o^{(t)} = Vh^{(t)} +c

    • 最终预测输出
      在最终在序列索引号t时我们的预测输出为:
      \hat{y}^{(t)} = \sigma(o^{(t)})
      通常由于RNN是识别类的分类模型,所以上面这个激活函数一般是softmax。

    通过损失函数L^{(t)},比如对数似然损失函数,我们可以量化模型在当前位置的损失,即\hat{y}^{(t)}y^{(t)}的差距。

    RNN小结

    RNN虽然理论上可以很漂亮的解决序列数据的训练,但是它也像DNN一样有梯度消失时的问题,当序列很长的时候问题尤其严重。

    因此,上面的RNN模型一般不能直接用于应用领域。在语音识别,手写书别以及机器翻译等NLP领域实际应用比较广泛的是基于RNN模型的一个特例LSTM。

    相关文章

      网友评论

          本文标题:循环神经网络 RNN

          本文链接:https://www.haomeiwen.com/subject/scpzmftx.html