5.1 时序模型——循环神经网络RNN

吴恩达深度学习笔记——十三、第五课第一周:时序模型——循环神经网络RNN

  • 1 时序模型简介
    • 1.1 时序模型的用处
    • 1.2 符号定义
    • 1.3 如何表示一个句子里的词
  • 2 循环神经网络RNN
    • 2.1 简介RNN
    • 2.2 反向传播
    • 2.3 各种类型的RNN架构
      • 2.3.1 人名预测——多对多架构
      • 2.3.2 语言情感预测——多对一
      • 2.3.3 音乐生成——一对多
      • 2.3.4 一对一
    • 2.4 语言模型和序列生成
    • 2.5 新序列采样
    • 2.6 RNN中的梯度消失问题
  • 3 Gated Recurrent Unit(GRU)
  • 4 long short term menory unit (LSTM)
  • 5 双向RNN
  • 6 深层循环神经网络

1 时序模型简介

1.1 时序模型的用处

5.1 时序模型——循环神经网络RNN_第1张图片
以上的模型中,有的输入是时序数据,有的输出是时序数据,有的输入输出都是时序数据。

1.2 符号定义

Tx(i):第i个输入序列的长度(单词数量)
Ty(i):第i个输出序列的长度
x(i):第i个训练样本的第t个元素
x(i):第i个训练样本

1.3 如何表示一个句子里的词

想要表示一个句子里的单词,我们首先需要一个词表(vocabulary),也称为词典(dictionary):就是一列我们的表示方法中可能用到的词,并将训练集中数据中的每个单词用词表中的索引表示,又称为“one-hot表示法”。
5.1 时序模型——循环神经网络RNN_第2张图片
本章我们用人名识别系统为例进行说明。这样我们就把非结构化的信息数字化了,可以使用之前学习过的有监督的学习策略来训练。

2 循环神经网络RNN

2.1 简介RNN

使用上一小节中的训练方法,有以下缺点:
5.1 时序模型——循环神经网络RNN_第3张图片
RNN的架构与之不同,在第一个时间步,RNN首先输入一个数据中的第一个单词x<1>,网络有一个输出y<1>,预测x<1>是不是人名的一部分。当RNN接下来去阅读句子中的第二个单词时,他除了接收第二个单词的输入还会输入一些来自时间步1的激活函数值a<1>,以此类推。当然第一个时间步(第0步)开始前我们也会初始化一个激活函数a<0>(一般取为0向量)
5.1 时序模型——循环神经网络RNN_第4张图片
论文中有时用这种方法来表示RNN:
5.1 时序模型——循环神经网络RNN_第5张图片
需要注意的是每个时间步内的参数Wax是共享的,决定水平联系的参数是Waa,决定输出的参数时Wya,其也是共享的
5.1 时序模型——循环神经网络RNN_第6张图片
有时候也把Wax和Waa合并为一个参数矩阵Wa
5.1 时序模型——循环神经网络RNN_第7张图片
这样的神经网络也有不足,因为其预测当前单词的时候没有用到未来的输入。

2.2 反向传播

某个单词预测的损失函数L,整个序列的总体损失函数L:
5.1 时序模型——循环神经网络RNN_第8张图片
Backpropagation through time,红色箭头是反向传播过程,具体运算调包即可完成。
5.1 时序模型——循环神经网络RNN_第9张图片

2.3 各种类型的RNN架构

2.3.1 人名预测——多对多架构

5.1 时序模型——循环神经网络RNN_第10张图片
输入输出的长度可以是不同的,比如翻译系统。
5.1 时序模型——循环神经网络RNN_第11张图片

2.3.2 语言情感预测——多对一

5.1 时序模型——循环神经网络RNN_第12张图片

2.3.3 音乐生成——一对多

5.1 时序模型——循环神经网络RNN_第13张图片

2.3.4 一对一

没有什么太大的用处。
5.1 时序模型——循环神经网络RNN_第14张图片

2.4 语言模型和序列生成

语言模型就是计算出每句话的可能性,帮助机器获得更好的翻译性能:
5.1 时序模型——循环神经网络RNN_第15张图片
在这里插入图片描述
< EOS >用来表示一个句子的结尾
< UNK >表示不认识的单词
对于每一个单词,其输出都是一个有很多个神经元(个数与词库相同)的Softmax输出层。
其中第二个单词开始,输出的都是一个条件概率,在前几个单词发生的条件下本单词被映射到词表中某个单词的概率:
5.1 时序模型——循环神经网络RNN_第16张图片
损失函数定义为:
5.1 时序模型——循环神经网络RNN_第17张图片
对语料库的每条语句进行RNN模型训练,最终得到的模型可以根据给出语句的前几个单词预测其余部分,将语句补充完整。例如给出“Cats average 15”,RNN模型可能预测完整的语句是“Cats average 15 hours of sleep a day.”。
通过条件概率的定律就可以求出一句话中包含这n个词的概率了:
5.1 时序模型——循环神经网络RNN_第18张图片

2.5 新序列采样

假设我们的模型已经使用上述几节的方法训练过了,接下来的采样sample操作如下:首先输入第一个单词,第一个时间步我们得到的输出是经过Softmax层后的概率向量,我们使用np.random.choice(word, softmax_possibility);来依据每个词的概率大小对词表中的词进行随机采样,然后将采样到的词输入第二个时间步,以此类推。
我们判断一个句子结束的标志是:如果< EOS >在我们的词表中,那么我们认为采样到< EOS >标志就以为着一句话的结束;如果< EOS >不在我们的词表中,我们可以决定从20个或者100词中继续采样,直到达到所设定的时间步:
5.1 时序模型——循环神经网络RNN_第19张图片

2.6 RNN中的梯度消失问题

RNN不太擅长处理长期依赖的问题,比如下面这两个句子,主语和谓语之间有一段很长的插入语,后面的谓语将很难学到前面主语的信息,造出主谓一致的句子:
在这里插入图片描述
这是因为如果我们的网络很深,从左到右正向传播,从右到左反向传播,最后一层y的梯度很难传播回去影响前面的参数,也就是很难让一个网络记住前面好几个位置的单词是单三还是复数,时态是什么,我们的解决办法就是使用下一节中的GRU。
5.1 时序模型——循环神经网络RNN_第20张图片
RNN也会面临梯度爆炸的问题,但是比较少见,而且很容易发现,因为梯度爆炸会使参数变得非常大,我们会看到很多NaN的数值,我们使用梯度修剪来解决这一问题,当我们梯度向量大于某一阈值之后缩放梯度,不要使他太大。

3 Gated Recurrent Unit(GRU)

本节主要介绍门控循环单元,我们先通过下图回顾一下普通的RNN单元是怎么样的:
5.1 时序模型——循环神经网络RNN_第21张图片
在GRU中c(t)=a(t),我们用c撇(候选值)来更新c,使用门函数Γu来决定是否真的更新c。注意,计算Γu和计算c(t)撇使用的组参数和两种激活函数:
5.1 时序模型——循环神经网络RNN_第22张图片
我们训练每一个单词时,其前面的所有单词都对这个单词都有一个门函数,我们训练的时候我们就知道是否要用其前面的激活函数(记忆单元)值去更新当前单词模型的记忆单元值,如下图所示:
5.1 时序模型——循环神经网络RNN_第23张图片
上面的其实是简化过的GRU,真正的GRU如下图所示:
5.1 时序模型——循环神经网络RNN_第24张图片

4 long short term menory unit (LSTM)

本节主要介绍长短时记忆单元,论文很有开创性,但是不好懂,
5.1 时序模型——循环神经网络RNN_第25张图片
相较GRU而言,LSTM更复杂,更灵活,计算量更大。

5 双向RNN

有时候光靠前面的单词无法确定当前单词的性质,是否是人名,词性如何?
5.1 时序模型——循环神经网络RNN_第26张图片
用Bidirectional-RNN就可以解决这一问题,“→”表示前向循环单元,“←”表示反向循环单元:
5.1 时序模型——循环神经网络RNN_第27张图片

BRNN的缺点是我需要完整的数据序列去做预测,也就是需要等人把一句话完全讲完才行。

6 深层循环神经网络

a[l]表示第l层第t个时间节点,RNN有三层就算很深了5.1 时序模型——循环神经网络RNN_第28张图片
每个隐藏单元有两个输入,左侧和下边,其计算值为:
在这里插入图片描述

你可能感兴趣的:(吴恩达-深度学习,神经网络,深度学习,人工智能)