吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

时间:2022-09-22 18:13:01

1.1为什么选择序列模型

(1)序列模型广泛应用于语音识别,音乐生成,情感分析,DNA序列分析,机器翻译,视频行为识别,命名实体识别等众多领域。

(2)上面那些问题可以看成使用(x,y)作为训练集的监督学习,但是输入与输出的对应关系有非常多的组合,比如一对一,多对多,一对多,多对一,多对多(个数不同)等情况来针对不同的应用。

1.2数学符号

(1)x(i)<t>前面的i表示第i个训练样本,t表示某个序列样本中索引位置,如下面的一句话是一个样本,“and”的索引是3,序列的长度用Tx表示,下面句子中Tx=9。

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(2)单词是无法直接输入到网络中,所以必须转成数子,用数字来表示单词。方法是将数据集中出现次数最多的10000个单词(这里用10000为例,可以更多),然后用one-hot来表示每一个单词,如下图所示:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

1.3循环神经网络模型

(1)使用标准网络来做上面的命名实体识别,即找出句子中的人名,会存在两个明显的问题:第一是不同的训练样本的单词数不一样,当然可以使用pad来填充,第二是不能狗共享不同位置上学到的特征,用循环神经网络可以解决这些问题。

(2)循环神经网络将按照下图进行计算:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(3)数学式子如下所示:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

将Waa和Wax合并在一起:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

得到

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(4)激活函数常用tanh,另外输出由于是用0,1表示是否是人名,所以用sotfmax激活函数。

1.4通过时间的反向传播

(1)一个元素的代价函数(一个0,1二分类问题,注意下面式子中应该是(1-y<t>):

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(2)每一个样本的代价函数:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(3)RNN反向传播示意图:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

1.5不同类型的循环神经网络

(1)如下图中,第一种是传统标准的网络层,第二是一对多(音乐生成),第三是多对一(情感分析),第四是多对多(输出与输入个数相等,语音识别),第五是多对多(输出与输入个数不一定相等,机器翻译)。

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

1.6语言模型和序列生成

(1)语言模型以下面两个句子为例,语言模型要解决的就是那个句子出现的概率更大,则输出哪个。

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(2)句子的结束句号可以用one-hot表示,关于不在字典中的10000个词的其他词,可以统一用UNK表示,UNK是用one-hot表示的额,所以可以看成总共有10002个字典。

(3)语言模型如下图所示,首先第一个输出是在无任何提示下输出各个词的概率,第二个输出是在给定第一个输出标签时各个词(10002)输出的概率,以此类推,每一个输出都是在给定条件下一个输出各个单词的概率。

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(4)训练网络时,上图中序号8和9分别代表了一个元素和一个样本的代价函数,代价函数使用的是交叉熵。

(5)在使用网络时,现在有一个包含三个词(y<1>,y<2>,y<3>)的句子,这时网络没有任何信息的条件下求是y<1>的概率,然后计算在给定y<1>条件下y<2>的概率,最后在给定y<1>,y<2>条件下y<3>的概率。最后可以确定,输出是这个句子的概率如下图所示,回到最初的两个句子,可以分别求两个句子的概率,取概率最大的句子即可:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

1.7对新序列采样

(1)在应用上面训练好的网络时,只需要用numpy取出来第一个输出中单词概率最大的单词,这样就实现了对序列的采样,然后将获得的词作为已知条件,取获取下一个单词。如下图所示:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(2)可以用当获得结束符时结束网络采样,也可以当采样数到达预定的个数(如50个词)时结束(这时如果碰到结束符,那么重复则在剩下的词重采样,意思就是取概率次大的单词作为输出)。

(3)可以是如上基于词汇的语言模型,也可以有基于字符的语言模型,由于后者计算量大,前后关系捕捉范围有限,所以前者使用更为广泛。

(4)不同语料生成的语言模型是不一样的,比如以新闻为语料的语言模型,最终模型采样出来的可能看上去偏向于新闻的口吻,而比如以莎士比亚的作品为语料的语言模型,最终模型采样结果看上去更像莎士比亚写的风格。如下图所示:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

1.8循环神经网络的梯度消失

(1)训练很深的神经网络时,随着层数的增加,导数有可能指数型的下降或者指数型的增加,我们可能会遇到梯度消失或者梯度爆炸的问题。RNN中如果输入长度为1000的序列(其实求梯度时就相当于1000层),所以同样存在梯度消失和梯度爆炸的问题 。

(2)梯度爆炸时,可以通过梯度修剪来解决,即设定阈值,当梯度超过这个阈值时,缩放梯度向量,保证他不会太大。梯度爆炸比较容易解决。

(3)RNN最主要是存在梯度消失问题,这意味着某一个输出只依赖于很近范围内的值,很远的值无法影响到它,所以像下面的句子因为cats,cat离得很远所以是使用were还是was无法判断:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

1.9GRU单元

(1)GRU即门控循环单元,可以解决循环神经网络的梯度消失问题,进而可以解决上面的远距离也能影响后面的输出。

(2)简化版的GRU如下图所示:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

下面式子激活函数时tanh

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

下面式子激活函数时sigmoid

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

下面的乘法是元素对应相乘

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

输出的话也是可以加上一个适当的激活函数来输出,如softmax。

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(3)当门控值为0,是即保持之前的值,当为1时,即完全更新为候选值,当然还可以 是0到1之间。

(4)需要理解的是,c其实是一个多维度的向量,所以可以看成是某个一特征是用来记住主语的单复数的,当没有被使用时一直保持,被使用之后或者新的主语出现然后被更新。其他特征用来记住其他的信息。

(5)完整的GRU增加了一个相关门,用来告诉你下一个c<t>与候选值和上一个c<t-1>有多大的相关性

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

1.10长短期记忆

(1)GRU的再次总结:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(2)LSTM包括遗忘门、更新门和输出门,具体数学公式如下图所示:
吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

1.11双向循环神经网络

(1)命名实体识别案例:判断下面句子中Teddy是否是人名,如果只从前面两个词是无法得知Teddy是否是人名,如果能有后面的信息就很好判断了,这就需要用的双向循环神经网络。至于网络单元到底是标准的RNN还是GRU或者是LSTM是没有关系的,都可以使用。

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(2)双向循环神经网络如下图所示,每一个输出都是综合考虑两个方向获得的结果再输出:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(3)LSTM有一个缺点就是在使用时需要完整的数据序列,你才能预测任意位置。比如用来构建语音识别系统,需要人把话说完,才能进行处理。

1.12深层循环神经网络

(1)深层循环神经网络如下图所示:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

(2)表示方法a[2]<3>方括号表示网络的第几层,尖括号里面的表示第几个时间序列。

(3)在构建网络时,一般循环神经网络的层比较少,有三层已经算不少了,因为如果一层中有50个序列,其实也就相当于有50层那么深了。

(4)下面是一种比较常见的连接方式,就是讲循环层的输出接上普通的深层网络:

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)

吴恩达《深度学习》第五门课(1)循环序列模型(RNN)的更多相关文章

  1. 吴恩达深度学习第1课第4周-任意层人工神经网络&lpar;Artificial Neural Network,即ANN&rpar;(向量化)手写推导过程(我觉得已经很详细了)

    学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...

  2. 吴恩达深度学习第4课第3周编程作业 &plus; PIL &plus; Python3 &plus; Anaconda环境 &plus; Ubuntu &plus; 导入PIL报错的解决

    问题描述: 做吴恩达深度学习第4课第3周编程作业时导入PIL包报错. 我的环境: 已经安装了Tensorflow GPU 版本 Python3 Anaconda 解决办法: 安装pillow模块,而不 ...

  3. 吴恩达深度学习第2课第2周编程作业 的坑&lpar;Optimization Methods&rpar;

    我python2.7, 做吴恩达深度学习第2课第2周编程作业 Optimization Methods 时有2个坑: 第一坑 需将辅助文件 opt_utils.py 的 nitialize_param ...

  4. 【Deeplearning&period;ai 】吴恩达深度学习笔记及课后作业目录

    吴恩达深度学习课程的课堂笔记以及课后作业 代码下载:https://github.com/douzujun/Deep-Learning-Coursera 吴恩达推荐笔记:https://mp.weix ...

  5. 吴恩达深度学习 反向传播(Back Propagation)公式推导技巧

    由于之前看的深度学习的知识都比较零散,补一下吴老师的课程希望能对这块有一个比较完整的认识.课程分为5个部分(粗体部分为已经看过的): 神经网络和深度学习 改善深层神经网络:超参数调试.正则化以及优化 ...

  6. 深度学习 吴恩达深度学习课程2第三周 tensorflow实践 参数初始化的影响

    博主 撸的  该节 代码 地址 :https://github.com/LemonTree1994/machine-learning/blob/master/%E5%90%B4%E6%81%A9%E8 ...

  7. 吴恩达深度学习笔记(deeplearning&period;ai)之循环神经网络(RNN)(三)

    1. 导读 本节内容介绍普通RNN的弊端,从而引入各种变体RNN,主要讲述GRU与LSTM的工作原理. 事先声明,本人采用ng在课堂上所使用的符号系统,与某些学术文献上的命名有所不同,不过核心思想都是 ...

  8. Coursera 吴恩达 深度学习 学习笔记

    神经网络和深度学习 Week 1-2 神经网络基础 Week 3 浅层神经网络 Week 4 深层神经网络 改善深层神经网络 Week 1 深度学习的实用层面 Week 2 优化算法 Week 3 超 ...

  9. 吴恩达深度学习笔记(五) —— 优化算法:Mini-Batch GD、Momentum、RMSprop、Adam、学习率衰减

    主要内容: 一.Mini-Batch Gradient descent 二.Momentum 四.RMSprop 五.Adam 六.优化算法性能比较 七.学习率衰减 一.Mini-Batch Grad ...

  10. 吴恩达深度学习笔记(deeplearning&period;ai)之卷积神经网络(二)

    经典网络 LeNet-5 AlexNet VGG Ng介绍了上述三个在计算机视觉中的经典网络.网络深度逐渐增加,训练的参数数量也骤增.AlexNet大约6000万参数,VGG大约上亿参数. 从中我们可 ...

随机推荐

  1. Dev Cpp 输出中文字符问题

    最近 c++ 上机作业,vc++6.0 挂了没法用,只好用 Dev Cpp 先顶替一下,然而在遇到输出中文字符的时候出现了乱码的情况,但这种情况又非常诡异.于是简单了解了一下写成此博客. [写在前面] ...

  2. Hashtable和HashMap区别

    Hashtable和HashMap区别 相同点: 实现原理,功能相同,可以互用 主要区别: a.hashtable继承Directionary类,HashMap实现Map接口 b.Hashtable线 ...

  3. C&plus;&plus;中的单例模式

    单例模式也称为单件模式.单子模式,可能是使用最广泛的设计模式.其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享.有很多地方需要这样的功能模块,如系统的日志输出,G ...

  4. 积累PDU

    PDU,即专业发展单元PDUs(Professional Development Units)用来量化PMP所参与的学习和专业服务活动.典型情况下,每个小时所进行的有计划的.系统的学习或专业活动可获得 ...

  5. c&num;中sqlhelper类的编写&lpar;二&rpar;

    上一篇文章讲了简易版的SqlHelper类的编写,我们在这里就上一篇文章末尾提出的问题写出解决方案. sql语句注入攻击已经是众所周知的了.我们如何在C#中保护自己的数据库不被这样的方式攻击呢? 不用 ...

  6. java String源码学习

    public final class String implements java.io.Serializable, Comparable<String>, CharSequence { ...

  7. js如何获取地址栏的参数

    //获取参数的方法(利用正则表达式) function GetUrlParam(name){ var reg = new RegExp("(^|&)"+ name +&qu ...

  8. SQL 2012 Always On 为 MSCRMSqlClrLogin SQL 登录名创建非对称密钥时报语法错误

    根据实施手册中的下图的SQL在为MSCRMSqlClrLogin 创建非对称秘钥时报语法错误,具体的错误在就path那,调了多次还是报错,索性就把SQL拆开执行. 先执行这条 SELECT * FRO ...

  9. python练习题-day17

    1.计算n!,例如n=3(计算321=6), 求10! 2.已知一个数列:1.1.2.3.5.8.13.....的规律为从3开始的每一项都等于其前两项的和,这是斐波那契数列.求满足规律的100以内的所 ...

  10. 判断js数组包是否包含某个元素

    要判断数组中是否包含某个元素,从原理来来说,就是遍历整个数组,然后判断是否相等,我们来造个*,名字就山寨PHP的数组函数in_array() Array.prototype.in_array = f ...