从线性到非线性模型-三层神经网络

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010865478/article/details/82691984

从线性到非线性模型

1、线性回归,岭回归,Lasso回归,局部加权线性回归
2、logistic回归,softmax回归,最大熵模型
3、广义线性模型
4、Fisher线性判别和线性感知机
5、三层神经网络
6、支持向量机

五、三层神经网络

一、神经单元

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

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

2)引入激活函数之后,不再会有 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

性质:对于以上几个非线性激活函数都可以看作是 { 0 , z < 0 1 , z 0 ,的一个近似。采用近似的一个重要原因是为了求导,早起常采用平滑的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 )

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

r e l u ( z ) = m a x { 0 , z } d z = { 0 , 1 }

l e a k y r e l u ( z ) = m a x { 0 , z } d z = { α , 1 }

二、前向传播

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

向量形式:

这里写图片描述

矩阵形式:
这里写图片描述

其中线性函数还是 z = w T x + b ,不过要注意的是这里由于每一层不仅一个神经元,所以逻辑回归中的向量 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 )

损失函数同样采用对数损失(二分类):
(6) J ( θ ) = i = 1 m ( y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 y ( i ) ) l o g ( 1 h θ ( x ( i ) ) ) ) min J ( θ )

三、反向传播

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

​ 1)损失函数:

J ( θ ) A L = ( Y 1 A L ( 1 Y ) 1 ( 1 A L ) ) = Y A L A L ( 1 A L )

​ 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

​ 3) 线性函数:
Z W = 1 m A ( l 1 ) Z b = 1 m , Z A ( l 1 ) = 1 m W ( l )

​ 对于损失函数直接对各个变量求导如下:
(2) 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 )

值得注意的是激活函数是一个数值操作,不涉及矩阵求导,线性函数中 1 m 是因为 w 是作用于 m 个样本,所以在确定负梯度方向时需要 m 个样本取均值,而对 A 求导则不需要求均值。

猜你喜欢

转载自blog.csdn.net/u010865478/article/details/82691984