zoukankan      html  css  js  c++  java
  • [机器学习]RNN和LSTM

    RNN与LSTM详解

    RNN

    1. RNN
      • 模型:

      [h_t = f(W_xx_t+W_hh_{t-1}) ]

      [hat y_t = sigma(W_oh_t) ]

      • 损失函数:

      [L_t = g(hat y_t) ]

      [L = Sigma_{t=1}^TL_t ]

    2. BPTT随时间反向传播[梯度爆炸和梯度消失]

      [frac{partial L}{partial W_o} = Sigma_{t=1}^Tfrac{partial L_t}{partial hat y_t}frac{partial hat y_t}{partial W_o} ]

      [frac{partial L}{partial W_h}= Sigma_{t=1}^Tfrac{partial L_t}{partial hat y_t} frac{partial hat y_t}{partial h_t} frac{partial h_t}{partial W_h} ]

      由于(h_t)涉及(h_{t-1}),而(h_{t-1})涉及到(W_h),所以随时间步回溯逐项求导,得

      [frac{partial h_t}{partial W_h}=Sigma_{i=1}^{t}frac{partial h_t}{partial h_i}frac{partial h_i}{partial W_h} ]

      [frac{partial h_t}{partial h_i} = Pi_{j=i}^{t-1} frac{partial h_{j+1}}{partial h_j} ]

      所以,

      [frac{partial L}{partial W_h} = Sigma_{t=1}^T frac{partial L_t}{partial hat y_t}frac{partial hat y_t}{partial h_t}Sigma_{i=1}^t(Pi_{j=i+1}^{t} frac{partial h_{j}}{partial h_{j-1}})frac{partial h_i}{partial W_h} ]

      考虑到(frac{partial h_t}{partial h_{t-1}} = f'*W_h),当f为tanh函数时,其梯度范围为[0,1],所以当(j)(t)的相差过大(相距太远),如果(W_h>1),则会产生梯度爆炸的问题;如果(W_h<1),则会产生梯度消失的情况。(特别注意:从公式我们可以发现,总损失对于参数的梯度值是存在的,但梯度值被近距离时间步所主导,无法学习得到长期依赖信息。所以,RNN中的梯度消失实际上指的就是无法学习得到长期依赖信息

    LSTM

    1. 模型

      [输入门: i_t = sigma(W_ix_t+U_ih_{t-1}+b_i) ]

      [遗忘门:f_t = sigma(W_fx_t+U_fh_{t-1}+b_f) ]

      [hat c_t = tanh(W_cx_t+U_ch_{t-1}+b_c) ]

      [状态:c_t = i_t cdot hat c_t + f_t cdot c_{t-1} ]

      [输出门:o_t = sigma(W_ox_t+U_oh_{t-1}+b_o) ]

      [输出:h_t = o_t cdot tanh(c_t) ]

    2. 激活函数
      门控的激活函数:使用Sigmoid函数,输出在0~1之间,符合门控的物理定义;另外当输入较大或者较小的情况,其输出会非常接近0或者1,保证该门开或者关。
      候选记忆的激活函数:使用tanh激活函数,为0均值,与大多数场景下的特征分布吻合。(特别注意的是,LSTM中候选记忆的激活函数原使用Sigmoid函数的变种【变种到0均值】,且没有遗忘门【即遗忘门数值直接为1,即记忆全部保留】,最后大量研究和实验证明,使用遗忘门和tanh激活函数性能提升很大)
    3. LSTM如何解决学习长期依赖信息
      LSTM中的状态之间的梯度为(frac{partial c_t}{partial c_{t-1}}=f_t),就是遗忘门的数值。一般来说,遗忘门的数值不是0就是1,0表示以前的依赖信息不再重要;1表示以前的依赖信息依然重要。(原始LSTM不使用遗忘门,则表示保留所有的长期依赖信息,在后续研究和实验过程发现,加上遗忘门,主动丢弃不必要的长期依赖可以提高LSTM的性能。)
  • 相关阅读:
    软件测试之po设计模式
    Python_标识符及命名规范
    python基础(第一个python程序)
    计算机基础知识
    注册界面测试案例
    vscode使用-添加格式化插件
    工作-提交review失败
    工作-大首页走测试环境
    jquery--选择器 第几
    a标签href无值,点击刷新页面解决办法
  • 原文地址:https://www.cnblogs.com/mrdragonma/p/12675175.html
Copyright © 2011-2022 走看看