【第 5 部分-序列模型-第一周】在吴恩达深度学习视频基础上,笔记总结,添加个人理解。后期复习阶段参考 大树先生的博客 链接看这里 大树先生 - ZJ
CSDN:http://blog.csdn.net/JUNJUN_ZHAO/article/details/79362639
循环序列模型 (Recurrent Neural Networks)
1.1 为什么选择序列模型?(Why sequence models?)
深度学习中最激动人心的领域之一:序列模型。
例如循环神经网络(RNN)在语音识别,自然语言处理等其他领域中引起变革。
能够应用序列模型的例子:语音识别、音乐生成、情感分类、DNA 序列分析、机器翻译、视频活动识别、名称实体识别等。
序列模型的应用
- 语音识别:将输入的语音信号直接输出相应的语音文本信息。无论是语音信号还是文本信息均是序列数据。
- 音乐生成:生成音乐乐谱。只有输出的音乐乐谱是序列数据,输入可以是空或者一个整数。
- 情感分类:将输入的评论句子转换为相应的等级或评分。输入是一个序列,输出则是一个单独的类别。
- DNA序列分析:找到输入的DNA序列的蛋白质表达的子序列。
- 机器翻译:两种不同语言之间的相互转换。输入和输出均为序列数据。
- 视频行为识别:识别输入的视频帧序列中的人物行为。
- 命名实体识别:从输入的句子中识别实体的名字。
学习目标:学习构建自己的序列模型。
1.2 数学符号 (Notation)
从定义数学符号开始,一步步构建序列模型。
- 输入 x : Harry Potter and Hermione Granger invented a new spell.
目标:构建一个能够自动识别句中人名位置的序列模型。—命名实体识别问题(Named-entity recognition)NER
此例子中为:识别 Harry Potter 和 Hermione Granger
x⟨1⟩x⟨2⟩x⟨3⟩......x⟨t⟩......x⟨9⟩ x ⟨ 1 ⟩ x ⟨ 2 ⟩ x ⟨ 3 ⟩ . . . . . . x ⟨ t ⟩ . . . . . . x ⟨ 9 ⟩ 9 组特征表示上述 x 中 9 个单词。
- 输出 y : 1 1 0 1 1 0 0 0 0
y⟨1⟩y⟨2⟩y⟨3⟩......y⟨t⟩......y⟨9⟩ y ⟨ 1 ⟩ y ⟨ 2 ⟩ y ⟨ 3 ⟩ . . . . . . y ⟨ t ⟩ . . . . . . y ⟨ 9 ⟩
t : 意味着这些是时间序列。
输入序列的长度: Tx=9 T x = 9
输出序列的长度: Ty=9 T y = 9
x(i)⟨t⟩ x ( i ) ⟨ t ⟩ : 第 i 个 训练样本 x 的第 t 个元素。 T(i)x T x ( i ) : 第 i 个训练样本的输入序列长度。
y(i)⟨t⟩ y ( i ) ⟨ t ⟩ : 第 i 个训练样本 y 的第 t 个元素。 T(i)y T y ( i ) : 第 i 个训练样本的输出序列长度。
使用自然语言处理 (NLP),如何在序列中表示单个单词?
首先,需要词汇表(字典)。列出在表示中所使用的所有单词。如图中所表示,不同的单词在自己的词汇表中对应得索引不同。
此例子中使用的 10000 个单词的词汇表,根据不同的商业模式,应用,所构建的词汇表不同,30000,50000,(大型互联网)1000000等。
One-hot 向量表示法:
如上图所示: x⟨1⟩ x ⟨ 1 ⟩ 是一个 10000 维度的向量,只有 第 4075 索引位置是 1,其余位置都是 0 。
对于不在词汇表中的单词的表示:返回 <UNK>
(Unknown Word)
1.3 循环神经网络模型 (Recurrent Neural Network Model)
对于上述 命名实体识别问题 (NER) 之所以不使用标准神经网络(standard network)来解决,是因为存在两个主要问题。
- 首先是在不同的例子中输入和输出可以是不同的长度。
- 像这样一个简单的神经网络架构,它不会共享在文本中不同位置上学到的特征。(例如卷积神经网络,可以传递学习到的特征等)
- 此外,每一个训练样本都是一个 10,000 维的向量。所以,这只是一个非常大的输入层,同时,第一层的权重矩阵将最终具有大量的参数。
使用循环神经网络(RNN) 可以解决上述两个问题。
什么是循环神经网络?
如果你从左到右阅读句子,第一个单词 x⟨1⟩ x ⟨ 1 ⟩ 以及 初始化 a⟨0⟩ a ⟨ 0 ⟩ 零向量 ,带入到神经网络层(隐含层),尝试预测输出 y^⟨1⟩ y ^ ⟨ 1 ⟩ ,同时在时间步 1 产生 a⟨1⟩ a ⟨ 1 ⟩ 。然后,将 a⟨1⟩ a ⟨ 1 ⟩ 和 x⟨2⟩ x ⟨ 2 ⟩ 带入到神经网络层(隐含层),尝试预测输出 y^⟨2⟩ y ^ ⟨ 2 ⟩ ,然后前向广播,进入下一个时间步……直到最后输入 x⟨Tx⟩ x ⟨ T x ⟩ ,输出 y^⟨Ty⟩ y ^ ⟨ T y ⟩ 。因此,在每个时间步,循环神经网络将这个激活传递给下一个时间步,供它使用。
在这个例子中, Tx=Ty T x = T y ,若 Tx,Ty T x , T y 不同,体系结构会改变一点。
上图中右侧图表,是在 论文或书籍中常见的图表,为了便于理解,Andrew Ng 使用左侧图表展开讲解。
每个时间步的参数是共享的,每一部分都受到参数的影响,如 Waa,Wax,Wya W a a , W a x , W y a ,后面在解释这些参数的工作原理。
循环神经网络是从左到右扫描数据的,同时共享每个时间步的参数。
- Wax W a x 管理从输入 x<t> x < t > 到隐藏层的连接,每个时间步都使用相同的 Wax W a x ,同下;
- Waa W a a 管理激活值 a<t> a < t > 到隐藏层的连接;
- Wya W y a 管理隐藏层到激活值 y<t> y < t > 的连接。
RNN 的一个弱点:,它只使用序列中较早的信息进行预测,特别是在预测 y^⟨3⟩ y ^ ⟨ 3 ⟩ 时,不使用 x⟨4⟩,x⟨5⟩,x⟨6⟩ x ⟨ 4 ⟩ , x ⟨ 5 ⟩ , x ⟨ 6 ⟩ 等单词的信息。
例如:
- He said,”Teddy Roosevelt was a great President.”
- He said,”Teddy bears are on sale!”
上述例子中,Teddy Roosevelt 是人名。Teddy bears 并非我们想要识别的内容,但是如果只知道前三个单词 是无法准确识别的,还需要后面的单词信息。所以这个特定的神经网络结构的一个限制是,在某一时刻的预测使用输入或使用来自序列中较早的输入的信息,而不是在该序列的后面的信息。
后面的视频将讲解 双向递归神经网络 (BRNN),来解决这个问题。
前向传播:
对于激活函数计算 a⟨t⟩ a ⟨ t ⟩ 常用的是 tanh , 也有使用 Relu 的。(使用 tanh 函数梯度消失的问题会用其他方式解决)
对于输出 y^ y ^ ,根据具体问题选取不同激活函数,如二分类问题可使用 sigmoid,其他 输出 如 softmax 等。
注:其中 Wax W a x 中,前面的 a a 表示要得到一个 类型的量, x x 表示参数要乘以一个 x x 类型的量,其余、 Wya W y a 同理;
简化 RNN 符号表示:
简化为:
其中,使用矩阵的叠加简化:
- Wa=[Waa⋮Wax] W a = [ W a a ⋮ W a x ] ,假如 a<t−1> a < t − 1 > 是100维, x<t> x < t > 是10000 维,那么 Waa W a a 便是(100,100)维的矩阵, Wax W a x 便是(100,10000)维的矩阵。堆叠起来, Wa W a 便是(100,10100)维的矩阵。
- [a,x]=[a<t−1>x<t>] [ a , x ] = [ a < t − 1 > x < t > ] 表示一个(10100)维的矩阵。
1.4 通过时间的反向传播 (Backpropogation through time)
上一节讲述的是 RNN 的基本结构,以及前向广播,这一节学习目标是:了解 RNN 的反向传播是如何工作的。
红色箭头方向是反向传播。
如上图所示:红色箭头方向是反向传播。绿色线参数相同。
逻辑回归损失,也称为交叉熵损失。
单个单一位置或单个时间预测的单个词汇的损失:
如上图所示,每个特征元素计算损失值。
整个序列的整体损失:
以上是 RNN 前向和反向的工作原理,以上讲解的例子都是输入序列的长度等于输出序列的长度,接下来会展示更广泛的RNN架构。
1.5 不同类型的循环神经网络 (Different types of RNNs)
到目前为止,您已经看到了一种 RNN 架构,例如在 Name entity recognition 中 Tx=Ty T x = T y 。接下来介绍其他不同的 RNN 体系结构。
上图所示例子中,展示了多种不同的 RNN 架构。 Tx和Ty T x 和 T y 存在不相等的情况。
Many-to-Many(相等) : Tx=Ty T x = T y ,如 Name entity recognition (命名实体识别)。
Many-to-One : Tx≠Ty T x ≠ T y , x=text,y=0/1或1...5 x = t e x t , y = 0 / 1 或 1...5 等,如 Sentiment Classification (情感分类),要对某个序列进行正负判别或者打星操作。在这种情况下,就是输入是一个序列,但输出只有一个值
One-to-One : 标准神经网络。
One-to- Many: Tx≠Ty T x ≠ T y , x=Ø x = Ø ,x 可以为空集, 如 Music generation (音乐生成) 。当你真正生成序列的时候,经常会把这些前一个合成的输出文件输入到下一层。
Many-to-Many(不等) : Tx≠Ty T x ≠ T y ,如 Machine translation (机器翻译),法语翻译成英语,单词数量是不同的,则使前半部分为 encoder,共 Tx T x 个,后半部分为 decoder ,共 Ty T y 个。
其中很有意思的一部分是 序列生成,下节讲解。
1.6 语言模型和序列生成 (Language model and sequence generation)
那么什么是语言模型?
在语音识别系统中,我说了一句话,然后一个语言模型能够告诉我,对于这句话识别得到的多种可能性中,哪种可能概率高。它所做的就是,可以告诉你某个特定的句子出现的概率是多少。
语言模型的基本工作原理可以理解为,输出一段语句,它可以给出每一部分的概率,表示为 P(y⟨1⟩,y⟨2⟩......,y⟨Ty⟩) P ( y ⟨ 1 ⟩ , y ⟨ 2 ⟩ . . . . . . , y ⟨ T y ⟩ ) ,注意,这里用 y 表示,比用 x 表示更合适。后面会解释。
如何建立一个语言模型呢?要使用 RNN 建立这样一个模型,你首先需要一个训练集包括大量的英文文本。NLP 术语:语料库。
如上图所示,在有了以上基础的前提下,在训练集中的一个句子。Cats average 15 hours of sleep a day.
这句话结尾需添加一个 Tokenize <EOS>
代表句子结束。 然后 每一个单词 使用 One-hot vectors 表示。如 10000 维度的向量。
如上图所示,不在词汇表中的使用 <UNK>
表示。
对于训练样本 x⟨t⟩=y⟨t−1⟩ x ⟨ t ⟩ = y ⟨ t − 1 ⟩ , 下面解释为什么这么表示。
如上图所示:注意一开始,从左向右看,第一个词是未知的。
x⟨1⟩=0⃗
x
⟨
1
⟩
=
0
→
,
a⟨0⟩=0⃗
a
⟨
0
⟩
=
0
→
,然后预测输出
y^⟨1⟩
y
^
⟨
1
⟩
使用 softmax ,假设词汇表是 10000 个,则预测输出的 概率是 P(a)P(aron)....P(cats)...P(Zulu)
额外还有 P(<UNK>)P(<EOS>)
共 10002 个。
然后在预测出第一个之后,会将第一个正确的单词作为输入,
x⟨2⟩=y⟨1⟩
x
⟨
2
⟩
=
y
⟨
1
⟩
来预测第二个单词
y^⟨2⟩
y
^
⟨
2
⟩
, P(average | cats)。如上图所示,依次代入,一直到预测完最后一个单词。注意 因为句子结尾是 <EOS>
所以 最后一个的 输入为
x⟨9⟩=y⟨8⟩
x
⟨
9
⟩
=
y
⟨
8
⟩
,输出为
y^⟨9⟩
y
^
⟨
9
⟩
P(<EOS>| ...... )
。
单个语句的损失函数(softmax 层后的函数输出):
整个句子的损失函数:
简单的例子,一个句子有三个单词,分别定义为 y⟨1⟩,y⟨2⟩,y⟨3⟩ y ⟨ 1 ⟩ , y ⟨ 2 ⟩ , y ⟨ 3 ⟩ ,那么它的概率是:
1.7 对新序列采样 (Sampling novel sequences)
在训练完一个序列模型之后,要想了解这个模型学习到了什么,可以采用一个非正式的方法是:进行一次新序列采样。
记住:一个序列模型,模拟了任意特定单词序列的概率。
我们要做的就是对这个概率分布进行采样,来生成一个新的单词序列。
首先 :
x⟨1⟩=0⃗
x
⟨
1
⟩
=
0
→
,
a⟨0⟩=0⃗
a
⟨
0
⟩
=
0
→
, 然后预测输出
y^⟨1⟩
y
^
⟨
1
⟩
,得出的概率比如是:P(a)P(aron)….P(cats)…P(Zulu)P(<UNK>
) ,然后 使用采样函数,如 np.random.choice
对 softmax 分布进行随机采样。得出
y^⟨1⟩
y
^
⟨
1
⟩
是 The, 然后输入到下一层,前向广播,进入下一个时间步。直到结束。
如何标记结束?有两种方式: 1. 词汇表中含有 <EOS>
2. 限定时间步,20 ,100 等。
而这个特定的程序有时会产生一个 <UNK>
的单词标记。如果你想确保你的算法从来没有产生这个标记,你可以做的一件事就是拒绝任何以未知的单词标记出来的样本,并且继续从其他词汇中重新采样,直到你得到一个不是未知的单词。
最后,经过以上步骤,就随机产生了一些序列语句。
目前我们建立的都是基于词汇的 RNN 模型,根据实际应用,也可以建立一个基于字符的 RNN 结构。如上图所示。
Vocabulary = [a,b,c,…0,1,…9, ; ,’, : , ,…A….Z]
相对应的 y⟨1⟩,y⟨2⟩,y⟨3⟩ y ⟨ 1 ⟩ , y ⟨ 2 ⟩ , y ⟨ 3 ⟩ 都是字符,而不是单个词汇,如 Cats average …. y⟨1⟩=C,y⟨2⟩=a,y⟨3⟩=t,y⟨4⟩=空格 y ⟨ 1 ⟩ = C , y ⟨ 2 ⟩ = a , y ⟨ 3 ⟩ = t , y ⟨ 4 ⟩ = 空 格 等
基于字符的优点: 不用担心 UNK 出现。
主要的缺点:最后会得到太多太长的序列,所以在捕捉句子中的依赖关系方面,效果并不是很好。计算训练成本也很高。
所以目前的趋势和常见的均是基于词汇的语言模型。但随着计算机运算能力的增强,在一些特定的情况下,也会开始使用基于字符的语言模型。
上图,左侧是 一则新闻,右侧是 模仿莎士比亚的诗。
1.8 带有神经网络的梯度消失 (Vanishing gradients with RNNs)
前面已经了解了 RNN 的工作原理,接下来了解其中存在的问题,以及解决办法。
基本的 RNN 算法,存在一个很大的问题: 就是梯度消失。
如图上所示:第一句 前面的 cat 单数 决定后面 是 was。 第二句 前面的 cats 复数决定后面是 were。这就是语言具有非常长期的依赖关系的一个例子。
而迄今为止我们已经看到了 RNN 的基础结构,它不是非常擅长捕获非常长期的依赖关系。
解释为什么?回想之前学过的梯度消失问题。
一个非常非常深的神经网络,前向传播,再反向传播,输出的 y^ y ^ 很难再影响前面层的权重。则 RNN 同理,梯度消失,不擅长捕捉长期依赖。
回想 梯度爆炸问题:指数级大的梯度 会导致 参数爆炸性增长,神经网络参数崩溃,会看到很多 NaN,这意味着在你的神经网络计算数值溢出的结果。
总结:训练很深的神经网络时,随着层数的增加,导数会出现指数级的下降,则导致 梯度消失。或者指数级的增加,导致梯度爆炸。
解决梯度爆炸问题可以使用 梯度修剪(gradient clipping)解决。观察梯度向量,如果大于某个阈值,可以适当地缩放梯度,保证其不会太大,(通过最大值 阈值来修剪),相对具有鲁棒性。
而梯度消失就比较难解决,下面介绍 GRU (Gated Recurrent Unit)门控循环单元,来解决这个问题。
1.9 GRU 单元 (Gated Recurrent Unit )
以上已经了解了基础 RNN 模型的运行机制。本节介绍 GRU 。改变了 神经网络隐藏层,使其可以更好的捕捉深层连接,并改善了梯度消失问题。
如计算在时间 t 的激活值 a⟨t⟩ a ⟨ t ⟩ , 输入 权重 Wa W a ,上一个时间步的 激活值 a⟨t−1⟩ a ⟨ t − 1 ⟩ ,当前输入值 x⟨t⟩ x ⟨ t ⟩ ,以及偏移量 ba b a 。激活函数 g ,比如是 tanh。 上图中 左侧部分,绘画了 输入及输出,经过 tanh 后,在经过 softmax ,再输出 y^⟨t⟩ y ^ ⟨ t ⟩ 。
讲解这个图的目的是,将使用类似的图来讲解 GRU。
c = memory cell : 记忆细胞,提供记忆能力,如 主语猫是单数还是复数。
c⟨t⟩=a⟨t⟩ c ⟨ t ⟩ = a ⟨ t ⟩ 在 GRU 中这两个值是相同的,后面的 LSTM 中是不同的
c~⟨t⟩=tanh(Wc[c⟨t−1⟩,x⟨t⟩]+bc c ~ ⟨ t ⟩ = t a n h ( W c [ c ⟨ t − 1 ⟩ , x ⟨ t ⟩ ] + b c
c~⟨t⟩= c ~ ⟨ t ⟩ = : 候选值,代替 c⟨t⟩ c ⟨ t ⟩ 的值,tanh 激活函数计算, Wc W c 权重, c⟨t−1⟩ c ⟨ t − 1 ⟩ 前一个时间步的记忆值, x⟨t⟩ x ⟨ t ⟩ 当前输入值。 bc b c 偏移项。
重点:GRU 中的真正思想。(决定是否更新)
Γu=σ(Wu[c⟨t−1⟩,x⟨t⟩]+bu) Γ u = σ ( W u [ c ⟨ t − 1 ⟩ , x ⟨ t ⟩ ] + b u )
Γu Γ u :更新门 (符号比较像 门的边缘),0 到 1 之间的值。 σ σ sigmoid 函数 (其函数图 回想下,介于 0 到 1 之间) u: update 更新
假设 cat 输出 是 c⟨t⟩=1 c ⟨ t ⟩ = 1 (1 代表单数,0 代表复数)memory cell 在从左往右读的过程中,会一直记住 这个值,直到 到了 was ,根据 c⟨t⟩=1 c ⟨ t ⟩ = 1 所以决定用 was 。
Γu Γ u 决定什么时候更新这个值,比如 看到 the cat 那么这是个好的时机去更新 c⟨t⟩=1 c ⟨ t ⟩ = 1
c⟨t⟩=Γu∗c~⟨t⟩+(1−Γu)∗c⟨t−1⟩ c ⟨ t ⟩ = Γ u ∗ c ~ ⟨ t ⟩ + ( 1 − Γ u ) ∗ c ⟨ t − 1 ⟩
c⟨t⟩ c ⟨ t ⟩ 等于 门的值 element-wise 候选值, (1−Γu) ( 1 − Γ u ) element-wise 旧的值。若 Γu≈1 Γ u ≈ 1 则代表把候选值 设为新的值。 若 Γu≈0 Γ u ≈ 0 则代表 不更新,还是用旧的值。
详细的图解看上图 左侧图示。简化的 GRU 示意图。
优点:从左到右扫描句子时,门可以决定在哪个时间是否更新值。指导需要使用记忆细胞的时候。
Γu=0.000000001 Γ u = 0.000000001 可以缓解梯度消失的问题,即使经过了很多很多的时间步,这个值也可以很好的维持。关键所在
注意细节: c⟨t⟩ c ⟨ t ⟩ 可以是向量,比如 维度 100 ,同理 上图中所标注出来的,都是相同的维度。
完整 (Full) GRU :
再添加一个门 Γr Γ r ,r 可以理解为代表相关性(relativity),前一个 c⟨t−1⟩ c ⟨ t − 1 ⟩ 对于计算 c~⟨t⟩ c ~ ⟨ t ⟩ 有多大的相关性。
产生更大的影响,更好的缓解 梯度消失问题,GRU 是一个常用的版本。LSTM (Long Short Term Memory 长短时记忆网络)也是比较常用的。
1.10 长短期记忆 Long Short Term Memory Unit (LSTM)
上一节学习的 GRU ,它能够在序列中学习到非常深的连接,此外 LSTM 也可以做到这一点。且比 GRU 更有效。
GRU 回顾:
c~⟨t⟩ c ~ ⟨ t ⟩ : 代替记忆细胞的候选值。
Γu Γ u : 更新门,决定什么时候更新。
Γr Γ r :相关门,决定前面的序列对后面序列有多大的影响,彼此之间的相关性
c⟨t⟩ c ⟨ t ⟩ : 由上述几个值,共同决定是否更新。
a⟨t⟩=c⟨t⟩ a ⟨ t ⟩ = c ⟨ t ⟩ : 这里是相等的。
LSTM:
(update) :
(forget) :
(output) :
在本周结束后的作业练习中:上面的公式是这么写的
注意:这里是三个门,更新门,遗忘门,输出门。与 GRU 的区别, a⟨t⟩ a ⟨ t ⟩ 与 c⟨t⟩ c ⟨ t ⟩ 不相等。
公式其实更好理解,上右侧图 展示的更加直观些。
上图下方的红色直线,说明 只要正确了设置了 更新门和遗忘门,LSTM 就能把 c⟨0⟩ c ⟨ 0 ⟩ 一直往下传递到 后面某个记忆单元。这也是为什么 LSTM 和 GRU 善于维持更深的联系,及时经过很长很长的时间步。
此外,上述的 LSTM 与常用的 LSTM 单元 区别在于,
Γo,Γf,Γu Γ o , Γ f , Γ u 这些门值取决于,不仅是 a⟨t−1⟩,x⟨t⟩ a ⟨ t − 1 ⟩ , x ⟨ t ⟩ 有时也可以 偷窥下 c⟨t−1⟩ c ⟨ t − 1 ⟩ 的值,这叫做 窥视孔连接 (peephole connection),还有一个细节,如果 c⟨t−1⟩ c ⟨ t − 1 ⟩ 如果是 一个 100 维的向量,其中 第 50 位是 1 , 那么只会影响 第 50 位对应的门。
GRU 的优点:更简单,可以构建更深的网络,计算性能上,也运行的更快。
LSTM 优点:更加强大灵活,这是更好的选择。
1.11 双向神经网络 (Bidirectional RNN)
到现在,之前已经学习了解了大部分 RNN 模型的关键的构建,此外还有两个方法,可以构建更好的模型,其中之一就是双向神经网络,这个模型可以让你在序列的某点处,不仅可以获取之前的信息,也可以获取未来的信息。本节讲解。还有一个是 Deep RNN 下节讲解。
回顾之前的例子,命名实体识别问题(Named entity recognition),这个网络存在的一个问题是,当判断 Teddy 是否是人名中的一部分是,只看前面的部分是不够的,还需有后面的信息共同进行判断。需要使用 双向神经网络解决这个问题。
BRNN 工作原理:
上图中,绿色画笔绘画的部分就是,反向连接,从最后依次反向向前连接,因此网络构成了一个无环图(Acyclic graph)。
反向序列从 a←⟨4⟩ a ← ⟨ 4 ⟩ ,反向进行,到 a←⟨3⟩ a ← ⟨ 3 ⟩ …..
所以整个前向广播,分为两部分,一部分是从左到右,另一部分是从右到左。
最终预测输出的值: y^⟨t⟩=g(Wy[a→⟨t⟩,a←⟨t⟩]+by) y ^ ⟨ t ⟩ = g ( W y [ a → ⟨ t ⟩ , a ← ⟨ t ⟩ ] + b y )
(没有找到合适的 latex 在字母上方表示向左的箭头)
实践中,大部分的 NLP 问题,采用 BRNN W/LSTM (有 LSTM 单元的 BRNN 模型)是一个不错的选择。
BRNN 缺点:需要完整的数据的序列,才能预测任意位置。比如,构建语音识别系统,需要等待一个人说完整个句子,才能语音处理,并进一步识别,所以实际上的大型的应用,都是更加复杂的模型。
1.12 深层循环神经网络 (Deep RNNs)
目前为止,学习到的不同的 RNN 版本,每一个都可以独当一面,但是要学习非常复杂的函数,通常的做法是把 RNN 的多个层堆叠起来,来构建更深的模型。
目标:学习如何构建更深的模型。
与之前的 标准 (standard)RNN 相比,改变了下符号表示,将 a⟨0⟩ a ⟨ 0 ⟩ 改为 a[1]⟨0⟩ a [ 1 ] ⟨ 0 ⟩
a[l]⟨t⟩ a [ l ] ⟨ t ⟩ : l l 表示 层。 t : 第 t 个时间步。
上图所示为,三个隐层的新网络。
其中 a[2]⟨3⟩ a [ 2 ] ⟨ 3 ⟩ 的计算是:
y⟨1⟩ y ⟨ 1 ⟩ 输出之前可以做的改变是,增加纵向的连接,但是横向的连接不会增加。这种结构更加常见。
其中的单元,可以是 标准的 RNN ,也可以是 GRU ,或者 LSTM BRNN 。
PS: 欢迎扫码关注公众号:「SelfImprovementLab」!专注「深度学习」,「机器学习」,「人工智能」。以及 「早起」,「阅读」,「运动」,「英语 」「其他」不定期建群 打卡互助活动。