Pytorch教程[06]权值初始化

简介: Pytorch教程[06]权值初始化

背景知识


神经网络的训练过程中的参数学习是基于梯度下降法进行优化的。梯度下降法需要在开始训练时给每一个参数赋一个初始值,因此权重初始化的选取十分的关键,设定什么样的初始化方法关系到模型能否成功学习。那么如果我们把权重初始值全部设置为0,会怎样???通常来说,把权值初始值设置成0,不是一个理性的选择,因为实际上如果初始化为0的话,模型将无法学习。因为如果参数都为0,在第一遍前向计算时,所有的隐层神经元的激活值都相同。这样会导致深层神经元没有区分性。这种现象也称为对称权重现象。因此为了打破这个现象,比较好的方式就是给每个参数随机初始化一个值。

但是初始化的值太小,那么导致神经元的输入过小,经过多层之后信号就消失了,设置的过大导致数据状态过大,对于sigmoid类型的激活函数来说,激活值就一下子饱和了,梯度接近于0,也是不好训练的。

因此,参数初始化的区间应该根据神经元的性质进行差异化的设置。

一.梯度消失与梯度爆炸


1.1梯度爆炸


在反向传播过程中需要对激活函数进行求导,如果导数大于1,那么随着网络层数的增加,梯度更新将会朝着指数爆炸的方式增加。

1.2梯度消失


如果导数小于1,那么随着网络层数的增加,梯度更新信息会朝着指数衰减的方式减少这就是梯度消失。

因此,梯度消失、梯度爆炸,其根本原因在于反向传播训练法则,属于先天不足。

二.Xavier方法与Kaiming方法


2.1Xavier均匀分布初始化


torch.nn.init.xavier_uniform_(tensor, gain=1.0)

公式:image.png

eg.

w = torch.empty(3, 5)
nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))

2.2 Xavier正态分布初始化


torch.nn.init.xavier_normal_(tensor, gain=1.0)

image.png

w = torch.empty(3, 5)
nn.init.xavier_normal_(w)

2.3 kaiming正态分布


torch.nn.init.kaiming_normal_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’)

image.png

w = torch.empty(3, 5)
nn.init.xavier_normal_(w)

2.4 kaiming均匀分布


torch.nn.init.kaiming_uniform_(tensor, a=0, mode=‘fan_in’, nonlinearity=‘leaky_relu’)

image.png

w = torch.empty(3, 5)
nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')

三.常用初始化方法


  1. Xavier均匀分布
  2. Xavier正态分布
  3. Kaiming均匀分布
  4. Kaiming正态分布
  5. 均匀分布
  6. 正态分布
  7. 常数分布
  8. 正交矩阵初始化
  9. 单位矩阵初始化
  10. 稀疏矩阵初始化
相关文章
|
8天前
|
存储 物联网 PyTorch
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
**Torchtune**是由PyTorch团队开发的一个专门用于LLM微调的库。它旨在简化LLM的微调流程,提供了一系列高级API和预置的最佳实践
106 59
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
|
3月前
|
并行计算 Ubuntu PyTorch
Ubuntu下CUDA、Conda、Pytorch联合教程
本文是一份Ubuntu系统下安装和配置CUDA、Conda和Pytorch的教程,涵盖了查看显卡驱动、下载安装CUDA、添加环境变量、卸载CUDA、Anaconda的下载安装、环境管理以及Pytorch的安装和验证等步骤。
451 1
Ubuntu下CUDA、Conda、Pytorch联合教程
|
6月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.2 中文官方教程(十八)(1)
PyTorch 2.2 中文官方教程(十八)
195 2
PyTorch 2.2 中文官方教程(十八)(1)
|
6月前
|
并行计算 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十七)(4)
PyTorch 2.2 中文官方教程(十七)
182 2
PyTorch 2.2 中文官方教程(十七)(4)
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】17. Pytorch中模型参数的访问、初始化和共享方法
【从零开始学习深度学习】17. Pytorch中模型参数的访问、初始化和共享方法
|
6月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.2 中文官方教程(十九)(1)
PyTorch 2.2 中文官方教程(十九)
132 1
PyTorch 2.2 中文官方教程(十九)(1)
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十八)(3)
PyTorch 2.2 中文官方教程(十八)
90 1
PyTorch 2.2 中文官方教程(十八)(3)
|
6月前
|
API PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十八)(2)
PyTorch 2.2 中文官方教程(十八)
168 1
PyTorch 2.2 中文官方教程(十八)(2)
|
6月前
|
异构计算 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十七)(3)
PyTorch 2.2 中文官方教程(十七)
91 1
PyTorch 2.2 中文官方教程(十七)(3)
|
6月前
|
PyTorch 算法框架/工具 机器学习/深度学习
PyTorch 2.2 中文官方教程(十七)(2)
PyTorch 2.2 中文官方教程(十七)
137 1
PyTorch 2.2 中文官方教程(十七)(2)