当前位置: 首页 > 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.dtcms.com/a/273556.html

相关文章:

  • 【数据结构与算法】203.移除链表元素(LeetCode)图文详解
  • Pandas:数据分箱
  • 使用Python和AkShare轻松获取新闻联播文字稿:从数据获取到文本挖掘
  • 剑指offer——链表:从尾到头打印链表
  • 自用docker记录
  • 学习C++、QT---21(QT中QFile库的QFile读取文件、写入文件的讲解)
  • 部署 React + Vite + TypeScript 项目到阿里云 ECS
  • ARMv9架构
  • tcp/quic 的滑动窗口
  • 飞算 JavaAI 体验:重塑 Java 开发的智能新范式
  • Element Plus和Ant Design Vue深度对比分析与选型指南
  • WD0407 40V 7A 超级肖特基二极管,应用于开关汽车工业控制
  • 【字节跳动】数据挖掘面试题0015:100 亿个单词,找出出现频率最高的单词。要求几种方案
  • 20250711荣品RD-RK3588开发板在Android13下的开机自启动的配置步骤
  • React之旅-05 List Key
  • 进制转换原理与实现详解
  • cyvcf2 知识点详解
  • MYSQL C_API使用全解
  • 基于gitlab 构建CICD发布到K8S 平台
  • Java大厂面试实录:谢飞机的电商场景技术问答(Spring Cloud、MyBatis、Redis、Kafka、AI等)
  • 飞算Java AI:专为 Java 开发者打造的智能开发引擎
  • 后台管理系统-权限管理
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(下)
  • 从Markdown到PPT:用Python打造专业演示文稿转换器
  • 2025前端面试真题以及答案-不断整理中,问题来源于牛客真题
  • 面具贴纸美颜SDK如何集成进直播APP?技术细节与性能优化实战
  • 百度2026届校招开启,大规模发力AI的百度未来何在?
  • PPT处理控件Aspose.Slides教程:使用 C# 将 PPTX 转换为 EMF
  • 【Linux仓库】命令行参数与环境变量【进程·伍】
  • 语音对话秒译 + 视频悬浮字 + 相机即拍即译:ViiTor 如何破局跨语言场景?