卷积神经网络的权值初始化方法

本文以CNN的三个主要构成部件——卷积层、BN层、全连接层为切入点,分别介绍其初始化方法。

卷积层

高斯初始化

 从均值为0,方差为1的高斯分布中采样,作为初始权值。PyTorch中的相关函数如下:

torch.nn.init.normal_(tensor, mean=0, std=1)

kaiming高斯初始化

 由FAIR的大牛Kaiming He提出来的卷积层权值初始化方法,目的是使得每一卷积层的输出的方差都为1,具体数学推导可以参考论文[1]. 权值的初始化方法如下:

Wl~N(0,2(1+a2)×nl) W l ~ N ( 0 , 2 ( 1 + a 2 ) × n l )

其中,a为Relu或Leaky Relu的负半轴斜率, nl n l 为输入的维数,即 nl=2×channel n l = 卷 积 核 边 长 2 × c h a n n e l 数
在PyTorch中,相关函数如下:

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

 上述输入参数中,tensor是torch.Tensor变量,a为Relu函数的负半轴斜率,mode表示是让前向传播还是反向传播的输出的方差为1,nonlinearity可以选择是relu还是leaky_relu.

xavier高斯初始化

 Glorot正态分布初始化方法,也称作Xavier正态分布初始化,参数由0均值,标准差为sqrt(2 / (fan_in + fan_out))的正态分布产生,其中fan_in和fan_out是分别权值张量的输入和输出元素数目. 这种初始化同样是为了保证输入输出的方差不变,但是原论文中([2])是基于线性函数推导的,同时在tanh激活函数上有很好的效果,但不适用于ReLU激活函数。

std=gain×2fan_in+fan_out std = gain × 2 fan_in + fan_out

在PyTorch中,相关函数如下:

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


BatchNorm层

回顾
BatchNorm

初始化

 对于scale因子 γ γ ,初始化为1;对于shift因子 β β ,初始化为0.

全连接层

 对于全连接层,除了可以使用卷积层的基于高斯分布的初始方法外,也有使用均匀分布(uniform distribution)的初始化方法,或者直接设置为常量(constant)。

还有其它这里没有细讲的初始化方法,包括:
Orthogonal:用随机正交矩阵初始化。
sparse:用稀疏矩阵初始化。
TruncatedNormal:截尾高斯分布,类似于高斯分布,位于均值两个标准差以外的数据将会被丢弃并重新生成,形成截尾分布。PyTorch中似乎没有相关实现。

参考

[1] Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification — He, K. et al. (2015)
[2] Understanding the difficulty of training deep feedforward neural networks — Glorot, X. & Bengio, Y. (2010)

  • 11
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Matlab进行卷神经网络权值初始化时,有几种常用的方法。其中一种是随机初始化权值。在这种方法中,权值矩阵的每个元素都是从一个均匀分布或高斯分布中随机抽取的。这种方法可以帮助网络避免陷入局部最优解,并且在一些情况下可以提高网络的收敛速度。另一种方法是使用预训练的权值。这种方法通过在其他数据集上训练得到的预训练模型的权值初始化网络。这可以提供一种比随机初始化更好的起点,特别是在相似的任务上。除此之外,还有一些其他的权值初始化方法,如Xavier初始化和He初始化,它们根据网络的结构和激活函数的特性来调整权值的初始范围。这些方法可以帮助网络更好地学习和泛化。需要注意的是,在使用任何权值初始化方法时,都应该考虑到网络的架构和任务的特性,以便选择合适的方法初始化权值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [matlab输出神经网络权值,matlab神经网络能做什么](https://blog.csdn.net/goodutils/article/details/127354414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [神经网络权值是什么意思,神经网络权重取值范围](https://blog.csdn.net/mynote/article/details/126203068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值