判断深度学习模型的稳定性_深度学习 第五门课:序列模型(Sequence Models)

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

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

1.1 权重的初始化

不能够将权重初始值设为0,严格来说,不能将权重初始值设成一样的值。这是因为在反向传播算法中,所有权重值都会进行相同的更新。这使得神经网络拥有许多不同的权重的意义消失了。为了防止“权重均一化”(严格地说,是为了瓦解权重的对称结构),必须随机生成初始值。接下来观察权重初始值如何影响隐藏层的激活值的分布的。向一个5层的神经网络(激活函数为sigmoid)传入随机生成的数据,用直方图绘制各层激活值的数据分布。如下图,使用标准差为1的高斯分布作为权重初始值时,各层的激活值呈偏向0和1的分布,这会造成反向传播中梯度的值不断变小,最后消失,即梯度消失问题。 b89ddcf0ef9acd1ccee41d25fdeca336.png 使用标准差为0.01时,激活值的分布集中在0.5附近,不会发生梯度消失问题。但是激活值分布有所偏向,说明在表现力上会有很大的问题。比如,如果100个神经元都输出几乎相同的值,那么也可以由1个神经元来表达基本相同的事情。 249f6fbfb69532a2fa7f06dd3d3d0471.png使用XavierGlorot等人的论文中推荐的权重初始值(“Xavier初始值”)。如下图,激活值呈现了比之前更有广度的分布,sigmoid函数的表现力不受限制。 4722c8f233777daa17909cdee3014ed8.png当激活函数使用ReLU时,一般推荐使用ReLU专用的初始值,也就是Kaiming He等人推荐的初始值(He初始值)。下图比较了不同权重初始值的激活值分布变化。当std =0.01时,各层的激活值非常小,网络上传递的是非常小的值,说明反向传播时权重的梯度也同样很小。Xavier初始化随着层的加深,偏向一点点变大。实际上,层加深后,激活值的偏向变大,学习时会出现梯度消失的问题。当初始值为He初始值时,各层中分布的广度相同。由于即便层加深,数据的广度也能保持不变,因此反向传播时,也会传递合适的值。 bea3893a54415599a74051efb3daef79.png 总结一下,当激活函数使用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 )。 7a5682014877700ff1adf0ee5cd32bf1.png S oftmax层和CrossEntropy Error层的计算图(正向传播)如下: 53f01d45ead2c8e211e53400cb5f8cc7.png交叉熵误差的反向传播: 337703472a5cf1569e54ea399f6a7bd8.png Softmax的反向传播稍有些复杂,我在上面标了编号1~6,按照这个步骤一步一步来理解。 005b3d2996d184d61b5a22a84e59ea45.png最后给出画出Softmax-with-Loss层的计算图的全部内容,并求它的反向传播。 ac2d9f616c1d26e00b33606502f9ac9e.png 02 序列模型

2.1 循环神经网络模型

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

2.2 RNN中的激活函数

在CNN等前馈神经网络中采用ReLU激活函数通常可以有效地改善梯度消失,取得更快的收敛速度和更好的收敛结果。在RNN中使用ReLU当然也是可行的,RNN的正向传播如下: f2844d909322daa60a914797be2e920b.png如果g1采用的是ReLU激活,不断向前传递,不断展开如下: b116260d6420ab0f8d6b4e9a6210c641.png 假设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 反向传播示意图) 00ae11ef75a59ba688bfbb7fe14192b8.png

2.4 LSTM

长短期记忆网络(LongShort Term Memory ,LSTM )是RNN 的最知名和成功的扩展。由于RNN 有梯度消失和梯度爆炸的问题,学习能力有限,在实际任务中的效果往往达不到预期效果。LSTM 可以对有价值的信息进行长期记忆,从而减小循环神经网络的学习难度。LSTM 仍然是基于x 和a 来计算a 。LSTM 对网络内部的结构进行了更加精心的设计,加入了输入门、遗忘门、输出门和一个内部记忆单元。
  • 输入门i控制当前计算的新状态以多大程度更新到记忆单元中;

  • 遗忘门f控制前一步记忆单元中的信息有多大程度被遗忘掉;

  • 输出门o控制当前的输出有多大程度上取决于当前的记忆单元。

在LSTM 中,遗忘门、输入门和输出门使用Sigmoid 函数作为激活函数;在生成候选记忆时,使用Tanh 作为激活函数。 LSTM 的正向传播: 3463645e0a4ec9936d59ab7ac7c9a418.png 反向传播有点难,我这里先放一放,以后再进行补充。 03 NLP与词嵌入

3.1 为什么使用词嵌入?

词嵌入(Word Embeddings )是语言表示的一种方式,可以让算法自动的理解一些类似的词,如(Man-Women 、King-Queen 、Apple-Orange 等),词嵌入是一种特征化的表示方法。使用one-hot 向量的一大缺点是它把每个词孤立起来,使得算法对相关词的泛化能力不强,任何两个one-hot 向量的内积都是0 。 94c363fee0a1d2850930b75ecf7d68f4.png 使用词嵌入做迁移学习。学习词嵌入的算法会考察非常大的数据集,可以从网络上获取大量数据进行学习词嵌入;然后把学到的词嵌入模型迁移到新的只有少量标注训练集的任务中;在新的任务上训练模型时,自己选择要不要继续微调,用新的数据调整词嵌入。

3.2 嵌入矩阵(Embedding matrix)

学习词嵌入时,实际上就是学习一个嵌入矩阵E,E乘以one-hot向量,就会得到嵌入向量。 0ce590bc58e0e05f840ed3d0f724749c.png

3.3 Word2Vec

Word2Vec 算法提供了一种简单而且高效的方式来学习词嵌入。在Skip-Gram 模型中,要做的就是抽取上下文和目标词配对,即构造一个监督学习目标,它给定上下文词,要求预测在上下文一定的词距内随机选择的某个目标词。利用这个监督学习问题来学习一个好的词嵌入模型。 下图大体上是一个可以找到词嵌入的简化模型和神经网络。假设词汇表大小为1000 ,softmax 预测不同目标词的概率。 91ffce59287ea6d4c46b3fceeb5fdc39.pngSkip-Gram 只是Word2Vec 的一个版本,另一个叫做CBOW (Continuous Bag-Of-Words Model ,连续词袋模型)。CBOW 获取中间词两边的上下文,然后使用周围的词去预测中间的词。总结:CBOW是 从原始语句推测目标字词;Skip-Gram 是从目标字词推测出原始语句。 04 序列模型和注意力机制

4.1 Seq2Seq模型

Seq2Seq 模型的核心思想是,通过深度神经网络将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入与解码输出两个环节构成。在经典的实现中,编码器和解码器各由一个循环神经网络构成,既可以选择传统循环神经网络结构,也可以使用LSTM 模型、GRU 等。两个循环神经网络是共同训练的。 d17cbe953d164b656c3e333e36e5235c.png 不同场景中,如文本摘要任务、图像描述文本生成任务、语音识别、机器翻译等,编码器和解码器有不同的设计,但对应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 的增大,其搜索的空间增大,最终效果会有所提升,但需要的计算量也相应增大。 c333d7626b975bdab023a0c8fad7a693.png解码时使用堆叠的RNN、增加Dropout机制、与编码器之间建立残差连接等,均是常见的改进措施。解码环节中一个重要的改进是注意力机制(Attention Mechanism)。注意力机制是为了解决如下问题:
  • 编码时,输入序列的全部信息压缩到了一个向量表示中。随着序列增长,句子越前面的词的信息丢失就越严重,模型的性能会发生显著下降。(LSTM一定程度上可以缓解此问题)

  • 在解码时,当前词及对应的源语言词的上下文信息和位置信息在编解码过程中丢失了。

注意力模型(Attention Model)有些复杂,我有点看不懂,所以暂时先跳过这一部分。 04 参考课程:深度学习——吴恩达课程:机器学习——李宏毅书籍:《深度学习入门:基于 Python 的理论与实现》
PS:关注微信公众号「蓝本本」,和我一起学习、进修和放纵好奇心。 题图: Photo by Michael L. from Pexels.
befffb44033396ff76dd5424f989b6c9.png Landon —— 学习、进修和放纵好奇心! 3bdc371ae57e20b44a0e7502eea9a943.png @  蓝本本   ——

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



http://www.chinasem.cn/article/296816

相关文章

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行