深度学习-----------数值稳定性
目录
- 神经网络的梯度
- 数值稳定性的常见两个问题
- 例子:MLP
- 梯度爆炸
- 梯度爆炸的问题
- 梯度消失
- 梯度消失的问题
- 总结
- 模型初始化和激活函数
- 让训练更加稳定
- 让每层的方差是一个常数
- 权重初始化
- 正向均值和方差
- 正向均值
- 正向方差
- 反向均值和方差
- Xavier初始
- 正向和反向的均值和方差(书上)
- 正向均值和方差
- 反向均值和方差
- 从线性的激活函数的角度提升数值稳定性
- 正向
- 反向
- 检查常用激活函数
- 总结
- 问题

神经网络的梯度
考虑如下有d层的神经网络,输入x和输出y的深层网络。每一层t由线性变换 f 1 f_1 f1定义,该变换的参数为权重 w ( t ) w^{(t)} w(t),其隐藏变量是 h ( t ) h^{(t)} h(t)(令 h ( 0 ) h^{(0)} h(0)=x)。我们的网络可以表示为:

层:记作t
l:损失函数(即预测的要进行优化的目标函数)
y:y不是预测,还包括损失函数
计算损失l关于参数 w ( t ) w^{(t)} w(t)的梯度。

数值稳定性的常见两个问题

例子:MLP
加入如下MLP(为了简单省略了偏移)(即MLP:多层感知机的模型)

首先对激活函数进行求导,它是一个按元素的一个函数,所以对它的求导就变成一个diag(对角)矩阵

梯度爆炸
使用ReLU作为激活函数


通过(元素为0和1的)对角矩阵与
相乘,那么意味着把某一列留住了,要么把它全变为0。
是指那些没有变成0的那一列的乘法
如果d-t很大,值将会很大。(意思是网络比较深的话,那么它的值会比较大,因为里面全是w的元素,假设每个w的元素都是大于1的话,而且层数比较大的情况下,那么就会有非常大的值。)
梯度爆炸的问题
值超出值域(infinity)
对于16位浮点数尤为严重(数值区间为(6e-5,6e-4))
对学习率敏感
如果学习率太大→大参数值→更大的梯度
(如果学习率太大,那么就会带来比较大的参数值,因为每一步走的比较远,那么权重会变的比较大,权重变大对应的梯度更大(这里的梯度即:权重的乘法))
如果学习率太小→训练无进展
我们可能需要在训练过程不断调整学习率。
梯度消失
使用sigmoid作为激活函数


当激活函数的输入稍微大一点时,它的导数就变为接近0,连续n个接近0的数相乘,最后的梯度就接近0,梯度就消失了。
梯度消失的问题
梯度值变成0
对16位浮点数尤为严重
训练没有进展
不管如何选择学习率
(梯度为0,不管学习率如何变都不会有进展,权重=学习率*梯度)
对于比较深的网络的时候,对于底层尤为严重
仅仅顶部层训练的较好
无法让神经网络更深
总结
当数值过大或者过小时会导致数值问题。
常发生在深度模型中,因为其会对n个数累乘。
模型初始化和激活函数
让训练更加稳定

目标:让梯度值在合理的范围内
例如:[1e-6,1e3]
将乘法变加法
ResNet,LSTM
归一化
梯度归一化,梯度裁剪
合理的权重初始和激活函数
让每层的方差是一个常数
将每层的输出和梯度都看做随机变量
让它们的均值和方差都保持一致

权重初始化
在合理值区间里随机初始参数
训练开始的时候更容易有数值不稳定
远离最优解的地方损失函数表面可能很复杂(比较陡,说明梯度越大)
最优解附近表面会比较平
使用N(0,0.01)来初始可能对小网络没问题,但不能保证深度神经网络。

正向均值和方差
例子:MLP
假设
(即:权重是一个独立同分布(Independent identical distribution),代表的意思是权重的第t层第i行第j列,那么均值等于0,方差等于 γ t γ_t γt,t为其层数。
t-1层的输入独立于当前的权重。
)
正向均值

正向方差
方差=平方的期望-期望的平方

方差=
平方项的均值-
均值的平方。
其中
为0.
全独立,每个的均值为0,
和
的均值为0,这两项就等价于其方差。
题设:
其中对j进行求和,j的取值就是[0,t-1]
n t − 1 n_{t-1} nt−1是第t-1层的维度数
反向均值和方差

Xavier初始

正向和反向的均值和方差(书上)
正向均值和方差
假设:


与
相互独立
在这种情况下,我们可以按如下方式计算 o_i 的平均值和方差:

保持方差不变(
)的一种方法是设置
反向均值和方差
假设:



可以看到,除非
否则梯度的方差可能会增大,其中
是该层的输出的数量。这使得我们进退两难:我们不可能同时满足这两个条件。 相反,我们只需满足:
或等价于
通常,Xavier初始化从均值为零,方差
的高斯分布中采样权重。
我们也可以将其改为选择从均匀分布中抽取权重时的方差。 注意均匀分布
的方差为
。 将
代入到
的条件中,将得到初始化值域:

从线性的激活函数的角度提升数值稳定性
正向

反向

由以上推理可知:从激活函数的角度保持每层的输入和输出的均值和方差不变,必须使得激活函数 
检查常用激活函数

总结
合理的权重初始值和激活函数的选取可以提升数值稳定性。
问题
①nan(not a number)和inf是怎么产生的以及怎么解决吗?
inf是太大了,权重初始没更新
nan是除0产生的。
解决:合理初始化权重、学习率、激活函数
②在训练的过程中,如果网络层的输出层特征元素的值突然变成nan了,是发生了梯度爆炸了吗?还是有什么其它可能的原因?
对,一般来说nan就是梯度太大造成的,所以一般是梯度的问题
③梯度消失可以说是因为使用了sigmoid激活函数引起的对吗?所以我们可以用ReLU替换sigmoid解决梯度消失的问题吗?
不对,梯度消失有很多可能因素,不一定是sigmoid引起的。ReLU替换sigmoid可以让梯度消失的概率减少。
④为什么乘法变加法可以让训练更稳定?
100个1.5乘在一起梯度会炸,但100个1.5相加没问题。
⑤使用resnet为什么还会出现数值稳定性问题?
只能缓解问题不能解决问题。
相关文章:
深度学习-----------数值稳定性
目录 神经网络的梯度数值稳定性的常见两个问题例子:MLP 梯度爆炸梯度爆炸的问题 梯度消失梯度消失的问题 总结模型初始化和激活函数让训练更加稳定让每层的方差是一个常数 权重初始化正向均值和方差正向均值正向方差 反向均值和方差Xavier初始正向和反向的均值和方差…...
SpringBoot项目接口可以承受的调用次数
一个Spring Boot接口能够承受的调用次数主要取决于几个因素,包括但不限于: 服务器硬件:CPU、内存、硬盘I/O速度以及网络带宽都会直接影响接口的处理能力和并发量。操作系统和JVM配置:操作系统调度策略、JVM的内存分配、垃圾回收机…...
抽象代数精解【8】
文章目录 希尔密码矩阵矩阵基本概念行列式基本概念特殊矩阵关于乘法运算构成群 加解密原理密钥加密函数解密函数 Z 26 上的运算( Z 256 与此类似) Z_{26}上的运算(Z_{256}与此类似) Z26上的运算(Z256与此类似&…...
数据结构与算法 - 二叉树
1. 概述 二叉树是这么一种树状结构:每个节点最多有两个孩子,左孩子和右孩子 完全二叉树:是一种二叉树结构,除了最后一层以外,每一层都必须填满,填充时要遵循从左到右 平衡二叉树:是一种二叉树…...
Spring Cloud Gateway如何给一个请求加请求头
在Spring Cloud Gateway中,可以通过编写一个GlobalFilter来给所有请求加请求头,或者通过编写一个SpecificFilter来给特定路径的请求加请求头。 全局过滤器(GlobalFilter)的实现方式如下: Configuration public class…...
chromedriver版本下载地址汇总chromedriver所有版本下载地址汇总国内源下载
谷歌浏览器版本经常会升级,chromedriver 也得下载匹配的版本 chromedriver 114以前版本下载地址https://registry.npmmirror.com/binary.html?pathchromedriver/ windows版本请访问链接:https://blog.csdn.net/FL1768317420/article/details/139712108 …...
Go语言与Windows系统
1.获取屏幕尺寸 源自:Golang通过使用GetSystemMetrics获取系统的分辨率 - 完美代码 (perfcode.com) package mainimport ("syscall""fmt" )const (SM_CXSCREEN uintptr(0) // X Size of screenSM_CYSCREEN uintptr(1) // Y Size of screen …...
JAVA—面向对象编程高级
学习了一定基础后,开始更加深入的学习面向对象,包含static,final两个关键字,面向对象编程三大特征之继承和多态。以及对于抽象类,内部类,接口,枚举,泛型的学习。 目录 1.static (…...
[BJDCTF2020]Mark loves cat1
打开题目 发现这么多链接,以为要一点点去找功能上的漏洞。当你源代码,dirsearch,抓包等等操作之后,发现什么都没有。所以这题又是一道源码泄露题,上GItHack。扫描结果如下 http://63f29a80-e08b-43ae-a6d0-8e70fb02ea…...
微信答题小程序产品研发-用户操作流程设计
在答题小程序中,用户流程是指用户从进入小程序开始,到完成答题、查看结果、进行练习等一系列操作的步骤。 这里我画了一张用户流程图,展示用户在小程序中的主要操作流程。以及对每个步骤的详细说明。这里分两种角色,用户和管理员…...
目标检测——YOLOv10: Real-Time End-to-End Object Detection
YOLOv10是在YOLOv8的基础上,借鉴了RT-DETR的一些创新点改进出来的 标题:YOLOv10: Real-Time End-to-End Object Detection论文:https://arxiv.org/pdf/2405.14458源码:https://github.com/THU-MIG/yolov10 1. 论文介绍 在过去的几…...
堡垒机简单介绍
堡垒机(Bastion Host),也被称为跳板机、跳板服务器或堡垒服务器,是一种在网络安全中扮演重要角色的设备或服务。以下是关于堡垒机的详细介绍: 一、定义与功能 堡垒机是一种用于控制和管理网络安全的重要工具…...
【星闪开发连载】WS63E 星闪开发板和hi3861开发板的对比
此次星闪开发者体验官活动使用的开发板都是NearLink_DK_WS63E开发板,它和NearLink_DK_WS63开发板的区别在于具有雷达感知功能。从开发板的照片也可以看到WS63E有一个雷达天线接口。 我们把WS63E开发板和hi3861开发板的功能做了简单的对比,见下表。 参数…...
Python接口自动化测试框架(实战篇)-- Jenkins持续集成
文章目录 一、前言二、[Jenkins](https://www.jenkins.io/)2.1、环境搭建2.2、插件准备2.3、创建job2.4、小结2.5、构建策略2.6、报告展示2.7、扩展三、总结一、前言 温馨提示:在框架需要集成jenkins的时候,一定要注意环境切换问题,如果jenkins和开发环境是同样的系统且都有…...
【leetcode】根据二叉树创建字符串、二叉树的前中后遍历(非递归链表实现二叉树)
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构、LeetCode专栏 📚本系…...
【RabbitMQ】RabbitMQ交换机概述
一、交换机的类型 RabbitMQ提供了以下四种主要类型的交换机: 直连交换机(Direct Exchange) 特点:直连交换机是最基本的交换机类型,它根据完全匹配的路由键(Routing Key)将消息路由到绑定的队列…...
ROS2从入门到精通4-6:路径平滑插件开发案例(以B样条曲线平滑为例)
目录 0 专栏介绍1 ROS2路径平滑器介绍2 平滑器插件编写模板2.1 构造平滑器插件类2.2 注册并导出插件2.3 编译与使用插件 3 基于B样条曲线的路径平滑 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2…...
Tensorflow训练视觉模型(CPU)
目录 零、模型下载 一、清理C盘 二、 配置环境 三、运行项目前提操作 (1)根据自己的项目设置路径。每次激活虚拟环境(tensorflow115)都得重设一次 (2)执行setup 这个项目的路径移动了位置也需要重设一…...
从根儿上学习spring 十 之run方法启动第四段(4)
我们接着上一节已经准备开始分析AbstractAutowireCapableBeanFactory#doCreateBean方法,该方法是spring真正开始创建bean实例并初始化bean的入口方法,属于核心逻辑,所以我们新开一节开始分析。 图12 图12-530到536行 这几行的主要就是创建b…...
如果我的发明有修改,需要如何处理?
如果我的发明有修改,需要如何处理?...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
