吴恩达深度学习--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]=[W1[1]TW2[1]TW3[1]TW4[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]=[a1[1]a2[1]a3[1]a4[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[2z^{[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.youkuaiyun.com/ft_sunshine/article/details/90221691

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值