Xavier参数初始化方法和以及其引入的对数据进行标准化Normalize()的操作

在自己书写的梯度下降求出参数梯度后,为什么按照大伙儿常用的学习率0.01设定学习率后,正确率总上不去?
很大一个原因是因为卷积层和全连接层初始化没做或者没做好,应该检查一下。
这里就看了一种参数初始化的方式Xavier

该方法的局限性:

1)激活函数关于0对称。
2)在激活函数非饱和区,我们可以近似为线性。
比如tanh的图像,在x不趋近于两端时,我们可以用tanh’(0)为斜率的一条直线来近似这个函数。就满足这个条件。
ReLU激活函数,就不能满足2)中这种线性近似,所以以ReLU为激活函数就不太能适用Xavier参数初始化方法了。
3)网络中参数满足的分布中均值必须为0。之所以有这个假设,是因为下图Var(Wij)计算时E(X)为0,就简化了计算。
我认为必须要搞懂这个局限性,否则进行参数初始化时依然是瞎初始化。

4)偏置项初始化为全0。

关于Xavier初始化的总结

在这里插入图片描述
在这里插入图片描述
参考:https://blog.csdn.net/victoriaw/article/details/73000632
https://blog.csdn.net/weixin_39910711/article/details/124285848
如果不是tanh函数,这个链接最后说可以给方差乘上导数的导数,这样也可以以Xavier分布来初始化参数,还不太懂这个是怎么来的。
**

总结:

**
激活函数为tanh时,我们在使用Xavier函数进行参数初始化时,保证了两点:
1)网络中间每一层结点的激活后的值都时刻服从均值为0,标准差为Var (z0)。而没有让各层激活值的方差逐层递减,这样在计算各层参数的梯度时,不会出现梯度消失的现象。
2)各层结点反向传播的梯度的方差也都服从均值为0,标准差为Var(δ Cost / δ Zd)。而没有让各层结点反向传播的梯度的方差也逐层递减。
满足以上两点,也就一定程度上避免了梯度消失的现象。使我们的网络更好的收敛。
从而可以联想到为什么图像预处理时除了归一化还要做标准化的操作。标准化可以将输入数据映射到均值为0,标准差为1的分布上。
如果我们初始的输入满足均值为0,标准差Var(z0)为1,就可以按Xavier中根号六 / 根号下nj+nj+1的那个分布来初始化参数了。当然你也可以初始化后的均值为0,标准差不为1,那么最后就不是根号六这个数了,还要除以这个标准差。那为何不标准化为方差为1呢?这样就可以直接用根号六了。这不是给自己找麻烦嘛?
**

利用torchvision中的Normalize进行标准化

一般的数据集,比如MNIST,一个通道的数据,我们都可以搜到这两个数,它们分别对应要对这组图像数据进行标准化所要用到的均值mean,和标准差std。减均值除以标准差得到的就是满足均值为0,标准差为1的分布。

**

torchvision.transforms.Normalize(mean=(0.1307), std=(0.3081))

**

以全连接层为例,初始化权重写法

**

# input_nums:输入结点数
# output_nums:输出结点数
a = np.sqrt(6. / (input_nums + output_nums))
self.weights = np.random.uniform(low=-a,high=a,size = [output_nums,input_nums]) #全连接层的weight采用xavier分布
self.bias = np.zeros((output_nums,1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xavier初始化方法是一种常用的参数初始化方法,用于初始化神经网络的权重。它的目标是使得前向传播和反向传播过程中的梯度保持一致,从而更好地进行模型训练。 Xavier初始化方法的核心思想是根据权重矩阵的输入和输出维度来确定合适的初始化范围。通常情况下,权重矩阵的元素应该服从一个均匀分布,使得输入和输出的方差保持一致。 具体来说,对于一个全连接层的权重矩阵W(形状为(output_dim, input_dim)),Xavier初始化方法可以通过以下方式进行: 1. 均匀分布: - 从均匀分布U(-a, a)中随机采样,其中a是根据输入和输出维度计算得到的上界。 2. 上界计算: - 对于具有输入维度为input_dim和输出维度为output_dim的权重矩阵W,上界a可以通过以下公式计算得到: ``` a = sqrt(6 / (input_dim + output_dim)) ``` 3. 初始化权重: - 使用均匀分布U(-a, a)来随机初始化权重矩阵W。 Xavier初始化方法可以在一定程度上避免梯度消失或梯度爆炸的问题,有助于提高模型的收敛速度和性能。它在很多深度学习框架和库中都有内置的实现方式,可以方便地应用于各种神经网络模型。 需要注意的是,Xavier初始化方法适用于激活函数为线性函数或具有类似线性性质的激活函数(如tanh、sigmoid等)。对于非线性激活函数(如ReLU、LeakyReLU等),其他初始化方法(如He初始化)可能更为合适。因此,在选择参数初始化方法时,要结合具体的激活函数和模型结构来进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值