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

深度学习中的参数初始化

      深度学习中的参数初始化主要是指初始化神经网络中的权重和偏置。权重和偏置通常分开初始化,偏置通常初始化为零或较小的常数值

      没有一种万能的初始化技术,因为最佳初始化可能因具体架构和要解决的问题而异。因此,尝试不同的初始化技术以了解哪种技术最适合给定任务通常是一个好主意。

      如果没有一个有用的权值初始化,训练网络可能会导致收敛速度非常慢或无法收敛

      梯度消失和梯度爆炸(vanishing and exploding gradients):适当的权重初始化对于防止梯度消失和梯度爆炸至关重要。

      1.梯度消失:梯度变得越来越小,权重更新很小,权重几乎保持不变,导致收敛速度变慢,在最坏的情况下,可能会导致网络完全停止收敛,学习过程停滞。

      2.梯度爆炸:梯度可能会呈指数增长,导致不成比例的大量更新并导致学习过程发散(divergence)。

      参数初始化方法

      1.零初始化:将所有权重和偏置(weights and biases)初始化为0。这在深度学习中通常不使用,因为它会导致梯度对称(symmetry),从而导致所有神经元在训练期间学习相同的特征。所有神经元中的所有激活都是相同的,因此所有计算都是相同的,这使得相关模型成为线性模型(linear model)。当用0初始化时,偏置不会产生任何影响。

      2.常数初始化:用常数值初始化权重和偏置。任何常数初始化方案的性能都会很差,与零初始化类似。如果神经网络中的神经元的权重被初始化为相同的值,它们将在训练期间学习相同的特征。

      3.随机初始化:从均匀或正态分布(uniform or normal distribution)中随机初始化权重和偏置。这是深度学习中最常用的技术。改进了对称性破坏(symmetry-breaking)过程,即如果两个隐藏神经元具有相同的输入和相同的激活函数,则它们必须具有不同的初始参数,并提供了更高的精度。这种方法可以防止对输入参数学习相同的特征。选择适当的初始化值对于高效训练是必要的。初始化过大会导致梯度爆炸(梯度太大)。初始化太小会导致梯度消失(梯度太小)。随机为权重分配值可能会出现过拟合、梯度消失、梯度爆炸等问题。

      4.Xavier/Glorot初始化:使用均值为0、方差为sqrt(1/n)的正态分布或均匀分布初始化权重,其中n是前一层的神经元数量。权重(例如激活的方差)在每一层上都是相同的,缓解梯度爆炸和消失问题。用于Sigmoid、Tanh激活函数

      5.He/Kaiming初始化:使用均值为0、方差为sqrt(2/n)的正态分布或均匀分布初始化权重,其中n是前一层的神经元数量。保留了激活函数(例如ReLU激活)的非线性。防止出现值过小或过大等问题,缓解梯度爆炸和消失问题。用于ReLU激活函数

      6.正交初始化:使用正交矩阵(orthogonal matrix)初始化权重,这在反向传播期间保留梯度范数(gradient norm)。

      7.均匀初始化:使用均匀分布(uniform distribution)初始化权重。

      总结

      1.权重初始化的原则:权重不应相对过小或过大、权重不应相同、权重应具有良好的方差

      2.对复杂数据集使用权重初始化技术非常重要。权重初始化在复杂数据的训练中起着重要作用,尤其是在使用基于启发式(heuristic)的方法时,如Xavier、He,这些方法是通过激活函数的某些属性设计的。在权重初始化较小的情况下,神经元的输入将很小,从而导致激活函数的非线性损失。否则,在权重初始化较大的情况下,神经元的输入将很大,从而导致激活函数饱和。选择合适的权重初始化方法将有助于获得更好的深度学习模型性能。此外,良好的权重初始化有助于基于梯度的方法快速收敛。

      3.选择合适的权重初始化方法是一个悬而未决的问题。Xavier初始化方法在可微激活函数(如Sigmoid)的情况下提供了良好的结果。He初始化方法在ReLU等不可微激活函数的情况下提供了良好的效果。大多数情况下,DNN模型都是基于ReLU激活函数的。因此,在DNN的情况下,最好使用He方法进行权重初始化。

      4.通过迁移学习(transfer learning),你不是从随机初始化的权重开始,而是使用从以前的网络保存的权重作为新实验的初始权重(即微调预先训练的网络)。

      注:以上整理的内容主要来自:

      1. https://medium.com

      2. https://www.geeksforgeeks.org

      3. https://arxiv.org/pdf/2102.07004

      PyTorch中参数初始化函数的实现在:torch/nn/init.py ,支持的参数初始化函数有:uniform_(uniform distribution)、normal_(normal distribution)、trunc_normal_(truncated normal distribution)、constant_、ones_(scalar value 1)、zeros_(scalar value 0)、eye_(identity matrix)、dirac_(Dirac delta function)、xavier_uniform_(Xavier uniform distribution)、xavier_normal_(Xavier normal distribution)、kaiming_uniform_(Kaiming uniform distribution)、kaiming_normal_(Kaiming normal distribution)、orthogonal_((semi) orthogonal matrix)、sparse_(sparse matrix)。

      PyTorch根据层的类型使用不同的默认权重和偏置初始化方法。

      GitHub:https://github.com/fengbingchun/NN_Test

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

相关文章:

  • wpf 基于Behavior库 的行为模块
  • 【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置
  • 【SpringMVC】REST 风格
  • IDEA修改编译版本
  • SkyWalking Agent 配置 Spring Cloud Gateway 插件解决日志错误
  • canvas+fabric实现时间刻度尺(一)
  • 傲雷亮相2024中国时尚体育季(珠海站),展现户外移动照明风采
  • YOLOv10-1.1部分代码阅读笔记-block.py
  • @RestControllerAdvice注解
  • Enum枚举类与静态变量和静态数组的区别
  • uniapp——微信小程序读取bin文件,解析文件的数据内容(三)
  • SpringBoot集成ECDH密钥交换
  • python文件操作相关(excel)
  • 探索React与Microi吾码的完美结合:快速搭建项目,低代码便捷开发教程
  • 【面试系列】深入浅出 Spring Boot
  • @colyseus/social 模块详解
  • 石岩路边理发好去处
  • ROS 2中的DDS中间件
  • 「下载」智慧文旅运营综合平台解决方案:整体架构,核心功能设计
  • NVR小程序接入平台EasyNVR使用FFmpeg取流时提示错误是什么原因呢?
  • 计算机因进程结束导致白屏
  • OpenGL入门最后一章观察矩阵(照相机)
  • ES6中定义私有属性详解
  • 工业5G路由器让无人机数据传输 “飞” 起来
  • 面试经典150题——滑动窗口
  • MiFlash 线刷工具下载合集
  • 【MySQL高级】第1-4章
  • 课程设计项目之基于Python实现围棋游戏代码
  • uni-app tab 双击事件监听
  • 如何在Maxscript脚本中检查磁盘可用空间?