【吴恩达deeplearning.ai】深度学习(9):循环神经网络

   2023-02-10 学习力914
核心提示:随深度学习技术的发展,使用循环神经网络(Recurrent Neural Network,RNN)建立的各种序列模型,使语音识别、机器翻译及自然语言理解等应用成为可能。表示与类型自然语言、音频等数据都是前后相互关联的数据,比如理解一句话要通过一整句而不是其中的几个词

随深度学习技术的发展,使用循环神经网络(Recurrent Neural Network,RNN)建立的各种序列模型,使语音识别、机器翻译及自然语言理解等应用成为可能。

表示与类型

自然语言、音频等数据都是前后相互关联的数据,比如理解一句话要通过一整句而不是其中的几个词,分析一段音频要通过连续的片段而不是其中的几帧。前面所学的DNN以及CNN处理的都是前后毫无关联的一个个单独数据,对于这些序列数据则需要采用RNN进行处理。

【吴恩达deeplearning.ai】深度学习(9):循环神经网络

用循环神经网络处理时间序列时,首先要对时间序列进行标记化。对一个序列数据x,用符号xt来表示这个序列数据中的第t个元素。这个元素的类型因数据类型而异,对一段音频,它可能其中的几帧,对一句话,它可能是一个或几个单词,如下图所示。

【吴恩达deeplearning.ai】深度学习(9):循环神经网络

i个序列数据的第t个元素用符号x(i)t表示,其标签用符号y(i)t表示。

序列中的每个元素有相应的标签,一般需要先建立一个包含序列中所有类型的元素的字典(Dictionary)。例如对上图中的句子,建立一个含有10000个单词的列向量词典,单词顺序以A~Z排列,然后根据单词在列向量中的位置,用one-hot向量来表示该单词的标签,部分表示如下图:

【吴恩达deeplearning.ai】深度学习(9):循环神经网络

标记化完成后,将训练数据输入网络中。一种循环神经网络的结构如下图:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络

左边的网络可简单表示为右图的结构,其中元素xt输入对应时间步(TIme Step)的隐藏层的同时,该隐藏层也会接收上一时间步的隐藏层**at1,其中a0一般直接初始化为零向量。一个时间步输出一个对应的预测结果y^t,输入、**、输出有对应的参数WaxWaaWy

以上结构的前向传播过程,有:

a0=0
at=g1(Waaat1+Waxxt+ba)
y^t=g2(Wyat+by)

其中baby是两个偏差参数,**函数g1通常选择tanh,有时也用ReLU,g2的选择取决于需要的输出类型,可选sigmoid或Softmax。

具体计算中以上的式子还可以进一步简化,以方便运算。将WaxWaa堆叠成一个矩阵Waat1xt也堆叠成一个矩阵,有:

Wa=[Wax,Waa]
at=g1(Wa[at1,xt]+ba)

反向传播的过程类似于深度神经网络,如下图所示:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络

这种结构的一个缺陷是,某一时刻的预测结果仅使用了该时刻之前输入的序列信息。根据所需的输入及输出数量,循环神经网络可分为“一对一”、“多对一”、“多对多”等结构:

【吴恩达deeplearning.ai】深度学习(9):循环神经网络

这些网络结构可在不同的领域中得到应用。

RNN应用:语言模型

语言模型(Language Model)是根据语言客观事实而进行的语言抽象数学建模。例如对一个语音识别系统,输入的一段语音可能表示下面两句话:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络

其中的“pair”和“pear”读音相近,但是在日常表达及语法上显然这段语音是第二句的可能性要大,要使这个语音识别系统能够准确判断出第二句话为正确结果,就需要语言模型的支持。这个语言模型能够分别计算出语音表示以上两句话的概率,以此为依据做出判断。

建立语言模型所采用的训练集是一个大型的语料库(Corpus)。建立过程中,如之前所述,需要先建立一个字典,之后将语料库中每个词表示为对应的one-hot向量。此外需要额外定义一个标记EOS(End Of Sentence)表示一个句子的结尾,也可以将其中的标点符号加入字典后也用one=hot向量表示。对于语料库中部分(英语)人名、地名等特殊的不包含在字典中的词汇,可在词典中加入再用一个UNK(Unique Token)标记来表示。

将标志化后的训练集输入网络中的训练过程,如下例所示:

【吴恩达deeplearning.ai】深度学习(9):循环神经网络

第一个时间步中输入的a0x1都是零向量,y^1是通过softmax预测出的字典中每一个词作为第一个词出现的概率;第二个时间步中输入的x2是下面的训练数据中第一个单词“cats”的标签y1和上一层的**a1,输出的y2表示的是单词“cats”后面出现字典中的其他词,特别是“average”的条件概率。后面的时间步与第二步类似,到最后就可以得到整个句子出现的概率。

这样,损失函数将表示为:

L(y^t,yt)=tyitlog y^t

成本函数表示为:

J=tLt(y^t,yt)

训练好一个这个语言模型后,可通过采样(Sample)新的序列,来了解这个模型中都学习到了一些什么。从模型中采样出新序列的过程如下:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络

第一个时间步中输入的a0x1还是零向量,依据softmax预测出的字典中每一个词作为第一个词出现的概率,选取一个词y^1作为第二个时间步的输入。后面与此类似,模型将自动生成一些句子,从这些句子中可发现模型通过语料库学习到的知识。

以上是基于词汇构建的语言模型,也就是所用的字典中包含的是一个个单词。实际应用中,还可以构建基于字符的语言模型,不过这种方法的结果中将得到过多过长的序列,计算成本也较大,在当今的NLP领域也用得较少。

GRU与LSTM

如下图中的句子时,后面的动词用“was”还是“were”取决于前面的名词“cat”是单数还是复数。
【吴恩达deeplearning.ai】深度学习(9):循环神经网络
一般的循环神经网络不擅于捕捉这种序列中存在的长期依赖关系,其中的原因是,一般的循环神经网络也会出现类似于深度神经网络中的梯度消失问题,而使后面输入的序列难以受到早先输入序列的影响。梯度爆炸的问题也会出现,不过可以采用梯度修剪(Gradient Clipping)应对,相比之下梯度消失问题更难以解决。

GRU

GRU(Gated Recurrent Units, 门控循环单元)网络改进了循环神经网络的隐藏层,从而使梯度消失的问题得到改善。GRU的结构如下图:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络

其中的c代表记忆细胞(Memory Cell),用它来“记住”类似前面例子中“cat”的单复数形式,且这里的记忆细胞ct直接等于输出的**atc~代表下一个c的候选值;Γu代表更新门(Update Gate),用它来控制记忆细胞的更新与否。上述结构的具体表达式有:

c~t=tanh(Wc[ct1,xt]+b_c)
Γu=σ(Wu[ct1,xt]+b_u)
ct=Γu×c~t+(1Γu)×ct1
at=ct

c~的计算中以tanh作为**函数,使用simgoid作为**函数得到的Γu值将在0到1的范围内。当Γu=1时,输出的c值被更新为c~,否者保持为输入的c值。

上面所述的是简化后的GRU,完整的GRU结构如下:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络
其中相关门(Relevance Gate)Γr表示上一个c值与下一个c的候选值的相关性。与简化的GRU相比,表达式发生如下变化:

Γr=σ(Wr[ct1,xt]+br)
c~t=tanh(Wc[Γr×ct1,xt]+bc)

GRU其实只是一种LSTM的流行变体,其相关概念来自于2014年Cho等人发表的论文[On the properties of neural machine translation: Encoder-decoder approaches]以及Chung等人的[Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling]

LSTM

1997年Hochreiter和Schmidhuber共同在论文[Long short-term memory ]中提出的LSTM(Long Short Term Memory,长短期记忆)网络比GRU更加通用及强大,其结构如下:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络

相比之前的简化版GRU,LSTM中多了遗忘门(Forget Gate)Γf输出门(Output Gate)Γo,具体表达式如下:

c~t=tanh(Wc[at1,xt]+bc)
Γu=σ(Wu[at1,xt]+bu)
Γf=σ(Wf[at1,xt]+bf)
Γo=σ(Wo[at1,xt]+bo)
ct=Γft×ct1+Γut×c~t
at=Γot×tanh(ct)

更为常用的LSTM版本中,几个门值的计算不只取决于输入xa值,有时也可以偷窥上一个细胞输入的c值,这叫窥视孔连接(Peephole Connection)

多个LSTM单元连接在一起,形成一个LSTM网络:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络

BRNN与DRNN

前面介绍的循环神经网络在结构上都是单向的,也提到过它们具有某一时刻的预测结果仅使用了该时刻之前输入的序列信息的缺陷,而双向循环神经网络(Bidirectional RNN)弥补了这一缺陷。BRNN的结构图如下所示:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络

此外,循环神经网络的每个时间步上也可以包含多个隐藏层,形成深度循环神经网络(Deep RNN),如下图:
【吴恩达deeplearning.ai】深度学习(9):循环神经网络

参考资料

  1. 吴恩达-序列模型-网易云课堂
  2. Andrew Ng-Sequence Model-Coursera
  3. deeplearning.ai
  4. 零基础入门深度学习-循环神经网络
  5. 课程代码与资料-GitHub

注:本文涉及的图片及资料均整理翻译自Andrew Ng的Deep Learning系列课程,版权归其所有。翻译整理水平有限,如有不妥的地方欢迎指出。


更新历史:
* 2018.02.27 完成初稿
原文链接

 
反对 0举报 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 【深度学习】循环神经网络教程 循环神经网络 知乎
    【深度学习】循环神经网络教程 循环神经网络 知
    这是在公司做培训时制作的PPT,教程对循环神经网络以及其应用进行了简单地介绍,主要分为以下六个部分:Why do we need Recurrent Neural Networks?Vanilla Recurrent Neural NetworkBackpropagation Through Time (BPTT)Gradient exploding/vanishing proble
    03-08
  • 深度学习 - 循环神经网络RNN
    深度学习 - 循环神经网络RNN
    当数据是有顺序的时候,我们就可以使用RNN了,比如说话的顺序 有序列化的数据等的。   在介绍RNN之前,我有篇博客是介绍了CNN,简单提一下,在一张大的图片是上,我们有一个fliter滤波器,通过共用参数来扫描这张图片,提取出一张精髓的图片,再在这这张图片
    03-08
  • 拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列
    拓端tecdat|R语言深度学习Keras循环神经网络(RN
    原文链接:http://tecdat.cn/?p=23902原文出处:拓端数据部落公众号递归神经网络被用来分析序列数据。它在隐藏单元之间建立递归连接,并在学习序列后预测输出。在本教程中,我们将简要地学习如何用R中的Keras RNN模型来拟合和预测多输出的序列数据,你也可以
    03-08
  • 循环神经网络(RNN)相关知识 rnn递归神经网络
    循环神经网络(RNN)相关知识 rnn递归神经网络
    文章目录RNN概述前向传播公式通过时间反向传播(BPTT)RNN确定序列长度方式其他RNN结构基于RNN的应用1,序列数据的分析2,序列数据的转换3,序列数据的生成RNN的不足1,从隐藏变量h角度来看2,从梯度传播角度来看RNN概述循环神经网络(RNN)是用于处理序列数据
    02-10
  • 学习记忆循环神经网络心得
    学习记忆循环神经网络心得
          如有缪误欢迎指正  GRU结构向前传播 心得(欢迎指正)当遗忘门等于0的时候当前信息抛弃 之前记忆前传当遗忘门等于1 的时候之前记忆抛弃 当前信息前传当遗忘门的值为0和1之间的时候 调控前传的记忆与信息的比例 QAQQ:LSTM与GRU 的区别A: LSTM
    02-10
  • 协同过滤结合循环神经网络的推荐系统——期末作业
    协同过滤结合循环神经网络的推荐系统——期末作
    Recommendation System using Collaborative Filtering and Recurrent Neural Networkauthor:Fu-ze ZhongEmail: [email protected]School of Data and Computer Science, Sun Yat-sen University, Guangzhou, China.abstractThe behavior of user in an e-c
    02-10
  • 第六讲 循环神经网络--LSTM--stock
    1 !pip install tushare2 import tushare as ts3 import numpy as np4 import tensorflow as tf5 from tensorflow.keras.layers import Dropout, Dense, LSTM6 import matplotlib.pyplot as plt7 import os8 import pandas as pd9 from sklearn.preprocessing
    02-10
  • 循环神经网络RNN 循环神经网络RNN可以处理哪些情况
    循环神经网络RNN 循环神经网络RNN可以处理哪些
    前言我们在思考和判断问题的时候,并不是总是以一个空白的状态进行思考的。我们的思考都是基于我们以前的知识或者经验,比如我们读到这篇博客的时候,考虑到这些词语或者语句表达的是什么意思,都是基于我们以前所学到的知识。也就是说我们的思想具有持续性。
    02-10
  • 循环神经网络系列(二)Tensorflow中dynamic_rnn
    循环神经网络系列(二)Tensorflow中dynamic_rn
    1.回顾上一篇博文(循环神经网络系列(一)Tensorflow中BasicRNNCell)中我们介绍了在Tensoflow中,每个RNN单元的实现,以及对应各个参数的含义。自那之后,我们就能通过Tensorflow实现一个单元的计算了。import tensorflow as tfimport numpy as npx = np.array
    02-09
  • 双向循环神经网络和深层循环神经网络 (吴恩达老师_学习笔记)
    双向循环神经网络和深层循环神经网络 (吴恩达
    目录双向循环神经网络(Bidirectional RNN)深层循环神经网络(Deep RNNs)双向循环神经网络(Bidirectional RNN)双向RNN模型(BRNN),可以在序列的某点处不但获取之前的信息,同时还可以获取这个序列点之后的信息,说的炫酷点就是get information from the
    02-09
点击排行