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

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

目录:

  • PyTorch深度学习(四):神经网络(上)——理论推导
  • 一、感知机(Perceptron)
    • 1.感知机概述
    • 2.感知机学习策略
    • 3.感知机学习算法
    • 4.感知机的收敛定理(Novikoff定理)
  • 二、神经网络(Neural Network)、多层感知机(Multilayer Perceptron-MLP)
    • 1.由XOR问题引出MLP和NN
    • 2.神经网络的预测——前向传播(Forward Propagation)
    • 3.神经网络损失函数的反向传播(Back Propagation-BP)
    • 4.神经网络的优化算法——梯度下降(Gradient Descent-GD)
    • 5.神经网络的激活函数
      • 5.1 Sigmoid 函数
      • 5.2 Tanh 函数
      • 5.3 ReLU 函数(常用)
      • 5.4 Swish 函数
    • 6.常见激活函数的梯度和权重更新方法


一、感知机(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

PyTorch深度学习(四):神经网络(上)——理论推导_第1张图片

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

感知机是一种线性分类模型,它分为两部分:线性部分激活函数。如图所示,它可以根据输入空间(特征空间)的线性回归值: ⟨ 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

PyTorch深度学习(四):神经网络(上)——理论推导_第2张图片

注意,传统的感知机使用的激活函数是 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 时,则被分为负类,以猫狗分类为例,如图:
PyTorch深度学习(四):神经网络(上)——理论推导_第3张图片
当然,非线性函数(激活函数) 除了符号函数 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_{1R=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 γ
PyTorch深度学习(四):神经网络(上)——理论推导_第4张图片

(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)问题,如图所示:
PyTorch深度学习(四):神经网络(上)——理论推导_第5张图片
作一条直线 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

虽然一条直线无法解决数据非线性可分的问题——感知机,但使用多条直线是可以解决样本非线性可分时的分类问题的——多层感知机,如图:
PyTorch深度学习(四):神经网络(上)——理论推导_第6张图片
如上图所示,我们可以先通过蓝色的直线,将 ① ③ \color{#0F0}{①}\color{#F00}{③} 分为正类 “ + + +”,将 ② ④ \color{#F00}{②}\color{#0F0}{④} 分为负类 “ − - ”;再通过橘色的直线,将 ① ② \color{#0F0}{①}\color{#F00}{②} 分为正类 “ + + +”,将 ③ ④ \color{#F00}{③}\color{#0F0}{④} 分为负类 “ − -

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

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

我们可以继续增加多个输入层、隐藏层、输出层的节点,就可以构成复杂的多层感知机,如图:
PyTorch深度学习(四):神经网络(上)——理论推导_第7张图片

  • 为了增加 多层感知机(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),如图所示:
PyTorch深度学习(四):神经网络(上)——理论推导_第8张图片

则对于第二层,它的输入是特征向量 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 ) )

你可能感兴趣的:(PyTorch深度学习,神经网络,深度学习,pytorch,数学)