0
点赞
收藏
分享

微信扫一扫

深度学习之 12 循环神经网络RNN

本文是接着上一篇深度学习之 11 残差网络的实现_水w的博客-CSDN博客

目录

1 网络记忆能力

实例1:语言模型

实例2: 槽填充(Slot Filling)问题

        延时神经网络(Time Delay Neural Network,TDNN)

2 循环神经网络(RNN)

RNN的输入输出

◼  Many-to-One模型:

◼  One-to-Many模型

◼  Many-to-Many模型(同步)

◼  Many-to-Many模型(异步)

◼  RNN模型应用举例

 3 随时间反向传播(BPTT)

BPTT算法基本原理

A. 前向计算  

B. 误差项的计算

C. 权重梯度的计算

 4 双向循环神经网络

◼  双向循环神经网络的隐藏层


1 网络记忆能力

实例1:语言模型

给定一句话前面的部分,预测接下来最有可能的一个词是什么

我昨天上学迟到了,老师批评了____。

分词结果:

我|昨天|上学|迟到|了 ,老师|批评|了 ____。

2-Gram模型 :在语料库中,搜索『了』后面最可能的一个词;

3-Gram模型 :搜索『批评了』后面最可能的词;

4-Gram, 5-Gram, …, N-Gram :

        模型的大小和N的关系是指数级的,会占用海量的存储空间;

而循环神经网络RNN理论上可以往前(后)看任意多个词

实例2: 槽填充(Slot Filling)问题

例如在一个自动订票系统中,用户输入“我想八月二号 到达 台北”,需要填充槽(slot),

目 的 地:台北
到达时间:2020.08.02

如何使用前馈神经网络(Feedforward network)解决此问题?

首先使用1-of-N encoding方法将每一个单词表示成一个向量。

目标: 训练前馈神经网络,使得输入“台北”时,目的地的概率最大。

示例应用:通过前馈网络解决槽填充问题?

输入 :一个单词(每个单词都表示一个向量)

输出 表示输入词属于槽的概率分布

 

若另一个用户输入“我想在八月二号 离开 台北”,需要填充槽(slot),

出 发 地:台北
出发时间:2020.08.02

对于前馈神经网络,使得输入“台北”时,出发地的概率最大。

Problem: 对于同一个输入,输出的概率分布应该也是一样的,不可能出现既是目的地的概率最高又是出发地的概率最高。

解决思路 :我们希望神经网络拥有“记忆”(memory)的能力,能够根据之前的 信息(如到达 )得到不同的输出。

建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等)这样,前馈网络就具有了短期记忆的能力。

 

自回归模型(Autoregressive Model,AR) :一类时间序列模型,用变量 𝑦 𝑡 的历史信息来预测自己 ;

有外部输入的非线性自回归模 型(Nonlinear Autoregressive with Exogenous Inputs Model, NARX)

2 循环神经网络(RNN)

网络在t时刻接收到输入 x 𝑡 之后,隐藏层的值是 s 𝑡 ,输出值是 o 𝑡 。 s𝑡 的值不仅仅取决于 x 𝑡 ,还取决于 s 𝑡−1

 

循环神经网络 可以往前看任意多个 输入值 的原因:

 如果反复将(式2)带入(式1),我们将得到,即输出值o𝑡 ,受前面历次输入值x𝑡x𝑡−1x𝑡−2x𝑡−3…的影响。

RNN的输入输出

 

 

◼  Many-to-One模型:

 在文本分类中,输入数据为单词的序列,输出为该文本的类别。

◼  One-to-Many模型

输入为一张图片,输出为图片的文字描述。

◼  Many-to-Many模型(同步)

输入和输出的序列个数相同,如输入为视频序列,输出为每一帧对应的标签。

 ◼  Many-to-Many模型(异步)

输入和输出的序列个数不同,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。

 ◼  RNN模型应用举例

 3 随时间反向传播(BPTT)

 

BPTT算法基本原理

A. 前向计算  

使用前面的 式2 对循环层进行前向计算:

假设输入向量 x 的维度是m,输出向量 s 的维度是n,则矩阵U的维度是n×m,矩阵

W的维度是n×n,下面是上式展开成矩阵的样子:

 B. 误差项的计算

用向量 net 𝑡 表示神经元在t时刻的 加权输入(净输入) ,因为:

用a表示列向量,用 a 𝑇 表示行向量,上式的第一项是向量函数对向量求导,其结果为Jacobian矩阵:

最后,将两项合在一起,可得:  

 

C. 权重梯度的计算

BPTT算法的最后一步:计算每个权重的梯度。 首先,计算误差函数E对权重矩阵W的梯度 𝜕𝐸/𝜕w

前两步中已经计算得到的量包括每个时刻t 循环层 的输出值 𝑠 𝑡 ,以及误差项 𝛿 𝑡

求得任意一个时刻的 误差项 𝛿 𝑡 ,以及上一个时刻循环层的输出值 𝑠 𝑡−1 ,就可以按照下面的公式求出权重矩阵在t时刻的梯度 𝛻 𝑊 𝑡 𝐸

 

 

 4 双向循环神经网络

 对于语言模型来说,很多时候光看前面的词是不够的,比如下面这句话:

我的手机坏了,我打算____一部新手机。

如果我们只看横线前面的词,手机坏了,那么我是打算修一修?换一部新的?还是大哭一场?这些都是无法确定的。

但如果我们也看到了横线后面的词是『一部新手机』,那么,横线上的词 填『买』的概率就大得多了。

在此任务中,可以增加一个按照时间的逆序来传递信息的网络层,增强网络的能力。

◼  双向循环神经网络的隐藏层

双向循环神经网络 的隐藏层要保存两个值,一个值 𝐴 参与正向计算, 另一个值𝐴’ 参与反向计算。最终的输出值取决于 𝐴 𝐴’。其计算方法为(以y2为例):

 𝐴2𝐴′2 则分别计算:

 

 

从上面三个公式得到,正向计算和反向计算 不共享权重 , 也就是说𝑈 𝑈′ 𝑊 𝑊′ 𝑉 𝑉′ 都是不同的 权重矩阵

主要参考文献:

 

举报

相关推荐

0 条评论