• Stanford NLP 第五课: RNN Vanishing Gradient Problems Details


    Recurrent Neural Network, 适用于序列建模。举一个粒子:

    很容易就知道短线上应该填 John。 如何建立一个模型来让机器学习这件事情呢? 如果用全连接网络, 那么输入就是短线前面的所有单词(首先将每一个单词向量化, 然后将所有单词concatenate在一起,形成一个向量, 作为网络的输入。 这样做的问题是参数量过大。 如果用卷积网络来做, 将所有的词向量拼接成一个矩阵, 作为网络的输入,这样做效果也不错, 但是相比于RNN, CNN在发现序列之间的关系可能要难一点。 现在就来揭开RNN神秘的面纱。

     左边是RNN环图, 右边是RNN的展开图。RNN的计算公式如下:

    可以看到RNN是个串行的结构, t时刻的计算依赖于t-1时刻的计算。需要注意的是, 不同的时刻之间共享所有权值, 包括Wh, We, U, b1, b2. 你要问我为什么不同的时刻之间共享权值 ?

    理由一:如果不共享权值, RNN的参数量会很大。序列长度越长, 参数量越多。共享权值起到了正则化的作用。

    理由二:共享权值可以看成是一种先验知识。科学家认为, 在处理每一个时刻的输入时, 用相同的权值就可以了。

    理由三:共享权值使得RNN可以灵活的处理任意长度的输入序列。以不变应万变。

    RNN的损失函数:

    为什么RNN存在梯度消失的问题 ?首先来推导RNN的反向传播公式。

     

     

    没有看懂? 没关系, 多看几遍, 在纸上推导几遍就懂了, 这个地方不难, 只要具备大学本科线性代数知识即可。

    下面是一个简单一点的例子, 说明RNN的梯度问题。

    注意, 以上全是标量。因为RNN共享权值, 会出现w的高次幂。

    梯度消失会引起什么问题?

     

      如图中画出的带箭头的红线所示, x(4)与x(1)之间的依赖关系通过

     

    来调整。很明显, 间隔的比较远的时候, 他们之间的依赖关系就比较难以调整。

  • 相关阅读:
    Linux下升级gcc版本(9.1.0版本)
    Linux/CentOS系统同步网络时间的2种方法详解
    为什么使用promise
    总结js深拷贝和浅拷贝
    js闭包理解
    select框实现多选的功能
    动态添加element-ui组件
    总结鼠标移入移出事件
    echarts提示框太长,导致显示不全 ,撑大div框的问题
    vue项目中管理定时器
  • 原文地址:https://www.cnblogs.com/yangkang77/p/9140728.html
Copyright © 2020-2023  润新知