本文主要是介绍判断深度学习模型的稳定性_深度学习 第五门课:序列模型(Sequence Models),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

01| 一些知识的补充这一周看完了《深度学习入门:基于Python的理论与实战》一书,书中代码实践部分我还没有完成,现在只看完了所有的理论部分。下面是书中的某些部分所对我有启发的知识。

1.1 权重的初始化
不能够将权重初始值设为0,严格来说,不能将权重初始值设成一样的值。这是因为在反向传播算法中,所有权重值都会进行相同的更新。这使得神经网络拥有许多不同的权重的意义消失了。为了防止“权重均一化”(严格地说,是为了瓦解权重的对称结构),必须随机生成初始值。接下来观察权重初始值如何影响隐藏层的激活值的分布的。向一个5层的神经网络(激活函数为sigmoid)传入随机生成的数据,用直方图绘制各层激活值的数据分布。如下图,使用标准差为1的高斯分布作为权重初始值时,各层的激活值呈偏向0和1的分布,这会造成反向传播中梯度的值不断变小,最后消失,即梯度消失问题。



1.2 Softmax反向传播的推导
通过softmax 函数和交叉熵误差的计算图,来直观推导反向传播。softma 函数称为softmax 层,交叉熵误差称为Cross Entropy Error 层, 两 者 的 组 合 称 为Softmax-with-Loss 层。以一个3 分类的问题为例,输入为(a 1, a 2, a 3 ), 输出为(y 1, y 2, y 3 ),标签为(t 1,t 2, t 3 ), 反向传播的结果为(y 1 – t 1, y 2 – t 2,y 3 – t 3 )。




2.1 循环神经网络模型
前馈神经网络,如卷积神经网络,在对文本数据建模时,输入变长的字符串或者单词串,然后通过滑动窗口加池化的方式,将原先的输入转换成一个固定长度的向量表示,这样做可以捕捉到原文本中的一些局部特征,但是两个单词之间的长距离依赖关系还是很难被学习到。 循环神经网络却能很好地处理文本数据变长并且有序的输入序列。它模拟了人阅读一篇文章的顺序,从前到后阅读文章中的每一个单词,将前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力,可以更好地理解之后的文本。 RNN 是从左向右扫描数据,同时每个时间步的参数也是共享的。双向循环神经网络(BRNN )在某一时刻的预测值不仅使用了序列之前的输入信息,还使用了序列中后半部分的消息。
2.2 RNN中的激活函数
在CNN等前馈神经网络中采用ReLU激活函数通常可以有效地改善梯度消失,取得更快的收敛速度和更好的收敛结果。在RNN中使用ReLU当然也是可行的,RNN的正向传播如下:

2.3 RNN的反向传播算法BPTT
RNN 模型的求解可以采用BPTT(Back Propagation Through Time ,基于时间的反向传播) 算法实现,BPTT 实际上是反向传播算法的简单变种。如果将RNN 按时间展开成T 层的前馈神经网络来理解,就和普通的反向传播算法没有什么区别了。RNN 的设计初衷之一就是能够捕获长距离输入之间的依赖。 ( RNN 反向传播示意图)
2.4 LSTM
长短期记忆网络(LongShort Term Memory ,LSTM )是RNN 的最知名和成功的扩展。由于RNN 有梯度消失和梯度爆炸的问题,学习能力有限,在实际任务中的效果往往达不到预期效果。LSTM 可以对有价值的信息进行长期记忆,从而减小循环神经网络的学习难度。LSTM 仍然是基于x 和a 来计算a 。LSTM 对网络内部的结构进行了更加精心的设计,加入了输入门、遗忘门、输出门和一个内部记忆单元。输入门i控制当前计算的新状态以多大程度更新到记忆单元中;
遗忘门f控制前一步记忆单元中的信息有多大程度被遗忘掉;
输出门o控制当前的输出有多大程度上取决于当前的记忆单元。

3.1 为什么使用词嵌入?
词嵌入(Word Embeddings )是语言表示的一种方式,可以让算法自动的理解一些类似的词,如(Man-Women 、King-Queen 、Apple-Orange 等),词嵌入是一种特征化的表示方法。使用one-hot 向量的一大缺点是它把每个词孤立起来,使得算法对相关词的泛化能力不强,任何两个one-hot 向量的内积都是0 。
3.2 嵌入矩阵(Embedding matrix)
学习词嵌入时,实际上就是学习一个嵌入矩阵E,E乘以one-hot向量,就会得到嵌入向量。
3.3 Word2Vec
Word2Vec 算法提供了一种简单而且高效的方式来学习词嵌入。在Skip-Gram 模型中,要做的就是抽取上下文和目标词配对,即构造一个监督学习目标,它给定上下文词,要求预测在上下文一定的词距内随机选择的某个目标词。利用这个监督学习问题来学习一个好的词嵌入模型。 下图大体上是一个可以找到词嵌入的简化模型和神经网络。假设词汇表大小为1000 ,softmax 预测不同目标词的概率。
4.1 Seq2Seq模型
Seq2Seq 模型的核心思想是,通过深度神经网络将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入与解码输出两个环节构成。在经典的实现中,编码器和解码器各由一个循环神经网络构成,既可以选择传统循环神经网络结构,也可以使用LSTM 模型、GRU 等。两个循环神经网络是共同训练的。
4.2 decoder(解码网络)
Seq2Seq 模型最核心的部分是其解码部分。 Seq2Seq 模型最基础的解码方法是贪心法,即选取一种度量标准后,每次都在当前状态下选择最佳的一个结果,直到结束。贪心法获得的是一个局部最优解,由于实际问题的复杂性,该方法往往并不能取得最好的效果。 集束搜索( Beam Search ) 是常见的改进算法,它是一种启发式算法。该方法会保存beam size (参数b ,也可称为beam width )个当前的较佳选择,然后解码时每一步根据保存的选择进行下一步扩展和排序,接着选择前b 个进行保存,循环迭代,直到结束时选择最佳的一个作为解码的结果。 下图是 b = 2 时的集束搜索示例。当前已经有解码得到的第一个词的两个候选: I 和 My 。然后,将 I 和 My 输入到解码器,得到一系列候选的序列,诸如 I decided 、 My decision 、 I thought 等。最后,从后续序列中选择最优的两个,作为前两个词的两个候选序列。如果 b = 1 ,那么会退化为贪心法。随着 b 的增大,其搜索的空间增大,最终效果会有所提升,但需要的计算量也相应增大。
编码时,输入序列的全部信息压缩到了一个向量表示中。随着序列增长,句子越前面的词的信息丢失就越严重,模型的性能会发生显著下降。(LSTM一定程度上可以缓解此问题)
在解码时,当前词及对应的源语言词的上下文信息和位置信息在编解码过程中丢失了。
PS:关注微信公众号「蓝本本」,和我一起学习、进修和放纵好奇心。 题图: Photo by Michael L. from Pexels.


这篇关于判断深度学习模型的稳定性_深度学习 第五门课:序列模型(Sequence Models)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!