神经网络参数的各种初始化算法

本文探讨了神经网络权重初始化的重要性,实验基于UCI鲍鱼年龄预测数据集,使用了包括正态分布、Xavier、MSRA等多种初始化方法。通过实验发现,Xavier初始化适合tanh激活函数,而MSRA初始化更适合relu激活函数,有效避免梯度消失问题。
摘要由CSDN通过智能技术生成

本文所采用的数据集为UCI 鲍鱼年龄预测数据集,网络模型为8层的全连接神经网络。

1. 实验步骤:

a. 基于不同的权重初始化方式初始化各层权重;

b. 以直方图的形式查看每层输入给激活函数(线性运算后)的数据分布;

2. 正态分布初始化权重

a. 权重更新

weight = np.random.randn(in_node, out_node)

使用默认的均值和方差

b. 实验结论

如图所示,随着网络层的加深,每层的激活函数值有较多的比例接近1和-1,这使得网络的更新梯度太小而无法更新参数。这是本人所使用此鲍鱼年龄预测数据集的实验,您也可以使用别的数据集进行测试,虽实验图像有所不同,但结论相同。

c. 原因分析

若输入和权重都服从均值为0,方差为1的正态分布时,则x*w也服从均值为0,方差为1的正态分布,想像其概率密度曲线,大部分的数据都在[-1,1]之间,这里是有一个比例的。

若x*w+x*w,则服从均值为0,方差为2的正态分布,此时概率密度曲线会变宽,大部分的数据都在[-2,2]之间。而神经网络的每层线性操作就是对正态分布方差的累加,即前层的神经元有多少个,则累加多少次,最终导致线性操作的结果的概率密度曲线非常宽,所以很容易进入激活函数饱和区。

4. Xavier初始化权重

a. 权重更新

weight = np.random.randn(in_node, out_node)/np.sqrt(in_node)

Tensorflow API:

tf.contrib.layers.xavier_initializer_conv2d

b. 实验结论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值