zoukankan      html  css  js  c++  java
  • RNN系列

    一、RNN

    RNN适合应用于序列,变长的句子。

    1.引入

    z为线性变化,a为激活函数

    2.函数近似语言模型*(近似定理)


    前馈的输入的长度是有限的依赖问题,FNN太宽(也就是0/1就可以构成一个windows,但不会这么做)
    引入RNN能更好的学习有历史依赖关系的情况*(序列有前后依赖关系)

    3.RNN

    U和W是共享的,也就是在更新的时候是不变化的。
    输出的时候也是用同一个V。(实际应用中可以调整,实际应用最好共享)
    求 U,V,W参数:用反向传播算法(几乎处处连续可微,因为relu在0不可微)

    4.Back-propagation For Recurrent Nets

    在实际应用中,会线性RNN的长度。

    4.1 BPTT计算梯度

    把计算RNN的过程展开为一个前馈神经网络,再用前馈神经网络的方式求解参数。
    所有的梯度都得保存。

    关于参数V(只用到了在计算h(t)的时候)

    参数W和U

    4.2 RTRL计算梯度(NLP用的少)

    Real-time Recurrent Learning(RTRL),最后求出来的梯度是一样的。
    在前向传播的时候,维护一个额外的变量,同时保存梯度。实时性.
    没有人专门研究RTRL和BPTT谁好.

    4.3 为什么不建立一个无限长的序列

    RNN在应用的时候,会限制其长度.RNN长的时候很难优化,会有梯度为0或者梯度爆炸.(连乘)

    偏导数都是小于1的

    解决:Dropout
    Mark一些h(t)
    https://medium.com/@bingobee01/a-review-of-dropout-as-applied-to-rnns-72e79ecd5b7b



    二、LSTM(Long Short-term Memory)

    LSTM接着RNN,自动学习了Marks,在哪个位置更新h,哪个位置不更新(不参与梯度计算)。
    防止了梯度消失。
    https://colah.github.io/posts/2015-08-Understanding-LSTMs/

    1.Naïve RNN vs LSTM


    2.LSTM具体介绍

    2.1 Core Idea of the LSTM: Gate

    根据C去决定是否更新当前状态要不要使用t去更新当前的隐状态

    2.2 Forget Gate

    用遗忘门忘记一些东西,去为更新C_t做准备(要不要更新C和h)。Sigmoid的激活函数(输出在0-1之间,偏向于0更想忘掉一些东西,偏向于1更像记住)

    2.3 input Gate


    更新C_t

    2.4 Output Gate

    Output对c进行了选择

    总的:最后我们会把h_t和C_t拼接起来继续输出。(C和h的维度是一样的)

    3. LSTM变种

    add peephole

    Forget while input:忘多少记多少

    4. GUR:LSTM最流行的变种

    Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation
    效果类似,速度更快

    5.Bi-LSTM

    LSTM可视化:Visualizing and Understanding Neural models in nlp
    LSTMVis:A Tools for Visual Analysis of hidden state Dynamics in Recurrent Neural Networks

    三、Applications

    3.1 递归神经网络(recursive neural networks)

    未解决问题:怎么决定融合的顺序?(贪心?)

    3.2 Stacked RNN(堆叠式的RNN)

    多个隐状态h_t,m_t,n_t(参数多,计算慢,但能力更强)
    1-5层

    3.3 双向RNN

    同时拥有左右的信息。可并行计算。






  • 相关阅读:
    从Oracle提供两种cube产品说开
    Sql Server DWBI的几个学习资料
    Unload Oracle data into text file
    初学Java的几个tips
    我常用的Oracle知识点汇总
    benefits by using svn
    如何在windows上使用putty来显示远端linux的桌面
    building commercial website using Microsoft tech stack
    Understand Thread and Lock
    Update google calendar by sunbird
  • 原文地址:https://www.cnblogs.com/Towerb/p/14192965.html
Copyright © 2011-2022 走看看