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

    处理文本

    • 长距离依赖关系
    • 处理变长输入序列

    原理

    • 展开之后是一个(T)层的前馈神经网络

    • 计算公式

      [net_t = Ux_t + Wh_{t-1} ]

      [h_t = f(net_t) ]

      [y = g(Vh_T) ]

      (f)为激活函数,(g)为最后的分类函数(如Softmax)

      (U)为输入层到隐含层之间的权重矩阵

      (W)为隐含层从上一时刻到下一时刻状态转移的权重矩阵

      (V)为隐含层到输出层的权重矩阵

    梯度消失问题

    • 采用基于时间的反向传播(BPTT)算法求解
    • 展开后和普通反向传播算法没有区别
    • 后层的梯度以连乘方式叠加到前层,由于Sigmoid具有饱和特性,输出变化不明显
    • 使用BPTT算法学习的循环神经网络并不能成功捕捉到长距离的依赖关系,主要因为梯度消失问题
    • 梯度问题
      • 传统循环神经网络梯度表示为连乘形式

        [frac{partial net_t}{partial net_1}=frac{partial net_t}{partial net_{t-1}}cdots frac{partial net_2}{partial net_1} ]

      • 其中(frac{partial net_t}{partial net_{t-1}})(n imes n)雅可比矩阵
        • 当雅克比矩阵最大特征值大于1时,随着离输出越来越远,每层的梯度大小会呈指数增长,导致梯度爆炸
        • 反之,梯度大小呈指数缩小,导致梯度消失
      • 梯度爆炸可以通过梯度裁剪来缓解
      • 梯度消失问题需要对模型改进,如LSTM和GRU

    激活函数

    • 用ReLU做激活函数的话,需要对矩阵的初始值作一定限制,否则容易引发数值问题
      • RNN:(h_t = f(Ux_t+Wh_{t-1})=f),对(h_{t-1})求导会导致(t)(W)连乘
        • 如果(W)不是单位矩阵,最终结果将趋于0或无穷
        • 即使采用ReLU,只要(W)不是单位矩阵,梯度还是会出现消失或爆炸现象
      • CNN:每一层的(W)是不同的,并且在初始化时是独立同分布的,可以相互抵消,不会出现严重数值问题
    • 解决方法
      • 初始化(W)为单位矩阵并使用ReLU激活函数
      • 在一些应用中取得了和LSTM相似的结果,且收敛更快
  • 相关阅读:
    python 发邮件乱码
    膳魔师杯使用注意事项
    了解指针,分分钟的事情 C++筆記--指針
    海淘攻略
    【转】Cocos2dx.3x入门三部曲
    在Windows7上搭建Cocos2d-x 3.2alpha0开发环境
    黑苹果 MAC OS X 10.10.2 安装流程
    Linux 下如何查找木马并处理
    js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
    泰*网 Centos 一些命令
  • 原文地址:https://www.cnblogs.com/weilonghu/p/11922973.html
Copyright © 2011-2022 走看看