一、RNN基本结构

普通神经网络不能处理时间序列的信息,只能割裂的单个处理,同时普通神经网络如果用来处理文本信息的话,参数数目将是非常庞大,因为如果采用one-hot表示词的话,维度非常大。

RNN可以解决这两个问题

1)RNN属于循环神经网络,当从左到右读取文本信息的时候,上一时刻的状态输出可以传递到下一时刻,例如上图的a表示状态,a(1)向下传递,这样就考虑了前面的信息,如果是双向RNN的话,上下文都考虑进去了。

2)RNN参数是共享的。为方便理解,上述图示是展开的RNN结构,其实RNN只有一个循环体,一组共享参数。

上述图是一个最基本的RNN结构,a<T>代表不同时刻的状态,a0是一个初始化的零时刻的状态,可以设置为零向量;x<T>代表不同时刻的输入,y<T>代表不同时刻的输出,计算公式如下:

其中g为激活函数。

 二、反向传播

1)计算损失

以命名实体识别作为例子,如果是地名就为1,不是地名就为0。输入是一句文本信息X=[he come from NewYork],输出一组Y=[0,0,0,1],X与Y的长度一致。模型预测的输出就是该输入x是地名的概率值,比如0.2,所以其实就是一个二分类问题,损失函数可以采用标准的逻辑回归损失或者说交叉熵损失。

第一个是元素级别的损失,也就是单个时刻的损失,第二个是整体序列的损失。

2)反向传播更新参数

因为RNN是一个循环体,其展开形式就是上述图所示,因为后面的状态a与输出y都依赖于前面的计算得到的,所以在进行反向传播的时候,跟普通神经网络一样,需要一层层向后利用梯度下降法计算梯度,并更新参数。与普通神经网络更新参数不同的一点就是,RNN因为是共享参数,所以在进行反向传播的时候,每传播一层更新的都是同一组参数。

三、其它形式的RNN结构

之前讲的例子是属于many-to-many的形式,且输入X与输出Y的长度相等,这种形式适合解决序列标注问题。还有其它形式的RNN结构

1)many-to-one (情感分析问题)

情感分析问题的输入是一个连续序列,例如对电影的描述“There is nothing to like in this movie”,而输出y=1/0,表示正面与负面;或者y=1,2,3,4,5表示对电影的评分等级,这种结构设计如下形式:

2)one-to-many(音乐生成)

输入x为一个整数,表示你想要的音乐类型或者是你想要的音乐的第一个音符;输出Y是一段生成的音乐。这种结构输入是一个x,输出是多个y。

 3)many-to-many(机器翻译)

文章开头讲的结构也属于many-to-many形式,但是那种形式X与Y的长度是一致的,适合解决序列标注的问题。这次的many-to-many是输入X与Y长度不一致的情况,例如机器翻译。其结构如下:

前面一部分叫做encoder,分别输入x和状态a;后面一部分叫做decoder,Y直到输出为EOS结束。

 四、用RNN训练一个语言模型

所谓语言模型,就是输入一句话,能得出这句话出现的概率。例如下面的这句话:

在训练的时候会从左到右一个个读取:

每一个输出y<t>,会通过softmax函数得出长度为字典长度|v|的向量,表示预测为每一个词的概率。后面的输入为前面的一个词,例如x<2>的输入就是cat,表示在前一个词为cat,后一个词输出为average的概率是多少,因此每一个词的输出都考虑了前面词的信息。

输出y<t>已经经过softmax层了,所以采用交叉熵计算损失即可,如下:

第一个为单个元素损失,第二个为整个序列的损失。

整个模型训练完毕后,如果要计算p(y<1>,y<2>,y<3>)的概率,只需要把该序列像训练的时候带入模型,得出分别预测出来y<1>,y<2>,y<3>的概率,第一个输入x=0,得出y<1>的概率,第二个输入y<1>得出y<2>的概率,第三个输入y<2>得出y<3>的概率,最后连乘即可:

 五、采样新序列

前面第四部分我们已经训练生成了一个语言模型,这样我们就可以采样新序列,或者说是利用语言模型来生成新的语句序列,其结构形式如下:

a<0>和x<1>输入都可以设置为零向量,每一层的输出都是一个softmax在字典|v|每个词的概率输出,可以利用np.random.choice随机进行采样选取一个词,作为第一个词。然后后面节点的输入就是前面节点的输出,后面每一层的输出都进行随机采样,直到到达设定的时间步或者输出为EOS为止,这样就可以生成新序列了。下面就是利用莎士比亚文章训练的语言模型生成的采样序列:

六、RNN的问题

梯度消失:

在反向传播的过程中,由于梯度消失的问题,RNN的输出很难受到序列靠前的输入的影响,因为不管输出是什么,无论输出是对还是错,这个区域都很难反向传播到序列的前面部分,因此网络也很难调整序列前面的计算,所以RNN就不擅长处理长期依赖的问题。

梯度爆炸:

随着网络深度的加深,参数呈指数级别增长,甚至出现数值溢出为Nan的情况,这就是梯度爆炸。解决办法就是采用梯度修剪,观察梯度向量,如果大于某一个阈值时候,就缩放梯度向量,保证不会太大,这种方式处理梯度爆炸鲁棒性比较好。

综合来说,梯度消失更难处理一些。

deeplearning.ai链接:https://mooc.study.163.com/learn/2001280005?tid=2001391038#/learn/content

deeplearning.ai学习RNN的更多相关文章

  1. DeepLearning.ai学习笔记汇总

    第一章 神经网络与深度学习(Neural Network & Deeplearning) DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络 DeepLe ...

  2. DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)

    一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...

  3. DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络

    介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...

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

    一.为什么选择序列模型 序列模型可以用于很多领域,如语音识别,撰写文章等等.总之很多优点... 二.数学符号 为了后面方便说明,先将会用到的数学符号进行介绍. 以下图为例,假如我们需要定位一句话中人名 ...

  5. DeepLearning.ai学习笔记(五)序列模型 -- week2 自然语言处理与词嵌入

    一.词汇表征 首先回顾一下之前介绍的单词表示方法,即one hot表示法. 如下图示,"Man"这个单词可以用 \(O_{5391}\) 表示,其中O表示One_hot.其他单词同 ...

  6. DeepLearning.ai学习笔记(五)序列模型 -- week2 序列模型和注意力机制

    一.基础模型 假设要翻译下面这句话: "简将要在9月访问中国" 正确的翻译结果应该是: "Jane is visiting China in September" ...

  7. DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法

    1. Mini-batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理: 如图所示,我 ...

  8. DeepLearning.ai学习笔记(四)卷积神经网络 -- week1 卷积神经网络基础知识介绍

    一.计算机视觉 如图示,之前课程中介绍的都是64* 64 3的图像,而一旦图像质量增加,例如变成1000 1000 * 3的时候那么此时的神经网络的计算量会巨大,显然这不现实.所以需要引入其他的方法来 ...

  9. DeepLearning.ai学习笔记(四)卷积神经网络 -- week2深度卷积神经网络 实例探究

    一.为什么要进行实例探究? 通过他人的实例可以更好的理解如何构建卷积神经网络,本周课程主要会介绍如下网络 LeNet-5 AlexNet VGG ResNet (有152层) Inception 二. ...

随机推荐

  1. 评审other's意见

    评审意见 1.组 a.界面不友好 b.没连数据库 2.组 a.没连数据库 b.无智能匹配当前时间 3.组 a.基本功能实现 b.界面未优化 4.组 ourselves 5.组 a.各反面较为完善 6. ...

  2. 结巴分词python

    将文件中的txt文档依次读出 并分好词后 写入 另外的TXT中 #coding=utf-8 import os import jieba import codecs import random def ...

  3. GitHub和Microsoft TFS对比有什么优势

    GitHub变得越来越流行,最近Github发布了Github for Windows则大大降低了学习成本和使用难度,它甚至优于TFS. 微软也开始逐渐从TFS向GitHub转移了. 不是 TFS 输 ...

  4. ElasticSearch 2 (17) - 深入搜索系列之部分匹配

    ElasticSearch 2 (17) - 深入搜索系列之部分匹配 摘要 到目前为止,我们介绍的所有查询都是基于完整术语的,为了匹配,最小的单元为单个术语,我们只能查找反向索引中存在的术语. 但是, ...

  5. final发布简评

    1.nice!——约跑app:本次发布使用摄像头展示,比之前清晰的多,展示效果很好,值得学习!功能都已实现,已经可以使用,好评. 2.飞天小女警——礼物挑选:本次发布风格与上次不同,除此之外添加了猜你 ...

  6. Codeforces Round #528 Div. 1 自闭记

    整天自闭. A:有各种讨论方式.我按横坐标排了下然后讨论了下纵坐标单调和不单调两种情况.写了15min也就算了,谁能告诉我printf和cout输出不一样是咋回事啊?又调了10min啊?upd:突然想 ...

  7. Spring点滴八:Spring注入集合

    在Spring中我们通过value属性来配置基本数据类型,通过标签的ref属性来配置对象的引用.这两种情况只能给bean传递一个值,那么如何传递多个值呢?Spring提供了四种Collection类型 ...

  8. 【BZOJ4391】[Usaco2015 dec]High Card Low Card(贪心)

    [BZOJ4391][Usaco2015 dec]High Card Low Card(贪心) 题面 BZOJ 题解 预处理前缀后缀的结果,中间找个地方合并就好了. #include<iostr ...

  9. 【BZOJ1201】[HNOI2005]数三角形(暴力)

    [BZOJ1201][HNOI2005]数三角形(暴力) 题面 BZOJ 洛谷 题解 预处理每个点向四个方向可以拓展的最大长度,然后钦定一个点作为三角形的某个顶点,暴力枚举三角形长度,检查这样一个三角 ...

  10. 洛谷 P1993 小K的农场 解题报告

    P1993 小K的农场 题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b ...