
6.2 权重的初始值
177
的内容)。因此,权重被更新为相同的值,并拥有了对称的值(重复的值)。
这使得神经网络拥有许多不同的权重的意义丧失了。为了防止“权重均一化”
(严格地讲,是为了瓦解权重的对称结构),必须随机生成初始值。
6.2.2
隐藏层的激活值的分布
观察隐藏层的激活值
A
(激活函数的输出数据)的分布,可以获得很多启
发。这里,我们来做一个简单的实验,观察权重初始值是如何影响隐藏层的
激活值的分布的。这里要做的实验是,向一个5层神经网络(激活函数使用
sigmoid
函数)传入随机生成的输入数据,用直方图绘制各层激活值的数据分
布。这个实验参考了斯坦福大学的课程
CS231n
[5]
。
进行实验的源代码在
ch06/weight_init_activation_histogram.py
中,下
面展示部分代码。
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
x = np.random.randn(1000, 100) # 1000
个数据
node_num = 100 #
各隐藏层的节点(神经元)数
hidden_layer_size = 5 #
隐藏层有
5
层
activations = {} #
激活值的结果保存在这里
for i in range(hidden_layer_size):
if i != 0:
x = activations[i-1]
w = np.random.randn(node_num, ...