码迷,mamicode.com
首页 > 其他好文 > 详细

循环神经网络

时间:2019-11-24 17:17:35      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:分布   方式   需要   span   关系   不同   相互   缩小   max   

处理文本

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

原理

  • 展开之后是一个\(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\times 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相似的结果,且收敛更快

循环神经网络

标签:分布   方式   需要   span   关系   不同   相互   缩小   max   

原文地址:https://www.cnblogs.com/weilonghu/p/11922973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!