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

神经网络的参数初始化

参数初始化

  • 1. 固定值初始化
    • 1.1 全零初始化
    • 1.2 全1初始化
    • 1.3 任意常数初始化
  • 2. 随机初始化
  • 3. Xavier 初始化
  • 4. He初始化
  • 5. 总结

神经网络的参数初始化是训练深度学习模型的关键步骤之一。初始化参数(通常是权重和偏置)会对模型的训练速度、收敛性以及最终的性能产生重要影响。下面是关于神经网络参数初始化的一些常见方法及其相关知识点。

官方文档参考:https://pytorch.org/docs/stable/nn.init.html

1. 固定值初始化

固定值初始化是指在神经网络训练开始时,将所有权重或偏置初始化为一个特定的常数值。这种初始化方法虽然简单,但在实际深度学习应用中通常并不推荐。

1.1 全零初始化

将神经网络中的所有权重参数初始化为0。

方法:将所有权重初始化为零。

缺点:导致对称性破坏,每个神经元在每一层中都会执行相同的计算,模型无法学习。

应用场景:通常不用来初始化权重,但可以用来初始化偏置。

对称性问题

  • 现象:同一层的所有神经元具有完全相同的初始权重和偏置。
  • 后果:
    • 在反向传播时,所有神经元会收到相同的梯度,导致权重更新完全一致。
    • 无论训练多久,同一层的神经元本质上会保持相同的功能(相当于“一个神经元”的多个副本),极大降低模型的表达能力。

1.2 全1初始化

全1初始化会导致网络中每个神经元接收到相同的输入信号,进而输出相同的值,这就无法进行学习和收敛。所以全1初始化只是一个理论上的初始化方法,但在实际神经网络的训练中并不适用。

1.3 任意常数初始化

将所有参数初始化为某个非零的常数(如 0.1,-1 等)。虽然不同于全0和全1,但这种方法依然不能避免对称性破坏的问题。

2. 随机初始化

方法:将权重初始化为随机的小值,通常从正态分布或均匀分布中采样。

应用场景:这是最基本的初始化方法,通过随机初始化避免对称性破坏。

代码演示:随机分布之均匀初始化

 model=nn.Linear(1,1)#随机均匀分布参数初始化nn.init.uniform_(model.weight)#随机正态分布初始化nn.init.normal_(model.weight,mean=0,std=1)

3. Xavier 初始化

前置知识
Xavier 初始化(由 Xavier Glorot 在 2010 年提出)是一种自适应权重初始化方法,专门为解决神经网络训练初期的梯度消失或爆炸问题而设计。Xavier 初始化也叫做Glorot初始化。Xavier 初始化的核心思想是根据输入和输出的维度来初始化权重,使得每一层的输出的方差保持一致。具体来说,权重的初始化范围取决于前一层的神经元数量(输入维度)和当前层的神经元数量(输出维度)。

方法:根据输入和输出神经元的数量来选择权重的初始值。
Xavier 的数学原理
优点:平衡了输入和输出的方差,适合Sigmoid和 Tanh 激活函数。

应用场景:常用于浅层网络或使用Sigmoid 、Tanh 激活函数的网络。
Xavier初始化代码如下:

  model=nn.Linear(1,1)#xavier均匀分布参数初始化nn.init.xavier_uniform_(model.weight)#xavier正态分布参数初始化nn.init.xavier_normal_(model,weight,mean=0,std=1)

特点:

  • xavier参数初始化:是为了平衡前向传播和反向传播的方差保持一致
  • xavier有两种采样方式:均匀分布,正态分布
  • 一般用在浅层神经网络:可以和sigmoid函数和、Tanh激活函数的网络

4. He初始化

也叫kaiming 初始化。He 初始化的核心思想是调整权重的初始化范围,使得每一层的输出的方差保持一致。与 Xavier 初始化不同,He 初始化专门针对 ReLU 激活函数的特性进行了优化。
He参数初始化数学原理
(3) 两种模式

  • fan_in 模式(默认):优先保证前向传播稳定,方差 2nin\frac{2}{n_{in}}nin2
  • fan_out 模式:优先保证反向传播稳定,方差2nout\frac{2}{n_{out}}nout2

方法:专门为 ReLU 激活函数设计。权重从以下分布中采样:

均匀分布:
W∼U(−6nin,6nin)W\sim\mathrm{U}\left(-\frac{\sqrt{6}}{\sqrt{n_\mathrm{in}}},\frac{\sqrt{6}}{\sqrt{n_\mathrm{in}}}\right) WU(nin6,nin6)
正态分布:
W∼N(0,2nin)W\sim\mathrm{N}\left(0,\frac{2}{n_\mathrm{in}}\right) WN(0,nin2)
其中 ninn_{\text{in}}nin 是当前层的输入神经元数量。

优点:适用于ReLU和Leaky ReLU激活函数。

应用场景:深度网络,尤其是使用 ReLU 激活函数时。
代码如下:

 model=nn.Linear(1,1)# He均匀分布初始化nn.init.kaiming_uniform_(model.weight)#He正态分布初始化nn.init.kaiming.normal_(model.weight,mean=0,std=1)
  • He初始化(kaiming初始化):专门正对ReLu激活函数进行的优化
  • 两种模式:
  • fan_in:优先保证前向传播方差稳定,默认
  • fan_out:优先保证方向传播方差稳定
  • 两个采样方式:均匀分布和正态分布

5. 总结

在使用Torch构建网络模型时,每个网络层的参数都有默认的初始化方法,同时还可以通过以上方法来对网络参数进行初始化。

http://www.lryc.cn/news/585567.html

相关文章:

  • 鸿蒙app 开发中的Record<string,string>的用法和含义
  • Ubuntu 24.04上安装 Intelligent Pinyin 中文输入法
  • 模拟心电图采样数据
  • 【SpringAI】6.向量检索(redis)
  • 用FunctionCall实现文件解析(一):环境准备与基础知识
  • 如何使用Fail2Ban阻止SSH暴力破解
  • vue3+express联调接口时报“\“username\“ is required“问题
  • 获取华为开源3D引擎 (OpenHarmony),把引擎嵌入VUE中
  • Spring Boot中请求参数读取方式
  • AIC8800M40低功耗wifi在ARM-LINUX开发板上做OTA的调试经验
  • (六)复习(OutBox Message)
  • ParaCAD 笔记 png 图纸标注数据集
  • 设计模式(结构型)-适配器模式
  • jenkins部署springboot+Docker项目
  • 力扣网编程134题:加油站(双指针)
  • [实战]调频三角波和锯齿波信号生成(完整C代码)
  • leetcode-hot100(283.移动零)
  • 力扣面试150(29/100)
  • OA系统中的搜索功能方案:简单搜索vs高级搜索
  • SpringDataRedis入门
  • c++——浅拷贝和深拷贝、浅赋值和深赋值
  • Django快速入门搭建网站
  • 经典同步问题详解
  • 液冷智算数据中心崛起,AI算力联动PC Farm与云智算开拓新蓝海(二)
  • Apache Cloudberry 向量化实践(三)重塑表达式构建路径:Gandiva 优化实战
  • 2D下的几何变换(C#实现,持续更新)
  • SpringBoot或OpenFeign中 Jackson 配置参数名蛇形、小驼峰、大驼峰、自定义命名
  • SpringCloud之Ribbon
  • BootstrapBlazor与JS互调
  • Semi-Supervised Single-View 3D Reconstruction via Prototype Shape Priors