zoukankan      html  css  js  c++  java
  • RNN

    目录

    1. 为什么需要RNN

    2. LSTM的结构

    3. LSTM网络

    4. RNN 的评估

    5. RNN的应用

    6. Attention-based model

    1. 为什么需要RNN?

    传统的神经网络,一个输入会对应一个输出,如果输入不变,那输出也不会变。如下,一个Tappei是属于目的地类的,但换一句话又属于出发地类。这个时候就需要神经网络具有记忆功能。

    实际上,循环神经网络是一类神经网络,一类具有记忆功能的神经网络。一类把上一个训练的结果带到下一次训练的神经网络

    这就是一个简单的RNN,它有一个隐层,这个隐层的输出会被带到下一次训练中,和下一次训练的输入数据共同作为网络的输入

    wps103

    wps104

    wps105

    这是一个双向的RNN,这样的好处是不仅可以看到上文,还可以看到下文

    wps106

    2. LSTM的结构

    下面,LSTM隆重登场!

    LSTM是一种RNN, 实际上,现在大家讲在做RNN的时候,其实他们指的就是在做 LSTM。 LSTM已经成为了一种标准。

    这是LSTM的一个Memory Cell, 也就是一个单元:

    wps107

    LSTM的一个memory cell  一共有4个输入,一个输出。

    wps108

    这种网络结构的好处就是 可以控制一个词是否应该输入,上一个词的信息是否应该被遗忘以及是否应该输出

    这是一个LSTM的栗子:

    wps109

    wps110

    wps111

    //篇幅原因,还有几幅图就不展示了,可以前往李老师的RNN part I 的ppt里面查看。

    3. LSTM网络

    一个LSTM网络可以有多个memory cell (先只关注只有一层的情况)

    wps112

    我们注意到,相比于上面介绍的简单的RNN,使用了LSTM的网络的参数会是前者的4倍,因为一个memory cell有4 个输入嘛。

    这里李老师又提到了这种网络,他是先对输入乘以一个矩阵,把这个矩阵叫做transfomer,然后这个输入就由一个任意维的向量变成了一个n维的向量。这里的n等于memory cell 的数量。然后这个n维向量的每一维分别作为不同的memory cell 的input 输入。 同理创造另外3个n维向量,同理这些向量的每一维作为不同memory cell 相同位置的输入。

    wps113

    wps114

    x^t表示 t 时刻的输入

    上面这个图以及很复杂了,但实际上在做LSTM的时候,可能还要把输出和memory(他们把这个拉memory的方式叫做peephole)拉过来做输入

    wps115

    通常情况下LSTM不止又一层,可能会叠5--6层。这个是叠2层的样子:

    wps116

    最后,放一张图轻松一下:

    wps117

    如果看不懂的话,可以回去看一看李老师的视频,讲的很清楚,一遍看不懂就看两遍。

    wps118

    4. RNN的评估

    RNN的代价函数就是每一个时间点的output向量和target向量的距离之和。

    wps119

    RNN也是用梯度下降算法来训练的,也是用到BP算法来求偏导,不过由于RNN是对sequence 训练,所以需要考虑时间的信息,所以这里的BP算法是做了一些改变的,叫做BPTT。具体过程李老师没有讲解。

    wps120

    有个不好的消息,RNN并不好训练

    我们可以从这个实验数据看出,随着梯度下降算法的运行,代价函数的值是没有逐渐变小,而是剧烈波动。。。09年RNN刚出来的时候,很长一段时间,只有RNN的作者能把RNN训练好。

    wps121

    后来分析发现,出现这种情况是因为代价函数的集合图形很崎岖

    wps122

    那么崎岖的原因是什么呢?

    李老师没有讲BPTT,我们不知道参数的梯度,所以李老师也没有从数学的角度来讲原因,这是一个实验的角度来将的为什么这么崎岖。

    下面这个RNN,

    当w这个参数等于1 时,最后输出为1,

    当w增大一点点的时候,输出会变大很多,

    当w减小一点点的时候,输出会变为接近于0

    那么此时就会想,它不是梯度很大嘛,我把学习率 设置小一点就行了,

    但是当w从0.99减到0.01 时,代价函数的输出都接近与0,此时梯度很小。

    从这个例子可以看出,w的变化,可能造成代价函数很小的变化,可能造成天崩地裂的变化。

    总结,RNN代价函数很崎岖不平时因为:同样的weight在不同的时间点会被反复地使用。

    wps123

    那么如何解决gradient 时大时小的问题呢?

    LSTM可以避免gradient 变化过小的问题。(但是不可以解决gradient变化过大的问题)。所以可以放心的把学习率设置的比较大。

    为什么呢?

    因为普通的RNN每次memory都会被重置,而LSTM每次都是memory 的值乘以某一个值再与input的值相加,所以如果weight 可以影响memory里面的值的话,这个影响会一直存在。不想RNN每次都会被format掉 。(当然这是不考虑forget的问题,一开始LSTM的版本就是为了解决gradient的gradient vanishing问题,它是没有forget gate的,现在forget的bias会设置的比较大,保证一般forget gate都不起作用)

    wps124

    还有其他网络模型可以解决loss function 剧烈波动的问题,贴出来知道就行了

    wps125

    5. RNN的应用:

    26‘40’‘

    多对一

    wps126

    多对多:

    wps127

    CTC模型

    wps128

    多对多-不知道谁长谁短

    wps129

    wps130

    sequence to sequenct

    wps131

    编码器:

    wps132

    不仅对sequence做编码,还对句子做编码,就问你怕不怕

    wps133

    对音频的编码

    编码和解码的网络时一起训练的

    wps134

    6. Attention-based model

    可以想想成RNN 的进阶版

    wps135

    wps136

    Reference:

    李宏毅,Structured Learning: Recurrent Neural Network, http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML16.html

  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/rainwelcome/p/11455623.html
Copyright © 2011-2022 走看看