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

深度学习-数值稳定性和模型初始化

到目前为止,我们实现的每个模型都是根据某个预先制定的分布来初始化模型的参数,有人会认为初始化方案时理所当然的,忽略了如何做出这些选择的细节,甚至有人可能会觉得,初始化方案的选择并不是特别重要,实际上,初始化方案的选择在神经网络学习中起着举足轻重的作用,保持数值稳定性至关重要。此外,这些初始化方案的选择可以与非线性激活函数的选择有趣的结合在一起。我们选择哪个函数以及如何初始化参数可以决定优化算法收敛的速度有多快,糟糕的选择可能会导致我们在训练时遇到梯度爆炸或者梯度消失,本节将更详细的探讨这些主题,讨论一些有用的启发方式方法。这些启发方式在整个深度学习中都很有用。

4.8.1 梯度小时和梯度爆炸

考虑一个具有L层,输入x和输出o的深层网络。每一层l由变换f1定义,该变换的参数为权重W(l),隐藏变量是h(l) 令h(0) =x。我们的网络可以表示为

h(l) = Flh(l-1), 因此 o = FL .... Fl(x)

换而言之,该剃度是L-1 个矩阵M(L) ... M(l + 1) 与梯度向量v(l)的乘积。因此,我们容易受到数值下溢问题的影响,当将过多的概率在一起相承时,这种问题经常会出现。在处理概率时,一个常见的技巧是切换到对数空间,即将数值表示的压力从尾数转移到指数。遗憾的是,这会使上面的问题更为严重,矩阵M可能是各种各样的特征值,可能很小,也可能很大,而他们的乘积可能非常大,也可能非常小。

不稳定梯度带来的风险不仅在于数值表示,也威胁到优化算法的稳定性。我们可能面临一些问题,要么是梯度爆炸问题,参数更新过大,破坏了模型的稳定收敛,要么是梯度消失问题,参数更新过小,在每次更新时几乎不会移动。导致模型无法学习。

1 梯度消失

曾经sigmoid 函数很流行,因为它类似于阈值函数,由于早期的人工神经网络受到生物神经网络的启发,神经元要饿完全激活,要么完全不激活的想法很吸引力。然而,却是导致梯度消失的一个常见原因,我们仔细看着sigmoid函数为什么导致梯度消失

%matplotlib inline

import torch

from d2l import torch as d2l

x = torch.arange(-8.0, 8.0, 0.1, requires_grad = True);

y = torch.sigmoid(x)

y.backward(torch.ones_like(x))

d2l.plot(x.detach().numpy(),[y.detach().numpy(),x.grad.numpy()],legend=['sigmoid','gradient'],figsize=(4.5,2.5))

正如上图曲线所示sigmoid函数输入很大或者很小梯度就会消失此外反向传播通过许多除非恰好sigmoid函数输入接近位置否则整个乘积梯度可能会消失网络很多层时候除非我们很小心否则某一层可能会切断梯度事实这个问题曾经困扰深度网络训练因此更稳定RelU系列函数已经成为从业者默认选择(虽然从神经科学的角度看起来不会太合理)

  1. 梯度爆炸

梯度消失相反梯度爆炸可能同样令人烦恼为了更好说明这一点我们生成100高斯随机矩阵将他们某个初始矩阵相乘对于我们选择尺寸矩阵乘积发生了爆炸当这种情况深度网络初始化所导致我们没有机会梯度下降优化收敛

M = torch.normal(0, 1, size = (4,4))

printf('一个矩阵\n');

for i in range(100)

M = torch.mm(M, torch.normal(0, 1, size(4, 4)));

3 打破对成型

神经网络设计中另一个问题参数固有对称性假设我们有一个简单多层感知有一个隐藏两个隐藏单元在这种情况下我们可以第一层权重进行排列并且同样输出层权重进行重排列可以获得相同函数第一个隐藏单元第二个隐藏单元没有什么区别换句话说每一层隐藏单元之间具有排列对称性

4.8.2 参数初始化

解决上述问题一种方法进行参数初始化优化期间适当正则化也可以进一步提高稳定性

相关文章:

  • 【C语言】C语言结构体:从基础到高级特性
  • 反爬系列 IP 限制与频率封禁应对指南
  • Python:简介,Python解释器安装,第一个Python程序,开发环境(PyCharm安装和配置、Sublime安装和配置)
  • 如何借助ETL数据集成工具实现数据一致性?
  • 正则表达式学习指南
  • 离线部署kubernetes
  • 使用localStorage的方式存储数据,刷新之后,无用户消息,需要重新登录,,localStorage 与 sessionStorage 的区别
  • 深度学习前沿 | TransNeXt:仿生聚合注意力引领视觉感知新时代
  • [Mac] 使用homebrew安装miniconda
  • 发币流程是什么,需要多少成本?
  • Sass的学习
  • SiamMask中的分类分支、回归分支与Mask分支,有何本质差异?
  • Java大师成长计划之第2天:面向对象编程在Java中的应用
  • Vue实战(08)解决 Vue 项目中路径别名 `@` 在 IDE 中报错无法识别的问题
  • Python爬虫实战:移动端逆向工具Fiddler调试详解
  • Python 爬虫实战 | 企名科技
  • 【产品经理从0到1】原型及Axure介绍
  • 前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程
  • http协议、全站https
  • 【盈达科技】GEO(生成式引擎优化)底层逻辑
  • 美称中美贸易谈判仍在进行中,外交部:美方不要混淆视听
  • 乐聚创始人:人形机器人当前要考虑泡沫问题,年底或将进入冷静期
  • 传染病防治法修订草案:拟加强医疗机构疾病预防控制能力建设
  • 无视规范开“远端”、企业云端被窃密,国安部:莫让运维成运“危”
  • 经济日报:美离间国际关系注定徒劳无功
  • 电厂 | 京东、美团为什么抢着为你送外卖?