深度学习的神经网络之多层前馈神经网络
1. 简介
给定一组神经元,所以说我们可以通过以神经元节点来构建一个神经网络,不同的神经网络有着不同的网络连接拓扑结构。一种比较直接的拓扑结构是前馈神经网络(Feedforward Neural Network,FNN)。最简单的前馈神经网络是三层的BP神经网络,在前馈神经网络中,各个神经元分别属于不同的层。每一层神经元接受上一层的神经元的信号,并产生信号输出到下一层神经网络中。前馈神经网络包含有输入层、中间隐藏层、输出层。前馈神经网络也叫做多层感知层(Multilayer Perceptron,MLP)。
前馈神经网络的网络结构如下所示:
2. 推导方法
2.1 符号定义与表示
在推导公式之前,我们约定以下的表示符号:
- L L L:表示神经网络的层数;
- m ( l ) m^{(l)} m(l):表示第 l l l层神经元的个数;
- f l ( ⋅ ) f_{l}(\cdot) fl(⋅):表示第 l l l层神经元的激活函数;
- W ( l ) ∈ R m ( l ) × m ( l − 1 ) W^{(l)}\in \mathbb{R}^{m^{(l)}\times m^{(l-1)}} W(l)∈Rm(l)×m(l−1):表示第 l − 1 l-1 l−1层到 l l l层的权重矩阵;
- b ( l ) ∈ R m ( l ) b^{(l)}\in \mathbb{R}^{m^{(l)}} b(l)∈Rm(l):表示第 l − 1 l-1 l−1层到 l l l层的偏置;
- z ( l ) ∈ R m ( l ) z^{(l)}\in \mathbb{R}^{m^{(l)}} z(l)∈Rm(l):表示第 l l l层神经元的净输入(净活性值);
- a ( l ) ∈ R m ( l ) a^{(l)}\in \mathbb{R}^{m^{(l)}} a(l)∈Rm(l):表示第 l l l层神经元的输出(活性值)。
- x x x:输入样本向量
- y ^ \hat y y^:样本向量标签
- y y y:输出向量
2.2 前向传播过程(forward)
前馈神经网络中每一层的传播过程通过以下公式进行传播:
z ( l ) = W ( l ) ⋅ a ( l − 1 ) + b ( l ) z^{(l)}=W^{(l)}\cdot a^{(l-1)}+b^{(l)} z(l)=W(l)⋅a(l−1)+b(l)
a ( l ) = f l ( z ( l ) ) a^{(l)}=f_{l}(z^{(l)}) a(l)=fl(z(l))
上面的两个公式可以合并为
z ( l ) = W ( l ) ⋅ f l − 1 ( z ( l − 1 ) ) + b ( l ) z^{(l)}=W^{(l)}\cdot f_{l-1}(z^{(l-1)})+b^{(l)} z(l)=W(l)⋅fl−1(z(l−1))+b(l)
或者是
a ( l ) = f l ( W ( l ) ⋅ a ( l − 1 ) + b ( l ) ) a^{(l)}=f_{l}(W^{(l)}\cdot a^{(l-1)}+b^{(l)}) a(l)=fl(W(l)⋅a(l−1)+b(l))
所以前馈神经网络通过递推公式逐层传递信息,从而得到最后的网络输出 z ( L ) z^{(L)} z(L)。所以说整个网络可以看作一个符合复合函数 ϕ ( x ; W , b ) \phi(\pmb x;\pmb W,\pmb b) ϕ(xxx;WWW,bbb),其中 a ( 0 ) = x a^{(0)}=\pmb x a(0)=xxx,第 L L L层的输出 z ( L ) = y z^{(L)}=\pmb y z(L)=yyy。其中 W \pmb W WWW和 b \pmb b bbb分别是网络中的权重矩阵值和偏置矩阵。
2.3 参数学习过程
在深度学习中,模型目标构建的问题一般分为两种问题,即分类学习过程和回归学习过程,其中损失函数在深度学习的过程中有着重要的地位。一般地,在分类学习过程中常常使用交叉熵损失函数,回归学习中常常使用均方差函数损失函数。
训练集 D = { ( x ( n ) , y ^ ( n ) ) } n = 1 N D=\{(x^{(n)},\hat y^{(n)})\}_{n=1}^{N} D={
(x(n),y^(n))}n=1N,将样本值 x ( n ) x^{(n)} x(n)输入给前馈神经网络,得到的网络输出为 y ( n ) y^{(n)} y(n),其中在数据集 D D D上的结构化风险函数为:
R ( W , b ) = 1 N ∑ n = 1 N L ( y ( n ) , y ^ ( n ) ) + λ 2 ∣ ∣ W ∣ ∣ F 2 R(W,b)=\frac{1}{N}\sum\limits_{n=1}^{N}L(y^{(n)},\hat y^{(n)})+\frac{\lambda}{2}||W||_{F}^{2} R(W,b)=N1n=1∑NL(y(n),y^(n))+2λ∣∣W∣∣F2
其中 W W W和 b b b分别表示网络中所有的权重矩阵和偏置向量;超参数 λ > 0 \lambda>0 λ>0, ∣ ∣ W ∣ ∣ F 2 ||W||_{F}^{2} ∣∣W∣∣F2用来防止过拟合问题。这里的 ∣ ∣ W ∣ ∣ F 2 ||W||_{F}^{2} ∣∣W∣∣F2一般使用 Frobenius \text{Frobenius} Frobenius范数:
∣ ∣ W ∣ ∣ F 2 = ∑ l = 1 L ∑ i = 1 m ( l ) ∑ j = 1 m ( l − 1 ) ( w i j ( l ) ) 2 ||W||_{F}^{2}=\sum\limits_{l=1}^{L}\sum_{i=1}^{m^{(l)}}\sum_{j=1}^{m^{(l-1)}}(w_{ij}^{(l)})^{2} ∣∣W∣∣F2=l=1∑Li=1∑m(l)j=1∑m(l−1)(wij(l))2
有了学习准则和训练样本,网络参数可以通过使用梯度下降的算法来进行学习。其中在梯度下降方法的每次迭代过程中,第 l l l层的参数 W ( l ) W^{(l)} W(l)和 b ( l ) b^{(l)} b(l)参数更新方式为
W ( l ) = W ( l ) − α ∂ R ( W , b ) ∂ W ( l ) = W ( l ) − α ( 1 N ∑ n = 1 N ∂ L ( y ( n ) , y ^ ( n ) ) ∂ W ( l ) + λ W ( l ) ) W^{(l)}=W^{(l)}-\alpha\frac{\partial R(W,b)}{\partial W^{(l)}}\\ =W^{(l)}-\alpha(\frac{1}{N}\sum\limits_{n=1}^{N}\frac{\partial L(y^{(n)},\hat y^{(n)})}{\partial W^{(l)}}+\lambda W^{(l)}) W(l)=W(l)−α∂W(l)∂R(W,b)=W(l)−α(N1n=1∑N∂W(l)∂L(y(n),y^(n))+λW(l))
b ( l ) = b ( l ) − α ∂ R ( W , b ) ∂ b ( l ) = b ( l ) − α ( 1 N ∑ n = 1 N ∂ L ( y ( n ) , y ^ ( n ) ) ∂ b ( l ) ) b^{(l)}=b^{(l)}-\alpha\frac{\partial R(W,b)}{\partial b^{(l)}} \\=b^{(l)}-\alpha(\frac{1}{N}\sum\limits_{n=1}^{N}\frac{\partial L(y^{(n)},\hat y^{(n)})}{\partial b^{(l)}}) b(l)=b(l)−α∂b(l)∂R(W,b)=b(l)−α(N1n=1∑N∂b(l)∂L(y(n),y^(n)))
交叉熵损失函数
对于样本 ( x , y ) (x,y) (x,y),其交叉熵损失函数为
L ( y , y ^ ) = − y ^ T log y L(y,\hat y)=-\hat y^{T}\text{log}y L(y,y^)=−y^Tlogy
其中 y ^ ∈ { 0 , 1 } \hat y\in \{0,1\} y^∈{
0,1}为对应标签的 one-hot \text{one-hot} one-hot向量表示。
均方差损失函数
L ( y , y ^ ) = ( y − y ^ ) T ( y − y ^ ) L(y,\hat y)=(y-\hat y)^{T}(y-\hat y) L(y,y^)=(y−y^)T(y−y^)
其中 y ^ \hat y y^为函数的标签向量。