吴恩达深度学习--2.浅层神经网络

1.看了浅层神经网络和深层神经网络,两种一块整理了一下。
2.正向传播和反向传播的具体计算过程看了一篇博客
3.吴恩达深度学习的第二周课后作业做了一半。

首先,从整体上来说,神经网络只是比逻辑回归多了一层中间的隐藏层,与逻辑回归计算一致,只是重复了两次。

第一层:从输入层到隐藏层:

z [ 1 ] = W [ 1 ] x + b [ 1 ] z^{[1]} = W^{[1]}x+b^{[1]} z[1]=W[1]x+b[1]

a [ 1 ] = σ ( z [ 1 ] ) a^{[1]}=σ(z^{[1]}) a[1]=σ(z[1])

第二层:从隐藏层到输出层

z [ 2 ] = a [ 1 ] x + b [ 2 ] z^{[2]} = a^{[1]}x+b^{[2]} z[2]=a[1]x+b[2]

a [ 2 ] = σ ( z [ 2 ] ) a^{[2]} = σ(z^{[2]}) a[2]=σ(z[2])

方括号上标[i]表示当前所处的层数,圆括号上标(i)表示第i个样本

通常输入层记为第0层,所以单隐层神经网络也记为两层神经网络

关于隐藏层对应的权重和常数项b:
第i层的w的行为该层神经元个数,列为上层神经元个数
第i层的b的行为该层神经元个数,列始终为1

接下来开始详细推导神经网络计算过程:

首先是单个样本:
在这里插入图片描述
z [ 1 ] = W [ 1 ] x + b [ 1 ] z^{[1]}=W^{[1]}x+b^{[1]} z[1]=W[1]x+b[1]

a [ 1 ] = σ ( z [ 1 ] ) a^{[1]}=σ(z^{[1]}) a[1]=σ(z[1])

z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] z^{[2]}=W^{[2]}a^{[1]}+b^{[2]} z[2]=W[2]a[1]+b[2]

a [ 2 ] = σ ( z [ 2 ] ) a^{[2]}=σ(z^{[2]}) a[2]=σ(z[2])
其中 W [ 1 ] W^{[1]} W[1]为:
W [ 1 ] = [ W 1 [ 1 ] T W 2 [ 1 ] T W 3 [ 1 ] T W 4 [ 1 ] T ] W^{[1]}=\begin{bmatrix} {W^{[1]T}_1}\\ {W^{[1]T}_2}\\ {W^{[1]T}_3}\\ {W^{[1]T}_4}\\ \end{bmatrix} W[1]=W1[1]TW2[1]TW3[1]TW4[1]T
a [ 1 ] a^{[1]} a[1]为:
a [ 1 ] = [ a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] a 4 [ 1 ] ] a^{[1]}=\begin{bmatrix} {a^{[1]}_1}\\ {a^{[1]}_2}\\ {a^{[1]}_3}\\ {a^{[1]}_4}\\ \end{bmatrix} a[1]=a1[1]a2[1]a3[1]a4[1]

如果是m个样本:
使用for循环求解正向输出:
for i = 1 to m:
z [ 1 ] ( i ) = W [ 1 ] x ( i ) + b [ 1 ] z^{[1](i)}=W^{[1]}x^{(i)}+b^{[1]} z[1](i)=W[1]x(i)+b[1]
a [ 1 ] ( i ) = σ ( z [ 1 ] ( i ) ) a^{[1](i)}=σ(z^{[1](i)}) a[1](i)=σ(z[1](i))
z [ 2 ] ( i ) = W [ 2 ] x ( i ) + b [ 2 z^{[2](i)}=W^{[2]}x^{(i)}+b^{[2} z[2](i)=W[2]x(i)+b[2
a [ 2 ] ( i ) = σ ( z [ 2 ] ( i ) ) a^{[2](i)}=σ(z^{[2](i)}) a[2](i)=σ(z[2](i))

使用矩阵的话:
Z [ 1 ] = W [ 1 ] X + b [ 1 ] Z^{[1]}=W^{[1]}X+b^{[1]} Z[1]=W[1]X+b[1]

A [ 1 ] = σ ( Z [ 1 ] ) A^{[1]}=σ(Z^{[1]}) A[1]=σ(Z[1])

Z [ 2 ] = W [ 2 ] A [ 1 ] + b [ 2 ] Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]} Z[2]=W[2]A[1]+b[2]

A [ 2 ] = σ ( Z [ 2 ] ) A^{[2]}=σ(Z^{[2]}) A[2]=σ(Z[2])

X的维度为(n,m), Z [ 1 ] Z^{[1]} Z[1]的维度为(4,m),4为隐藏神经元个数。
A [ 1 ] A^{[1]} A[1]的维度与 Z [ 1 ] Z^{[1]} Z[1]相同; Z [ 2 ] Z^{[2]} Z[2] A [ 2 ] A^{[2]} A[2]的维度均为(1,m)。对上面这四个矩阵来说,均可以这样来理解:行表示神经元个数,列表示样本数目m。

激活函数
在这里插入图片描述
sigmoid函数和tanh函数比较:
对于隐藏层的激活函数,一般来说,tanh函数要比sigmoid函数表现更好一些。因为tanh函数的取值范围在[-1,+1]之间,隐藏层的输出被限定在[-1,+1]之间,可以看成是在0值附近分布,均值为0。这样从隐藏层到输出层,数据起到了归一化(均值为0)的效果。
因此,隐藏层的激活函数,tanh比sigmoid更好一些。而对于输出层的激活函数,因为二分类问题的输出取值为{0,+1},所以一般会选择sigmoid作为激活函数。
缺点:当x很大时,梯度会很小,梯度下降算法效率很低。
解决:出现了ReLu函数:Z大于0时梯度始终为1,缺点是小于0时梯度为0,但实际中影响不是都很大。

总结:一般会使用ReLu函数作为激活函数

为什么需要非线性的激活函数
如果采用线性激活函数,事实上神经网络与直接使用线性模型并无差别。即便是包含多层隐藏层的神经网络,最终的输出仍然是输入x的线性模型。这样的话神经网络就没有任何作用了。
如果隐藏层使用线性激活函数,而输出层使用非线性激活函数,那么将与逻辑回归模型一样,失去了多层神经网络的意义。

随机初始化
神经元的权重w不可以全部初始化为0,因为这样会使每个神经元都会有相同的结果,设置多个隐藏层将毫无意义。
应该随机初始化为很小的数。
之所以初始化为很小的数是因为在使用sigmoid函数或tanh激活函数时梯度较大,可以更快达到全局最优解。

反向传播计算过程参考博客:
https://blog.csdn.net/ft_sunshine/article/details/90221691

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值