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…的影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。

  • 相关阅读:
    使用IDEA新建Maven项目没有完整的项目结构(src文件夹等等)
    MyBatis:SQL语句中的foreach标签的详细介绍
    嵌入式tomcat例子
    springboot项目创建(myeclipse2017)
    使用javafxpackager将java项目打包成exe
    Spring Boot异常
    myeclipse设置新建菜单file-new选项
    myeclilpse打开文件所在位置的图标消失后的找回方法
    mybatis使用接口方式报错
    SSH中的Dao类继承HibernateDaoSupport后出现异常
  • 原文地址:https://www.cnblogs.com/xmeo/p/7235074.html
Copyright © 2011-2022 走看看