2.1吴恩达深度学习笔记之从参数初始化,正则化,梯度检验优化神经网络结构

1.关于参数的初始化

    1.1 避免W的零初始化,W初始化为零会导致对称性,即不同神经元做的工作类似,从削弱神经元的影响,在最极端的情况下即所有层的Wl都初始化为零,则原神经网络退化为线性回归,这是个非常不好的现象,所以通常对W使用随机初始化以打破对称性,而b可以零初始化因为b的影响较小

    1.2避免W的初始化值过大,会导致神经网络表现不好,如cost下降慢等现象

    1.3He初始化非常适用于以RelU为主要激励函数的神经网络架构,He初始化的具体操作为:加一个尾项

for l in range(1, L + 1):
        ### START CODE HERE ### (≈ 2 lines of code)
        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))

2关于正则化

正则化主要用于减小high variance即高偏差的现象,在建立一个神经网络后,若训练集的表现很好但验证机表现很差,则说明出现了过拟合现象,引起了high variance,通过正则化可以较好的减轻影响

2.1 L2正则化

L2正则化是在代价函数后加一个正则项,具体形式见手写笔记,而在code实现过程中,计算cost需要加一项:

    cross_entropy_cost = compute_cost(A3, Y) # This gives you the cross-entropy part of the cost

    ### START CODE HERE ### (approx. 1 line)
    L2_regularization_cost = (1./m*lambd/2)*(np.sum(np.square(W1)) + np.sum(np.square(W2)) + np.sum(np.square(W3)))
    ### END CODER HERE ###

    cost = cross_entropy_cost + L2_regularization_cost

在计算梯度集backward——propagation时有需要添加尾项:

 dW3 = 1./m * np.dot(dZ3, A2.T) + lambd/m * W3

2.2dropout正则化

dropout的原理是使神经元以一定概率随机不起作用,从而减小对某一特征的依赖性,以减小过拟合

使用dropout正则化时前向传播计算A和反向传播计算dA乘上相应的dropout矩阵并除以keep_prob保证Z的期望值不变

具体操作如下:

前向传播:

    Z1=np.dot(W1,X)+b1

    A1=relu(Z1)
    D1=np.random.randn(A1.shape[0],A1.shape[1])<keep_prob
    A1=np.multiply(A1,D1)
    A1=A1/keep_prob

反向传播:

dA1 = np.dot(W2.T, dZ2)

dA1 = dA1 * D1

 dA1 = dA1 / keep_prob

3关于梯度检验

梯度检验如是为了减少bug的出现,验证梯度计算过程是否正确

猜你喜欢

转载自blog.csdn.net/qq_40103460/article/details/80182723
今日推荐