DeepLearning.ai学习笔记——改善深层神经网络:超参数调试、正则化以及优化(二)

1.梯度消失/梯度爆炸(Vanishing/Exploding gradients)
产生原因:在训练神经网络的时候,导数或者坡度会突变,这与深度网络中权重的设置或者层数的设置哟很大关系,权重过大或者过小会造成后续的**函数指数级进行递减或者爆炸式增长。
解决办法:对于神经网络权重值进行初始化。
2.神经网络的权重初始化
设置某层的权重矩阵为w_[l] = np.random.randn(shape)*np.sqrt(1/n_{l-1}),n_[l-1]是第l-1层神经元的数量。
(1)若**函数ReLU,则方差设置伪2/n,也可以是

2nl1

(2)tanh函数。方差设置为(Xavier)初始化

1nl1

3.如何确保反向传播的正确实现
(1)计算梯度的数值逼近
双边公差
DeepLearning.ai学习笔记——改善深层神经网络:超参数调试、正则化以及优化(二)
为什么要使用双边公差?
使用双边公差可以判断别人给你的函数g(theta),是否正确实现函数f的偏导。
(2)梯度检验
具体步骤
a. 将所有参数转换为巨大的向量数据,将矩阵W转换为向量,进行连接运算,得到theta,获得一个theta的代价函数。
b. 把dW 和db转换成新向量,用来初始化dθ,与θ具有相同的维度
c.grad check:将代价函数展开为多个θ,实现梯度检验需要进行循环执行,从而对每个[i]组成的元素进行双边误差估计:
dθapprox[i]=J(θ1,θ2,...,θi+ε)J(θ1,θ2,...,θiε)2ε
e.验证dθapproxdθ是否接近

dθapproxdθ2dθapprox2+dθ2

如果计算的方程式的值为107,则说明导数逼近有可能是正确的,若值为105,则可能存在bug,比103大的话,存在bug,要检验所有的θ项,求导是否正确。
4.梯度检验的注意事项
(1)不要再训练中使用梯度检验,只能用于调试,因为计算过程漫长
(2)算法梯度检验失败,要检查所有项,定位bug的位置
(3)在实施梯度检验的时候,如果使用正则化,请注意正则项,在计算梯度的时候已经包括了这个梯度。
(4)梯度检验不能喝dropout同时使用
(5)在随机初始化过程中,运行梯度检验,然后在训练神经网络,w和b会有一段时间远离0,要反复训练网络后,再重新运行梯度检验。