当前位置: 首页 > news >正文

深度学习-----------数值稳定性

目录

  • 神经网络的梯度
  • 数值稳定性的常见两个问题
    • 例子: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} nt1是第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为什么还会出现数值稳定性问题?
只能缓解问题不能解决问题。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • docker部署jenkins和jenkins的基本使用
  • 【SpringCloud】SpringCloudNetflix笔记
  • 重塑购车体验,实时云渲染赋能东风日产探路云看车新体验
  • Date类型的字段序列化成JSON字符串
  • bug: 配置flyway.locations多个脚本位置不生效
  • SpringBoot整合支付宝沙箱支付流程(干货·精简版)Java毕业设计亮点 通俗易懂
  • Linux查看系统线程数
  • Python 爬虫项目实战五:抓取天猫超市商品信息
  • 数据结构 - 哈希表
  • 【C++进阶学习】第十二弹——C++ 异常处理:深入解析与实践应用
  • linux命令:scp与rsync
  • 关闭Windows安全中心
  • 个人编程原则总结(不喜勿喷)
  • 前缀和处理数组区间之和问题
  • Vue3项目创建及相关配置
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • docker-consul
  • Git学习与使用心得(1)—— 初始化
  • Laravel核心解读--Facades
  • Logstash 参考指南(目录)
  • Rancher-k8s加速安装文档
  • react 代码优化(一) ——事件处理
  • Web设计流程优化:网页效果图设计新思路
  • 产品三维模型在线预览
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 时间复杂度与空间复杂度分析
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 小程序 setData 学问多
  • HanLP分词命名实体提取详解
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • ### RabbitMQ五种工作模式:
  • #if #elif #endif
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $forceUpdate()函数
  • (26)4.7 字符函数和字符串函数
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)构建dubbo分布式平台-平台功能导图
  • *** 2003
  • .aanva
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .Net Web窗口页属性
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net生成的类,跨工程调用显示注释
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • ??myeclipse+tomcat
  • @Conditional注解详解
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [Angular 基础] - 指令(directives)
  • [ARC066F]Contest with Drinks Hard
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [C++]C++入门--引用