Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >神经网络使用梯度下降的原因(摘自我写的书)

神经网络使用梯度下降的原因(摘自我写的书)

作者头像
黄鸿波
发布于 2020-04-14 09:34:37
发布于 2020-04-14 09:34:37
1.9K0
举报
文章被收录于专栏:AI的那些事儿AI的那些事儿
自上次我把我2018年出版的《TensorFlow进阶指南 基础、算法与应用》一书的部分内容放上来之后,收到了很多后台留言,说能不能再放一些,后来想了想,今天又放出来了其中的一节内容。

目前深度神经网络模型的优化方法主要是梯度下降。我们使用梯度下降的方法来进行误差的反向传播,不断地调整模型参数,以降低模型所产生的误差,使模型更好实现从输入到输出的映射。目前因为各种因素,神经网络可以做的层数更深,神经元更多。相较于以前得到了性能上较大的提升。

由于许多非线性层的作用,模型容量得到了较大的提高,使模型可以完成更加复杂的任务,模型很庞大,参数空间也非常复杂,我们使用的梯度下降算法是目前最有效的优化算法,但是这样深层的神经网络在误差反向传播过程中,很容易遭遇梯度消散和梯度爆炸的问题。

我们进行反向传播过程会把误差由输出层一层一层地往前面传播,这与神经网络的层数有一定的关系(如果是循环神经网络还会时间步有关)。我们的误差是由链式法则一层一层地传播的,假设神经网络模型中的参数为W,则在链式法则中,需要多次乘以W,可以理解为Wn次方,假设W有特征值分解,则

V是权重参数W矩阵特征向量构成的矩阵,是由权重参数W矩阵的特征值λ构成的对角矩阵。

λ>1,W容易产生一个极大的数值,导致梯度爆炸。

λ<1,W容易接近于0,导致梯度消失。

梯度消失

每一次梯度更新的公式如下:

其中w为模型参数,α表示学习率,

就是目标函数对参数W的导数。

如果产生梯度消散的问题,每一次的梯度更新,

就会等于零,那么这样的梯度更新是没有意义的,这样意味着已经无法进行学习了。

由链式法则可以知道,这样的问题经常出现在深层神经网络模型的较浅的层中,出现这个问题时,较浅的层往往还没有掌握最好的学习技巧和提取特征的能力,对于后续神经层以及整一个模型的效果都会产生较大的影响。如果只能对后面的神经层进行训练,前面较浅的层不再能继续训练了,则不利于模型在参数空间中寻找最优点。

在循环神经网络中出现这样的问题时,可以理解为模型失去了对较早时间步的记忆,无法做到长期依赖,更加注重当前几步的信息,造成了时序信息的丢失。

梯度爆炸

深度神经网络模型很大,有许多非线性神经元,模型会呈现出高度非线性,所以参数空间也会很复杂。我们对这么复杂的参数空间可以理解成一个地形非常复杂的地方,往往伴随着“悬崖”地形,在“悬崖”处的梯度是极大的,正因为这个极大的梯度容易导致梯度爆炸的问题,如图所示。

在我们进行梯度更新时,根据公式(梯度消散部分说到的公式)可以知道学习速率乘以一个极大的梯度会导致参数更新时更新的幅度非常的大,离开了当前的区域,进入了另外一个较远的区域,使之前更新的步骤都成了“无用功”,极大地影响了优化的性能。

循环神经网络中出现梯度爆炸的情况少一些,它更多的问题是梯度消散,梯度爆炸会更多的出现在深度前馈神经网络中。

解决梯度消散和梯度爆炸问题的方法

选择合适的激活函数

在误差反向传播过程中,需要对激活函数进行多次求导,此时,激活函数的导数大小可以直接影响梯度下降的效果,过小容易产生梯度消散,过大容易产生梯度爆炸,如果激活函数的导数是1,则这是最理想的情况,所以我们更多地建议使用relu系列的激活函数,如Relu、elu、leakyrelu,Relu函数图像如图6-8左图所示,其导数图像如图。

不建议大家使用sigmoid和tanh等激活函数,因为它们的导数在大部分区域都是非常小的,容易导致梯度消散的问题。如图所示。

选择合适的参数初始化方法

使用权重参数正则化

使用权重参数正则化可以减少梯度爆炸发生的概率,常用的正则化方式就是L1或者L2正则化。对模型参数进行L1正则化时,参数会倾向于0和1的稀疏结构(假设参数为Laplace先验分布),对模型参数进行L2正则化时,参数会倾向于被“压缩”到一个很小的接近于0的数字(假设参数为标准高斯先验分布)。我们通过在目标函数中添加惩罚项来达到这样的效果,减小了模型复杂度的同时,也减小了发生梯度爆炸的概率,但是却增加了梯度消散的概率。

正则化对模型的梯度影响有限,这不是最主要的。

使用BatchNormalization

BatchNormalization目前已经在深度神经网络模型中得到了广泛的应用,主要通过规范化操作将输出信号x规范化到均值为0、方差为1保证网络的稳定性,可以加大神经网络训练的速度,提高训练的稳定性,也可以缓解梯度爆炸和梯度消散的问题。

在误差反向传播过程中,经过每一层的梯度都会乘以该层的权重参数,举个简单的例子:

正向传播中:

那么反向传播中:

反向传播式子中有w的存在,所以 w 的大小影响了梯度的消失和爆炸,batchnormalization就是通过对每一层的输出做规模和偏移的方法,通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布控制在接近均值为0、方差为1的分布,把偏离的分布强制拉回到一个比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域。这样输入的小变化就会导致损失函数较大的变化,使得让梯度变大,避免梯度消失,而且梯度变大意味着学习收敛速度快,能大大加快训练速度,同时也能在一定程度防止梯度爆炸的问题。

使用残差结构

说起残差结构,我们一定要提起resdiual network,这个结构的提出极大地提高了神经网络的深度,因为这种结构在很大程度上解决了梯度消散的问题,允许我们可以训练很深层的神经网络,充分利用了神经网络里面的每一个神经元,模型更大更复杂,也可以通过梯度下降的方式进行训练。自从提出残差结构后,现在的模型基本都离不开resdiual network的身影。

相比之前的几层、几十层的深度网络,在残差网络面前都不值一提,残差可以很轻松地构建几百层,即便一千多层的网络也不用担心梯度消散过快的问题,原因就在于残差的捷径(high way)部分,其中残差单元如图。

使用梯度裁剪

之前在讲解梯度爆炸产生的原因时,提到了参数空间有很多“悬崖”地形,导致了梯度下降的困难,如图所示,“悬崖”处的参数梯度是极大的,梯度下降时可以把参数抛出很远,使之前的努力都荒废了。我们解决这个问题的方法是进行梯度裁剪,梯度裁剪就是用来限制梯度大小的,若梯度大小超出了梯度范数的上界,则强制令梯度大小为梯度范数的上界的大小,来避免梯度过大的情况,在使用这样的方法进行梯度裁剪时,只是改变了这个梯度的大小,仍然保持了梯度的方向。

公式如下:

其中v是梯度范数的上界,g用来更新参数的梯度。

我们要控制“悬崖”处梯度的大小,使用一个尽量小一点的梯度,避免穿越向上的曲面,使参数保持在一个合适的区域内。使用了梯度截断的梯度下降对“悬崖”处的反应更加温和,当参数更新到了“悬崖”截面处时,由于梯度大小收到了控制,不会那么容易被“抛出”到比较远的参数空间中去,导致“前功尽弃”。如图所示。

既然使用梯度裁剪的方式来处理梯度爆炸,同样的,梯度消散可不可以使用梯度扩张的方式来解决呢?其实这个问题并没有那么简单,梯度过小的时候,有两种可能:一种是梯度消散,一种是到达局部最优或者鞍点。如果不能准确区分这两类情况,单纯扩张梯度有可能导致系统不收敛。而且梯度太小时,方向其实也是很难确定的,或者说很有可能是不准确的,我们不可以随意地在这个方向上放大梯度,进行梯度下降。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI的那些事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
训练深度神经网络,使用反向传播算法,产生梯度消失和梯度爆炸问题的原因?
反向传播是神经网络训练的精髓。它是根据上一个迭代获得的误差(即损失)对神经网络的权重进行微调的做法。权重的适当调整可确保较低的误差,从而通过提高模型的泛化能力使其变得可靠。反向传播算法的核心思想和工作原理可分为以下几个方面:
叶庭云
2024/05/25
4110
深度神经网络总结
深度神经网络(Deep Neural Networks,DNN)可以理解为有很多隐藏层的神经网络,又被称为深度前馈网络(DFN),多层感知机(Multi-Layer perceptron,MLP)。
全栈程序员站长
2022/07/02
2.2K0
深度神经网络总结
全面直观认识深度神经网络
作者:石文华 编辑:赵一帆 01 深度学习的精准定义 一类通过多层非线性变换对高复杂性数据建模算法的集合。它的两个非常重要的特征是多层性和非线性。俗称多层非线性变换。所以深度学习要去线性化。 为什么呢?因为线性模型存在局限性,任意线性模型得到组合仍然还是线性模型。所以只要通过线性变换,任意层的全连接神经网络和单层神经网络模型的表达能力没有任何区别,而且他们都是线性模型,线性模型解决问题的能力是有限的。 02 激活函数实现去线性化 每个神经元(也就是神经网络上的节点)的输出通过一个非线性函数
机器学习算法工程师
2018/03/06
8460
全面直观认识深度神经网络
【NLP/AI算法面试必备】学习NLP/AI,必须深入理解“神经网络及其优化问题”
一、神经网络基础和前馈神经网络 1、神经网络中的激活函数:对比ReLU与Sigmoid、Tanh的优缺点?ReLU有哪些变种? 2、神经网络结构哪几种?各自都有什么特点? 3、前馈神经网络叫做多层感知机是否合适? 4、前馈神经网络怎么划分层? 5、如何理解通用近似定理? 6、怎么理解前馈神经网络中的反向传播?具体计算流程是怎样的? 7、卷积神经网络哪些部分构成?各部分作用分别是什么? 8、在深度学习中,网络层数增多会伴随哪些问题,怎么解决?为什么要采取残差网络ResNet? 二、循环神经网络 1、什么是循环神经网络?循环神经网络的基本结构是怎样的? 2、循环神经网络RNN常见的几种设计模式是怎样的? 3、循环神经网络RNN怎样进行参数学习? 4、循环神经网络RNN长期依赖问题产生的原因是怎样的? 5、RNN中为什么要采用tanh而不是ReLu作为激活函数?为什么普通的前馈网络或 CNN 中采取ReLU不会出现问题? 6、循环神经网络RNN怎么解决长期依赖问题?LSTM的结构是怎样的? 7、怎么理解“长短时记忆单元”?RNN中的隐状态
AI研习社
2019/09/04
1.2K0
【NLP/AI算法面试必备】学习NLP/AI,必须深入理解“神经网络及其优化问题”
【深度学习 | 梯度那些事】 梯度爆炸或消失导致的模型收敛困难?挑战与解决方案一览, 确定不来看看?
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
计算机魔术师
2023/09/25
2K0
深度学习基础之前馈神经网络
深度学习中的前馈神经网络(Feedforward Neural Network, FNN)是一种基本且广泛使用的神经网络模型。其核心思想是将输入数据传递给网络的输入层,然后通过一系列全连接的隐藏层进行处理,最终在输出层得到结果。
用户11315985
2024/10/16
2880
深度学习基础之前馈神经网络
神经网络分类算法原理详解
(forward-propagation):指对神经网络沿着输入层到输出层的顺序,依次计算并存储模型的中间变量。
zhangjiqun
2024/12/14
2.4K2
神经网络分类算法原理详解
误差反向传播算法浅解
反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称。由于多层前馈神经网络的训练经常采用误差反向传播算法,人们也常把多层前馈神经网络称为BP网络。
用户9624935
2022/04/02
2.3K0
误差反向传播算法浅解
斯坦福深度学习课程第三弹:神经网络与反向传播
像追美剧一样追课程! 大数据文摘已获斯坦福大学深度学习课程CS224d翻译授权, 重磅启动“斯坦福深度学习课程CS224d”的翻译工程, 所有译文将会免费发布,计划每周发布1篇。 期待你的加入,加入要求见文末 报名请点击文末“阅读原文”。 【社区开发者招募】 大数据文摘成立于2013年7月,从成立至今,坚持分享优质文章从未间断。已成为最有影响力的大数据自媒体。但,仅仅文章的分享还不够,我们愿意与您共同搭建数据分析人员的社区,希望您有如下技能: 社区规划(CTO角色) 社区开发 社区运营 有干货愿意分享的讲师
大数据文摘
2018/05/22
7130
吴恩达《神经网络与深度学习》精炼笔记(4)-- 浅层神经网络
上节课我们主要介绍了向量化、矩阵计算的方法和python编程的相关技巧。并以逻辑回归为例,将其算法流程包括梯度下降转换为向量化的形式,从而大大提高了程序运算速度。本节课我们将从浅层神经网络入手,开始真正的神经网络模型的学习。
红色石头
2022/01/12
4030
吴恩达《神经网络与深度学习》精炼笔记(4)-- 浅层神经网络
入门|详解机器学习中的梯度消失、爆炸原因及其解决方法
前言:   本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案。本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆炸的原因,第三部分对提出梯度消失及爆炸的解决方案。有基础的同鞋可以跳着阅读。 其中,梯度消失爆炸的解决方案主要包括以下几个部分。 - 预训练加微调 - 梯度剪切、权重正则(针对梯度爆炸) - 使用不同的激活函数 - 使用batchnorm - 使用残差结构 - 使用LSTM网络 第一部分:为什么要使用梯度更新规则
机器学习算法工程师
2018/03/06
6.6K3
入门|详解机器学习中的梯度消失、爆炸原因及其解决方法
深层神经网络参数调优(二) ——dropout、题都消失与梯度检验
深层神经网络参数调优(二)——dropout、题都消失与梯度检验 (原创内容,转载请注明来源,谢谢) 一、dropout正则化 中文是随机失活正则化,这个是一种正则化的方式,之前学过L1、L2正则化,这个则是另一种思想的正则化。dropout,主要是通过随机减少一些神经元,来实现减少w和b,实现防止过拟合的。 1、主要做法 假设一个概率阈值p,对于神经网络中的所有神经元,在每一次FP、BP的时候,都有p的概率会被保留下来。没有被保留下来的神经元,则不参与本次的运算,即不接收输入,也不输出结果。 2、具体
用户1327360
2018/03/07
2.2K0
深层神经网络参数调优(二) ——dropout、题都消失与梯度检验
入门 | 从感知机到深度神经网络,带你入坑深度学习
选自Medium 作者:Adi Chris 机器之心编译 参与:朱乾树、刘晓坤 机器学习工程师 Adi Chris 最近学习完吴恩达在 Coursera 上的最新课程后,决定写篇博客来记录下自己对这一领域的理解。他建议通过这种方式有效地深入理解一个学习主题。除此之外,也希望这篇博客可以帮助到那些有意入坑的朋友。 言归正传。在我正式介绍深度学习是什么东西之前,我想先引入一个简单的例子,借以帮助我们理解为什么需要深度神经网络。 同时,本文附有使用深度神经网络模型求解异或(XOR)问题的代码,发布在 GitHu
机器之心
2018/05/10
6580
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第11章 训练深度神经网络
第 10 章介绍了人工神经网络,并训练了第一个深度神经网络。 但它非常浅,只有两个隐藏层。 如果你需要解决非常复杂的问题,例如检测高分辨率图像中的数百种类型的对象,该怎么办? 你可能需要训练更深的 DNN,也许有 10 层或更多,每层包含数百个神经元,通过数十万个连接相连。 这可不像公园散步那么简单,可能碰到下面这些问题:
SeanCheney
2019/10/25
1.5K0
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第11章 训练深度神经网络
Coursera吴恩达《神经网络与深度学习》课程笔记(4)-- 浅层神经网络
上节课我们主要介绍了向量化、矩阵计算的方法和python编程的相关技巧。并以逻辑回归为例,将其算法流程包括梯度下降转换为向量化的形式,从而大大提高了程序运算速度。本节课我们将从浅层神经网络入手,开始真
红色石头
2017/12/28
1.2K0
Coursera吴恩达《神经网络与深度学习》课程笔记(4)-- 浅层神经网络
深度神经网络基础知识
在很多情况下,可能会遇到数据不平衡问题。数据不平衡是什么意思呢?举一个简单的例子:假设你正在训练一个网络模型,该模型用来预测视频中是否有人持有致命武器。但是训练数据中只有 50 个持有武器的视频,而有 1000 个没有持有武器的视频。如果使用这个数据集完成训练的话,模型肯定倾向于预测视频中没有持有武器。针对这个问题,可以做一些事情来解决:
嵌入式视觉
2022/09/05
1.4K0
深度神经网络基础知识
详解机器学习中的梯度消失、爆炸原因及其解决方法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/details/78847691
DoubleV
2018/09/12
5.3K0
详解机器学习中的梯度消失、爆炸原因及其解决方法
从0到1:神经网络实现图像识别(中)
”. . . we may have knowledge of the past and cannot control it; we may control the future but have no knowledge of it.”
SIGAI学习与实践平台
2018/12/25
9940
一文看懂各种神经网络优化算法:从梯度下降到Adam方法
王小新 编译自 Medium 量子位 出品 | 公众号 QbitAI 在调整模型更新权重和偏差参数的方式时,你是否考虑过哪种优化算法能使模型产生更好且更快的效果?应该用梯度下降,随机梯度下降,还是Adam方法? 这篇文章介绍了不同优化算法之间的主要区别,以及如何选择最佳的优化方法。 什么是优化算法? 优化算法的功能,是通过改善训练方式,来最小化(或最大化)损失函数E(x)。 模型内部有些参数,是用来计算测试集中目标值Y的真实值和预测值的偏差程度的,基于这些参数,就形成了损失函数E(x)。 比如说,权重(W)
量子位
2018/03/29
5.6K0
一文看懂各种神经网络优化算法:从梯度下降到Adam方法
深度神经网络(DNN)与反向传播算法
深度神经网络(DNN)是人工智能和机器学习领域的核心技术之一,尤其在图像识别、语音识别、自然语言处理等多个应用中取得了突破性的成果。DNN的成功得益于其强大的学习能力和优化算法,而反向传播(Backpropagation,简称BP)算法则是训练神经网络的关键技术之一。本文将深入剖析反向传播算法的工作原理,并结合具体的例子,详细分析其在深度神经网络中的应用过程。
LucianaiB
2025/02/10
2890
推荐阅读
相关推荐
训练深度神经网络,使用反向传播算法,产生梯度消失和梯度爆炸问题的原因?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档