【深度学习_2.1.1】神经网络参数初始化

三种参数初始化方法:

zero initialization:将输入参数初始化为0

random initialization:随机初始化输入参数,权重w初始化的值较大

He initialization:在一定范围内随即初始化权重w值


zero initialization实现代码:

    for l in range(1, L):
        parameters['W' + str(l)] = np.zeros((layers_dims[l], layers_dims[l-1])) 
        parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))

训练结果是cost函数不下降,一层中的每个神经元学习的内容都一样,导致无法打破对称性。为了打破对称性,w的值需要随机初始化,b的值则可以初始化为0.

random initialization实现代码:

    for l in range(1, L):
        parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l-1]) * 10
        parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))

权重w随机初始化为较大的值,b初始化为0,这会导致cost函数的收敛速度变慢,也有可能引起梯度消失/梯度爆炸等问题

He initialization实现代码:

    for l in range(1, L + 1):
        parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l-1]) * np.sqrt(2/layers_dims[l-1])
        parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))

对于reLU激活函数,He initialization效果好

猜你喜欢

转载自blog.csdn.net/oliverchrist/article/details/79369469
今日推荐