• 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

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






  • 相关阅读:
    一、Python概念知识点汇总
    在ubuntu永久添加alias
    字符串转化为数字 不用sscanf
    python class类
    《Effective C++》笔记
    问到面向对象该如何回答
    数字和字符串互相转换
    python input print 输入输出
    《c专家编程》笔记
    判断是否是回文数
  • 原文地址:https://www.cnblogs.com/Towerb/p/14192965.html
Copyright © 2020-2023  润新知