DeepLearning.ai 提炼笔记(5-1)-- 循环神经网络

参考博客

Class 5: 序列模型Sequence Models

Week 1: 循环神经网络RNN (Recurrent)

文章目录

  • Class 5: 序列模型Sequence Models
  • Week 1: 循环神经网络RNN (Recurrent)
  • 目录
    • 序列模型-循环神经网络
      • 1.序列模型的应用
      • 2.数学符号
      • 3.循环神经网络模型
        • 传统标准的神经网络
        • 循环神经网络的前向传播
      • 4.穿越时间的反向传播
      • 5.不同类型的RNN
      • 6.语言模型和序列生成
        • 什么是语言模型
      • 7.新序列采样
      • 8.RNN的梯度消失
      • 9.GRU单元
      • 10.LSTM
      • 11. 双向RNN
      • 12.深层RNN

目录

本课程将教你如何建立自然语言,音频和其他序列数据的模型。 由于深入的学习,序列算法的运行速度远远超过两年前,这使得语音识别,音乐合成,聊天机器人,机器翻译,自然语言理解等许多令人兴奋的应用成为可能。

通过本课程你将学到

  • 了解常见的序列模型是如何创建的
  • 能够知道如何选择常见的序列模型,并知道如何训练他们
  • 知道如何将序列模型应用在常见的应用上,如:文本的翻译,自然语言处理,文本的合成等等

序列模型-循环神经网络

1.序列模型的应用

循环神经网络(RNN)之类的模型在语音识别、自然语言处理和其他领域中引起变革。

  • 语音识别:将输入的语音信号直接输出相应的语音文本信息。无论是语音信号还是文本信息均是序列数据。
  • 音乐生成:生成音乐乐谱。只有输出的音乐乐谱是序列数据,输入可以是空或者一个整数。
  • 情感分类:将输入的评论句子转换为相应的等级或评分。输入是一个序列,输出则是一个单独的类别。
  • DNA序列分析:找到输入的DNA序列的蛋白质表达的子序列。
  • 机器翻译:两种不同语言之间的想换转换。输入和输出均为序列数据。
  • 视频行为识别:识别输入的视频帧序列中的人物行为。
  • 命名实体识别:从输入的句子中识别实体的名字
    在这里插入图片描述
  • 在进行语音识别时,给定了一个输入音频片段 ,并要求输出对应的文字记录 。这个例子里输入和输出数据都是序列模型,因为 是一个按时播放的音频片段,输出 是一系列单词。所以之后将要学到的一些序列模型,如循环神经网络等等在语音识别方面是非常有用的。
  • 音乐生成问题是使用序列数据的另一个例子,在这个例子中,只有输出数据 是序列,而输入数据可以是空集,也可以是个单一的整数,这个数可能指代你想要生成的音乐风格,也可能是你想要生成的那首曲子的头几个音符。输入的 可以是空的,或者就是个数字,然后输出序列 。
  • 在处理情感分类时,输入数据 是序列,你会得到类似这样的输入:“There is nothing to like in this movie.”,你认为这句评论对应几星?
  • 序列模型在DNA序列分析中也十分有用,你的DNA可以用A、C、G、T四个字母来表示。所以给定一段DNA序列,你能够标记出哪部分是匹配某种蛋白质的吗?
  • 在机器翻译过程中,你会得到这样的输入句:“Voulez-vou chante avecmoi?”(法语:要和我一起唱么?),然后要求你输出另一种语言的翻译结果。
  • 在进行视频行为识别时,你可能会得到一系列视频帧,然后要求你识别其中的行为。
  • 在进行命名实体识别时,可能会给定一个句子要你识别出句中的人名。

所以这些问题都可以被称作使用标签数据 作为训练集的监督学习。但从这一系列例子中你可以看出序列问题有很多不同类型。有些问题里,输入数据 和输出数据都是序列,但就算在那种情况下,和有时也会不一样长。或者像上图编号1所示和上图编号2的和有相同的数据长度。在另一些问题里,只有 或者只有是序列。

2.数学符号

本节先从定义符号开始一步步构建序列模型。
在这里插入图片描述

比如说你想要建立一个序列模型,它的输入语句是这样的:“Harry Potter and Herminoe Granger invented a new spell.”,(这些人名都是出自于J.K.Rowling笔下的系列小说Harry Potter)。假如你想要建立一个能够自动识别句中人名位置的序列模型,那么这就是一个命名实体识别问题,这常用于搜索引擎,比如说索引过去24小时内所有新闻报道提及的人名,用这种方式就能够恰当地进行索引。命名实体识别系统可以用来查找不同类型的文本中的人名、公司名、时间、地点、国家名和货币名等等。
在这里插入图片描述
现在给定这样的输入数据,假如你想要一个序列模型输出,使得输入的每个单词都对应一个输出值,同时这个能够表明输入的单词是否是人名的一部分。技术上来说这也许不是最好的输出形式,还有更加复杂的输出形式,它不仅能够表明输入词是否是人名的一部分,它还能够告诉你这个人名在这个句子里从哪里开始到哪里结束。比如Harry Potter(上图编号1所示)、Hermione Granger(上图标号2所示)。

更简单的那种输出形式:

这个输入数据是9个单词组成的序列,所以最终我们会有9个特征集和来表示这9个单词,并按序列中的位置进行索引,、、等等一直到来索引不同的位置,我将用来索引这个序列的中间位置。意味着它们是时序序列,但不论是否是时序序列,我们都将用来索引序列中的位置。

输出数据也是一样,我们还是用、、等等一直到来表示输出数据。同时我们用来表示输入序列的长度,这个例子中输入是9个单词,所以。我们用来表示输出序列的长度。在这个例子里,上个视频里你知道和可以有不同的值。

你应该记得我们之前用的符号,我们用来表示第个训练样本,所以为了指代第个元素,或者说是训练样本i的序列中第个元素用这个符号来表示。如果是序列长度,那么你的训练集里不同的训练样本就会有不同的长度,所以就代表第个训练样本的输入序列长度。同样代表第个训练样本中第个元素,就是第个训练样本的输出序列的长度。

所以在这个例子中,,但如果另一个样本是由15个单词组成的句子,那么对于这个训练样本,。

既然我们这个例子是NLP,也就是自然语言处理,这是我们初次涉足自然语言处理,一件我们需要事先决定的事是怎样表示一个序列里单独的单词,你会怎样表示像Harry这样的单词,实际应该是什么?

接下来我们讨论一下怎样表示一个句子里单个的词。想要表示一个句子里的单词,第一件事是做一张词表,有时也称为词典,意思是列一列你的表示方法中用到的单词。这个词表(下图所示)中的第一个词是a,也就是说词典中的第一个单词是a,第二个单词是Aaron,然后更下面一些是单词and,再后面你会找到Harry,然后找到Potter,这样一直到最后,词典里最后一个单词可能是Zulu。
在这里插入图片描述
因此a是第一个单词,Aaron是第二个单词,在这个词典里,and出现在367这个位置上,Harry是在4075这个位置,Potter在6830,词典里的最后一个单词Zulu可能是第10,000个单词。所以在这个例子中我用了10,000个单词大小的词典,这对现代自然语言处理应用来说太小了。对于商业应用来说,或者对于一般规模的商业应用来说30,000到50,000词大小的词典比较常见,但是100,000词的也不是没有,而且有些大型互联网公司会用百万词,甚至更大的词典。许多商业应用用的词典可能是30,000词,也可能是50,000词。不过我将用10,000词大小的词典做说明,因为这是一个很好用的整数。

如果你选定了10,000词的词典,构建这个词典的一个方法是遍历你的训练集,并且找到前10,000个常用词,你也可以去浏览一些网络词典,它能告诉你英语里最常用的10,000个单词,接下来你可以用one-hot表示法来表示词典里的每个单词。

举个例子,在这里表示Harry这个单词,它就是一个第4075行是1,其余值都是0的向量(上图编号1所示),因为那是Harry在这个词典里的位置。

同样是个第6830行是1,其余位置都是0的向量(上图编号2所示)。

and在词典里排第367,所以就是第367行是1,其余值都是0的向量(上图编号3所示)。如果你的词典大小是10,000的话,那么这里的每个向量都是10,000维的。

因为a是字典第一个单词,对应a,那么这个向量的第一个位置为1,其余位置都是0的向量(上图编号4所示)。

所以这种表示方法中,指代句子里的任意词,它就是个one-hot向量,因为它只有一个值是1,其余值都是0,所以你会有9个one-hot向量来表示这个句中的9个单词,目的是用这样的表示方式表示,用序列模型在和目标输出之间学习建立一个映射。我会把它当作监督学习的问题,我确信会给定带有标签的数据。

那么还剩下最后一件事,我们将在之后的视频讨论,如果你遇到了一个不在你词表中的单词,答案就是创建一个新的标记,也就是一个叫做Unknow Word的伪造单词,用作为标记,来表示不在词表中的单词,我们之后会讨论更多有关这个的内容。

总结一下本节课的内容,我们描述了一套符号用来表述你的训练集里的序列数据和,在下节课我们开始讲述循环神经网络中如何构建到的映射。

3.循环神经网络模型

传统标准的神经网络

对于学习X和Y的映射,我们可以很直接的想到一种方法就是使用传统的标准神经网络。也许我们可以将输入的序列X以某种方式进行字典编码以后,如one-hot编码,输入到一个多层的深度神经网络中,最后得到对应的输出Y。如下图所示:
在这里插入图片描述
但是,结果表明这种方法并不好,主要是存在下面两个问题:

一、是输入和输出数据在不同例子中可以有不同的长度,不是所有的例子都有着同样输入长度或是同样输出长度的。即使每个句子都有最大长度,也许你能够填充(pad)或零填充(zero pad)使每个输入语句都达到最大长度,但仍然看起来不是一个好的表达方式。

二、一个像这样单纯的神经网络结构,它并不共享从文本的不同位置上学到的特征。具体来说,如果神经网络已经学习到了在位置1出现的Harry可能是人名的一部分,那么如果Harry出现在其他位置,比如时,它也能够自动识别其为人名的一部分的话,这就很棒了。这可能类似于你在卷积神经网络中看到的,你希望将部分图片里学到的内容快速推广到图片的其他部分,而我们希望对序列数据也有相似的效果。和你在卷积网络中学到的类似,用一个更好的表达方式也能够让你减少模型中参数的数量。

之前我们提到过这些(上图编号1所示的…………)都是10,000维的one-hot向量,因此这会是十分庞大的输入层。如果总的输入大小是最大单词数乘以10,000,那么第一层的权重矩阵就会有着巨量的参数。但循环神经网络就没有上述的两个问题。

循环神经网络作为一种新型的网络结构,在处理序列数据问题上则不存在上面的两个缺点。在每一个时间步中,循环神经网络会传递一个激活值到下一个时间步中,用于下一时间步的计算。如下图所示:

在这里插入图片描述
这里需要注意在零时刻,我们需要编造一个激活值,通常输入一个零向量,有的研究人员会使用随机的方法对该初始激活向量进行初始化。同时,上图中右边的循环神经网络的绘制结构与左边是等价的。

循环神经网络是从左到右扫描数据的,同时共享每个时间步的参数。

在这里插入图片描述

上述循环神经网络结构的缺点:每个预测输出y^t仅使用了前面的输入信息,而没有使用后面的信息。Bidirectional RNN(双向循环神经网络)可以解决这种存在的缺点。

循环神经网络的前向传播

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RNN前向传播示意图:
在这里插入图片描述

4.穿越时间的反向传播

之前我们已经学过了循环神经网络的基础结构,在本节视频中我们将来了解反向传播是怎样在循环神经网络中运行的。和之前一样,当你在编程框架中实现循环神经网络时,编程框架通常会自动处理反向传播。但我认为,在循环神经网络中,对反向传播的运行有一个粗略的认识还是非常有用的,让我们来一探究竟

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.不同类型的RNN

对于RNN,不同的问题需要不同的输入输出结构。

#### 多对多()
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.语言模型和序列生成

在自然语言处理中,构建语言模型是最基础的也是最重要的工作之一,并且能用RNN很好地实现。

什么是语言模型

对于下面的例子,两句话有相似的发音,但是想表达的意义和正确性却不相同,如何让我们的构建的语音识别系统能够输出正确地给出想要的输出。也就是对于语言模型来说,从输入的句子中,评估各个句子中各个单词出现的可能性,进而给出整个句子出现的可能性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.新序列采样

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.RNN的梯度消失

在这里插入图片描述
在这里插入图片描述
对于梯度消失问题,在RNN的结构中是我们首要关心的问题,也更难解决;虽然梯度爆炸在RNN中也会出现,但对于梯度爆炸问题,因为参数会指数级的梯度,会让我们的网络参数变得很大,得到很多的Nan或者数值溢出,所以梯度爆炸是很容易发现的,我们的解决方法就是用梯度修剪,也就是观察梯度向量,如果其大于某个阈值,则对其进行缩放,保证它不会太大。

9.GRU单元

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.LSTM

GRU能够让我们在序列中学习到更深的联系,长短期记忆(long short-term memory, LSTM)对捕捉序列中更深层次的联系要比GRU更加有效。
在这里插入图片描述
在这里插入图片描述

11. 双向RNN

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12.深层RNN

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见人工智能比赛平台总结

目录1.kaggle比赛1.1 kaggle比赛是什么?1.2 为什么举办kaggle比赛?1.3 kaggle比赛形式是什么?1.4 kaggle比赛的奖励制度是什么?2.阿里天池比赛2.1 阿里天池比赛是什么?2.2 为什么举办阿里天池比赛?2.3 阿里…

机器学习模型评分总结(sklearn)

文章目录目录模型评估评价指标1.分类评价指标acc、recall、F1、混淆矩阵、分类综合报告1.准确率方式一:accuracy_score方式二:metrics2.召回率3.F1分数4.混淆矩阵5.分类报告6.kappa scoreROC1.ROC计算2.ROC曲线3.具体实例2.回归评价指标3.聚类评价指标1.…

kaggle (02) - 房价预测案例(进阶版)

房价预测案例(进阶版) 这是进阶版的notebook。主要是为了比较几种模型框架。所以前面的特征工程部分内容,我也并没有做任何改动,重点都在后面的模型建造section Step 1: 检视源数据集 import numpy as np import pandas as pd读…

《Head First设计模式》第二章笔记 观察者模式

背景 客户有一个WeatherData对象,负责追踪温度、湿度和气压等数据。现在客户给我们提了个需求,让我们利用WeatherData对象取得数据,并更新三个布告板:目前状况、气象统计和天气预报。 WeatherData对象提供了4个接口: …

《Head First设计模式》第三章笔记 装饰者模式

装饰者模式(Decorator Pattern) *利用组合(composition)和委托(delegation)可以在运行时实现继承行为的效果,动态地给对象加上新的行为。 *利用继承扩展子类的行为,是在编译时静态决定的&#x…

机器学习中如何解决数据不平衡问题?

文章目录目录什么是数据不平衡问题?数据不平衡会造成什么影响?如何处理数据不平衡问题?1、重新采样训练集1.1随机欠抽样1.2.基于聚类的过采样2.使用K-fold交叉验证3.转化为一分类问题4.组合不同的重采样数据集5.用不同比例重新采样6.多模型Ba…

《Head First设计模式》第四章笔记 工厂模式

之前我们一直在使用new操作符,但是实例化这种行为并不应该总是公开的进行,而且初始化经常会造成耦合问题,工厂模式将摆脱这种复杂的依赖,本次内容包括简单工厂,工厂方法和抽象工厂三种情况。 1 2 3 4 5 6 Duck duck&a…

《Head First设计模式》第五章笔记-单件模式

单件模式 定义:确保一个类只有一个实例,并提供全局访问点。 编写格式: 1 2 3 4 5 6 public class MyClass{ private MyClass(){}//构造方法私有化 public static MyClass getInstance(){ //提供全局访问点 return new My…

《Head First设计模式》第六章笔记-命令模式

封装调用-命令模式 命令模式可将“动作的请求者”从“动作的执行者”对象中解耦。 本篇中将不再描述书中所引入的“巴斯特家电自动化公司”的遥控器控制案例,而使用简单易懂的餐厅案例。 在开始之前,让我们通过一个现实中的例子来了解命令模式。 理解…

一文读懂机器学习库graphLab

文章目录目录什么是graphlab为什么使用graphlab?如何安装graphlab?graphlab的简单使用。目录 什么是graphlab GraphLab 是由CMU(卡内基梅隆大学)的Select 实验室在2010 年提出的一个基于图像处理模型的开源图计算框架,框架使用C语言开发实…

《Head First设计模式》第七章-适配器模式、外观模式

适配器模式 适配器模式是什么,你一定不难理解,因为现实中到处都是。比如说: 如果你需要在欧洲国家使用美国制造的笔记本电脑,你可能需要使用一个交流电的适配器…… 当你不想改变现有的代码,解决接口不适配问题&#…

《Head First设计模式》第八章笔记-模板方法模式

模板方法模式 之前所学习的模式都是围绕着封装进行,如对象创建、方法调用、复杂接口的封装等,这次的模板方法模式将深入封装算法块,好让子类可以在任何时候都将自己挂接进运算里。 模板方法定义:模板方法模式在一个方法中定义一…

机器学习基础-吴恩达-coursera-(第一周学习笔记)----Introduction and Linear Regression

课程网址:https://www.coursera.org/learn/machine-learning Week 1 —— Introduction and Linear Regression 目录 Week 1 Introduction and Linear Regression目录一 介绍1-1 机器学习概念及应用1-2 机器学习分类 二 单变量的线性回归2-1 假设函数hypothesis2…

常见8种机器学习算法总结

简介 机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验。通常最开始我们都会选择大家普遍认同的算法,诸如SVM&a…

redis——数据结构(字典、链表、字符串)

1 字符串 redis并未使用传统的c语言字符串表示,它自己构建了一种简单的动态字符串抽象类型。 在redis里,c语言字符串只会作为字符串字面量出现,用在无需修改的地方。 当需要一个可以被修改的字符串时,redis就会使用自己实现的S…

Hotspot虚拟机的对象

创建 Step1:类加载检查 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 Step2:分…

redis——数据结构(整数集合,压缩列表)

4、整数集合 整数集合(intset)是 Redis 用于保存整数值的集合抽象数据结构, 可以保存 int16_t 、 int32_t 、 int64_t 的整数值, 并且保证集合中不会出现重复元素。 实现较为简单: typedef struct intset {// 编码方…

机器学习知识总结系列- 知识图谱(0-0)

文章目录目录机器学习知识图谱目录 本系列的文章只是根据个人的习惯进行总结,可能结构与一些书籍上不太一样,开始的内容比较简单,会随着后续的深入,不断丰富和更新图谱,同时也期待有相同兴趣的朋友一起给我留言一起丰富…

跳表介绍和实现

想慢慢的给大家自然的引入跳表。 想想,我们 1)在有序数列里搜索一个数 2)或者把一个数插入到正确的位置 都怎么做? 很简单吧 对于第一个操作,我们可以一个一个比较,在数组中我们可以二分,这…

机器学习知识总结系列- 基本概念(1-0)

文章目录目录1. 机器学习的定义2. 机器学习的分类2.1根据是否在人类监督下进行训练监督学习非监督学习半监督学习强化学习2.2根据是否可以动态渐进的学习在线学习批量学习2.3根据是否在训练数据过程中进行模式识别实例学习基于模型的学习3. 机器学习中的一些常见名词4. 机器学习…