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

  • 相关阅读:
    网格视图
    使用box-shadow 属性用来可以创建纸质样式卡片:
    css 按钮动画
    vue父组件向自定义组件传递参数过程
    vue中如何使用 v-model 实现双向数据绑定?
    vue中是如何实现响应键盘回车事件
    vue中如何实现 样式绑定?
    webpack require.Context功能作用
    Personal tips for success
    my blog frist
  • 原文地址:https://www.cnblogs.com/rainwelcome/p/11455623.html
Copyright © 2011-2022 走看看