从线性到非线性模型
1、线性回归,岭回归,Lasso回归,局部加权线性回归
2、logistic回归,softmax回归,最大熵模型
3、广义线性模型
4、Fisher线性判别和线性感知机
5、三层神经网络
6、支持向量机
五、三层神经网络
一、神经单元
深度学习的发展一般分为三个阶段,感知机–>三层神经网络–>深度学习(表示学习)。早先的感知机由于采用线性模型,无法解决异或问题,表示能力受到限制。为此三层神经网络放弃了感知机良好的解释性,而引入非线性**函数来增加模型的表示能力。三层神经网络与感知机的两点不同
1)非线性**函数的引入,使得模型能解决非线性问题
2)引入**函数之后,不再会有0损失的情况,损失函数采用对数损失,这也使得三层神经网络更像是三层多元(神经单元)逻辑回归的复合

神经网络中每一个神经元都可以看作是一个逻辑回归模型,三层神经网络就是三层逻辑回归模型的复合,只是不像逻辑回归中只有一个神经元,一般输入层和隐藏层都是具有多个神经元,而输出层对应一个logistic回归单元或者softmax单元,或者一个线性回归模型。
这里对一些常用的非线性**函数做一些简单的介绍(图像,性质,导数)




sigmoid(z)=11+e−z,tanh(z)=ez−e−zez+e−z,relu(z)=max{0,z},leakyrelu(z)={αz,z<0z,z⩾0
性质:对于以上几个非线性**函数都可以看作是
{0,z<01,z⩾0 ,的一个近似。采用近似的一个重要原因是为了求导,早起常采用平滑的sigmoid和tanh函数,然而我们可以发现这两个函数在两端都存在导数极小的情况,这使得多层神经网络在训练时梯度消失,难以训练。而Relu函数则很好的解决两端导数极小的问题,也是解决神经网络梯度消失问题的一种方法。
导数:
sig(z)=11+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)−(11+e−z)2=z(1−z)
tanh(z)=ez−e−zez+e−zdz=(ez+e−z)2−(ez−e−z)2(ez+e−z)2=(ez+e−z)−(ez−e−z)(ez+e−z)2=1−z2
relu(z)=max{0,z}dz={0,1}
leakyrelu(z)=max{0,z}dz={α,1}
二、前向传播
前向传播是一个复合函数的过程,每一个神经元都是一个线性函数加一个非线性函数的复合,整个网络的结构如下:其中上标表示网络层,所以z[2]表示输出层。
向量形式:

矩阵形式:

其中线性函数还是z=wTx+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)
损失函数同样采用对数损失(二分类):
J(θ)=∑i=1m−(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))minJ(θ)(6)
三、反向传播
由于神经网络是一个多层的复合函数,前向传播就是在计算复合函数,所以反向传播就是一个链式求导过程,确定所有参数的负梯度方向,采用梯度下降的方法来更行每一层网络的参数。
1)损失函数:
∂J(θ)∂AL=−(Y1AL−(1−Y)1(1−AL))=Y−ALAL(1−AL)
2) **函数:
∂AL∂Z=AL(1−AL),∂AL∂Z=1−AL2,∂AL∂Z={1,Z≥00,Z<0
3) 线性函数:
∂Z∂W=1mA(l−1),∂Z∂b=1m,∂Z∂A(l−1)=1mW(l)
对于损失函数直接对各个变量求导如下:
∂J(θ)∂AL∂J(θ)∂Z∂J(θ)∂W(l−1)∂J(θ)∂b(l−1)∂J(θ)∂A(l−1)=Y−ALAL(1−AL)=Y−ALAL(1−AL)∗(AL(1−AL))=Y−AL,(sigmoid)=1m(Y−AL)A(l−1)T=1m(Y−AL)=WT(Y−AL)(2)
值得注意的是**函数是一个数值操作,不涉及矩阵求导,线性函数中
1m是因为
w是作用于
m个样本,所以在确定负梯度方向时需要
m个样本取均值,而对
A求导则不需要求均值。