【参数初始化】深度学习专项课程学习记录5——W,b初始化

本文探讨了深度学习中权重初始化的重要性,解释了零初始化的问题,介绍了随机初始化及其常用技巧,并详细阐述了He初始化方法。通过实例展示了初始化方式如何影响神经网络的训练。同时,对比了三种初始化方法的优缺点,强调了正确初始化对于模型收敛速度和性能的影响。
摘要由CSDN通过智能技术生成

学习目标

掌握DNN参数初始化的三种常见方式及应用场景。

笔记

1.为什么要初始化

权重初始化很重要,因为初始化不当可能造成梯度爆炸和梯度消失问题。
梯度爆炸和梯度消失
注:b一般只用零初始化,因其影响较小。所以这里只讨论权重W的初始化。

2. 三种初始化方法

2.1 零初始化

首先说明的是将W初始化为0的操作在神经网络训练中不可取,因为权重的零初始化不能打破对称性。这意味着每一层的每个神经元都学习一样的东西。举个例子:
当W,b均初始化为0时, z = W x + b = 0 z = Wx+b = 0 z=Wx+b=0
a = R e L U ( z ) = m a x ( 0 , z ) = 0 a = ReLU(z) = max(0, z) = 0 a=ReLU(z)=max(0,z)=0
σ ( z ) = 1 1 + e − ( z ) = 1 2 = y p r e d \sigma(z) = \frac{1}{ 1 + e^{-(z)}} = \frac{1}{2} = y_{pred} σ(z)=1+e(z)1=21=ypred
可见,此时 y p r e d y_{pred} ypred变成0.5了。当 y = 1 y=1 y=1时,Loss function变成:

L ( 0 , 1 ) = − ( 1 ) ln ⁡ ( 1 2 ) = 0.6931471805599453 \mathcal{L}(0, 1) = - (1) \ln(\frac{1}{2}) = 0.6931471805599453 L(0,1)=(1)ln(21)=0.6931471805599453

y = 0 y=0 y=0时,Loss function变成:

L ( 0 , 0 ) = − ( 1 ) ln ⁡ ( 1 2 ) = 0.6931471805599453 \mathcal{L}(0, 0) = - (1) \ln(\frac{1}{2}) = 0.6931471805599453 L(0,0)=(1)ln(21)=0.6931471805599453
可见此时无论 y = 1 y=1 y=1还是 y = 0 y=0 y=0,损失函数都一样,权重无法继续调整下去。在这种情况下,最终的预测结果都是“0”。

2.2 随机初始化

权重随机初始化会导致损失比较大。尤其当随机初始的W值非常大的时候,输出层的激活函数的结果会非常接近0或1。结合Loss function(下式),当 log ⁡ ( a [ L ] ) = log ⁡ ( 0 ) \log(a^{[L]}) = \log(0) log(a[L])=log(0)时,损失无穷大。
L ( a , y ) = − y ln ⁡ ( y p r e d ) − ( 1 − y ) ln ⁡ ( 1 − y p r e d ) \mathcal{L}(a, y) = - y \ln(y_{pred}) - (1-y) \ln(1-y_{pred}) L(a,y)=yln(ypred)(1y)ln(1ypred)
所以在使用随机初始化时,一般都再乘一个0.01,使初始化的值较小,即:

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

注:随机初始化为什么要用randn()?
numpy.random.rand() 产生服从于均匀分布(uniform distribution)的数;numpy.random.randn() 产生服从于正态分布normal distribution的数。在进行权重随机初始化时,randn() 生成的权重数值大多分布在区间的中部,避免生成极端值,这样做可以加快收敛。

2.3 He初始化

该方法由He et al.( 2015)提出,就是在随机初始化的基础上乘一个scaling factor,即 2 dimension of the previous layer \sqrt{\frac{2}{\text{dimension of the previous layer}}} dimension of the previous layer2 ,在Python中表示为:

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])

2.4 三种初始化方法比较

在这里插入图片描述

学习时间

2.22.6.27

总结

在这里插入图片描述

需要注意的地方

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值