zoukankan      html  css  js  c++  java
  • 循环神经网络RNN

    循环神经网络(Recurrent Neural Networks)

    RNNs 主要处理时序数据,比如一句话,词与词之间都是有顺序的,因此经常用在NLP领域,比如机器翻译,情感分析等。

    一般的RNNs有多个FNN横向连接而成,其中中间有个rnn-cell, 存储的是前面序列的隐含状态s。

    最基本的形式,如下图 就相当于三层,第一层是输入x到rnn-cell的连接,第二层是rnn-cell,得到的是隐藏状态s,第三层是rnn-cell到输出o的连接层。

    循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重。

    把上面的图展开,可以看作是按时间序列展开, 循环神经网络也可以画成下面这个样子

    这个网络在t时刻接收到输入Xt之后,隐藏层的值是St,输出值是ot。关键一点是,st的值不仅仅取决于Xt,还取决于St−1。

    使用下面的公式来表示循环神经网络的计算方法:

    $o_t=g(Vs_t)$ (1)

    $s_t=f(Ux_t+Ws_{t-1})$(2)

    式1是输出层的计算公式,输出层是一个全连接层,也就是它的每个节点都和隐藏层的每个节点相连。V是输出层的权重矩阵,g是激活函数。

    式2是隐藏层的计算公式,它是循环层。U是输入x的权重矩阵,W是上一次的值st−1作为这一次的输入的权重矩阵,f是激活函数。

    从上面的公式可以看出,循环层和全连接层的区别就是多了一个权重矩阵W。
    若反复把式2代入带式1,我们将得到:

    $o_t=g(Vs_t)=g(Vf(Ux_t+Ws_{t-1}))$

    $=g(Vf(Ux_t+Wf(Ux_{t-1}+Ws_{t-2 })))$

    $=g(Vf(Ux_t+Wf(Ux_{t-1}+Wf(Ux_{t-2}+Ws_{t-3 }))))$

    从上面可以看出,循环神经网络的输出值ot,是受前面历次输入值xt、xt−1、xt−2…的影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。

  • 相关阅读:
    [导入]习惯修改别人的程序吗?
    [导入]感悟一首:"原来你也在这里"
    [导入]人生的高度
    [导入]nslookup工具的使用方法(转)
    [导入]回忆ASP!
    [导入]论坛的修改完成
    [导入]还原精灵安装失败!
    [导入]IE6无提示关闭窗口,不是利用activeX
    加密算法
    澄清VB调用API时字符串参数的困惑
  • 原文地址:https://www.cnblogs.com/xmeo/p/7235074.html
Copyright © 2011-2022 走看看