【机器学习】三层神经网络

来源 | AI小白入门
作者 | 文杰
编辑 | yuquanle
原文链接

在这里插入图片描述

三层神经网络

1. 神经单元

​ 深度学习的发展一般分为三个阶段,感知机–>三层神经网络–>深度学习(表示学习)。早先的感知机由于采用线性模型,无法解决异或问题,表示能力受到限制。为此三层神经网络放弃了感知机良好的解释性,而引入非线性激活函数来增加模型的表示能力。三层神经网络与感知机的两点不同

1)非线性激活函数的引入,使得模型能解决非线性问题;

2)引入激活函数之后,不再会有 0 0 0损失的情况,损失函数采用对数损失,这也使得三层神经网络更像是三层多元(神经单元)逻辑回归的复合;

神经网络中每一个神经元都可以看作是一个逻辑回归模型,三层神经网络就是三层逻辑回归模型的复合,只是不像逻辑回归中只有一个神经元,一般输入层和隐藏层都是具有多个神经元,而输出层对应一个logistic回归单元或者softmax单元,或者一个线性回归模型。

这里对一些常用的非线性激活函数做一些简单的介绍(图像,性质,导数)

s i g m o i d ( z ) = 1 1 + e − z , t a n h ( z ) = e z − e − z e z + e − z , r e l u ( z ) = m a x { 0 , z } , l e a k y r e l u ( z ) = { α z , z < 0 z , z ⩾ 0 sigmoid(z)=\frac{1}{1+e^{-z}},tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}},relu(z)=max \left\{0,z\right \},leaky relu(z)=\left\{\begin{matrix} \alpha z,z<0\\ z ,z\geqslant 0 \end{matrix}\right. sigmoid(z)=1+ez1,tanh(z)=ez+ezezez,relu(z)=max{0,z},leakyrelu(z)={αz,z<0z,z0

性质:对于以上几个非线性激活函数都可以看作是 { 0 , z < 0 1 , z ⩾ 0 \left\{\begin{matrix} 0,z<0\\ 1,z\geqslant 0\end{matrix}\right. {0,z<01,z0 ,的一个近似。采用近似的一个重要原因是为了求导,早起常采用平滑的sigmoid和tanh函数,然而我们可以发现这两个函数在两端都存在导数极小的情况,这使得多层神经网络在训练时梯度消失,难以训练。而Relu函数则很好的解决两端导数极小的问题,也是解决神经网络梯度消失问题的一种方法。

导数
s i g ( z ) =  ⁣ 1 1 + e − z , d ( z ) =  ⁣ −  ⁣ − e − z ( 1 + e − z ) 2 =  ⁣ e − z + 1 ( 1 + e − z ) 2  ⁣ −  ⁣ 1 ( 1 + e − z ) 2 =  ⁣ 1 ( 1 + e − z )  ⁣ −  ⁣ ( 1 1 + e − z ) 2 =  ⁣ z ( 1 − z ) sig(z)=\!\frac{1}{1+e^{-z}},d(z)=\!-\!\frac{-e^{-z}}{(1+e^{-z})^{2}} =\!\frac{e^{-z}+1}{(1+e^{-z})^{2}}\!-\!\frac{1}{(1+e^{-z})^{2}} =\!\frac{1}{(1+e^{-z})}\!-\!\left(\frac{1}{1+e^{-z}}\right)^{2} =\!z(1-z) sig(z)=1+ez1,d(z)=(1+ez)2ez=(1+ez)2ez+1(1+ez)21=(1+ez)1(1+ez1)2=z(1z)

t a n h ( z ) = e z − e − z e z + e − z d z = ( e z + e − z ) 2 − ( e z − e − z ) 2 ( e z + e − z ) 2 = ( e z + e − z ) − ( e z − e − z ) ( e z + e − z ) 2 = 1 − z 2 tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} dz=\frac{\left(e^{z}+e^{-z}\right)^{2}-\left(e^{z}-e^{-z}\right)^{2}}{(e^{z}+e^{-z})^{2}} =\frac{\left(e^{z}+e^{-z}\right)-\left(e^{z}-e^{-z}\right)}{(e^{z}+e^{-z})^{2}} =1-z^{2} tanh(z)=ez+ezezezdz=(ez+ez)2(ez+ez)2(ezez)2=(ez+ez)2(ez+ez)(ezez)=1z2

r e l u ( z ) = m a x { 0 , z } d z = { 0 , 1 } relu(z)=max \left\{0,z\right \} dz= \left\{0,1\right \} relu(z)=max{0,z}dz={0,1}

l e a k y r e l u ( z ) = m a x { 0 , z } d z = { α , 1 } leakyrelu(z)=max \left\{0,z\right \} dz= \left\{\alpha,1\right \} leakyrelu(z)=max{0,z}dz={α,1}

2. 前向传播

​ 前向传播是一个复合函数的过程,每一个神经元都是一个线性函数加一个非线性函数的复合,整个网络的结构如下:其中上标表示网络层,所以 z [ 2 ] z^{[2]} z[2]表示输出层。

向量形式:

矩阵形式:

其中线性函数还是 z = w T x + b z=w^{T}x+b z=wTx+b,不过要注意的是这里由于每一层不仅一个神经元,所以逻辑回归中的向量 w w w则扩展为矩阵,表示有多个神经元(也正是因为多个神经元,导致神经网络具有提取特征的能力)。非线性函数则可以有以下选择,目前来看Relu函数具有一定的优势。

其中值得注意的是矩阵的行列,深度学习常采用一列表示一个样本,所以网络中数据矩阵的大小如下:
X = ( n , m ) , Y = ( 1 , m ) , W = ( n ( l ) , n ( l − 1 ) ) , b = ( n ( l ) , 1 ) , Z = ( n ( l ) , m ) , A = ( n ( l ) , m ) X=(n,m),Y=(1,m),W=(n^{(l)},n^{(l-1)}),b=(n^{(l)},1),Z=(n^{(l)},m),A=(n^{(l)},m) X=(n,m),Y=(1,m),W=(n(l),n(l1)),b=(n(l),1),Z=(n(l),m),A=(n(l),m)
损失函数同样采用对数损失(二分类):
J ( θ ) = ∑ i = 1 m − ( y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ) min ⁡ J ( θ ) J(\theta)=\sum_{i=1}^{m}-\left ( y^{(i)}log(h_{\theta}(x^{(i)}))+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))\right) \\ \min J(\theta) J(θ)=i=1m(y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i))))minJ(θ)

3. 反向传播

​ 由于神经网络是一个多层的复合函数,前向传播就是在计算复合函数,所以反向传播就是一个链式求导过程,确定所有参数的负梯度方向,采用梯度下降的方法来更行每一层网络的参数。

​ 1)损失函数:
∂ J ( θ ) ∂ A L = − ( Y 1 A L − ( 1 − Y ) 1 ( 1 − A L ) ) = Y − A L A L ( 1 − A L ) \frac{\partial J(\theta)}{\partial AL}= -\left( Y \frac{1}{AL}-(1-Y) \frac{1}{(1-AL)}\right)=\frac{Y-AL}{AL(1-AL)} ALJ(θ)=(YAL1(1Y)(1AL)1)=AL(1AL)YAL
​ 2) 激活函数:
∂ A L ∂ Z = A L ( 1 − A L ) , ∂ A L ∂ Z = 1 − A L 2 , ∂ A L ∂ Z = { 1 , Z ≥ 0 0 , Z < 0 \frac{\partial AL}{\partial Z}= AL(1-AL) , \frac{\partial AL}{\partial Z}= 1-AL^{2} , \frac{\partial AL}{\partial Z}=\left\{\begin{matrix} 1,Z\geq 0\\ 0,Z<0 \end{matrix}\right. ZAL=AL(1AL),ZAL=1AL2,ZAL={1,Z00,Z<0
​ 3) 线性函数:
∂ Z ∂ W = 1 m A ( l − 1 ) , ∂ Z ∂ b = 1 m , ∂ Z ∂ A ( l − 1 ) = 1 m W ( l ) \frac{\partial Z}{\partial W}= \frac{1}{m}A^{(l-1)},\frac{\partial Z}{\partial b}= \frac{1}{m},\frac{\partial Z}{\partial A^{(l-1)}}= \frac{1}{m}W^{(l)} WZ=m1A(l1)bZ=m1,A(l1)Z=m1W(l)
​ 对于损失函数直接对各个变量求导如下:
∂ J ( θ ) ∂ A L = Y − A L A L ( 1 − A L ) ∂ J ( θ ) ∂ Z = Y − A L A L ( 1 − A L ) ∗ ( A L ( 1 − A L ) ) = Y − A L , ( s i g m o i d ) ∂ J ( θ ) ∂ W ( l − 1 ) = 1 m ( Y − A L ) A ( l − 1 ) T ∂ J ( θ ) ∂ b ( l − 1 ) = 1 m ( Y − A L ) ∂ J ( θ ) ∂ A ( l − 1 ) = W T ( Y − A L ) \frac{\partial J(\theta)}{\partial AL}=\frac{Y-AL}{AL(1-AL)}\\ \frac{\partial J(\theta)}{\partial Z}= \frac{Y-AL}{AL(1-AL)}*(AL(1-AL))=Y-AL ,(sigmoid)\\ \frac{\partial J(\theta)}{\partial W^{(l-1)}}=\frac{1}{m}(Y-AL)A^{(l-1)^{T}}\\ \frac{\partial J(\theta)}{\partial b^{(l-1)}}=\frac{1}{m}(Y-AL)\\ \frac{\partial J(\theta)}{\partial A^{(l-1)}}=W^{T}(Y-AL) ALJ(θ)=AL(1AL)YALZJ(θ)=AL(1AL)YAL(AL(1AL))=YAL,(sigmoid)W(l1)J(θ)=m1(YAL)A(l1)Tb(l1)J(θ)=m1(YAL)A(l1)J(θ)=WT(YAL)
值得注意的是激活函数是一个数值操作,不涉及矩阵求导,线性函数中 1 m \frac{1}{m} m1是因为 w w w是作用于 m m m个样本,所以在确定负梯度方向时需要 m m m个样本取均值,而对 A A A求导则不需要求均值。

欢迎关注【AI小白入门】,这里分享Python、机器学习、深度学习、自然语言处理、人工智能等技术,关注前沿技术,求职经验等,陪有梦想的你一起成长。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值