zoukankan      html  css  js  c++  java
  • 神经网络学习笔记-02-循环神经网络

    神经网络学习笔记-02-循环神经网络

    本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记。

    循环神经网络

    循环神经网络适用于处理序列化信息,比如:语言翻译,语音识别等。

    如果,我们要实现一个翻译功能。首先需要理解原句中每个单词的含义。
    这就需要根据上下文来理解。
    假如:原句中的每个单词,以此对应神经网络中一个隐藏层。
    在传统的神经网络框架中,隐藏层直接传递的是一个矢量Out。
    这个Out矢量是原句当前每个词的一个输出,比如:含义等等。
    那么,如何保存和传递上下文这个信息呢?
    循环神经网络提出一个状态(state)的概念,用于传递上下文

    • 折叠图
    • 展开图

    循环神经网络框架的一点解释

    与传统的神经网络架构有许多不同之处。

    • 输入方式不同
      传统的神经网络架构是静态输入,输入数据在开始前已经准备好了,并且一次全部从输入层导入。
      循环神经网络是动态输入,每个隐藏层有一个输入,表示在时间t上的输入。

    • 隐藏层,每层的节点数不同
      传统的神经网络架构,每个隐藏层有多个节点。
      循环神经网络,每个隐藏层有一个节点。

    • 输出不同
      循环神经网络,每个隐藏层有两个输出: output和state。

    • 权重
      循环神经网络需要计算三个权重(w, b),分别是(U,V,W)
      这三个权重是在隐藏层上共享的。

    原文的例子

    原文中计划实现一个循环神经网络,用于发现自然语言句子中单词出现的模式,最终可以生成一些合理的句子。

    • 数据来源
      原文中,从网上下载了很多条句子(英文的)。

    • 数据的前期处理
      首先,统计了所有单词(包括标点符号)。
      取出最常见的7997单词,并且编号,每个单词有一个token。
      设置了3个特殊的token:
      UNKNOWN_TOKEN:匹配没有在8000列表中的单词。
      SENTENCE_START: 表示句子开始。
      SENTENCE_END: 表示句子结束。

    • 输入和输出
      输入x的维度是8000,意味着可以接受的句子长度最大是8000。
      输出y的维度是8000,和x一一对应。
      下面是一个句子构造后的实际例子:

    x:
    SENTENCE_START what are n't you understanding about this ? !
    [0, 51, 27, 16, 10, 856, 53, 25, 34, 69]
    y:
    what are n't you understanding about this ? ! SENTENCE_END
    [51, 27, 16, 10, 856, 53, 25, 34, 69, 1]

    理解:y的每n位是x前n位的期望输出。

    每个输入(X_t)(尽管有8000维),只有一个维度有值且为1,代表第(t)的单词的token的维度。
    比如:what的token是51。那么(X_t)只有第51位为1,其它都是0。
    这个叫做one-hot vector。
    输出:每个token的可能性。

    state的维度是100。

    • 计算公式和维度

    [s_t = tanh(x_tU + s_{t_1}W) \ o_t = softmax(s_tV) \ where \ x_t.dimension = 8000 \ o_t.dimension = 8000 \ s_t.dimension = 100 \ U.dimension = 100 * 8000 : x_tU ext{ is a 100 dimension vector} \ W.dimension = 100 * 100 : s_{t-1}W ext{ is a 100 dimension vector} \ V.dimension = 8000 * 100 : s_tV ext{ is a 8000 dimension vector} ]

    • 初始化U,V,W
      初始化很重要。跟激活函数(这里是tanh)有关。
      U,V,W每个元素是一个位于区间(left [ -sqrt{n}, sqrt{n} ight ])的随机数。(n)是输入数的长度。

    循环神经网络训练流程

    长短期记忆网络 - LSTM (Long Short Term Memory) Network

    [i = sigma(U^ix_i + W^is_{t-1} + b^i) \ i ext{: input gate, defines how much of the newly computed state for the current input you want to let through.} \ ]

    [f = sigma(U^fx_i + W^fs_{t-1} + b^f) \ f ext{: forget gate, defines how much of the previous state you want to let through.} \ ]

    [o = sigma(U^ox_i + W^os_{t-1} + b^o) \ o ext{: output gate, defines how much of the internal state you want to expose to the external network.} \ ]

    [g = tanh(U^gx_i + W^gs_{t-1} + b^g) \ g ext{: a candidate hidden state.} \ c_t = c_{t-1} circ f + g circ i \ c_t ext{: the internal memory of the unit.} \ s_t = tanh(c_t) circ o ]

    门控循环单元 - GRUs (Gated Recurrent Units)

    先看看计算公式:

    [x_e = Ex_t \ z = sigma(U^zx_e + W^zs_{t-1} + b^z) \ r = sigma(U^rx_e + W^rs_{t-1} + b^r) \ h = tanh(U^hx_e + W^h(s_{t-1} circ r) + b^h) \ s_t = (1 - z) circ h + z circ s_{t-1} \ o_t = Vs_t + c ]

    参照

  • 相关阅读:
    关于研发核心团队建设的一些思考
    无法打开物理文件xxx.mdf操作系统错误 5:“5(拒绝访问。)” (Microsoft SQL Server,错误: 5120)的解决方法
    自适应网页设计(Responsive Web Design)
    css浮动与绝对定位小记
    WEB进度条控件
    GitHub上整理的一些工具
    雾里看花般的迷茫--货运APP
    揭秘史上最完美一步到位的搭建Andoriod开发环境
    我是如何在SQLServer中处理每天四亿三千万记录的
    货运APP产品魔力=卓越功能×情感诉求
  • 原文地址:https://www.cnblogs.com/steven-yang/p/6358501.html
Copyright © 2011-2022 走看看