本文主要是介绍判断深度学习模型的稳定性_深度学习 第五门课:序列模型(Sequence Models),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
01| 一些知识的补充这一周看完了《深度学习入门:基于Python的理论与实战》一书,书中代码实践部分我还没有完成,现在只看完了所有的理论部分。下面是书中的某些部分所对我有启发的知识。
1.1 权重的初始化
不能够将权重初始值设为0,严格来说,不能将权重初始值设成一样的值。这是因为在反向传播算法中,所有权重值都会进行相同的更新。这使得神经网络拥有许多不同的权重的意义消失了。为了防止“权重均一化”(严格地说,是为了瓦解权重的对称结构),必须随机生成初始值。接下来观察权重初始值如何影响隐藏层的激活值的分布的。向一个5层的神经网络(激活函数为sigmoid)传入随机生成的数据,用直方图绘制各层激活值的数据分布。如下图,使用标准差为1的高斯分布作为权重初始值时,各层的激活值呈偏向0和1的分布,这会造成反向传播中梯度的值不断变小,最后消失,即梯度消失问题。 使用标准差为0.01时,激活值的分布集中在0.5附近,不会发生梯度消失问题。但是激活值分布有所偏向,说明在表现力上会有很大的问题。比如,如果100个神经元都输出几乎相同的值,那么也可以由1个神经元来表达基本相同的事情。 使用XavierGlorot等人的论文中推荐的权重初始值(“Xavier初始值”)。如下图,激活值呈现了比之前更有广度的分布,sigmoid函数的表现力不受限制。 当激活函数使用ReLU时,一般推荐使用ReLU专用的初始值,也就是Kaiming He等人推荐的初始值(He初始值)。下图比较了不同权重初始值的激活值分布变化。当std =0.01时,各层的激活值非常小,网络上传递的是非常小的值,说明反向传播时权重的梯度也同样很小。Xavier初始化随着层的加深,偏向一点点变大。实际上,层加深后,激活值的偏向变大,学习时会出现梯度消失的问题。当初始值为He初始值时,各层中分布的广度相同。由于即便层加深,数据的广度也能保持不变,因此反向传播时,也会传递合适的值。 总结一下,当激活函数使用ReLU时,权重初始值使用He初始值,当激活函数为sigmoid或tanh等S型曲线函数时,初始值使用Xavier初始值。这是目前的最佳实践。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 )。 S oftmax层和CrossEntropy Error层的计算图(正向传播)如下: 交叉熵误差的反向传播: Softmax的反向传播稍有些复杂,我在上面标了编号1~6,按照这个步骤一步一步来理解。 最后给出画出Softmax-with-Loss层的计算图的全部内容,并求它的反向传播。 02| 序列模型2.1 循环神经网络模型
前馈神经网络,如卷积神经网络,在对文本数据建模时,输入变长的字符串或者单词串,然后通过滑动窗口加池化的方式,将原先的输入转换成一个固定长度的向量表示,这样做可以捕捉到原文本中的一些局部特征,但是两个单词之间的长距离依赖关系还是很难被学习到。 循环神经网络却能很好地处理文本数据变长并且有序的输入序列。它模拟了人阅读一篇文章的顺序,从前到后阅读文章中的每一个单词,将前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力,可以更好地理解之后的文本。 RNN 是从左向右扫描数据,同时每个时间步的参数也是共享的。双向循环神经网络(BRNN )在某一时刻的预测值不仅使用了序列之前的输入信息,还使用了序列中后半部分的消息。2.2 RNN中的激活函数
在CNN等前馈神经网络中采用ReLU激活函数通常可以有效地改善梯度消失,取得更快的收敛速度和更好的收敛结果。在RNN中使用ReLU当然也是可行的,RNN的正向传播如下: 如果g1采用的是ReLU激活,不断向前传递,不断展开如下: 假设ReLU 函数一直处于激活区域(即输入大于0 ),那么最终的表达式会包含t 个W aa 相乘。如果W aa 不是单位矩阵,最终的结果将会趋于0 或无穷,引发严重的数值问题。而在卷积神经网络中每一层的权重矩阵W 是不同的,并且在初始化时它们是独立同分布的,因此可以相互抵消,在多层之后一般不会出现严重的数值问题。 综上所述,当采用ReLU 作为循环神经网络中隐含层的激活函数时,只有当W 的取值在单位矩阵附近时才能取得比较好的效果。 还有一些激活函数放在 LSTM 章节了。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 预测不同目标词的概率。 Skip-Gram 只是Word2Vec 的一个版本,另一个叫做CBOW (Continuous Bag-Of-Words Model ,连续词袋模型)。CBOW 获取中间词两边的上下文,然后使用周围的词去预测中间的词。总结:CBOW是 从原始语句推测目标字词;Skip-Gram 是从目标字词推测出原始语句。 04| 序列模型和注意力机制4.1 Seq2Seq模型
Seq2Seq 模型的核心思想是,通过深度神经网络将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入与解码输出两个环节构成。在经典的实现中,编码器和解码器各由一个循环神经网络构成,既可以选择传统循环神经网络结构,也可以使用LSTM 模型、GRU 等。两个循环神经网络是共同训练的。 不同场景中,如文本摘要任务、图像描述文本生成任务、语音识别、机器翻译等,编码器和解码器有不同的设计,但对应Seq2Seq 的底层结构却如出一辙。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 的增大,其搜索的空间增大,最终效果会有所提升,但需要的计算量也相应增大。 解码时使用堆叠的RNN、增加Dropout机制、与编码器之间建立残差连接等,均是常见的改进措施。解码环节中一个重要的改进是注意力机制(Attention Mechanism)。注意力机制是为了解决如下问题:编码时,输入序列的全部信息压缩到了一个向量表示中。随着序列增长,句子越前面的词的信息丢失就越严重,模型的性能会发生显著下降。(LSTM一定程度上可以缓解此问题)
在解码时,当前词及对应的源语言词的上下文信息和位置信息在编解码过程中丢失了。
PS:关注微信公众号「蓝本本」,和我一起学习、进修和放纵好奇心。 题图: Photo by Michael L. from Pexels.
Landon —— 学习、进修和放纵好奇心! @ 蓝本本 ——
这篇关于判断深度学习模型的稳定性_深度学习 第五门课:序列模型(Sequence Models)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!