深度学习--第11篇: Pytorch权值初始化

参考博客

参考博客: https://blog.csdn.net/weixin_42147780/article/details/103238195

背景知识

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

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

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

Pytorch常见的几种初始化方法。

在这里插入图片描述

1. 梯度消失和爆炸

在这里插入图片描述
在这里插入图片描述

2. Xavier初始化

适合饱和的激活函数:Sigmoid、Tanh类型

2.1 Xavier均匀分布初始化

torch.nn.init.xavier_uniform_(tensor, gain=1.0)
参数:
	tensor: 表示权重参数张量;
	gain:增益

实例:
w = torch.randn([3,5])
nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('tanh'))

2.2 Xavier正态分布初始化

torch.nn.init.xavier_normal_(tensor, gain=1.0)
参数:
	tensor: 表示权重参数张量;
	gain:增益

实例:
w = torch.randn([3,5])
nn.init.xavier_normal_(w, gain=nn.init.calculate_gain('tanh'))

3. Kaiming初始化

适合非饱和的激活函数:Rulu及其变种类型

3.1 Kaiming正态分布初始化

torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
参数:
	tensor: 表示权重参数张量;
	mode:前向传播选择fan_in, 反向传播选择fan_out;
	nonlinearity:激活函数名, 'relu', 'leaky_relu'

实例:
w = torch.randn([3,5])
nn.init.kaiming_normal_(w, mode='fan_in', nonlinearity='relu')

3.2 Kaiming均匀分布初始化

torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
参数:
	tensor: 表示权重参数张量;
	mode:前向传播选择fan_in, 反向传播选择fan_out;
	nonlinearity:激活函数名, 'relu', 'leaky_relu'

实例:
w = torch.randn([3,5])
nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值