神经网络与深度学习(四)续

1 神经网络与深度学习

1.4 浅层神经网络

上接:https://blog.csdn.net/qq_41556318/article/details/88014549

1.4.9 Gradient descent for neural networks

  接下来看一下在神经网络中如何进行梯度计算。
  仍然是浅层神经网络,包含的参数为 W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] {W^{[1]}},{b^{[1]}},{W^{[2]}},{b^{[2]}} W[1],b[1],W[2],b[2]。令输入层的特征向量个数 n x = n [ 0 ] {n_x} = {n^{[0]}} nx=n[0] ,隐藏层神经元个数为 n [ 1 ] {n^{[1]}} n[1] ,输出层神经元个数为 n [ 2 ] = 1 {n^{[2]}}{\rm{ = }}1 n[2]=1 。则 W [ 1 ] {W^{[1]}} W[1]的维度为( n [ 1 ] {n^{[1]}} n[1] , n [ 0 ] {n^{[0]}} n[0] ), b [ 1 ] {b^{[1]}} b[1]的维度为( n [ 1 ] {n^{[1]}} n[1],1), W [ 2 ] {W^{[2]}} W[2]的维度为( n [ 2 ] {n^{[2]}} n[2] , n [ 1 ] {n^{[1]}} n[1]), b [ 2 ] {b^{[2]}} b[2] 的维度为( n [ 2 ] {n^{[2]}} n[2],1)。
  该神经网络正向传播过程为: 在这里插入图片描述
其中,g(⋅)表示激活函数。
  反向传播是计算导数(梯度)的过程,这里先列出来Cost function对各个参数的梯度: 在这里插入图片描述
  反向传播的具体推导过程我们下一部分再进行详细说明。

1.4.10 Backpropagation intuition(optional)

  我们仍然使用计算图的方式来推导神经网络反向传播过程。记得之前介绍逻辑回归时,我们就引入了计算图来推导正向传播和反向传播,其过程如下图所示: 在这里插入图片描述
  由于多了一个隐藏层,神经网络的计算图要比逻辑回归的复杂一些,如下图所示。对于单个训练样本,正向过程很容易,反向过程可以根据梯度计算方法逐一推导。 在这里插入图片描述
在这里插入图片描述
  总结一下,浅层神经网络(包含一个隐藏层),m个训练样本的正向传播过程和反向传播过程分别包含了6个表达式,其向量化矩阵形式如下图所示: 在这里插入图片描述

1.4.11 Random Initialization

  神经网络模型中的参数权重W是不能全部初始化为零的,接下来我们分析一下原因。
  举个简单的例子,一个浅层神经网络包含两个输入,隐藏层包含两个神经元。如果权重 W [ 1 ] {W^{[1]}} W[1] W [ 2 ] {W^{[2]}} W[2]都初始化为零,即: 在这里插入图片描述
  这样使得隐藏层第一个神经元的输出等于第二个神经元的输出,即 a 1 [ 1 ] = a 2 [ 1 ] a_1^{[1]} = a_2^{[1]} a1[1]=a2[1]。经过推导得到 d z 1 [ 1 ] = d z 2 [ 1 ] dz_1^{[1]} = dz_2^{[1]} dz1[1]=dz2[1],以及 d W 1 [ 1 ] = d W 2 [ 1 ] dW_1^{[1]} = dW_2^{[1]} dW1[1]=dW2[1] 。因此,这样的结果是隐藏层两个神经元对应的权重行向量 W 1 [ 1 ] W_1^{[1]} W1[1] W 2 [ 1 ] W_2^{[1]} W2[1]每次迭代更新都会得到完全相同的结果, W 1 [ 1 ] W_1^{[1]} W1[1]始终等于 W 2 [ 1 ] W_2^{[1]} W2[1] ,完全对称。这样隐藏层设置多个神经元就没有任何意义了。值得一提的是,参数b可以全部初始化为零,并不会影响神经网络训练效果。 在这里插入图片描述
  我们把这种权重W全部初始化为零带来的问题称为symmetry breaking problem。解决方法也很简单,就是将W进行随机初始化(b可初始化为零)。python里可以使用如下语句进行W和b的初始化:

w_1 = np.random.randn((2, 2)) * 0.01
b_1 = np.zero((2, 1))
w_2 = np.random.randn((1, 2)) * 0.01
b_2 = 0

  这里我们将 W 1 [ 1 ] W_1^{[1]} W1[1] W 2 [ 1 ] W_2^{[1]} W2[1]乘以0.01的目的是尽量使得权重W初始化比较小的值。之所以让W比较小,是因为如果使用sigmoid函数或者tanh函数作为激活函数的话,W比较小,得到的|z|也比较小(靠近零点),而零点区域的梯度比较大,这样能大大提高梯度下降算法的更新速度,尽快找到全局最优解。如果W较大,得到的|z|也比较大,附近曲线平缓,梯度较小,训练过程会慢很多。
  当然,如果激活函数是ReLU或者Leaky ReLU函数,则不需要考虑这个问题。但是,如果输出层是sigmoid函数,则对应的权重W最好初始化到比较小的值。

1.4.12 Summary

  本节课主要介绍了浅层神经网络。首先,我们简单概述了神经网络的结构:包括输入层,隐藏层和输出层。然后,我们以计算图的方式推导了神经网络的正向输出,并以向量化的形式归纳出来。接着,介绍了不同的激活函数并做了比较,实际应用中根据不同需要选择合适的激活函数。激活函数必须是非线性的,不然神经网络模型起不了任何作用。然后,我们重点介绍了神经网络的反向传播过程以及各个参数的导数推导,并以矩阵形式表示出来。最后,介绍了权重随机初始化的重要性,必须对权重W进行随机初始化操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值