PyTorch深度学习(四):神经网络(上)——理论推导

PyTorch深度学习(四):神经网络(上)——理论推导


一、感知机(Perceptron)

1.感知机概述

感知机是一个二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取 + 1 +1 +1(正类)、 − 1 -1 1(负类)

设输入空间(特征空间)为 x = [ x 1 x 2 ⋯ x n ] ⊆ R n {\bf x}=\begin{bmatrix}x_1&x_2&\cdots&x_n\end{bmatrix}\subseteq R^n x=[x1x2xn]Rn, 输出空间为 y = { + 1 , − 1 } y=\{+1,-1\} y={+1,1},输入 x ( i ) {\bf x}^{(i)} x(i) 表示实例的特征向量,对应于输入空间(特征空间) x {\bf x} x 的点,输出 y ( i ) ∈ y y^{(i)}\in y y(i)y 表示实例的类别,则由输入空间到输出空间有如下映射:
f ( x ) = s i g n ( ⟨ w , x ⟩ + b ) f(x)=sign(\langle{\bf w},{\bf x}\rangle+b) f(x)=sign(w,x+b)

其中 f ( x ) = s i g n ( x ) f(x)=sign(x) f(x)=sign(x) 为符号函数,表示如下:
s i g n ( x ) = { 1 , x > 0 0 , x = 0 − 1 , x < 0 sign(x)= \begin{cases} 1, & x>0 \\ 0, & x=0 \\ -1, & x<0 \end{cases} sign(x)=1,0,1,x>0x=0x<0

在这里插入图片描述

它利用了上一章所讲的线性回归为基础,因此,感知机模型可以用线性方程来做几何解释:

感知机是一种线性分类模型,它分为两部分:线性部分激活函数。如图所示,它可以根据输入空间(特征空间)的线性回归值: ⟨ w , x ⟩ + b \langle{\bf w},{\bf x}\rangle+b w,x+b,其中, w {\bf w} w 为线性方程的权重, x {\bf x} x 为输入空间(特征空间), b b b 为偏差,得到线性回归值 ⟨ w , x ⟩ + b \langle{\bf w},{\bf x}\rangle+b w,x+b 后,再将该线性回归值输入到 f ( x ) = s i g n ( x ) f(x)=sign(x) f(x)=sign(x) 的激活函数中,即可得到分类结果 y = Output y=\text{Output} y=Output,感知机将最终结果分为两类,如下:
y = { 正 类 ( + 1 ) ,   o 1 = ⟨ w , x ⟩ + b > 0 负 类 ( − 1 ) ,   o 1 = ⟨ w , x ⟩ + b < 0 0 ,   o 1 = ⟨ w , x ⟩ + b = 0 y=\begin{cases} 正类(+1)&, \ o_1={\langle{\bf w},{\bf x}\rangle+b>0}\\ 负类(-1)&, \ o_1={\langle{\bf w},{\bf x}\rangle+b<0}\\ 0&, \ o_1={\langle{\bf w},{\bf x}\rangle+b=0} \end{cases} y=(+1)(1)0, o1=w,x+b>0, o1=w,x+b<0, o1=w,x+b=0

在这里插入图片描述

注意,传统的感知机使用的激活函数是 s i g n ( x ) sign(x) sign(x),这里先提一下:感知机激活函数必须是非线性的,后面再分析原因

若用几何来解释,则在空间中,空间被一超平面 ⟨ w , x ⟩ + b \langle{\bf w},{\bf x}\rangle+b w,x+b 划分为两个空间,当样本点位于该超平面的上方,即 ⟨ w , x ⟩ + b > 0 \langle{\bf w},{\bf x}\rangle+b>0 w,x+b>0 时,则被分为正类;当样本点位于该超平面的下方,即 ⟨ w , x ⟩ + b < 0 \langle{\bf w},{\bf x}\rangle+b<0 w,x+b<0 时,则被分为负类,以猫狗分类为例,如图:
在这里插入图片描述
当然,非线性函数(激活函数) 除了符号函数 s i g n ( x ) sign(x) sign(x) 外,还可以使用其他函数,如:阶跃函数 u ( x ) u(x) u(x),当 x > 0 x>0 x>0 时分为正类 + 1 +1 +1,当 x < 0 x<0 x<0 时分为负类 0 0 0

2.感知机学习策略

假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练集正实例点和负实例点分开的超平面 S S S ⟨ w , x ⟩ + b \langle{\bf w},{\bf x}\rangle+b w,x+b

为了找出这样的超平面,需要定义一个损失函数并将损失函数极小化,感知机采用了:误分类点到超平面 S S S 的总距离作为损失函数,为此,我们先写出输入空间 R n R^n Rn 中任一点 x 0 {\bf x}_0 x0 到超平面的距离:
d = ∣ ⟨ w , x 0 ⟩ + b ∣ ∣ ∣ w ∣ ∣ , 其 中   ∣ ∣ w ∣ ∣ = ( ∑ i w i ) 2 d={\mid\langle {\bf w},{\bf x}_0\rangle+b\mid \over ||{\bf w}||},其中 \ ||{\bf w}||=\sqrt{(\sum_iw_i)^2} d=ww,x0+b w=(iwi)2

这里 ∣ ∣ w ∣ ∣ ||{\bf w}|| w w {\bf w} w L 2 L_2 L2 范数,但是距离 d d d 的公式中包含绝对值,不易求导,需要进行处理

对于误分类的数据 ( x ( i ) , y ( i ) ) (x^{(i)},{y^{(i)}}) (x(i),y(i)) 来说,这些数据满足:
y ( i ) ( ⟨ w , x ( i ) ⟩ + b ) < 0 y^{(i)}(\langle{\bf w},{\bf x}^{(i)}\rangle+b)<0 y(i)(w,x(i)+b)<0

因为真实类 y ( i ) y^{(i)} y(i) 和预测类 ⟨ w , x ( i ) ⟩ + b \langle{\bf w},{\bf x}^{(i)}\rangle+b w,x(i)+b 的正负相反了,因此它们相乘为负

因此,误分类点 x ( i ) x^{(i)} x(i) 到超平面 S S S 的距离是:
d = − y ( i ) ( ⟨ w , x ( i ) ⟩ + b ) ∣ ∣ w ∣ ∣ d=-{y^{(i)}(\langle {\bf w},{\bf x}^{(i)}\rangle+b) \over ||{\bf w}||} d=wy(i)(w,x(i)+b)

这样就可以把原公式中的绝对值去掉了,假设超平面 S S S 的误分类点集合为 M M M,那么所有误分类点到超平面的距离总和为:
− 1 ∣ ∣ w ∣ ∣ ∑ x ( i ) ∈ M y ( i ) ( ⟨ w , x ( i ) ⟩ + b ) -{1 \over ||{\bf w}||}\sum_{x^{(i)}\in M}y^{(i)}(\langle {\bf w},{\bf x}^{(i)}\rangle+b) w1x(i)My(i)(w,x(i)+b)

由于 1 ∣ ∣ w ∣ ∣ {1 \over ||{\bf w}||} w1 是常数,因此不用考虑 1 ∣ ∣ w ∣ ∣ {1 \over ||{\bf w}||} w1,于是可以得到感知机学习的损失函数:

设数据集 T = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( N ) , y ( N ) ) } T=\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(N)},y^{(N)})\} T={(x(1),y(1)),(x(2),y(2)),...,(x(N),y(N))},其中 x ( i ) ∈ R n x^{(i)}\in R^n x(i)Rn y ( i ) ∈ { + 1 , − 1 } y^{(i)}\in\{+1,-1\} y(i){+1,1} M M M 为误分类点集合,则感知机 s i g n ( ⟨ w , x ⟩ + b ) sign(\langle{\bf w},{\bf x}\rangle+b) sign(w,x+b) 学习的损失函数定义为:
L ( w , b ) = − ∑ x ( i ) ∈ M y ( i ) ( ⟨ w , x ( i ) ⟩ + b ) L({\bf w},b)=-\sum_{x^{(i)}\in M}y^{(i)}(\langle {\bf w},{\bf x}^{(i)}\rangle+b) L(w,b)=x(i)My(i)(w,x(i)+b)

显然,损失函数是非负的,如果没有误分类点,损失函数值为 0 0 0,而且,误分类点越少,误分类点离超平面 S S S 的总距离越近,损失函数值就越小,且该损失函数是连续可导的

3.感知机学习算法

在得到感知机的损失函数后,就需要通过算法来找到损失函数的极小值,由于损失函数是连续可导的,因此我们仍然使用梯度下降法,在使用梯度下降法之前,需要任意选取一超平面 w 0 , b 0 {\bf w}_0,b_0 w0,b0 作为初始值

假定误分类点集合 M M M 是固定的,那么损失函数 L ( w , b ) L({\bf w},b) L(w,b) 的梯度由下式给出:
∇ w L ( w , b ) = − ∑ x ( i ) ∈ M y ( i ) x ( i ) \nabla_{\bf w}L({\bf w},b)=-\sum_{x^{(i)}\in M}y^{(i)}x^{(i)} wL(w,b)=x(i)My(i)x(i)

∇ b L ( w , b ) = − ∑ x ( i ) ∈ M y ( i ) , ∵ x 0 = 1 \nabla_bL({\bf w},b)=-\sum_{x^{(i)}\in M}y^{(i)},∵x_0=1 bL(w,b)=x(i)My(i)x0=1

感知机使用随机梯度下降来更新权重,设选择误分类点 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) 来对 w , b {\bf w},b w,b 进行更新,则:
w i ⟸ w i + η y ( i ) x ( i ) w_i\Longleftarrow w_i+\eta y^{(i)}x^{(i)} wiwi+ηy(i)x(i)

b ⟸ b + η y ( i ) b\Longleftarrow b+\eta y^{(i)} bb+ηy(i)

式中, η ( 0 < η ≤ 1 ) \eta(0<\eta\leq1) η(0<η1) 是步长,即学习率,这样,通过小批量梯度下降,可以使 L ( w , b ) L({\bf w},b) L(w,b) 不断减小,直到收敛,当然,上述的过程都是在数据集线性可分的假设上进行的,若数据集线性不可分,则 L ( w , b ) L({\bf w},b) L(w,b) 不能收敛,可以通过指定训练次数或指定满意的 L ( w , b ) L({\bf w},b) L(w,b) 值作为训练结束标志

注意,上述过程是在误分类样本上进行的

4.感知机的收敛定理(Novikoff定理)

设训练数据集 T = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( N ) , y ( N ) ) } T=\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(N)},y^{(N)})\} T={(x(1),y(1)),(x(2),y(2)),...,(x(N),y(N))} 是线性可分的,其中 x ( i ) ∈ R n x^{(i)}\in R^n x(i)Rn y ( i ) ∈ { + 1 , − 1 } y^{(i)}\in\{+1,-1\} y(i){+1,1},则:

(1)存在满足条件 ∣ ∣ w ^ o p t ∣ ∣ = 1 ||\hat{\bf w}_{opt}||=1 w^opt=1 的超平面 w ^ o p t ⋅ x ^ = w o p t ⋅ x + b \hat{\bf w}_{opt}·\hat {\bf x}={\bf w}_{opt}·{\bf x}+b w^optx^=woptx+b 将训练数据集完全正确分开;且存在 γ > 0 \gamma>0 γ>0,对所有 i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N
y ( i ) ( w ^ o p t ⋅ x ^ ) = y ( i ) ( w o p t ⋅ x + b o p t ) ≥ γ y^{(i)}(\hat{\bf w}_{opt}·\hat {\bf x})=y^{(i)}({\bf w}_{opt}·{\bf x}+b_{opt})\geq\gamma y(i)(w^optx^)=y(i)(woptx+bopt)γ

(2)令 R = max ⁡ 1 < i < N ∣ ∣ x ^ i ∣ ∣ R=\max \limits_{1<i<N}||\hat{x}_i|| R=1<i<Nmaxx^i,则感知机在训练数据集上的误分类次数 k k k 满足不等式:
k ≤ ( R γ ) 2 k\leq\left({R\over\gamma}\right)^2 k(γR)2

证明:

(1) 因为训练数据是线性可分的,因此存在超平面可使得数据完全分开,记该超平面为:
S o p t : w o p t ⋅ x + b o p t = 0 S_{opt}:{\bf w}_{opt}·{\bf x}+b_{opt}=0 Sopt:woptx+bopt=0

b b b 设为 w 0 w_0 w0,则 w ^ = ( w 0 , w 1 , w 2 , . . . , w n ) \hat {\bf w}=(w_0,w_1,w_2,...,w_n) w^=(w0,w1,w2,...,wn),把 x 0 = 1 x_0=1 x0=1 引入 x {\bf x} x 中,记为 x ^ \hat {\bf x} x^,则:
w ^ ⋅ x ^ = ⟨ w , x ⟩ + b = w ⋅ x + b \hat {\bf w}·\hat {\bf x}=\langle{\bf w},{\bf x}\rangle+b={\bf w}·{\bf x}+b w^x^=w,x+b=wx+b

因为是线性方程,因此设 ∣ ∣ w ^ o p t ∣ ∣ = 1 ||\hat {\bf w}_{opt}||=1 w^opt=1 并不失一般性, 则:
w ^ o p t ⋅ x ^ = w o p t ⋅ x + b o p t = 0 , ∣ ∣ w ^ o p t ∣ ∣ = 1 \hat {\bf w}_{opt}·\hat {\bf x}={\bf w}_{opt}·{\bf x}+b_{opt}=0,||\hat {\bf w}_{opt}||=1 w^optx^=woptx+bopt=0w^opt=1

对于 i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N,样本均被正确分类,有:
y ( i ) ( w ^ o p t ⋅ x ^ ( i ) ) = y ( i ) ( w o p t ⋅ x ( i ) + b o p t ) > 0 y^{(i)}(\hat {\bf w}_{opt}·\hat {\bf x}^{(i)})=y^{(i)}({\bf w}_{opt}·{\bf x}^{(i)}+b_{opt})>0 y(i)(w^optx^(i))=y(i)(woptx(i)+bopt)>0

令   m i n [ y ( i ) ( w ^ o p t ⋅ x ^ ( i ) ) ] = γ > 0 令 \ min[y^{(i)}(\hat {\bf w}_{opt}·\hat {\bf x}^{(i)})]=\gamma>0  min[y(i)(w^optx^(i))]=γ>0

则 : y ( i ) ( w ^ o p t ⋅ x ^ ( i ) ) = y ( i ) ( w o p t ⋅ x + b o p t ) ≥ γ 则:y^{(i)}(\hat {\bf w}_{opt}·\hat {\bf x}^{(i)})=y^{(i)}({\bf w}_{opt}·{\bf x}+b_{opt})\geq\gamma y(i)(w^optx^(i))=y(i)(woptx+bopt)γ

定理(1)表明,被正确分类的样本点与超平面 S S S 之间是存在一定的距离 γ \gamma γ
在这里插入图片描述

(2) 设感知机算法从 w ^ 0 = 0 \hat {\bf w}_{0}=0 w^0=0 开始,如果实例被误分类,则更新权重,令 w ^ k − 1 \hat {\bf w}_{k-1} w^k1 是第 k k k 个误分类实例之前的权重,即:
w ^ k − 1 = ( w k − 1 T , b k − 1 ) T \hat {\bf w}_{k-1}=({\bf w}_{k-1}^T,b_{k-1})^T w^k1=(wk1T,bk1)T

则第 k k k 个误分类实例应满足条件:
y i ⟨ w ^ k − 1 , x ^ i ⟩ = y i ( w k − 1 ⋅ x i + b k − 1 ) ≤ 0 y_i\langle\hat {\bf w}_{k-1},\hat {\bf x}_{i}\rangle=y_i({\bf w}_{k-1}·{\bf x}_i+b_{k-1})\leq0 yiw^k1,x^i=yi(wk1xi+bk1)0

( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) 是被 w ^ k − 1 = ( w k − 1 T , b k − 1 ) T \hat {\bf w}_{k-1}=({\bf w}_{k-1}^T,b_{k-1})^T w^k1=(wk1T,bk1)T 误分类的数据(第 k k k 个误分类实例),则 w {\bf w} w b b b 的更新是:
w k ⟸ w k − 1 + η y ( i ) x ( i ) {\bf w}_k\Longleftarrow {\bf w}_{k-1}+\eta y^{(i)}{\bf x}^{(i)} wkwk1+ηy(i)x(i)

b k ⟸ b k − 1 + η y ( i ) b_k\Longleftarrow b_{k-1}+\eta y^{(i)} bkbk1+ηy(i)


w ^ k ⟸ w ^ k − 1 + η y ( i ) x ^ ( i ) \hat {\bf w}_k\Longleftarrow \hat {\bf w}_{k-1}+\eta y^{(i)}\hat {\bf x}^{(i)} w^kw^k1+ηy(i)x^(i)

在证明定理(2)前,先证明两个不等式:
w ^ k ⋅ w ^ o p t ≥ k η y (4.1) \hat {\bf w}_{k}·\hat {\bf w}_{opt}\geq k\eta y \tag{4.1} w^kw^optkηy(4.1)

∣ ∣ w ^ k ∣ ∣ 2 ≤ k η 2 R 2 (4.2) ||\hat {\bf w}_{k}||^2\leq k\eta^2R^2 \tag{4.2} w^k2kη2R2(4.2)

证明不等式 (4.1):
w ^ k ⋅ w ^ o p t = ( w ^ k − 1 + η y ( i ) x ^ ( i ) ) ⋅ w ^ o p t = w ^ k − 1 ⋅ w ^ o p t + η y ( i ) x ^ ( i ) ⋅ w ^ o p t ≥ w ^ k − 1 ⋅ w ^ o p t + η γ \begin{aligned} \hat {\bf w}_{k}·\hat {\bf w}_{opt} & = (\hat {\bf w}_{k-1}+\eta y^{(i)}{\hat x^{(i)}})·\hat {\bf w}_{opt} \\ & = \hat {\bf w}_{k-1}·\hat {\bf w}_{opt}+\eta y^{(i)}{\hat {\bf x}^{(i)}}·\hat {\bf w}_{opt}\\ & \geq \hat {\bf w}_{k-1}·\hat {\bf w}_{opt}+\eta\gamma \end{aligned} w^kw^opt=(w^k1+ηy(i)x^(i))w^opt=w^k1w^opt+ηy(i)x^(i)w^optw^k1w^opt+ηγ

最后一步是根据定理(1)得到的,由此递推不等式,得:
w ^ k ⋅ w ^ o p t ≥ w ^ k − 1 ⋅ w ^ o p t + η γ ≥ w ^ k − 2 ⋅ w ^ o p t + 2 η γ ≥ . . . ≥ k η γ \begin{aligned} \hat {\bf w}_{k}·\hat {\bf w}_{opt} & \geq\hat {\bf w}_{k-1}·\hat {\bf w}_{opt}+\eta\gamma \\ & \geq\hat {\bf w}_{k-2}·\hat {\bf w}_{opt}+2\eta\gamma \\ & \geq ... \\ & \geq k\eta\gamma \\ \end{aligned} w^kw^optw^k1w^opt+ηγw^k2w^opt+2ηγ...kηγ

证明不等式 (4.2):
∣ ∣ w ^ k ∣ ∣ 2 = ∣ ∣ w ^ k − 1 + η y ( i ) x ^ ( i ) ∣ ∣ 2 = ∣ ∣ w ^ k − 1 ∣ ∣ 2 + 2 η y ( i ) w ^ k − 1 ⋅ x ^ ( i ) + η 2 ( y ( i ) ) 2 ∣ ∣ x ^ ( i ) ∣ ∣ 2 = ∣ ∣ w ^ k − 1 ∣ ∣ 2 + 2 η y ( i ) w ^ k − 1 ⋅ x ^ ( i ) + η 2 ∣ ∣ x ^ ( i ) ∣ ∣ 2 ≤ ∣ ∣ w ^ k − 1 ∣ ∣ 2 + η 2 ∣ ∣ x ^ ( i ) ∣ ∣ 2 ≤ ∣ ∣ w ^ k − 1 ∣ ∣ 2 + η 2 R 2 ≤ ∣ ∣ w ^ k − 2 ∣ ∣ 2 + 2 η 2 R 2 ≤ . . . ≤ k η 2 R 2 \begin{aligned} ||\hat {\bf w}_k||^2&=||\hat {\bf w}_{k-1}+\eta y^{(i)}\hat {\bf x}^{(i)}||^2\\ &=||\hat {\bf w}_{k-1}||^2+2\eta y^{(i)}\hat {\bf w}_{k-1}·\hat {\bf x}^{(i)}+\eta^2(y^{(i)})^2||\hat {\bf x}^{(i)}||^2\\ &=||\hat {\bf w}_{k-1}||^2+2\eta y^{(i)}\hat {\bf w}_{k-1}·\hat {\bf x}^{(i)}+\eta^2||\hat {\bf x}^{(i)}||^2\\ &\leq ||\hat {\bf w}_{k-1}||^2+\eta^2||\hat {\bf x}^{(i)}||^2\leq ||\hat {\bf w}_{k-1}||^2+\eta^2R^2\\ &\leq ||\hat {\bf w}_{k-2}||^2+2\eta^2R^2\leq...\leq k\eta^2R^2 \end{aligned} w^k2=w^k1+ηy(i)x^(i)2=w^k12+2ηy(i)w^k1x^(i)+η2(y(i))2x^(i)2=w^k12+2ηy(i)w^k1x^(i)+η2x^(i)2w^k12+η2x^(i)2w^k12+η2R2w^k22+2η2R2...kη2R2

综上所述,根据不等式 (4.1) 和 (4.2) 和 施瓦兹不等式,有:
k η γ ≤ w ^ k ⋅ w ^ o p t ≤ ∣ ∣ w ^ k ∣ ∣ ∣ ∣ w ^ o p t ∣ ∣ = ∣ ∣ w ^ k ∣ ∣ ≤ k η R k\eta\gamma\leq\hat {\bf w}_{k}·\hat {\bf w}_{opt}\leq||\hat {\bf w}_{k}||||\hat {\bf w}_{opt}||=||\hat {\bf w}_{k}||\leq\sqrt k\eta R kηγw^kw^optw^kw^opt=w^kk ηR

k 2 γ 2 ≤ k R 2 k^2\gamma^2\leq kR^2 k2γ2kR2

于是
k ≤ ( R γ ) 2 k\leq\left({R \over \gamma}\right)^2 k(γR)2

定理(2)表明,误分类的次数 k k k 是有上界的,经过有限次搜索可以找到将训练数据完全正确分开的超平面 S S S


二、神经网络(Neural Network)、多层感知机(Multilayer Perceptron-MLP)

感知机可以解决二分类问题,然而,它只能对线性可分的训练集进行分类,不能解决异或(XOR)问题,如图所示:
在这里插入图片描述
作一条直线 f ( x ) = ⟨ w , x + b ⟩ f({\bf x})=\langle{\bf w},{\bf x}+b\rangle f(x)=w,x+b,无论直线如何摆放都无法解决异或(XOR)问题,这使得深度学习的发展进入了几十年的寒冬…

1.由XOR问题引出MLP和NN

虽然一条直线无法解决数据非线性可分的问题——感知机,但使用多条直线是可以解决样本非线性可分时的分类问题的——多层感知机,如图:
在这里插入图片描述
如上图所示,我们可以先通过蓝色的直线,将 ① ③ \color{#0F0}{①}\color{#F00}{③} 分为正类 “ + + +”,将 ② ④ \color{#F00}{②}\color{#0F0}{④} 分为负类 “ − - ”;再通过橘色的直线,将 ① ② \color{#0F0}{①}\color{#F00}{②} 分为正类 “ + + +”,将 ③ ④ \color{#F00}{③}\color{#0F0}{④} 分为负类 “ − -

经过 “蓝色直线” 和 “橘色直线” 的分类以后,再将他们各自的结果进行合并(相乘),最终可以得到正确的分类

这个时候,感知机已经由单层变为了多层感知机,其中 “蓝色直线” 和 “橘色直线” 所代表的分类过程分别是中间层的两个节点,也称为感知机的隐藏层

我们可以继续增加多个输入层、隐藏层、输出层的节点,就可以构成复杂的多层感知机,如图:
在这里插入图片描述

  • 为了增加 多层感知机(MLP) 模型的表达能力,它可以包含更多个隐藏层,一个隐藏层又可以包含多个节点
  • 从一层隐藏层的每个节点来看,都是一个线性模型加上一个激活函数,如: s i g n ( x ) sign(x) sign(x)
  • 除了每一层的 w {\bf w} w b b b 外,隐藏层节点个数和隐藏层的个数也成为超参数
  • 一般来说,随着网络层数的逐渐加深,隐藏层各层的节点个数会越来越少,因为假设数据比较复杂,那么输入向量是很高维的,而输出是相对较少的(二分类,多分类),因此输入特征向量在经过隐藏层后后会逐渐压缩
  • 各输出节点的输出值可以代表输入样本属于某一类别的可能性,即某一节点输出值越大,则该输入样本就越有可能属于这一类别,可能需要 One-Hot Encoding,即输出是一个由元素 { 0 , 1 } \{0,1\} {0,1} 组成的向量

🔺 多层感知机构成了神经网络,实际上,多层感知机(MLP)就是我们通常所说的神经网络(NN)

2.神经网络的预测——前向传播(Forward Propagation)

前向传播是指输入特征向量 x = [ x 1 , x 2 , . . . , x n ] T {\bf x}=[x_1,x_2,...,x_n]^T x=[x1,x2,...,xn]T 从神经网络的第一层逐渐从高层传递,最终得到一个或多个输出的过程

以三层神经网络为例,输入特征向量 x = [ x 1 , x 2 , x 3 ] T ∈ R 3 {\bf x}=[x_1,x_2,x_3]^T\in R^3 x=[x1,x2,x3]TR3,输出数据是二维的。为方便描述,规定从第 l − 1 l-1 l1 层的第 k k k 个神经元到第 l l l 层的第 j j j 个神经元的权重为 w j k ( l ) w_{jk}^{(l)} wjk(l),第 l l l 层的第 j j j 个神经元对应的偏差定义为 b j ( l ) b_j^{(l)} bj(l),第 l l l 层第 j j j 个神经元的激活值(输出值)为 a j ( l ) a^{(l)}_j aj(l),假设激活函数为 σ ( z ) \sigma(z) σ(z),如图所示:
在这里插入图片描述

则对于第二层,它的输入是特征向量 x = [ x 1 , x 2 , x 3 ] T {\bf x}=[x_1,x_2,x_3]^T x=[x1,x2,x3]T,它的输出为:
a 1 ( 2 ) = σ ( z 1 ( 2 ) ) = σ ( w 11 ( 2 ) x 1 + w 12 ( 2 ) x 2 + w 13 ( 2 ) x 3 + b 1 ( 2 ) ) a_1^{(2)}=\sigma(z_1^{(2)})=\sigma(w_{11}^{(2)}x_1+w_{12}^{(2)}x_2+w_{13}^{(2)}x_3+b_1^{(2)}) a1(2)=σ(z1(2))=σ(w11(2)x1+w12(2)x2+w13(2)x3+b1(2))

a 2 ( 2 ) = σ ( z 2 ( 2 ) ) = σ ( w 21 ( 2 ) x 1 + w 22 ( 2 ) x 2 + w 23 ( 2 ) x 3 + b 2 ( 2 ) ) a_2^{(2)}=\sigma(z_2^{(2)})=\sigma(w_{21}^{(2)}x_1+w_{22}^{(2)}x_2+w_{23}^{(2)}x_3+b_2^{(2)}) a2(2)=σ(z2(2))=σ(w21(2)x1+w22(2)x2+w23(2)x3+b2(2))

a 3 ( 2 ) = σ ( z 3 ( 2 ) ) = σ ( w 31 ( 2 ) x 1 + w 32 ( 2 ) x 2 + w 33 ( 2 ) x 3 + b 3 ( 2 ) ) a_3^{(2)}=\sigma(z_3^{(2)})=\sigma(w_{31}^{(2)}x_1+w_{32}^{(2)}x_2+w_{33}^{(2)}x_3+b_3^{(2)}) a3(2)=σ(z3(2))=σ(w31(2)x1+w32(2)x2+w33(2)x3+b3(2))

对于第三层,它的输入是第二层的激活值(输出值)→ [ a 1 ( 2 ) , a 2 ( 2 ) , a 3 ( 2 ) ] T [a_1^{(2)},a_2^{(2)},a_3^{(2)}]^T [a1(2),a2(2),a3(2)]T,同时这是输出层 y = [ y 1 , y 2 ] T {\bf y}=[y_1,y_2]^T y=[y1,y2]T,它的输出为:
y 1 = a 1 ( 3 ) = σ ( z 1 ( 3 ) ) = σ ( w 11 ( 3 ) a 1 ( 2 ) + w 12 ( 3 ) a 2 ( 2 ) + w 13 ( 3 ) a 3 ( 2 ) + b 1 ( 3 ) ) y_1=a_1^{(3)}=\sigma(z_1^{(3)})=\sigma(w_{11}^{(3)}a_1^{(2)}+w_{12}^{(3)}a_2^{(2)}+w_{13}^{(3)}a_3^{(2)}+b_1^{(3)}) y1=a1(3)=σ(z1(3))=σ(w11(3)a1(2)+w12(3)a2(2)+w13(3)a3(2)+b1(3))

y 2 = a 2 ( 3 ) = σ ( z 2 ( 3 ) ) = σ ( w 21 ( 3 ) a 1 ( 2 ) + w 22 ( 3 ) a 2 ( 2 ) + w 23 ( 3 ) a 3 ( 2 ) + b 2 ( 3 ) ) y_2=a_2^{(3)}=\sigma(z_2^{(3)})=\sigma(w_{21}^{(3)}a_1^{(2)}+w_{22}^{(3)}a_2^{(2)}+w_{23}^{(3)}a_3^{(2)}+b_2^{(3)}) y2=a2(3)=σ(z2(3))=σ(w21(3)a1(2)+w22(3)a2(2)+w23(3)a3(2)+b2(3))

若将式子推广到第 l l l 层第 j j j 个神经元,设第 l − 1 l-1 l1 层有 N l − 1 N_{l-1} Nl1 个神经元,则有:
a j ( l ) = σ ( z j ( l ) ) = σ ( ∑ i ∈ N l − 1 w j i ( l ) a i ( l − 1 ) + b j ( l ) ) a_j^{(l)}=\sigma(z_j^{(l)})=\sigma(\sum_{i\in N_{l-1}}w_{ji}^{(l)}a_i^{(l-1)}+b^{(l)}_j) aj(l)=σ(zj(l))=σ(iNl1wji(l)ai(l1)+bj(l))

用公式来表示各层的输入输出关系过于复杂,我们不妨使用矩阵来代替。假设第 l − 1 l-1 l1 层有 n n n 个神经元,第 l l l 层有 m m m 个神经元,规定从第 l − 1 l-1 l1 层的第 k k k 个神经元到第 l l l 层的第 j j j 个神经元的权重为 w j k ( l ) w_{jk}^{(l)} wjk(l),第 l l l 层的偏差 b b b 组成向量 b ( l ) ∈ R m × 1 {\bf b}^{(l)}\in R^{m×1} b(l)Rm×1
W ( l ) = [ w 11 ( l ) w 12 ( l ) ⋯ w 1 n ( l ) w 21 ( l ) w 22 ( l ) ⋯ w 2 n ( l ) ⋮ ⋮ ⋱ ⋮ w m 1 ( l ) w m 2 ( l ) ⋯ w m n ( l ) ] = [ w 1 ( l ) w 2 ( l ) ⋮ w m ( l ) ] , b ( l ) = [ b 1 ( l ) b 2 ( l ) ⋮ b m ( l ) ] {\bf W}^{(l)}=\begin{bmatrix}w_{11}^{(l)}&w_{12}^{(l)}&\cdots&w_{1n}^{(l)}\\ w_{21}^{(l)}&w_{22}^{(l)}&\cdots&w_{2n}^{(l)}\\ \vdots&\vdots&\ddots&\vdots\\ w_{m1}^{(l)}&w_{m2}^{(l)}&\cdots&w_{mn}^{(l)}\end{bmatrix} =\begin{bmatrix}{\bf w}_1^{(l)}\\{\bf w}_2^{(l)}\\\vdots\\{\bf w}_m^{(l)}\end{bmatrix}, {\bf b}^{(l)}=\begin{bmatrix}b_1^{(l)}\\b_2^{(l)}\\\vdots\\b_m^{(l)}\end{bmatrix} W(l)=w11(l)w21(l)wm1(l)w12(l)w22(l)wm2(l)w1n(l)w2n(l)wmn(l)=w1(l)w2(l)wm(l)b(l)=b1(l)b2(l)bm(l)

上式表示,第 l − 1 l-1 l1 层到第 l l l 层第 j j j 个节点的权重 w j ( l ) {\bf w}_j^{(l)} wj(l) 构成矩阵 W ( l ) ∈ R m × n {\bf W}^{(l)}\in R^{m×n} W(l)Rm×n

l l l 层的线性回归值为向量 z ( l ) {\bf z}^{(l)} z(l),激活值(输出值)为向量 a ( l ) {\bf a}^{(l)} a(l)
z ( l ) = [ z 1 ( l ) z 2 ( l ) ⋮ z m ( l ) ] , a ( l ) = [ a 1 ( l ) a 2 ( l ) ⋮ a m ( l ) ] {\bf z}^{(l)}=\begin{bmatrix}z_1^{(l)}\\z_2^{(l)}\\\vdots\\z_m^{(l)}\end{bmatrix}, {\bf a}^{(l)}=\begin{bmatrix}a_1^{(l)}\\a_2^{(l)}\\\vdots\\a_m^{(l)}\end{bmatrix} z(l)=z1(l)z2(l)zm(l)a(l)=a1(l)a2(l)am(l)

则第 l l l 层的输出用矩阵可以表示为:
a ( l ) = σ ( z ( l ) ) = σ ( W ( l ) a ( l − 1 ) + b ( l ) ) {\bf a}^{(l)}=\sigma({\bf z}^{(l)})=\sigma({\bf W}^{(l)}{\bf a}^{(l-1)}+{\bf b}^{(l)}) a(l)=σ(z(l))=σ(W(l)a(l1)+b(l))

其中, σ ( z ( l ) ) \sigma({\bf z}^{(l)}) σ(z(l)) 表示 z ( l ) {\bf z}^{(l)} z(l) 中的每个元素分别代入函数 σ ( x ) \sigma(x) σ(x) 中分别得到一个值,即 z ( m × 1 ) ( l ) ⟹ σ ( x ) ⟹ a ( m × 1 ) ( l ) {\bf z}^{(l)}_{(m×1)}\Longrightarrow\sigma(x)\Longrightarrow{\bf a}^{(l)}_{(m×1)} z(m×1)(l)σ(x)a(m×1)(l)

3.神经网络损失函数的反向传播(Back Propagation-BP)

📘 在本节中,蓝字公式是非常重要的结论

神经网络(NN) 模型的超参数设置完成后,需要对模型各权重和偏差进行更新,由于存在多层的网络结构,因此无法直接对中间的隐藏层层利用损失值来更新权重,但可以利用损失从后到前的反向传播来进行参数的估计,即反向传播求导

设输入特征向量为 x = [ x 1 , x 2 , . . . , x n ] T {\bf x}=[x_1,x_2,...,x_n]^T x=[x1,x2,...,xn]T,各层权重为矩阵 W ( l ) {\bf W}^{(l)} W(l),各层偏差为 b ( l ) {\bf b}^{(l)} b(l),网络总层数为 L L L(即第 L L L 层表示输出层),设输出节点个数为 M M M,其中 a ( l ) {\bf a}^{(l)} a(l) 表示第 l l l 层的输出向量, z ( l ) {\bf z}^{(l)} z(l) 表示第 l l l 层的回归值的向量

同样地,我们通常引入均方误差损失函数来衡量模型的好坏,我们用矩阵和向量的形式来表达,则神经网络的损失为:
J ( W , b ) = 1 2 ∑ j = 1 M ( a j ( L ) − y j ( i ) ) 2 = 1 2 ∑ j = 1 M [ ( a 1 ( L ) − y 1 ( i ) ) 2 ( a 2 ( L ) − y 2 ( i ) ) 2 ⋮ ( a M ( L ) − y M ( i ) ) 2 ] = 1 2 ∣ ∣ ( a ( L ) − y ( i ) ) 2 ∣ ∣ J({\bf W},{\bf b})={1 \over 2}\sum_{j=1}^{M}(a^{(L)}_j-y^{(i)}_j)^2 ={1 \over 2}\sum_{j=1}^M\begin{bmatrix}(a_1^{(L)}-y_1^{(i)})^2\\(a_2^{(L)}-y_2^{(i)})^2\\\vdots\\(a_M^{(L)}-y_M^{(i)})^2 \end{bmatrix}={1 \over 2}\mid\mid({\bf a}^{(L)}-{\bf y}^{(i)})^2\mid\mid J(W,b)=21j=1M(aj(L)yj(i))2=21j=1M(a1(L)y1(i))2(a2(L)y2(i))2(aM(L)yM(i))2=21(a(L)y(i))2

其中, a j ( L ) a_j^{(L)} aj(L) 表示第 L L L 层(输出层)的第 j j j 个节点的输出值, y j ( i ) y_j^{(i)} yj(i) 表示第 i i i 个样本标签向量 y ( i ) {\bf y}^{(i)} y(i) 中第 j j j 个元素(对应第 j j j 个输出节点的预测值),而损失 J ( W , b ) J({\bf W},{\bf b}) J(W,b) 就是所有节点预测值和真实值差距的总和, ∣ ∣ x ∣ ∣ ||{\bf x}|| x 表示列向量 x {\bf x} x1-范数,即 ∑ i x i \sum_ix_i ixi

对于第 L L L 层是输出层,其所有输出节点组成的向量为:
a ( L ) = σ ( z ( L ) ) = σ ( W ( L ) a ( L − 1 ) + b ( L ) ) {\bf a}^{(L)}=\sigma({\bf z}^{(L)})=\sigma({\bf W}^{(L)}{\bf a}^{(L-1)}+{\bf b}^{(L)}) a(L)=σ(z(L))=σ(W(L)a(L1)+b(L))

于 是 : J ( W , b ) = 1 2 ∣ ∣ ( a ( L ) − y ( i ) ) 2 ∣ ∣ = 1 2 ∣ ∣ ( σ ( W ( L ) a ( L − 1 ) + b ( L ) ) − y ( i ) ) 2 ∣ ∣ 于是:J({\bf W},{\bf b})={1 \over 2}\mid\mid({\bf a}^{(L)}-{\bf y}^{(i)})^2\mid\mid={1 \over 2}\mid\mid\left(\sigma({\bf W}^{(L)}{\bf a}^{(L-1)}+{\bf b}^{(L)})-{\bf y}^{(i)}\right)^2\mid\mid J(W,b)=21(a(L)y(i))2=21(σ(W(L)a(L1)+b(L))y(i))2

损失函数 J ( W , b ) J({\bf W},{\bf b}) J(W,b) 对第 L L L 层第 j j j 个节点的权重 w j ( L ) {\bf w}_j^{(L)} wj(L) 和偏差 b j ( L ) b_j^{(L)} bj(L) 的梯度由下式给出:
∂ J ( W , b ) ∂ w j ( L ) = ∂ J ( W , b ) ∂ a j ( L ) ∂ a j ( L ) ∂ z j ( L ) ∂ z j ( L ) ∂ w j ( L ) \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_j^{(L)}} =\frac{\partial J({\bf W},{\bf b})}{\partial a_j^{(L)}}\frac{\partial a_j^{(L)}}{\partial z_j^{(L)}}\frac{\partial z_j^{(L)}}{\partial {\bf w}_j^{(L)}} wj(L)J(W,b)=aj(L)J(W,b)zj(L)aj(L)wj(L)zj(L)

∂ J ( W , b ) ∂ b j ( L ) = ∂ J ( W , b ) ∂ a j ( L ) ∂ a j ( L ) ∂ z j ( L ) ∂ z j ( L ) ∂ b j ( L ) \frac{\partial J({\bf W},{\bf b})}{\partial b_j^{(L)}} =\frac{\partial J({\bf W},{\bf b})}{\partial a_j^{(L)}}\frac{\partial a_j^{(L)}}{\partial z_j^{(L)}}\frac{\partial z_j^{(L)}}{\partial b_j^{(L)}} bj(L)J(W,b)=aj(L)J(W,b)zj(L)aj(L)bj(L)zj(L)

其中,由于 J ( W , b ) = 1 2 ∑ j = 1 N L ( a j ( L ) − y j ( i ) ) 2 J({\bf W},{\bf b})={1 \over 2}\sum_{j=1}^{N_L}(a^{(L)}_j-y^{(i)}_j)^2 J(W,b)=21j=1NL(aj(L)yj(i))2,只有第 j j j 项含 w j ( L ) {\bf w}_j^{(L)} wj(L),因此, ∂ J ( W , b ) ∂ w j ( L ) \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_j^{(L)}} wj(L)J(W,b) 只与第 j j j 项有关,其他项对 w j ( L ) {\bf w}_j^{(L)} wj(L) 求导均为 0 0 0,即:
∂ J ( W , b ) ∂ w j ( L ) = 1 2 ∂ ( a j ( L ) − y j ( i ) ) 2 ∂ w j ( L ) = 1 2 ∂ [ σ ( z j ( L ) ) − y j ( i ) ] 2 ∂ w j ( L ) = 1 2 ∂ ∂ w j ( L ) [ σ ( w j ( L ) ⋅ a ( L − 1 ) + b j ( L ) ) − y j ( i ) ] 2 (Ⅰ) \begin{aligned} \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_j^{(L)}} &={1 \over 2}\frac{\partial (a^{(L)}_j-y^{(i)}_j)^2}{\partial {\bf w}_j^{(L)}} ={1 \over 2}\frac{\partial \left[\sigma(z_j^{(L)})-y^{(i)}_j\right]^2}{\partial {\bf w}_j^{(L)}}\\ &={1 \over 2}\frac{\partial }{\partial {\bf w}_j^{(L)}}\left[\sigma({\bf w}_j^{(L)}·{\bf a}^{(L-1)}+b_j^{(L)})-y^{(i)}_j\right]^2 \end{aligned} \tag{Ⅰ} wj(L)J(W,b)=21wj(L)(aj(L)yj(i))2=21wj(L)[σ(zj(L))yj(i)]2=21wj(L)[σ(wj(L)a(L1)+bj(L))yj(i)]2()

同理,只有第 j j j 项含 b j ( L ) b_j^{(L)} bj(L),因此, ∂ J ( W , b ) ∂ b j ( L ) \frac{\partial J({\bf W},{\bf b})}{\partial b_j^{(L)}} bj(L)J(W,b) 只与第 j j j 项有关,其他项对 b j ( L ) b_j^{(L)} bj(L) 求导均为 0 0 0,即:
∂ J ( W , b ) ∂ b j ( L ) = 1 2 ∂ ( a j ( L ) − y j ( i ) ) 2 ∂ b j ( L ) = 1 2 ∂ [ σ ( z j ( L ) ) − y j ( i ) ] 2 ∂ b j ( L ) = 1 2 ∂ ∂ b j ( L ) [ σ ( w j ( L ) ⋅ a ( L − 1 ) + b j ( L ) ) − y j ( i ) ] 2 (Ⅱ) \begin{aligned} \frac{\partial J({\bf W},{\bf b})}{\partial b_j^{(L)}} &={1 \over 2}\frac{\partial (a^{(L)}_j-y^{(i)}_j)^2}{\partial b_j^{(L)}} ={1 \over 2}\frac{\partial \left[\sigma(z_j^{(L)})-y^{(i)}_j\right]^2}{\partial b_j^{(L)}}\\ &={1 \over 2}\frac{\partial }{\partial b_j^{(L)}}\left[\sigma({\bf w}_j^{(L)}·{\bf a}^{(L-1)}+b_j^{(L)})-y^{(i)}_j\right]^2 \end{aligned} \tag{Ⅱ} bj(L)J(W,b)=21bj(L)(aj(L)yj(i))2=21bj(L)[σ(zj(L))yj(i)]2=21bj(L)[σ(wj(L)a(L1)+bj(L))yj(i)]2()

因此,根据式 (Ⅰ) (Ⅱ),损失函数 J ( W , b ) J({\bf W},{\bf b}) J(W,b) 对第 L L L 层第 j j j 个节点的权重 w j ( L ) {\bf w}_j^{(L)} wj(L) 和偏差 b j ( L ) b_j^{(L)} bj(L) 的梯度可由下式给出:
∂ J ( W , b ) ∂ w j ( L ) = ∂ J ( W , b ) ∂ a j ( L ) ∂ a j ( L ) ∂ z j ( L ) ∂ z j ( L ) ∂ w j ( L ) = ( a j ( L ) − y j ( i ) )   σ ′ ( z j ( L ) )   ( a ( L − 1 ) ) T \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_j^{(L)}} =\frac{\partial J({\bf W},{\bf b})}{\partial a_j^{(L)}}\frac{\partial a_j^{(L)}}{\partial z_j^{(L)}}\frac{\partial z_j^{(L)}}{\partial {\bf w}_j^{(L)}} =(a_j^{(L)}-y_j^{(i)}) \ \sigma'(z_j^{(L)}) \ ({\bf a}^{(L-1)})^T wj(L)J(W,b)=aj(L)J(W,b)zj(L)aj(L)wj(L)zj(L)=(aj(L)yj(i)) σ(zj(L)) (a(L1))T

∂ J ( W , b ) ∂ b j ( L ) = ∂ J ( W , b ) ∂ a j ( L ) ∂ a j ( L ) ∂ z j ( L ) ∂ z j ( L ) ∂ b j ( L ) = ( a j ( L ) − y j ( i ) )   σ ′ ( z j ( L ) ) ⋅ 1 \frac{\partial J({\bf W},{\bf b})}{\partial b_j^{(L)}} =\frac{\partial J({\bf W},{\bf b})}{\partial a_j^{(L)}}\frac{\partial a_j^{(L)}}{\partial z_j^{(L)}}\frac{\partial z_j^{(L)}}{\partial b_j^{(L)}} =(a_j^{(L)}-y_j^{(i)}) \ \sigma'(z_j^{(L)})·1 bj(L)J(W,b)=aj(L)J(W,b)zj(L)aj(L)bj(L)zj(L)=(aj(L)yj(i)) σ(zj(L))1

其中, σ ′ ( z j ( L ) ) \sigma'(z_j^{(L)}) σ(zj(L)) 表示直接将 z j ( L ) z_j^{(L)} zj(L) 代入函数 σ ′ ( x ) \sigma'(x) σ(x) 得到值即可

上述两式子有公共部分,将公共部分表示出来:
δ j L = ( a j ( L ) − y j ( i ) )   σ ′ ( z j ( L ) ) = ∂ J ( W , b ) ∂ a j ( L ) ∂ a j ( L ) ∂ z j ( L ) = ∂ J ( W , b ) ∂ z j ( L ) \delta^L_j=(a_j^{(L)}-y_j^{(i)}) \ \sigma'(z_j^{(L)}) =\frac{\partial J({\bf W},{\bf b})}{\partial a_j^{(L)}}\frac{\partial a_j^{(L)}}{\partial z_j^{(L)}} =\frac{\partial J({\bf W},{\bf b})}{\partial z_j^{(L)}} δjL=(aj(L)yj(i)) σ(zj(L))=aj(L)J(W,b)zj(L)aj(L)=zj(L)J(W,b)

📘 (结论1) 若将第 L L L 层所有的节点的 δ j L \delta^L_j δjL 合成一个向量 δ L \delta^L δL,则有:
δ L = ∂ J ( W , b ) ∂ z ( L ) = [ δ 1 L δ 2 L ⋮ δ M L ] ( M × 1 ) = [ ( a 1 ( L ) − y 1 ( i ) )   σ ′ ( z 1 ( L ) ) ( a 2 ( L ) − y 2 ( i ) )   σ ′ ( z 2 ( L ) ) ⋮ ( a M ( L ) − y M ( i ) )   σ ′ ( z M ( L ) ) ] ( M × 1 ) = ( a ( L ) − y ( i ) ) ⏟ ( M × 1 ) ∗ σ ′ ( z ( L ) ) ⏟ ( M × 1 ) \color{#00F} \delta^L =\frac{\partial J({\bf W},{\bf b})}{\partial {\bf z}^{(L)}} =\begin{bmatrix}\delta^L_1\\\delta^L_2\\\vdots\\\delta^L_M\end{bmatrix}_{(M×1)} =\begin{bmatrix} (a_1^{(L)}-y_1^{(i)}) \ \sigma'(z_1^{(L)})\\ (a_2^{(L)}-y_2^{(i)}) \ \sigma'(z_2^{(L)})\\ \vdots\\ (a_M^{(L)}-y_M^{(i)}) \ \sigma'(z_M^{(L)}) \end{bmatrix}_{(M×1)} =\underbrace{\left({\bf a}^{(L)}-{\bf y}^{(i)}\right)}_{(M×1)}*\underbrace{\sigma'({\bf z}^{(L)})}_{(M×1)} δL=z(L)J(W,b)=δ1Lδ2LδML(M×1)=(a1(L)y1(i)) σ(z1(L))(a2(L)y2(i)) σ(z2(L))(aM(L)yM(i)) σ(zM(L))(M×1)=(M×1) (a(L)y(i))(M×1) σ(z(L))

σ ′ ( z ( L ) ) \sigma'({\bf z}^{(L)}) σ(z(L)) 表示 z ( L ) {\bf z}^{(L)} z(L) 中的每个元素分别代入函数 σ ′ ( x ) \sigma'(x) σ(x) 中分别得到一个值,即 z ( M × 1 ) ( L ) ⟹ σ ′ ( x ) ⟹ a ( M × 1 ) ( L ) {\bf z}^{(L)}_{(M×1)}\Longrightarrow\sigma'(x)\Longrightarrow{\bf a}^{(L)}_{(M×1)} z(M×1)(L)σ(x)a(M×1)(L);其中, M M M 为第 L L L 层的节点个数, ∗ * 表示哈达玛积

因此,若损失函数 J ( W , b ) J({\bf W},{\bf b}) J(W,b) 对第 L L L 层第 j j j 个节点的权重 w j ( L ) {\bf w}_j^{(L)} wj(L) 和偏差 b j ( L ) b_j^{(L)} bj(L) 的导数可以表示为:
∂ J ( W , b ) ∂ w j ( L ) = δ j L   ( a ( L − 1 ) ) T \color{#D00} \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_j^{(L)}}=\delta^L_j \ ({\bf a}^{(L-1)})^T wj(L)J(W,b)=δjL (a(L1))T

∂ J ( W , b ) ∂ b j ( L ) = δ j L \color{#D00} \frac{\partial J({\bf W},{\bf b})}{\partial b_j^{(L)}}=\delta^L_j bj(L)J(W,b)=δjL

📘 (结论2) 将所有的 J ( W , b ) J({\bf W},{\bf b}) J(W,b) 对第 L L L 层第 j j j 个节点的权重 w j ( L ) {\bf w}_j^{(L)} wj(L) 和偏差 b j ( L ) b_j^{(L)} bj(L) 的导数合并成为一个最终的矩阵或列向量:
∂ J ( W , b ) ∂ W ( L ) ( M × N ) = [ ∂ J ( W , b ) ∂ w 1 ( L ) ∂ J ( W , b ) ∂ w 2 ( L ) ⋮ ∂ J ( W , b ) ∂ w M ( L ) ] = [ δ 1 L   ( a ( L − 1 ) ) T δ 2 L   ( a ( L − 1 ) ) T ⋮ δ M L   ( a ( L − 1 ) ) T ] ( M × N ) = δ L   ( a ( L − 1 ) ) T ⏟ ( M × N ) = [ ( a ( L ) − y ( i ) ) ∗ σ ′ ( z ( L ) ) ] ⏟ ( M × 1 )   ( a ( L − 1 ) ) T ⏟ ( N × 1 ) T \color{#00F} \frac{\partial J({\bf W},{\bf b})}{\partial {\bf W}^{(L)}}_{(M×N)} =\begin{bmatrix} \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_1^{(L)}}\\ \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_2^{(L)}}\\ \vdots\\ \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_M^{(L)}} \end{bmatrix} =\begin{bmatrix} \delta^L_1 \ ({\bf a}^{(L-1)})^T\\ \delta^L_2 \ ({\bf a}^{(L-1)})^T\\ \vdots\\ \delta^L_M \ ({\bf a}^{(L-1)})^T \end{bmatrix}_{(M×N)} =\underbrace{\delta^L \ ({\bf a}^{(L-1)})^T}_{(M×N)} =\underbrace{\left[\left({\bf a}^{(L)}-{\bf y}^{(i)}\right)*\sigma'({\bf z}^{(L)})\right]}_{(M×1)} \ \underbrace{({\bf a}^{(L-1)})^T}_{(N×1)^T} W(L)J(W,b)(M×N)=w1(L)J(W,b)w2(L)J(W,b)wM(L)J(W,b)=δ1L (a(L1))Tδ2L (a(L1))TδML (a(L1))T(M×N)=(M×N) δL (a(L1))T=(M×1) [(a(L)y(i))σ(z(L))] (N×1)T (a(L1))T

∂ J ( W , b ) ∂ b ( L ) ( M × 1 ) = [ ∂ J ( W , b ) ∂ b 1 ( L ) ∂ J ( W , b ) ∂ b 2 ( L ) ⋮ ∂ J ( W , b ) ∂ b M ( L ) ] = [ δ 1 L δ 2 L ⋮ δ M L ] ( M × 1 ) = [ ( a 1 ( L ) − y 1 ( i ) )   σ ′ ( z 1 ( L ) ) ( a 2 ( L ) − y 2 ( i ) )   σ ′ ( z 2 ( L ) ) ⋮ ( a M ( L ) − y M ( i ) )   σ ′ ( z M ( L ) ) ] ( M × 1 ) = ( a ( L ) − y ( i ) ) ∗ σ ′ ( z ( L ) ) ⏟ ( M × 1 ) \color{#00F} \frac{\partial J({\bf W},{\bf b})}{\partial {\bf b}^{(L)}}_{(M×1)} =\begin{bmatrix} \frac{\partial J({\bf W},{\bf b})}{\partial b_1^{(L)}}\\ \frac{\partial J({\bf W},{\bf b})}{\partial b_2^{(L)}}\\ \vdots\\ \frac{\partial J({\bf W},{\bf b})}{\partial b_M^{(L)}} \end{bmatrix} =\begin{bmatrix}\delta^L_1\\\delta^L_2\\\vdots\\\delta^L_M\end{bmatrix}_{(M×1)} =\begin{bmatrix} (a_1^{(L)}-y_1^{(i)}) \ \sigma'(z_1^{(L)})\\ (a_2^{(L)}-y_2^{(i)}) \ \sigma'(z_2^{(L)})\\ \vdots\\ (a_M^{(L)}-y_M^{(i)}) \ \sigma'(z_M^{(L)}) \end{bmatrix}_{(M×1)} =\underbrace{\left({\bf a}^{(L)}-{\bf y}^{(i)}\right)*\sigma'({\bf z}^{(L)})}_{(M×1)} b(L)J(W,b)(M×1)=b1(L)J(W,b)b2(L)J(W,b)bM(L)J(W,b)=δ1Lδ2LδML(M×1)=(a1(L)y1(i)) σ(z1(L))(a2(L)y2(i)) σ(z2(L))(aM(L)yM(i)) σ(zM(L))(M×1)=(M×1) (a(L)y(i))σ(z(L))

σ ′ ( z ( L ) ) \sigma'({\bf z}^{(L)}) σ(z(L)) 表示 z ( L ) {\bf z}^{(L)} z(L) 中的每个元素分别代入函数 σ ′ ( x ) \sigma'(x) σ(x) 中分别得到一个值,即 z ( M × 1 ) ( L ) ⟹ σ ′ ( x ) ⟹ a ( M × 1 ) ( L ) {\bf z}^{(L)}_{(M×1)}\Longrightarrow\sigma'(x)\Longrightarrow{\bf a}^{(L)}_{(M×1)} z(M×1)(L)σ(x)a(M×1)(L);其中, M M M 为第 l l l 层的节点个数, N N N 为当前第 l − 1 l-1 l1 层的节点个数

参考 📘 (结论2),我们可以得到损失函数 J ( W , b ) J({\bf W},{\bf b}) J(W,b) 对第 l l l 层的权重矩阵 W ( l ) {\bf W}^{(l)} W(l) 和偏差 b ( l ) {\bf b}^{(l)} b(l) 的梯度表示式:
∂ J ( W , b ) ∂ W ( l ) ( n × k ) = δ l ⏟ ( n × 1 ) ( a ( l − 1 ) ) T ⏟ ( k × 1 ) T (推论1) \color{#D00} \frac{\partial J({\bf W},{\bf b})}{\partial {\bf W}^{(l)}}_{(n×k)} =\underbrace{\delta^l}_{(n×1)}\underbrace{({\bf a}^{(l-1)})^T}_{(k×1)^T} \tag{推论1} W(l)J(W,b)(n×k)=(n×1) δl(k×1)T (a(l1))T(1)

∂ J ( W , b ) ∂ b ( l ) ( n × 1 ) = δ l ⏟ ( n × 1 ) (推论2) \color{#D00} \frac{\partial J({\bf W},{\bf b})}{\partial {\bf b}^{(l)}}_{(n×1)} =\underbrace{\delta^l}_{(n×1)} \tag{推论2} b(l)J(W,b)(n×1)=(n×1) δl(2)

其中,上式中设第 l − 1 l-1 l1 层、第 l l l 层、第 l + 1 l+1 l+1 层的节点个数分别为: k k k n n n m m m,下面的式子一样

参考 📘 (结论1),利用递推法的思想,可以由 δ l + 1 \delta^{l+1} δl+1 推出 δ l \delta^{l} δl
δ l ⏟ ( n × 1 ) = ∂ J ( W , b ) ∂ z ( l ) ⏟ ( n × 1 ) = ( ∂ z ( l + 1 ) ∂ z ( l ) ) T ⏟ ( m × n ) T ∂ J ( W , b ) ∂ z ( l + 1 ) ⏟ ( m × 1 ) = ( ∂ z ( l + 1 ) ∂ z ( l ) ) T δ l + 1 ⏟ ( n × 1 ) (递推公式) \underbrace{\delta^l}_{(n×1)} =\underbrace{ \frac{\partial J({\bf W},{\bf b})}{\partial{\bf z}^{(l)}} }_{(n×1)} =\underbrace{ \left(\frac{\partial {\bf z}^{(l+1)}}{\partial {\bf z}^{(l)}}\right)^T }_{(m×n)^T} \underbrace{ \frac{\partial J({\bf W},{\bf b})}{\partial {\bf z}^{(l+1)}} }_{(m×1)} =\underbrace{ \left(\frac{\partial {\bf z}^{(l+1)}}{\partial {\bf z}^{(l)}}\right)^T\delta^{l+1} }_{(n×1)} \tag{递推公式} (n×1) δl=(n×1) z(l)J(W,b)=(m×n)T (z(l)z(l+1))T(m×1) z(l+1)J(W,b)=(n×1) (z(l)z(l+1))Tδl+1()

我们需要求出上式的左项,根据:
z ( l + 1 ) = W ( l + 1 ) a ( l ) + b ( l + 1 ) = W ( l + 1 ) σ ( z ( l ) ) + b ( l + 1 ) ⟹ ∂ z ( l + 1 ) ∂ z ( l ) = W ( l + 1 ) ∂ σ ( z ( l ) ) ∂ z ( l ) {\bf z}^{(l+1)}={\bf W}^{(l+1)}{\bf a}^{(l)}+{\bf b}^{(l+1)}={\bf W}^{(l+1)}\sigma({\bf z}^{(l)})+{\bf b}^{(l+1)} \Longrightarrow \frac{\partial {\bf z}^{(l+1)}}{\partial {\bf z}^{(l)}} ={\bf W}^{(l+1)}\frac{\partial \sigma({\bf z}^{(l)})}{\partial {\bf z}^{(l)}} z(l+1)=W(l+1)a(l)+b(l+1)=W(l+1)σ(z(l))+b(l+1)z(l)z(l+1)=W(l+1)z(l)σ(z(l))

W ( l + 1 ) ∂ σ ( z ( l ) ) ∂ z ( l ) = W ( l + 1 ) ∂ z ( l ) ∂ z ( l ) σ ′ ( z ( l ) ) = W ( l + 1 )   I   σ ′ ( z ( l ) ) = W ( l + 1 )   d i a g ( σ ′ ( z ( l ) ) ) {\bf W}^{(l+1)}\frac{\partial \sigma({\bf z}^{(l)})}{\partial {\bf z}^{(l)}} ={\bf W}^{(l+1)}\frac{\partial {\bf z}^{(l)}}{\partial {\bf z}^{(l)}}\sigma'({\bf z}^{(l)}) ={\bf W}^{(l+1)} \ {\bf I} \ \sigma'({\bf z}^{(l)}) ={\bf W}^{(l+1)} \ diag\left(\sigma'({\bf z}^{(l)})\right) W(l+1)z(l)σ(z(l))=W(l+1)z(l)z(l)σ(z(l))=W(l+1) I σ(z(l))=W(l+1) diag(σ(z(l)))

其中, I {\bf I} I 表示单位矩阵(单位矩阵:除主对角线的元素非零外其他元素均为零);

其中, d i a g ( x ) diag({\bf x}) diag(x) 表示将向量 x ∈ R n {\bf x}\in R^n xRn 转化成 n × n n×n n×n 的对角矩阵(对角矩阵:除主对角线的元素非零外其他元素均为零),主对角线上的元素按向量 x ∈ R n {\bf x}\in R^n xRn 的顺序排列。因此,结合上面两式,可以得到:
∂ z ( l + 1 ) ∂ z ( l ) = W ( l + 1 )   d i a g ( σ ′ ( z ( l ) ) ) \frac{\partial {\bf z}^{(l+1)}}{\partial {\bf z}^{(l)}} ={\bf W}^{(l+1)} \ diag\left(\sigma'({\bf z}^{(l)})\right) z(l)z(l+1)=W(l+1) diag(σ(z(l)))

📘 (结论4) 根据 ( 递 推 公 式 ) (递推公式) (),可以得到最终的递推公式
δ l ⏟ ( n × 1 ) = ( ∂ z ( l + 1 ) ∂ z ( l ) ) T δ l + 1 = d i a g ( σ ′ ( z ( l ) ) ) ⏟ ( n × n ) ( W ( l + 1 ) ) T ⏟ ( m × n ) T δ l + 1 ⏟ ( m × 1 ) \color{#00F} \underbrace{ \delta^l }_{(n×1)} =\left(\frac{\partial {\bf z}^{(l+1)}}{\partial {\bf z}^{(l)}}\right)^T\delta^{l+1} =\underbrace{diag\left(\sigma'({\bf z}^{(l)})\right)}_{(n×n)} \underbrace{\left({\bf W}^{(l+1)}\right)^T}_{(m×n)^T}\underbrace{\delta^{l+1}}_{(m×1)} (n×1) δl=(z(l)z(l+1))Tδl+1=(n×n) diag(σ(z(l)))(m×n)T (W(l+1))T(m×1) δl+1

若使用展开的矩阵来表示,则有:
δ l ⏟ ( n × 1 ) = [ σ ′ ( z 1 ( l ) ) 0 ⋯ 0 0 σ ′ ( z 2 ( l ) ) ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ σ ′ ( z n ( l ) ) ] ⏟ ( n × n ) [ w 11 ( l + 1 ) w 12 ( l + 1 ) ⋯ w 1 n ( l + 1 ) w 21 ( l + 1 ) w 22 ( l + 1 ) ⋯ w 2 n ( l + 1 ) ⋮ ⋮ ⋱ ⋮ w m 1 ( l + 1 ) w m 2 ( l + 1 ) ⋯ w m n ( l + 1 ) ] T ⏟ ( m × n ) T [ δ 1 l + 1 δ 2 l + 1 ⋮ δ m l + 1 ] ⏟ ( m × 1 ) \color{#00F} \underbrace{ \delta^l }_{(n×1)} =\underbrace{ \begin{bmatrix} \sigma'(z_1^{(l)})&0&\cdots&0\\ 0&\sigma'(z_2^{(l)})&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&\sigma'(z_n^{(l)}) \end{bmatrix} }_{(n×n)} \underbrace{ \begin{bmatrix} w_{11}^{(l+1)}&w_{12}^{(l+1)}&\cdots&w_{1n}^{(l+1)}\\ w_{21}^{(l+1)}&w_{22}^{(l+1)}&\cdots&w_{2n}^{(l+1)}\\ \vdots&\vdots&\ddots&\vdots\\ w_{m1}^{(l+1)}&w_{m2}^{(l+1)}&\cdots&w_{mn}^{(l+1)} \end{bmatrix}^T }_{(m×n)^T} \underbrace{ \begin{bmatrix} \delta_1^{l+1}\\ \delta_2^{l+1}\\ \vdots\\ \delta_m^{l+1} \end{bmatrix} }_{(m×1)} (n×1) δl=(n×n) σ(z1(l))000σ(z2(l))000σ(zn(l))(m×n)T w11(l+1)w21(l+1)wm1(l+1)w12(l+1)w22(l+1)wm2(l+1)w1n(l+1)w2n(l+1)wmn(l+1)T(m×1) δ1l+1δ2l+1δml+1

其中,上式中设第 l − 1 l-1 l1 层、第 l l l 层、第 l + 1 l+1 l+1 层的节点个数分别为: k k k n n n m m m

📘 (结论5) 如果将 δ l \delta^l δl 拆开,来分别计算第 l l l 层的第 j j j 个节点的 δ j l + 1 \delta_j^{l+1} δjl+1,则有:
δ j l = σ ′ ( z j ( l ) ) ∑ i = 1 m w i j ( l + 1 ) δ i l + 1 \color{#00F} \delta_j^l=\sigma'(z_j^{(l)})\sum_{i=1}^mw_{ij}^{(l+1)}\delta_i^{l+1} δjl=σ(zj(l))i=1mwij(l+1)δil+1

直接尝试展开计算即可得到该结论,这里不予推导

📘 (结论6) 最后,根据 ( 推 论 1 ) (推论1) (1) ( 推 论 2 ) (推论2) (2) 📘 (结论5),得到:
∂ J ( W , b ) ∂ W ( l ) ( n × k ) = d i a g [ σ ′ ( z ( l ) ) ] ⏟ ( n × n ) ( W ( l + 1 ) ) T ⏟ ( m × n ) T δ l + 1 ⏟ ( m × 1 ) ( a ( l − 1 ) ) T ⏟ ( k × 1 ) T ,            ∂ J ( W , b ) ∂ w j ( l ) = δ j L   ( a ( L − 1 ) ) T \color{#00F} \frac{\partial J({\bf W},{\bf b})}{\partial {\bf W}^{(l)}}_{(n×k)} =\underbrace{diag\left[\sigma'({\bf z}^{(l)})\right]}_{(n×n)} \underbrace{\left({\bf W}^{(l+1)}\right)^T}_{(m×n)^T} \underbrace{\delta^{l+1}}_{(m×1)} \underbrace{\left({\bf a}^{(l-1)}\right)^T}_{(k×1)^T}, \ \ \ \ \ \ \ \ \ \ \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_j^{(l)}}=\delta^L_j \ ({\bf a}^{(L-1)})^T W(l)J(W,b)(n×k)=(n×n) diag[σ(z(l))](m×n)T (W(l+1))T(m×1) δl+1(k×1)T (a(l1))T,          wj(l)J(W,b)=δjL (a(L1))T

∂ J ( W , b ) ∂ b ( l ) ( n × 1 ) = d i a g [ σ ′ ( z ( l ) ) ] ⏟ ( n × n ) ( W ( l + 1 ) ) T ⏟ ( m × n ) T δ l + 1 ⏟ ( m × 1 ) ,            ∂ J ( W , b ) ∂ b j ( l ) = δ j L \color{#00F} \frac{\partial J({\bf W},{\bf b})}{\partial {\bf b}^{(l)}}_{(n×1)} =\underbrace{diag\left[\sigma'({\bf z}^{(l)})\right]}_{(n×n)} \underbrace{\left({\bf W}^{(l+1)}\right)^T}_{(m×n)^T} \underbrace{\delta^{l+1}}_{(m×1)}, \ \ \ \ \ \ \ \ \ \ \frac{\partial J({\bf W},{\bf b})}{\partial b_j^{(l)}}=\delta^L_j b(l)J(W,b)(n×1)=(n×n) diag[σ(z(l))](m×n)T (W(l+1))T(m×1) δl+1,          bj(l)J(W,b)=δjL

🔺 当然,损失函数除了均方误差损失函数之外,还有很多其他的损失函数,这里仅以均方误差损失函数为例,其他损失函数的反向传播推导需要读者自己推导

4.神经网络的优化算法——梯度下降(Gradient Descent-GD)

1️⃣首先初始化所有超参数,利用数据集进行前向传播,其中, a j ( 1 ) a_j^{(1)} aj(1) 为输入,即 a j ( 1 ) = x j a_j^{(1)}=x_j aj(1)=xj,根据下式进行前向传播,其中 N l N_{l} Nl 表示第 l l l 层的节点个数,分别求出所有层所有节点的 a j ( l ) ⟹ a ( l ) a_j^{(l)}\Longrightarrow{\bf a}^{(l)} aj(l)a(l)
a j ( l ) = σ ( z j ( l ) ) = σ ( ∑ i ∈ N l − 1 w j i ( l ) a i ( l − 1 ) + b j ( l ) )     或     a ( l ) = σ ( z ( l ) ) = σ ( W ( l ) a ( l − 1 ) + b ( l ) ) a_j^{(l)}=\sigma(z_j^{(l)})=\sigma(\sum_{i\in N_{l-1}}w_{ji}^{(l)}a_i^{(l-1)}+b^{(l)}_j) \ \ \ 或 \ \ \ {\bf a}^{(l)}=\sigma({\bf z}^{(l)})=\sigma({\bf W}^{(l)}{\bf a}^{(l-1)}+{\bf b}^{(l)}) aj(l)=σ(zj(l))=σ(iNl1wji(l)ai(l1)+bj(l))      a(l)=σ(z(l))=σ(W(l)a(l1)+b(l))

2️⃣根据下式先求出第 L L L 层(输出层)的 δ j L ⟹ δ L \delta_j^L\Longrightarrow\delta^L δjLδL
δ j L = ( a j ( L ) − y j ( i ) )   σ ′ ( z j ( L ) )     或     δ L = ( a ( L ) − y ( i ) ) ∗ ∂ z ( L ) ∂ z j ( L ) \delta^L_j=(a_j^{(L)}-y_j^{(i)}) \ \sigma'(z_j^{(L)}) \ \ \ 或 \ \ \ \delta^L =\left({\bf a}^{(L)}-{\bf y}^{(i)}\right)*\frac{\partial {\bf z}^{(L)}}{\partial z_j^{(L)}} δjL=(aj(L)yj(i)) σ(zj(L))      δL=(a(L)y(i))zj(L)z(L)

3️⃣再求出损失函数对第 L L L 层(输出层)的梯度表示式,即:
∂ J ( W , b ) ∂ w j ( L ) = ( a j ( L ) − y j ( i ) )   σ ′ ( z j ( L ) )   ( a ( L − 1 ) ) T ,    ∂ J ( W , b ) ∂ b j ( L ) = ( a j ( L ) − y j ( i ) )   σ ′ ( z j ( L ) ) ⋅ 1 (或) \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_j^{(L)}}=(a_j^{(L)}-y_j^{(i)}) \ \sigma'(z_j^{(L)}) \ ({\bf a}^{(L-1)})^T, \ \ \frac{\partial J({\bf W},{\bf b})}{\partial b_j^{(L)}}=(a_j^{(L)}-y_j^{(i)}) \ \sigma'(z_j^{(L)})·1 \tag{或} wj(L)J(W,b)=(aj(L)yj(i)) σ(zj(L)) (a(L1))T,  bj(L)J(W,b)=(aj(L)yj(i)) σ(zj(L))1()

∂ J ( W , b ) ∂ W ( L ) = δ L ( a ( L − 1 ) ) T ,    ∂ J ( W , b ) ∂ b ( L ) = δ L \frac{\partial J({\bf W},{\bf b})}{\partial {\bf W}^{(L)}}=\delta^L({\bf a}^{(L-1)})^T, \ \ \frac{\partial J({\bf W},{\bf b})}{\partial {\bf b}^{(L)}}=\delta^L W(L)J(W,b)=δL(a(L1))T,  b(L)J(W,b)=δL

4️⃣根据 ( 递 推 公 式 ) (递推公式) (),继续求出第 l l l 层,即除 L L L 外其他所有层的 δ j l ⟹ δ l \delta_j^l\Longrightarrow\delta^l δjlδl
δ j l = σ ′ ( z j ( l ) ) ∑ i = 1 m w i j ( l + 1 ) δ i ( l + 1 )     或     δ l = d i a g [ σ ′ ( z ( l ) ) ] ( W ( l + 1 ) ) T δ l + 1 \delta_j^l=\sigma'(z_j^{(l)})\sum_{i=1}^mw_{ij}^{(l+1)}\delta_i^{(l+1)} \ \ \ 或 \ \ \ \delta^l=diag\left[\sigma'({\bf z}^{(l)})\right]\left({\bf W}^{(l+1)}\right)^T\delta^{l+1} δjl=σ(zj(l))i=1mwij(l+1)δi(l+1)      δl=diag[σ(z(l))](W(l+1))Tδl+1

5️⃣求出损失函数对第 l l l 层(隐藏层或输入层)的梯度表示式,即:
∂ J ( W , b ) ∂ w j ( l ) = δ j L   ( a ( L − 1 ) ) T ,    ∂ J ( W , b ) ∂ b j ( l ) = δ j L (或) \frac{\partial J({\bf W},{\bf b})}{\partial {\bf w}_j^{(l)}}=\delta^L_j \ ({\bf a}^{(L-1)})^T, \ \ \frac{\partial J({\bf W},{\bf b})}{\partial b_j^{(l)}}=\delta^L_j \tag{或} wj(l)J(W,b)=δjL (a(L1))T,  bj(l)J(W,b)=δjL()

∂ J ( W , b ) ∂ W ( l ) = δ l ( a ( l − 1 ) ) T ,    ∂ J ( W , b ) ∂ b ( l ) = δ l \frac{\partial J({\bf W},{\bf b})}{\partial {\bf W}^{(l)}} =\delta^l({\bf a}^{(l-1)})^T, \ \ \frac{\partial J({\bf W},{\bf b})}{\partial {\bf b}^{(l)}} =\delta^l W(l)J(W,b)=δl(a(l1))T,  b(l)J(W,b)=δl

6️⃣设学习率为 α \alpha α,根据梯度下降法,分别更新各层的权重 W ( l ) {\bf W}^{(l)} W(l) b ( l ) {\bf b}^{(l)} b(l)
W ( l ) ⟸ W ( l ) − α ∑ i = 1 b a t c h _ s i z e ∂ J ( W , b ) ∂ W ( l ) = W ( l ) − α ∑ i = 1 b a t c h _ s i z e δ l , i ( a ( l − 1 ) ) T {\bf W}^{(l)}\Longleftarrow {\bf W}^{(l)}-\alpha\sum_{i=1}^{\tt batch\_size}\frac{\partial J({\bf W},{\bf b})}{\partial {\bf W}^{(l)}} ={\bf W}^{(l)}-\alpha\sum_{i=1}^{\tt batch\_size}\delta^{l,i}({\bf a}^{(l-1)})^T W(l)W(l)αi=1batch_sizeW(l)J(W,b)=W(l)αi=1batch_sizeδl,i(a(l1))T

b ( l ) ⟸ b ( l ) − α ∑ i = 1 b a t c h _ s i z e ∂ J ( W , b ) ∂ b ( l ) = b ( l ) − α ∑ i = 1 b a t c h _ s i z e δ l , i {\bf b}^{(l)}\Longleftarrow {\bf b}^{(l)}-\alpha\sum_{i=1}^{\tt batch\_size}\frac{\partial J({\bf W},{\bf b})}{\partial {\bf b}^{(l)}}={\bf b}^{(l)}-\alpha\sum_{i=1}^{\tt batch\_size}\delta^{l,i} b(l)b(l)αi=1batch_sizeb(l)J(W,b)=b(l)αi=1batch_sizeδl,i

其中, b a t c h _ s i z e {\tt batch\_size} batch_size 表示梯度下降时使用的训练样本个数

5.神经网络的激活函数

为什么需要激活函数?而且激活函数还是非线性的?

如果激活函数不是线性的,这里假设 σ ( x ) = k x + c \sigma(x)=kx+c σ(x)=kx+c,是一个线性函数,我们观察第 l l l 层的输出值:
a j ( l ) = σ ( z j ( l ) ) = σ ( ∑ i ∈ N l − 1 w j i ( l ) a i ( l − 1 ) + b j ( l ) ) = k ∑ i ∈ N l − 1 w j i ( l ) a i ( l − 1 ) + b j ( l ) + c a_j^{(l)}=\sigma(z_j^{(l)})=\sigma(\sum_{i\in N_{l-1}}w_{ji}^{(l)}a_i^{(l-1)}+b^{(l)}_j)=k\sum_{i\in N_{l-1}}w_{ji}^{(l)}a_i^{(l-1)}+b^{(l)}_j+c aj(l)=σ(zj(l))=σ(iNl1wji(l)ai(l1)+bj(l))=kiNl1wji(l)ai(l1)+bj(l)+c

我们发现当前第 l l l 层与上一层 l − 1 l-1 l1 层之间仍然是线性关系,如此类推的话,我们发现,神经网络的输出与输入仍然是线性关系,于是,神经网络便退化回单层感知机(线性回归模型),因为线性回归模型的输出与输入就是线性关系,因此需要非线性的激活函数

此外,如果激活函数是线性的,则整个神经网络得到的分界面永远是一个超平面(线性),那么它将永远无法对线性不可分的数据集完全正确地分开,但如果激活函数是非线性的,即为超平面增加非线性成分,使得该超平面可以成为一个超曲面,这样一来就有可能将线性不可分的数据集完全分开了

5.1 Sigmoid 函数

S i g m o i d Sigmoid Sigmoid 激活函数将输入投影到 ( 0 , 1 ) (0,1) (0,1) 区间内,是一个软性的阶跃函数 u ( x ) u(x) u(x),但是 u ( x ) u(x) u(x) 不易求导,如下:
S i g m o i d ( x ) = 1 1 + e ( − x ) Sigmoid(x)={1 \over 1+e^{(-x)}} Sigmoid(x)=1+e(x)1

在这里插入图片描述

S i g m o i d ( x ) Sigmoid(x) Sigmoid(x) 函数的导数如图:
在这里插入图片描述

特点:

  1. 显然, S i g m o i d ( x ) Sigmoid(x) Sigmoid(x) 函数的导数在 x ⟶ 0 x\longrightarrow0 x0 时值较大, x x x 越远离 0 0 0,其值越小,在梯度反向传播时,每传递一层梯度值至少都会减小为原来的 0.25 0.25 0.25 倍,如果神经网络的隐藏层很多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象
    因此,在使用 S i g m o i d ( x ) Sigmoid(x) Sigmoid(x) 应该注意输入激活函数 σ ( z j ( l ) ) \sigma(z^{(l)}_j) σ(zj(l)) z j ( l ) z^{(l)}_j zj(l) 的值是否分布在远离 0 0 0 的两端,如果是,则很容易出现梯度消失的现象
  2. S i g m o i d ( x ) Sigmoid(x) Sigmoid(x) 函数输出激活值的均值不是 0 0 0,这样会使权重更新效率降低
    因为这会导致后层神经元的输入是非 0 0 0 均值的信号,这会对梯度产生影响:假设后层神经元的输入都为正,那么对 W ( l ) {\bf W}^{(l)} W(l) 求局部梯度结果都为正,这样在反向传播的过程中 W ( l ) {\bf W}^{(l)} W(l) 要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使收敛速度缓慢
  3. 包含幂运算,求解耗时,对于大型网络的训练时间会延长

5.2 Tanh 函数

T a n h Tanh Tanh 激活函数将输入投影到 ( − 1 , 1 ) (-1,1) (1,1),形状上它和 S i g m o i d Sigmoid Sigmoid 函数是相像的:
T a n h ( x ) = 1 − e ( − 2 x ) 1 + e ( − 2 x ) = e x − e ( − x ) e x + e ( − x ) Tanh(x)={1-e^{(-2x)} \over 1+e^{(-2x)}}={e^{x}-e^{(-x)} \over e^{x}+e^{(-x)}} Tanh(x)=1+e(2x)1e(2x)=ex+e(x)exe(x)

在这里插入图片描述

T a n h ( x ) Tanh(x) Tanh(x) 函数的导数如图:
在这里插入图片描述

特点:
T a n h ( x ) Tanh(x) Tanh(x) 函数解决了输出激活值的均值不是 0 0 0 的问题,但显然,梯度消失的问题尚未解决

5.3 ReLU 函数(常用)

R e L U ReLU ReLU 激活函数将输入投影到 ( 0 , x ) (0,x) (0,x)
R e L U ( x ) = m a x ( 0 , x ) ReLU(x)=max(0,x) ReLU(x)=max(0,x)

在这里插入图片描述

R e L U ( x ) ReLU(x) ReLU(x) 函数的导数如图:
在这里插入图片描述

特点:

  1. 使用 R e L U ReLU ReLU 函数进行 S G D SGD SGD 的收敛速度会比 S i g m o i d Sigmoid Sigmoid T a n h Tanh Tanh 函数快很多
  2. R e L U ReLU ReLU 函数只有线性关系,计算速度比 S i g m o i d Sigmoid Sigmoid T a n h Tanh Tanh 函数的幂运算快得多
  3. R e L U ReLU ReLU 函数可能会导致神经元 “坏死”:由于 R e L U ReLU ReLU x < 0 x<0 x<0 时梯度为 0 0 0,这样就导致值为负数的梯度在经过 R e L U ReLU ReLU 时被置零,并且这个神经元有可能再也不会被任何数据激活,即神经元 “坏死”
    学习率不要设置成太大,设置为合适的值才能能好地避免这个问题

5.4 Swish 函数

文献地址:Searching for Activation Functions
S w i s h Swish Swish 函数由 G o o g l e Google Google 提出,融合了几个激活函数的优点:
S w i s h ( x ) = x ⋅ S i g m o i d ( β x ) , β ∈ R Swish(x)=x·Sigmoid(\beta x),\beta\in R Swish(x)=xSigmoid(βx)βR

在这里插入图片描述

S w i s h ( x ) Swish(x) Swish(x) 函数的导数如图:
在这里插入图片描述

特点:
S w i s h Swish Swish 函数可以看作是介于线性函数与 R e L U ReLU ReLU 函数之间的平滑函数,其性能较好

如果需要进行多分类任务,则可能使用 S o f t m a x ( x ) Softmax(x) Softmax(x) 激活函数来进行 S o f t m a x Softmax Softmax 回归,我们在下一章会讲

6.常见激活函数的梯度和权重更新方法

1️⃣激活函数 σ ( x ) = S i g m o i d ( x ) \sigma(x)=Sigmoid(x) σ(x)=Sigmoid(x) 的导数:
∵ σ ′ ( x ) = S i g m o i d ′ ( x ) = e ( − x ) ( 1 + e ( − x ) ) 2 = 1 + e ( − x ) − 1 ( 1 + e ( − x ) ) 2 = 1 + e ( − x ) − 1 1 + e ( − x ) ⋅ 1 1 + e ( − x ) = ( 1 − 1 1 + e ( − x ) ) ⋅ 1 1 + e ( − x ) = σ ( x ) ( 1 − σ ( x ) ) \begin{aligned} ∵\sigma'(x)&=Sigmoid'(x)={e^{(-x)} \over (1+e^{(-x)})^2}={1+e^{(-x)}-1 \over (1+e^{(-x)})^2}\\ &={1+e^{(-x)}-1 \over 1+e^{(-x)}}·{1 \over 1+e^{(-x)}}\\ &=\left(1-{1 \over 1+e^{(-x)}}\right)·{1 \over 1+e^{(-x)}}\\ &=\sigma(x)(1-\sigma(x)) \end{aligned} σ(x)=Sigmoid(x)=(1+e(x))2e(x)=(1+e(x))21+e(x)1=1+e(x)1+e(x)11+e(x)1=(11+e(x)1)1+e(x)1=σ(x)(1σ(x))

∴ σ ′ ( z j ( l ) ) = σ ( z j ( l ) ) ( 1 − σ ( z j ( l ) ) ) = a j ( l ) ( 1 − a j ( l ) ) ∴\sigma'(z_j^{(l)})=\sigma(z_j^{(l)})(1-\sigma (z_j^{(l)}))=a_j^{(l)}(1-a_j^{(l)}) σ(zj(l))=σ(zj(l))(1σ(zj(l)))=aj(l)(1aj(l))

进一步得到:
δ j L = ( a j ( L ) − y j ( i ) )   σ ′ ( z j ( L ) ) = ( a j ( L ) − y j ( i ) ) a j ( L ) ( 1 − a j ( L ) ) \delta^L_j=(a_j^{(L)}-y_j^{(i)}) \ \sigma'(z_j^{(L)})=(a_j^{(L)}-y_j^{(i)})a_j^{(L)}(1-a_j^{(L)}) δjL=(aj(L)yj(i)) σ(zj(L))=(aj(L)yj(i))aj(L)(1aj(L))

δ j l = σ ′ ( z j ( l ) ) ∑ i = 1 m w i j ( l + 1 ) δ i ( l + 1 ) = a j ( l ) ( 1 − a j ( l ) ) ∑ i = 1 m w i j ( l + 1 ) δ i ( l + 1 ) \delta_j^l=\sigma'(z_j^{(l)})\sum_{i=1}^mw_{ij}^{(l+1)}\delta_i^{(l+1)} =a_j^{(l)}(1-a_j^{(l)})\sum_{i=1}^mw_{ij}^{(l+1)}\delta_i^{(l+1)} δjl=σ(zj(l))i=1mwij(l+1)δi(l+1)=aj(l)(1aj(l))i=1mwij(l+1)δi(l+1)

2️⃣激活函数 σ ( x ) = T a n h ( x ) \sigma(x)=Tanh(x) σ(x)=Tanh(x) 的导数:
∵ σ ′ ( x ) = T a n h ′ ( x ) = [ 2 S i g m o i d ( 2 x ) − 1 ] ′ = 1 − σ 2 ( x ) ∵\sigma'(x)=Tanh'(x)=\left[2Sigmoid(2x)-1\right]'=1-\sigma^2(x) σ(x)=Tanh(x)=[2Sigmoid(2x)1]=1σ2(x)

较为简单,这里不再详细推导
∴ σ ′ ( z j ( l ) ) = 1 − σ 2 ( z j ( l ) ) = 1 − ( a j ( l ) ) 2 ∴\sigma'(z_j^{(l)})=1-\sigma^2(z_j^{(l)})=1-\left(a_j^{(l)}\right)^2 σ(zj(l))=1σ2(zj(l))=1(aj(l))2

进一步得到:
δ j L = ( a j ( L ) − y j ( i ) )   σ ′ ( z j ( L ) ) = ( a j ( L ) − y j ( i ) ) [ 1 − ( a j ( l ) ) 2 ] \delta^L_j=(a_j^{(L)}-y_j^{(i)}) \ \sigma'(z_j^{(L)})=(a_j^{(L)}-y_j^{(i)})\left[1-\left(a_j^{(l)}\right)^2\right] δjL=(aj(L)yj(i)) σ(zj(L))=(aj(L)yj(i))[1(aj(l))2]

δ j l = σ ′ ( z j ( l ) ) ∑ i = 1 m w i j ( l + 1 ) δ i ( l + 1 ) = [ 1 − ( a j ( l ) ) 2 ] ∑ i = 1 m w i j ( l + 1 ) δ i ( l + 1 ) \delta_j^l=\sigma'(z_j^{(l)})\sum_{i=1}^mw_{ij}^{(l+1)}\delta_i^{(l+1)} =\left[1-\left(a_j^{(l)}\right)^2\right]\sum_{i=1}^mw_{ij}^{(l+1)}\delta_i^{(l+1)} δjl=σ(zj(l))i=1mwij(l+1)δi(l+1)=[1(aj(l))2]i=1mwij(l+1)δi(l+1)

3️⃣激活函数 σ ( x ) = R e L U ( x ) \sigma(x)=ReLU(x) σ(x)=ReLU(x) 的导数:
∵ σ ′ ( x ) = R e L U ′ ( x ) = { 1 ,   x > 0 0 ,   x ≤ 0 ∵\sigma'(x)=ReLU'(x)=\begin{cases}1&,\ x>0\\0&,\ x\leq0\end{cases} σ(x)=ReLU(x)={10, x>0, x0

∴ σ ′ ( z j ( l ) ) = { 1 ,   z j ( l ) > 0 0 ,   z j ( l ) ≤ 0 ∴\sigma'(z_j^{(l)})=\begin{cases}1&,\ z_j^{(l)}>0\\0&,\ z_j^{(l)}\leq0\end{cases} σ(zj(l))={10, zj(l)>0, zj(l)0

进一步得到:
δ j L = ( a j ( L ) − y j ( i ) )   σ ′ ( z j ( L ) ) = { ( a j ( L ) − y j ( i ) ) ,   z j ( l ) > 0 0 ,   z j ( l ) ≤ 0 \delta^L_j=(a_j^{(L)}-y_j^{(i)}) \ \sigma'(z_j^{(L)})=\begin{cases}(a_j^{(L)}-y_j^{(i)})&,\ z_j^{(l)}>0\\0&,\ z_j^{(l)}\leq0\end{cases} δjL=(aj(L)yj(i)) σ(zj(L))={(aj(L)yj(i))0, zj(l)>0, zj(l)0

δ j l = σ ′ ( z j ( l ) ) ∑ i = 1 m w i j ( l + 1 ) δ i ( l + 1 ) = { ∑ i = 1 m w i j ( l + 1 ) δ i ( l + 1 ) ,   z j ( l ) > 0 0 ,   z j ( l ) ≤ 0 \delta_j^l=\sigma'(z_j^{(l)})\sum_{i=1}^mw_{ij}^{(l+1)}\delta_i^{(l+1)} =\begin{cases}\sum_{i=1}^mw_{ij}^{(l+1)}\delta_i^{(l+1)}&,\ z_j^{(l)}>0\\0&,\ z_j^{(l)}\leq0\end{cases} δjl=σ(zj(l))i=1mwij(l+1)δi(l+1)={i=1mwij(l+1)δi(l+1)0, zj(l)>0, zj(l)0

其他激活函数同理即可……


参考资料:
[1]Search 动手学深度学习课程
[2]统计学习方法,李航
[3]感知机的收敛性(Novikoff定理)证明
[4]多层感知机(MLP)
[5]Searching for Activation Functions

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值