AI有道

不可错过的AI技术公众号

关注

序列模型(Recurrent Neural Networks)是Andrw Ng深度学习专项课程中的第五门课,也是最后一门课。这门课主要介绍循环神经网络(RNN)的基本概念、模型和具体应用。该门课共有3周课时,所以我将分成3次笔记来总结,这是第一节笔记。

——前言

1

Why Sequence Models

序列模型能够应用在许多领域,例如:

  • 语音识别

  • 音乐发生器

  • 情感分类

  • DNA序列分析

  • 机器翻译

  • 视频动作识别

  • 命名实体识别

这些序列模型基本都属于监督式学习,输入x和输出y不一定都是序列模型。如果都是序列模型的话,模型长度不一定完全一致。

2

Notation

下面以命名实体识别为例,介绍序列模型的命名规则。示例语句为:

Harry Potter and Hermione Granger invented a new spell.

该句话包含9个单词,输出y即为1 x 9向量,每位表征对应单词是否为人名的一部分,1表示是,0表示否。很明显,该句话中“Harry”, “Potter”, “Hermione”, “Granger”均是人名成分,所以,对应的输出y可表示为:

对于输入x,表示为:

该词汇库可看成是10000 x 1的向量。值得注意的是自然语言处理NLP实际应用中的词汇库可达百万级别的词汇量。

3

Recurrent Neural Network Model

对于序列模型,如果使用标准的神经网络,其模型结构如下:

使用标准的神经网络模型存在两个问题:

标准的神经网络不适合解决序列模型问题,而循环神经网络(RNN)是专门用来解决序列模型问题的。RNN模型结构如下:

RNN模型包含三类权重系数,分别是Wax,WaaWaa,Wya。且不同元素之间同一位置共享同一权重系数。

RNN的正向传播(Forward Propagation)过程为:

其中,g(⋅)表示激活函数,不同的问题需要使用不同的激活函数。

为了简化表达式,可以对上式进行整合:

则正向传播可表示为:

He said, “Teddy Roosevelt was a great President.”

He said, “Teddy bears are on sale!”

4

Backpropagation through Time

针对上面识别人名的例子,经过RNN正向传播,单个元素的Loss function为:

该样本所有元素的Loss function为:

然后,反向传播(Backpropagation)过程就是从右到左分别计算L(y^,y)对参数Wa,Wy,ba,by的偏导数。思路与做法与标准的神经网络是一样的。一般可以通过成熟的深度学习框架自动求导,例如PyTorch、Tensorflow等。这种从右到左的求导过程被称为Backpropagation through time。

5

Different Types of RNNs

以上介绍的例子中,Tx=Ty。但是在很多RNN模型中,Tx是不等于Ty的。例如第1节介绍的许多模型都是Tx≠Ty。根据Tx与Ty的关系,RNN模型包含以下几个类型:

  • Many to many: Tx=TyTx=Ty

  • Many to many: Tx≠TyTx≠Ty

  • Many to one: Tx>1,Ty=1Tx>1,Ty=1

  • One to many: Tx=1,Ty>1Tx=1,Ty>1

  • One to one: Tx=1,Ty=1Tx=1,Ty=1

不同类型相应的示例结构如下:

6

Language Model and Sequence Generation

语言模型是自然语言处理(NLP)中最基本和最重要的任务之一。使用RNN能够很好地建立需要的不同语言风格的语言模型。

什么是语言模型呢?举个例子,在语音识别中,某句语音有两种翻译:

  • The apple and pair salad.

  • The apple and pear salad.

很明显,第二句话更有可能是正确的翻译。语言模型实际上会计算出这两句话各自的出现概率。比如第一句话概率为10^−13,第二句话概率为10^−10。也就是说,利用语言模型得到各自语句的概率,选择概率最大的语句作为正确的翻译。概率计算的表达式为:

如何使用RNN构建语言模型?首先,我们需要一个足够大的训练集,训练集由大量的单词语句语料库(corpus)构成。然后,对corpus的每句话进行切分词(tokenize)。做法就跟第2节介绍的一样,建立vocabulary,对每个单词进行one-hot编码。例如下面这句话:

The Egyptian Mau is a bread of cat.

One-hot编码已经介绍过了,不再赘述。还需注意的是,每句话结束末尾,需要加上< EOS >作为语句结束符。另外,若语句中有词汇表中没有的单词,用< UNK >表示。假设单词“Mau”不在词汇表中,则上面这句话可表示为:

The Egyptian < UNK > is a bread of cat. < EOS >

准备好训练集并对语料库进行切分词等处理之后,接下来构建相应的RNN模型。

单个元素的softmax loss function为:

该样本所有元素的Loss function为:

对语料库的每条语句进行RNN模型训练,最终得到的模型可以根据给出语句的前几个单词预测其余部分,将语句补充完整。例如给出“Cats average 15”,RNN模型可能预测完整的语句是“Cats average 15 hours of sleep a day.”。

7

Sampling Novel Sequences

利用训练好的RNN语言模型,可以进行新的序列采样,从而随机产生新的语句。与上一节介绍的一样,相应的RNN模型如下所示:

值得一提的是,如果不希望新的语句中包含< UNK >标志符,可以在每次产生< UNK >时重新采样,直到生成非< UNK >标志符为止。

以上介绍的是word level RNN,即每次生成单个word,语句由多个words构成。另外一种情况是character level RNN,即词汇表由单个英文字母或字符组成,如下所示:

Character level RNN与word level RNN不同的是,y^<t>由单个字符组成而不是word。训练集中的每句话都当成是由许多字符组成的。character level RNN的优点是能有效避免遇到词汇表中不存在的单词< UNK >。但是,character level RNN的缺点也很突出。由于是字符表征,每句话的字符数量很大,这种大的跨度不利于寻找语句前部分和后部分之间的依赖性。另外,character level RNN的在训练时的计算量也是庞大的。基于这些缺点,目前character level RNN的应用并不广泛,但是在特定应用下仍然有发展的趋势。

8

Vanisging Gradients with RNNs

语句中可能存在跨度很大的依赖关系,即某个word可能与它距离较远的某个word具有强依赖关系。例如下面这两条语句:

The cat, which already ate fish, was full.

The cats, which already ate fish, were full.

第一句话中,was受cat影响;第二句话中,were受cats影响。它们之间都跨越了很多单词。而一般的RNN模型每个元素受其周围附近的影响较大,难以建立跨度较大的依赖性。上面两句话的这种依赖关系,由于跨度很大,普通的RNN网络容易出现梯度消失,捕捉不到它们之间的依赖,造成语法错误。关于梯度消失的原理,我们在之前的吴恩达《优化深度神经网络》笔记(1)– 深度学习的实用层面已经有过介绍,可参考。

另一方面,RNN也可能出现梯度爆炸的问题,即gradient过大。常用的解决办法是设定一个阈值,一旦梯度最大值达到这个阈值,就对整个梯度向量进行尺度缩小。这种做法被称为gradient clipping。

9

Gated Recurrent Unit(GRU)

RNN的隐藏层单元结构如下图所示:

为了解决梯度消失问题,对上述单元进行修改,添加了记忆单元,构建GRU,如下图所示:

相应的表达式为:

上面介绍的是简化的GRU模型,完整的GRU添加了另外一个gate,即Γr,表达式如下:

注意,以上表达式中的∗∗表示元素相乘,而非矩阵相乘。

10

Long Short Term Memory(LSTM)

LSTM是另一种更强大的解决梯度消失问题的方法。它对应的RNN隐藏层单元结构如下图所示:

相应的表达式为:

LSTM包含三个gates:Γu,Γf,Γo,分别对应update gate,forget gate和output gate。

如果考虑c^<t−1>对Γu,Γf,Γo的影响,可加入peephole connection,对LSTM的表达式进行修改:

GRU可以看成是简化的LSTM,两种方法都具有各自的优势。

11

Bidirectional RNN

我们在第3节中简单提过Bidirectional RNN,它的结构如下图所示:

BRNN对应的输出表达式为:

BRNN能够同时对序列进行双向处理,性能大大提高。但是计算量较大,且在处理实时语音时,需要等到完整的一句话结束时才能进行分析。

12

Deep RNNs

Deep RNNs由多层RNN组成,其结构如下图所示:

我们知道DNN层数可达100多,而Deep RNNs一般没有那么多层,3层RNNs已经较复杂了。

另外一种Deep RNNs结构是每个输出层上还有一些垂直单元,如下图所示:

至此,第一节笔记介绍完毕!

喜欢就请赞赏或转发分享一下吧

往 期 推 荐

【1】吴恩达《卷积神经网络》精炼笔记(1)-- 卷积神经网络基础

【2】干货 | 神经网络与深度学习历史文章汇总

【3】深入浅出机器学习技法(一):线性支持向量机(LSVM)

【4】干货 | 机器学习基石精选文章链接

【5】机器学习中的维度灾难

长按二维码扫描关注

AI有道

ID:redstonewill

红色石头

个人微信 : WillowRedstone

新浪微博:@RedstoneWill

力荐 | 吴恩达《序列模型》精炼笔记(1)-- 循环神经网络(RNN)相关推荐

  1. 吴恩达深度学习课程笔记之卷积神经网络(2nd week)

    0 参考资料 [1]  大大鹏/Bilibili资料 - Gitee.com [2] [中英字幕]吴恩达深度学习课程第四课 - 卷积神经网络_哔哩哔哩_bilibili [3]  深度学习笔记-目录 ...

  2. 吴恩达深度学习学习笔记——C4W1——卷积神经网络——作业2——卷积神经网络应用示例

    这里主要梳理一下作业的主要内容和思路,完整作业文件可参考: https://github.com/pandenghuang/Andrew-Ng-Deep-Learning-notes/tree/mas ...

  3. 吴恩达深度学习——读书笔记

    神经网络和深度学习 深度学习概述 深度学习(Deep Learning)是更复杂的神经网络(Neural Network). 这是一个基本的神经网络模型结构.在训练的过程中,只要有足够的输入x和输出y ...

  4. 深度学习入门首推资料--吴恩达深度学习全程笔记分享

    本文首发于微信公众号"StrongerTang",可打开微信搜一搜,或扫描文末二维码,关注查看更多文章. 原文链接:(https://mp.weixin.qq.com/s?__bi ...

  5. 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层

    目录 0. 前言 1. 2D 图像卷积 2. 3D 图像卷积 3. 过滤器(核函数) 4. 过滤器应用于边缘检测 5. padding 填充 6. stride 步长 7. 使用卷积的动机 8. 1乘 ...

  6. 花书+吴恩达深度学习(一)前馈神经网络(多层感知机 MLP)

    目录 0. 前言 1. 每一个神经元的组成 2. 梯度下降改善线性参数 3. 非线性激活函数 4. 输出单元 4.1. 线性单元 4.2. sigmoid 单元 4.3. softmax 单元 5.  ...

  7. 3. 吴恩达机器学习课程-作业3-多分类和神经网络

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 3. ...

  8. 吴恩达深度学习课程笔记(初步认识神经网络)

    吴恩达深度学习课程笔记1 课程主要内容 1.神经网络与深度学习介绍 2.Improving Deep Neural Networks:超参数调整,正则化,优化方法 3.结构化机器学习工程:比如如何分割 ...

  9. 【中文】【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第四周作业(12)

    [吴恩达课后编程作业]01 - 神经网络和深度学习 - 第四周 - PA1&2 - 一步步搭建多层神经网络以及应用 上一篇: [课程1 - 第四周测验]※※※※※ [回到目录]※※※※※下一篇 ...

最新文章

  1. 拼多多程序员:因为看到同事被抬上救护车,我被开除了!
  2. 计算机专业英语已经出版,欢迎关注
  3. 使用OpenCV 实现matlab的padarray(A, padsize, ‘symmetric’)函数简单实现
  4. 使用JavaScript让网页title动起来
  5. TIANCHI天池-OGeek算法挑战赛-完整方案及代码(亚军)
  6. live555 源码分析:播放启动
  7. cas单点登录学习:cas服务端与客户端的搭建
  8. 【报告分享】数据资产化之路----数据资产的估值与行业实践.pdf
  9. 敏捷开发日常跟进系列之一:燃尽图(上)
  10. linux安装redis 和 使用
  11. Spark服务启动的一些总结
  12. STM32相关问题解决方法
  13. php_eol为什么没有换行,PHP PHP_EOL 换行符
  14. Strip iPhone6
  15. ollydbg 教程
  16. Vue 关闭浏览器清除Cookies
  17. 十七、电话号码的字母组合
  18. 17、文件IO详解及实例
  19. 关于苹果手机打开钉钉小程序中处理的日期显示invalid date
  20. ida安装包密码算法

热门文章

  1. YC元老、硅谷天使投资第一人解读YC成功的秘密
  2. redis 源码安装
  3. POJ 3255 Roadblocks 次短路
  4. c语言数组与指针浅析
  5. 2410 中断过程处理分析
  6. nyist---组队赛(三)
  7. NYOJ 847 S + T
  8. kafka记录及面试题
  9. OperationalError: (1044, Access denied for user ''@'localhost' to database 'mydb')
  10. Snmp扫描-snmpwalk、snmpcheck