权重初始化
1. 全部初始化为零
实现代码:
W = np.zeros(input_layer_neurons, hidden_layer_neurons)
将权重全部初始化为零,每一层所学到的参数一样,因为梯度一样,所以在反响传播过
程中,每一层神经元相同。所以会导致代价函数在一开始明显下降,一段时间后停止下
降。
2. 初始化为相同的随机数:
将权重 w 初始化为相同的随机数与全部初始化为零的效果一样,会出现 Symmetry
problem
实现代码:
W = np.zeros(input_layer_neurons, hidden_layer_neurons)*T
随机初始化可以打破对称。在随机初始化后,每个神经元可以继续学习其输入的不同功
能。
3. 初始化为较小的随机数
权重参数随机初始化为服从均值为零和方差为 1 的高斯分布函数
对于含有
个输入和
个输出的全连接层:
standard_normal:
standard_uniform:
实现代码:
W = np.random.randn(input_layer_neurons, hidden_layer_neurons)*0.01
随着时间增加,前向传播时,方差开始减少,梯度也开始向零靠近,会导致梯度消失。
当激活函数使用 sigmoid 时,梯度接近 0.5;当激活函数使用 tanh 时,梯度接近 0
4. 初始化为较大的随机数
实现代码:
评论0