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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vivizhangyan/article/details/81222317

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,也可以是

2 n l 1

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

1 n l 1

3.如何确保反向传播的正确实现
(1)计算梯度的数值逼近
双边公差
这里写图片描述
为什么要使用双边公差?
使用双边公差可以判断别人给你的函数g(theta),是否正确实现函数f的偏导。
(2)梯度检验
具体步骤
a. 将所有参数转换为巨大的向量数据,将矩阵W转换为向量,进行连接运算,得到theta,获得一个theta的代价函数。
b. 把dW 和db转换成新向量,用来初始化dθ,与θ具有相同的维度
c.grad check:将代价函数展开为多个θ,实现梯度检验需要进行循环执行,从而对每个[i]组成的元素进行双边误差估计:
d θ a p p r o x [ i ] = J ( θ 1 , θ 2 , . . . , θ i + ε ) J ( θ 1 , θ 2 , . . . , θ i ε ) 2 ε
e.验证 d θ a p p r o x d θ 是否接近

d θ a p p r o x d θ 2 d θ a p p r o x 2 + d θ 2

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

猜你喜欢

转载自blog.csdn.net/vivizhangyan/article/details/81222317