DeepLearning.AI Coursera公开课笔记(课程一第三周)DNN深度神经网络

1.神经网络概述

图 1 单个隐藏层的神经网络结构 

在上图中,x1,x2,x3为输入层,上图右下角中,x1,x2,x3右边3个圆圈代表隐藏层,而yhat左边一个节点是输出层。前向传播过程是计算yhat值,从输入层开始到隐藏层再到输出层,其中每一层都经过 z=w.T·x+b 并且激活函数a=fuc(z),并将a传入到下一层。而反向传播的过程是刚好相反,求出J值后求出输出层的da,dz,dw,db  再求出隐藏层的da,dz,dw,db,致使所有梯度求解完成。

2.神经网络的表示方法

我们在正向传播时,上一层的输入称为a',而通过上一层的输入计算该层的结果成为z,而结果经过激活函数后的值为a,所以输入层的输出被称为a[0],第一个隐藏层的计算结果为z[1]=w[1]a[0]+b[1]输出为a[1]=fuc(z[1])。

3. 神经网络多样本向量化表示方法

上一周所用的正向和反向传播方法中有两个循环,第一个是对m个样本的循环,第二个是对隐藏层节点个数的循环也就是求w1、w2,b1,b2,dw1,dw2,db1,db2。而在这节中去掉了这两个循环,将输入X的向量定义为如下所示:

 图2 m个样本X的矩阵

 图中X被定义为大小为(nx,m)其中nx是每个样本的参数个数,m是样本个数。

进而隐藏层的w也升级为如下所示列向量:

 W=[w1,w2,..,w(nw)]

其中w1,w2,..w(nw)分别为长度为nx的列向量,nw为隐藏层节点数个数,所以其shape为(nw,nx)

因此W与X的叉乘结果后的shape为(nw,m),因此b的shape也为(nw,m),最后Z=WX+B的结果Z的shape为(nw,m)可以发现如输入层的(nx,m)结构类似,只是列数变为隐藏层的个数nw。最后再将求得的记过Z通过激活函数便可得出隐藏层的输出A。经过向量化,只需要一步便可以完成隐藏层的前向传播,而不需要进行两次for循环。

4.激活函数

1)sigmoid函数 f(x)=1/(1+exp(-x))

2)ReLU函数 f(x)=x(x>=0)f(x)=0(x<0)

3)Leaky ReLU函数f(x)=x (x>=0) f(x)=0.0001x (x<0)

4)tanh函数 f(x)=(exp(x)-exp(-x))/(exp(x)+exp(-x))

图3 各种激活函数的图形

图中可以看出tanh和sigmoid在z比较大或者比较小的时候,剃度下降很慢,所以一般在影藏层用ReLU或者Leaky ReLU函数作为激活函数,而在做二元输出层时,可以使用sgmoid函数。

4.为什么要使用激活函数?

如果不使用激活函数,以两层为例

a1=z1=w1*X0+b1    公式1

a2=z2=w2*A1+b2    公式2

将公式1代入公式2得到

a2=w2·w1X0+w2·b1+b2  公式3

那么w2与w1的乘机就组成了新的w‘,w2·b1+b2就组成新的b’,如下:

a2=w‘X0+b’  公式4

这样两层的网络其实最后演算结果得出的效果与一层相同,所以如果没有激活函数则神经网络的多层效果会消失。

5.激活函数的导数

1.sigmoid导数:a(1-a)

2.tanh导数:1-sqrt(a)

3.ReLU导数:1 (x>=0) 0(x<0)

4 Leaky ReLU导数:1 (x>=0) 0.0001(x<0)

6.一个隐藏层的神经网路梯度下降

图4 一个隐藏层的神经网络梯度下降公式 

第一步求出第二层(输出层)的dZ2:

dZ2:=A2-Y

第二步利用第一层的输入A1和dZ2求出第二层的dW2:

dW2=1/m*dZ2·A1.T

第三步求出第二层的db2:

db2=1/m*np.sum(dZ2,axis=1,keepdims=True)

第四步利用第一层的输出的导数g1'(Z1)和第二层的W2以及第二层的dZ2求出第一层(隐藏层)的dZ1(注意*代表矩阵每个元素对应相乘,·代表矩阵乘法,这里是求A1=g1(z1)J对z1的导数,参见复合函数求导):

dZ1=W2.T·dZ2 * g1'(Z1)

第五步利用dZ1求dW1

第六步利用dZ1求db1

7.随机初始化参数

图5 如果将两个参数设置成相同+的后果 

如果将w均设置成为0,b也设置为0,则在同一层内a11与a12会作相同的运算,即正向传播和反向传播都将会是一样的。所以这将会导致a11与a12效果相同,则该层的所有节点其实是等效的,也就是即使再多的节点也对神经网络没有提升。因此使用下列语句,初始化参数w,将会防止这个问题:

w=np.random.randn((m,nx))*0.01

最后乘以0.01的原因是,激活函数有时候是sigmoid函数,如果w设置过大,sigmoid在离原点比较远时梯度下降比较慢,将会导致梯度下降的学习效率变低。

8.编程作业

1)利用float(x)可将x从1x1的数组强制转化为float数

2)np.power(A1, 2),np幂函数,这里是将A2平方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值