DeepLearning.ai学习笔记(五)序列模型 -- week1 循环序列模型

时间:2022-05-06
本文章向大家介绍DeepLearning.ai学习笔记(五)序列模型 -- week1 循环序列模型,主要内容包括一、为什么选择序列模型、二、数学符号、三、循环神经网络模型、2.RNN结构、3.RNN前向传播、4.简化RNN公式、四、通过时间的反向传播、2.前向传播、3.损失函数定义、4.反向传播、5.整个流程图、五、不同类型的循环神经网络、六、语言模型和序列生成、2.如何使用RNN构建语言模型、3.构建语言模型示例、七、对新序列采样、八、带有神经网络的梯度消失、九、GRU单元、2.GRU结构、3.完整版GRU、十、长短期记忆、十一、双向递归神经网络、十二、深层循环神经网络、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

一、为什么选择序列模型

序列模型可以用于很多领域,如语音识别,撰写文章等等。总之很多优点。。。

二、数学符号

为了后面方便说明,先将会用到的数学符号进行介绍。

输入值中每个单词使用One-shot来表示。即首先会构建一个字典(Dictionary),假设该例中的字典维度是10000*1(如图示)。第一个单词"Harry"的数学表示形式即为[0,0,0,……,1 (在第4075位) ,0,……,0],其他单词同理。

但是如果某一个单词并没有被包含在字典中怎么办呢?此时我们可以添加一个新的标记,也就是一个叫做Unknown Word的伪造单词,用 <UNK> 表示。具体的细节会在后面介绍。

三、循环神经网络模型

1.为什么不用标准网络

2.RNN结构

为了将单词之间关联起来,所以将前一层的结果也作为下一层的输入数据。如下图示

3.RNN前向传播

4.简化RNN公式

下面将对如下公式进行化简:

该节PPT内容:

四、通过时间的反向传播

下面将会对反向传播进行灰常灰常详细的介绍,跟着下面一张一张的图片走起来~

1.整体感受

  • 首先再回顾一下RNN的整体结构
  • 要进行反向传播,首先需要前向传播,传播方向如蓝色箭头所示,其次再按照红色箭头进行反向传播。

2.前向传播

3.损失函数定义

要进行反向传播,必须得有损失函数嘛,所以我们将损失函数定义如下:

4.反向传播

计算出损失值后再通过梯度下降进行反向传播

5.整个流程图

五、不同类型的循环神经网络

本节主要介绍了其他更多类型的RNN结构,下图参考大数据文摘

六、语言模型和序列生成

1.什么是语言模型

凡事开头举个栗子,一切都好说:

假设一个语音识别系统听一句话得到了如下两种选择,作为正常人肯定会选择第二种。但是机器才如何做判断呢?

此时就需要通过语言模型来预测每句话的概率:

2.如何使用RNN构建语言模型

  • 首先我们需要一个很大的语料库(Corpus)
  • 将每个单词字符化(Tokenize,即使用One-shot编码)得到词典,,假设有10000个单词
  • 还需要添加两个特殊的单词
    • : end of sentence. 终止符,表示句子结束.
    • : UNknown, 之前的笔记已介绍过.

3.构建语言模型示例

  • 3.计算出损失值

下图给出了构建模型的过程以及损失值计算公式。

七、对新序列采样

下图给出了采样之后得到的效果:

左边是对训练得到新闻信息模型进行采样得到的内容;

右边是莎士比亚模型采样得到的内容。

八、带有神经网络的梯度消失

1.RNN的梯度消失、爆炸问题

梯度值在RNN中也可能因为反向传播的层次太多导致过小或者过大。

  • 当梯度值过小的时候,神经网络将无法有效地调整自己的权重矩阵导致训练效果不佳,称之为“梯度消失问题”(gradient vanishing problem)
  • 过大时可能直接影响到程序的运作因为程序已经无法存储那么大的值,直接返回 NaN ,称之为“梯度爆炸问题”(gradient exploding problem)

当梯度值过大的时候有一个比较简便的解决方法,每次将返回的梯度值进行检查,如果超出了预定的范围,则手动设置为范围的边界值。

if (gradient > max) {
    gradient = max
}

但梯度值过小的解决方案要稍微复杂一点,比如下面两句话:

“The cat,which already ate apple,yogurt,banana,..., was full.”

“The cats,which already ate apple,yogurt,banana,..., were full.”

重点标出的 cat(s)be动词(was,were) 是有很重要的关联的,但是中间隔了一个which引导的定语从句,对于前面所介绍的基础的RNN网络很难学习到这个信息,尤其是当出现梯度消失时,而且这种情况很容易发生。

我们知道一旦神经网络层次很多时,反向传播很难影响前面层次的参数。所以为了解决梯度消失问题,提出了GRU单元,下面一节具体介绍。

九、GRU单元

GRU(Gated Recurrent Unit)是一种用来解决梯度值过小的方法,首先来看下在一个时刻下的RNN单元,激活函数为 tanh

1.首先回顾一下普通RNN单元的结构示意图

2.GRU结构

  • 记忆细胞
  • t时刻记忆细胞

有了更新门公式后,我们则可以给出t时刻记忆细胞的值的计算公式了:

注意:上面公式中的 * 表示元素之间进行乘法运算,而其他公式是矩阵运算。

  • GRU结构示意图

3.完整版GRU

十、长短期记忆

虽然LSTM比GRU更复杂,但是它比GRU更早提出哦。另外一般而言LSTM的表现要更好,但是计算量更大,毕竟多了一个门嘛。而GRU实际上是对LSTM的简化,它的表现也不错,能够更好地扩展到深层网络。所以二者各有优势。

下图是LSTM的结构示意图:

十一、双向递归神经网络

前面介绍的都是单向的RNN结构,在处理某些问题上得到的效果不尽人意

如下面两句话,我们要从中标出人名:

He said, "Teddy Roosevelt was a great President".
He said, "Teddy bears are on sale".

第一句中的Teddy Roosevelt是人名,但第二句中的Teddy bears是泰迪熊,同样都是单词Teddy对应的输出在第一句中应该是1,第二句中应该是0。

像这样的例子如果想让我们的序列模型明白就需要借助不同的结构比如 - 双向递归神经网络(Bidirectional RNN)。该神经网络首先从正面理解一遍这句话,再从反方向理解一遍。

双向递归神经网络结构如下:

下图摘自大数据文摘整理

十二、深层循环神经网络

深层,顾名思义就是层次增加。如下图是深层循环神经网络的示意图

横向表示时间展开,纵向则是层次展开。