数学公式推导——理解梯度消失和梯度爆炸

2023-10-27

梯度消失和梯度爆炸的定义

  • 梯度消失:又叫梯度弥散。是指模型梯度在反向传播时,梯度值接近零,导致模型权重不能正常更新,使模型无法正常收敛的现象;
  • 梯度爆炸:是指模型梯度在反向传播使,梯度值无限扩大,导致模型权重趋于无穷,使模型无法正常收敛的现象。常常伴随着loss为nan的现象。

数学公式解释

梯度消失和梯度爆炸都可以用 y = ( x ) n y={\left( {\rm{x}} \right)^{\rm{n}}} y=(x)n 来解释,其中n表示模型层数,当n很大且x大于1时,y会趋于无穷大;而当x小于1时,随着n增大,y会趋于无穷小。从此处我们也可以看出,无论是梯度爆炸还是梯度消失,都是发生在远离输出的底层网络。
那现在的问题是,x在梯度反向传播时表示什么?什么情况会导致x>0; 或者x < 0 呢

链路法则下的x

链路法则下的求导可以分为两步,第一步是损失函数对logit的导数;第二步是当前层输出(logit是最后一层的输出)对前一层输出的导数;

损失函数对logit的导数

我们以交叉熵损失函数为例:设分类模型共 m m m个类别,其中计算梯度的样本标签为 k k k,损失函数为 L o s s Loss Loss,最后一层模型输出logit为 x x x, 则损失函数可以表示为:
y k = e x k ∑ i = 1 m e x i {y_k} = \frac{{{e^{{x_k}}}}}{{\sum\limits_{i = 1}^m {{e^{{x_i}}}} }} yk=i=1mexiexk L o s s = − log ⁡ ( y k ) Loss = - \log ({y_k}) Loss=log(yk)
对其求导可得:
∂ L o s s ∂ x = [ y 1 , y 2 , . . . y k − 1 , . . . y m ] \frac{{\partial Loss}}{{\partial x}} = [{y_1},{y_2},...{y_{k}-1},...{y_m}] xLoss=[y1,y2,...yk1,...ym]

当前层输出和前一层输出的导数

我们假设,每一层由一个激活函数 f f f和一个全连接层 W x Wx Wx构成, 则 x n = f ( W x n − 1 ) {{\text{x}}_n} = f(W{x_{n - 1}}) xn=f(Wxn1), 对其求导: ∂ x n ∂ x n − 1 = f − 1 ∗ W \frac{{\partial {x_n}}}{{\partial {x_{n - 1}}}} = {f^{ - 1}}*W xn1xn=f1W,则通过递归法则可知, ∂ x n ∂ x n − k = ( f − 1 ) k ∗ W k \frac{{\partial {x_n}}}{{\partial {x_{n - k}}}} = ({f^{ - 1}})^k*W^k xnkxn=(f1)kWk, 可知,此处的 ∂ x n ∂ x n − 1 \frac{{\partial {x_n}}}{{\partial {x_{n - 1}}}} xn1xn就近似等于前面提到的链路法则下的 x x x,当激活函数的导数 f − 1 f^{ - 1} f1小于1时, ∂ x n ∂ x n − k \frac{{\partial {x_n}}}{{\partial {x_{n - k}}}} xnkxn倾向于趋近零(对应梯度消失),而当 W W W大于1时, ∂ x n ∂ x n − k \frac{{\partial {x_n}}}{{\partial {x_{n - k}}}} xnkxn倾向于趋近无穷大(对应梯度爆炸)

如何解决梯度消失和梯度爆炸

解决梯度消失
  • 修改激活函数,使 f − 1 f^{-1} f1不小于1,比如,采用relu替换sigmoid激活函数
  • 残差连接,将 x n = f ( W x n − 1 ) {{\text{x}}_n} = f(W{x_{n - 1}}) xn=f(Wxn1)修改为 x n = f ( W x n − 1 + x n − 1 ) {{\text{x}}_n} = f(W{x_{n - 1}}+x_{n - 1}) xn=f(Wxn1+xn1)
  • 层连接输入前进行标准化
解决梯度爆炸
  • 梯度裁剪。使每一层的梯度都小于1
  • 权重正则化或者权重衰减。权重每一步迭代更新时,都乘以一个小于1的因子
  • 层连接输入前进行标准化
  • 预训练+模型微调(微调时,学习率一般设置较低)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数学公式推导——理解梯度消失和梯度爆炸 的相关文章

随机推荐

  • 51Nod 2094 前缀和

    题目链接 https www 51nod com Challenge Problem html problemId 2094 include
  • unity3D简答题2

    游戏对象运动的本质 游戏对象运动的本质是对象Transform属性的变化 position决定位置 rotation决定旋转角度 请用三种方法以上方法 实现物体的抛物线运动 如 修改Transform属性 使用向量Vector3的方法 第一
  • canvas drawbitmap不出现_用Flutter做桌上弹球?聊聊绘图(Canvas&CustomPaint)API

    本文是Flutter中Canvas和CustomPaint API的使用实例 首先看一下列出最终目标 在程序运行后 显示一个小球 每次程序启动后 小球的样式均发生随机性变化 体现在大小 颜色和位置三点 小球运行的规律参考桌球或三维弹球游戏
  • Convolutional Pose Machine - 卷积姿态网络

    Convolutional Pose Machine 卷积姿态网络 论文主要解决 单人单目 RGB图像姿态估计问题 本篇论文也是现在非常火热的openpose开源项目的核心之一 这篇来自CMU的论文为单人姿态估计方面研究注入新的思路 论文网
  • Flutter初体验

    背景 今天在 lt 极客 gt APP上看到一个 使用Flutter快速构建集美观与高性能于一体的移动应用 的介绍 瞬间想试试 于是找到了Flutter官网 https flutter cn 并按步骤实操起来 手册 安装和环境配置 Flut
  • Docker部署单机Zookeeper

    配置Zookeeper安装目录 在宿主机配置zookeeper安装目录 docker develop zookeeper 并且在文件夹创建 data 和logs 目录 mkdir p docker develop zookeeper dat
  • 运行paddle-gpu相关项目报错

    报错1 RuntimeError PreconditionNotMet Cannot load cudnn shared library Cannot invoke method cudnnGetVersion Hint cudnn dso
  • JS 对象 Key使用变量代替

    JS 对象 Key使用变量代替 let key aa let data key value 普通 的对象类型数据中 直接用变量名填写key 最后 key会变成变成变量名的字符串 let data key value 使用中括号 以后 就会将
  • 实现点击img图片标签触发上传文件input按钮

    点击图片上传文件 简单有效 在网上找的一些文章都是A抄B B抄C 还都没啥用 自己蠢了 其实很简单 记录一下 Html 代码 div style width 30 margin left 3 height 1 img src images
  • Kendo UI开发教程(7): Kendo UI 模板概述

    Kendo UI 框架提供了一个易用 高性能的JavaScript模板引擎 通过模板可以创建一个HTML片段然后可以和JavaScript数据合并成最终的HTML元素 Kendo 模板侧重于UI显示 支持关键的模板功能 着重于性能而不是语法
  • 并发编程系列之线程的启动终止

    前言 上节我们对线程有了个基本的概念和认识 从线程状态转变过程我们也已经知道了线程通过调用start方法进行启动 直到run方法执行线程结束 今天我们就来详细的说说启动和终止线程的细节 OK 让我们开始今天的并发之旅吧 创建线程 在使用一个
  • 云解析DNS“免费版”与“付费版”的功能对比!新手引导

    阿里云域名DNS解析是免费的 阿里云云解析DNS是付费的 那么同样是DNS解析免费版和付费版有什么区别 aliyun网分享免费版DNS和云解析DNS的区别 DNS免费版和云解析DNS付费版的区别参数分类 参数项 参数值 免费版基础配置 最低
  • 如何将电子签名透明化处理

    如何将电子签名透明化处理 1 在纸上写上自己的名字 2 用拍照设备 如手机 拍下自己的签名 3 用 WPS图片 打开图片 点击图片 将图片转为png格式保存到一个地方 图1 4 打开word 我用的是win10自带的word 点击 插入 g
  • 告诉你什么是优雅的代码(11)----html5 之XXOO棋

    项目结项后的一星期又两天后 我又有了写些优雅代码的欲望 在我的记忆中 AI 在这个领域 我已近乎白痴 剪枝与寻路两种剑法 就在我离开校园之后 连同那蓝天碧草 相忘于江湖 江湖中只有 SSH 只有 SQL 只有汽车尾气 只有路人甲 在计算机语
  • 语雀实现收藏网页的功能(借助印象笔记)

    我是从印象笔记转为语雀的 之前在印象笔记上积累了1500条笔记 本来想全部搬迁至语雀 导出时发现内存达2 4GB 后来只迁移了一部分 现在两个软件都在用 一主一辅 迁移过程中意外发现 语雀导入html可以完美解决之间遇到的无法收藏网页的问题
  • your password has expired.To log in you must change itusing a client that supports expired passwords

    学java当然就少不了要跟mySQL打交道 终于经历了2小时的恶心安装后 舒舒服服的敲了一天demo 第二天再来的时候发现居然mySQL又特么出幺蛾子 无法连接上了 仔细看了一下错误原因 your password has expired
  • Nginx+keepalived双主配置(双机双主热备)

    简介 这种方案 使用两个VIP地址 前端使用2台机器 互为主备 同时有两台机器工作 当其中一台机器出现故障 两台机器的请求转移到一台机器负担 非常适合于生产架构环境 一 网络拓扑 四台虚拟机如下所示 为什么使用keepalived呢 使用k
  • Docker安装RabbitMQ

    安装Rabbitmq 1 使用docker查询rabbitmq的镜像 docker search rabbitmq 2 安装镜像 安装name为rabbitmq的这里是直接安装最新的 如果需要安装其他版本在rabbitmq后面跟上版本号即可
  • FILETIME, SYSTEMTIME and time_t

    先说个概念 Coordinated Universal Time UTC 又称为世界标准时间 比如 中国内地的时间与UTC的时差为 8 也就是UTC 8 Calendar Time 日历时间 是用 从一个标准时间点到此时的时间经过的秒数 来
  • 数学公式推导——理解梯度消失和梯度爆炸

    梯度消失和梯度爆炸的定义 梯度消失 又叫梯度弥散 是指模型梯度在反向传播时 梯度值接近零 导致模型权重不能正常更新 使模型无法正常收敛的现象 梯度爆炸 是指模型梯度在反向传播使 梯度值无限扩大 导致模型权重趋于无穷 使模型无法正常收敛的现象