随机初始化权重非常重要,对于logistic回归,可以将权重初始化为0。但如果将神经网络的各个参数数组全部初始化为0,再使用梯度下降算法,那会完全无效
如果就你有2个输入特征,所以n[0] = 2,然后有2个隐藏单元,n[1] = 2,所以和隐藏层相关的矩阵w[1]是2*2的矩阵,假如全部初始化为0,即
w[1] = { 0 0 b[1]= {0
0 0} 0}
这种初始化的问题在于,你给网络输入任何样本,你的a1[1]和a2[1]是一样的,所以a1[1]和a2[1]的激活函数是完全一样的,因为两个隐藏单元都在做完全一样的运算,当计算反向传播时,出于对称性
dz1[1]和dz2[1]也是相同的,这样会导致无论训练神经网络多长时间,两个隐藏单元仍然在计算完全一样的函数。
因此需要两个不同的隐藏单元去计算不同的函数,这个问题的解决方法就是随机初始化所有的参数。
令: w[1] = np.random.randn*0.01 这可以产生参数为( 2,2 )的高斯分布随机变量,再乘以0.01将权重初始化成很小的随机数
b[1] = np.zeros( ( 2,1) )