写在前面
· 最近在学习《机器学习》. 主要是看浙江大学胡浩基老师的网课,结合周志华老师的西瓜书来学. 为了理清思路和推公式就敲了这样一个读书笔记. 初次学习难免会有错漏,欢迎批评指正. 这份笔记主要用途还是用来自己复习回顾. 当然如果对大家有帮助那就更好了hhh
· 注:神经网络这部分的笔记大部分是基于浙大《机器学习》的逻辑进行整理的.
· 神经网络的诞生是集体的智慧
· 近年发展迅速,是目前机器学习领域最火的方向.
· 上世纪50-60年代即奠定理论基础.
· 大数据+算力迅速提升,神经网络层数得以提升,性能更好.
接下来以人工神经网络发展历程为线索进行介绍.
1943年,心理学家W.S.McCulloch和数理逻辑学家W.Pitts基于神经元的生理特征,建立了单个神经元的数学模型( M-P \text{M-P} M-P模型)
y k = φ ( ∑ i = 1 m ω k i x i + b k ) = φ ( W k T X + b ) y_k=\varphi \left( \sum_{i=1}^m{\omega _{ki}x_i+b_k} \right) =\varphi \left( W_{k}^{\mathrm{T}}X+b \right) yk=φ(i=1∑mωkixi+bk)=φ(WkTX+b)
1957年,Frank Rosenblatt从纯数学的度重新考察这一模型,指岀能够从一些输入输出对 ( X , y ) (X,y) (X,y)中通过学习算法获得权重 W W W和 b b b.
给定一些输入输出对 ( X , y ) (X,y) (X,y),其中 y = ± 1 y=±1 y=±1,求一个函数,使 f ( X ) = y f(X)=y f(X)=y.
设定 f ( X ) = s i g n ( W T X + b ) f(X)=\mathrm{sign}(W^{\mathrm{T}}X+b) f(X)=sign(WTX+b),从一堆输入输出中自动学习,获得 W W W和 b b b.
输入 ( X i , y i ) ( i = 1 , 2 , ⋯ , n ) (X_i,y_i)(i=1,2,\cdots,n) (Xi,yi)(i=1,2,⋯,n)
(1)随机选择 W W W和 b b b.
(2)取一个训练样本 ( X i , y i ) (X_i,y_i) (Xi,yi)
(i)若 W T X i + b > 0 W^{\mathrm{T}}X_i+b>0 WTXi+b>0且 y i = − 1 y_i=-1 yi=−1,则 W : = W − X , b : = b − 1 W:=W-X, b:=b-1 W:=W−X,b:=b−1;
(ii)若 W T X i + b < 0 W^{\mathrm{T}}X_i+b<0 WTXi+b<0且 y i = + 1 y_i=+1 yi=+1,则 W : = W + X , b : = b + 1 W:=W+X, b:=b+1 W:=W+X,b:=b+1.
(3)再取另一个 ( X , y ) (X,y) (X,y)回到(2).
(4)终止条件:直到所有输入输岀对都不满足(2)中(i)和(ii)之一,退出循环.
与 SVM \text{SVM} SVM的本质区别: SVM \text{SVM} SVM以全局的眼光来看训练样本,而感知机算法则着眼单独的个体,在循环中不断调整参数.
在不断的调整中,是否会出现参数不停震荡而不收敛于某一个值的情况?
Rosenblatt给出了参数能够收敛的证明. 在证明之前,先做一些准备工作.
定义一个增广向量 X → \overrightarrow{X} X,使得
{ 若 y = + 1 , 则 X → = [ X 1 ] 若 y = − 1 , 则 X → = [ − X − 1 ] \begin{cases} \text{若}y=+1,\text{则}\overrightarrow{X}=\left[ \begin{array}{c} X\\ 1\\ \end{array} \right]\\\\ \text{若}y=-1,\text{则}\overrightarrow{X}=\left[ \begin{array}{c} -X\\ -1\\ \end{array} \right]\\ \end{cases} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧若y=+1,则X=[X1]若y=−1,则X=[−X−1]定义增广 W → \overrightarrow{W} W如下:
W → = [ W b ] \overrightarrow{W}=\left[ \begin{array}{c} W\\ b\\ \end{array} \right] W=[Wb]
则算法可改写为:
输入 X → i ( i = 1 , 2 , ⋯ , n ) \overrightarrow{X}_i(i=1,2,\cdots,n) Xi(i=1,2,⋯,n)
(1)随机选择 W → \overrightarrow{W} W.
(2)取一个训练样本 X → i \overrightarrow{X}_i Xi. 若 W → T X → i < 0 \overrightarrow{W}^{\mathrm{T}}\overrightarrow{X}_i<0 WTXi<0,则 W → : = W → + X → i \overrightarrow{W}:=\overrightarrow{W}+\overrightarrow{X}_i W:=W+Xi.
(3)再取另一个 X → i \overrightarrow{X}_i Xi回到(2).
(4)终止条件:直到所有输入输岀对都不满足.(2)中(i)和(ii)之一,退出循环.
感知机算法收敛定理可表述为:
输入 { X → i } i = 1 , ⋯ , N \left\{ \overrightarrow{X}_i \right\} _{i=1,\cdots ,N} {Xi}i=1,⋯,N,若线性可分,即
∃ W → o p t , s . t . W → o p t X i → > 0 ( i = 1 , 2 , ⋯ , N ) \exists \overrightarrow{W}_{\mathrm{opt}},\ \mathrm{s}.\mathrm{t}.\ \overrightarrow{W}_{\mathrm{opt}}\overrightarrow{X_i}>0\left( i=1,2,\cdots ,N \right) ∃Wopt, s.t. WoptXi>0(i=1,2,⋯,N)则利用上述感知机算法,经过有限步后得到一个 W → \overrightarrow{W} W,使得
W → T X → i > 0 ( i = 1 , 2 , ⋯ , N ) . \overrightarrow{W}^{\mathrm{T}}\overrightarrow{X}_i>0\left( i=1,2,\cdots ,N \right) . WTXi>0(i=1,2,⋯,N).
下面给出证明.
证明:
不失一般性,设 ∥ W → o p t ∥ = 1 \left\| \overrightarrow{W}_{\mathrm{opt}} \right\| =1 ∥∥∥Wopt∥∥∥=1.
假设第 k k k步所得的 W → \overrightarrow{W} W是 W → ( k ) \overrightarrow{W}\left( k \right) W(k),且有一个 X i → \overrightarrow{X_i} Xi,使得
W → T ( k ) X i → < 0 \overrightarrow{W}^T\left( k \right) \overrightarrow{X_i}<0 WT(k)Xi<0根据感知机算法,有
W → ( k + 1 ) = W → ( k ) + X i → W → ( k + 1 ) − a W → o p t = W → ( k ) + X i → − a W → o p t \overrightarrow{W}\left( k+1 \right) =\overrightarrow{W}\left( k \right) +\overrightarrow{X_i} \\\\ \overrightarrow{W}\left( k+1 \right) -a\overrightarrow{W}_{\mathrm{opt}}=\overrightarrow{W}\left( k \right) +\overrightarrow{X_i}-a\overrightarrow{W}_{\mathrm{opt}} W(k+1)=W(k)+XiW(k+1)−aWopt=W(k)+Xi−aWopt
取模的平方
∥ W → ( k + 1 ) − a W → o p t ∥ 2 = ∥ W → ( k ) + X i → − a W → o p t ∥ 2 \left\| \overrightarrow{W}\left( k+1 \right) -a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2=\left\| \overrightarrow{W}\left( k \right) +\overrightarrow{X_i}-a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2 ∥∥∥W(k+1)−aWopt∥∥∥2=∥∥∥W(k)+Xi−aWopt∥∥∥2 ∥ W → ( k + 1 ) − a W → o p t ∥ 2 = ∥ W → ( k ) + X i → − a W → o p t ∥ 2 = ∥ ( W → ( k ) − a W → o p t ) + X i → ∥ 2 = ∥ W → ( k ) − a W → o p t ∥ 2 + ∥ X i → ∥ 2 + 2 W → T ( k ) X i → − 2 a W → o p t T X i → \begin{aligned} \left\| \overrightarrow{W}\left( k+1 \right) -a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2&=\left\| \overrightarrow{W}\left( k \right) +\overrightarrow{X_i}-a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2 \\ &=\left\| \left( \overrightarrow{W}\left( k \right) -a\overrightarrow{W}_{\mathrm{opt}} \right) +\overrightarrow{X_i} \right\| ^2 \\ &=\left\| \overrightarrow{W}\left( k \right) -a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2+\left\| \overrightarrow{X_i} \right\| ^2+2\overrightarrow{W}^{\mathrm{T}}\left( k \right) \overrightarrow{X_i}-2a\overrightarrow{W}_{\mathrm{opt}}^{\mathrm{T}}\overrightarrow{X_i} \end{aligned} ∥∥∥W(k+1)−aWopt∥∥∥2=∥∥∥W(k)+Xi−aWopt∥∥∥2=∥∥∥(W(k)−aWopt)+Xi∥∥∥2=∥∥∥W(k)−aWopt∥∥∥2+∥∥∥Xi∥∥∥2+2WT(k)Xi−2aWoptTXi注意到最后两项
W → T ( k ) X i → < 0 , W → o p t T X i → > 0 \overrightarrow{W}^{\mathrm{T}}\left( k \right) \overrightarrow{X_i}<0, \overrightarrow{W}_{\mathrm{opt}}^{\mathrm{T}}\overrightarrow{X_i}>0 WT(k)Xi<0,WoptTXi>0一定可以找到足够大的 a a a,使得
∥ X i → ∥ 2 + 2 W → T ( k ) X i → − 2 a W → o p t T X i → < 0 \left\| \overrightarrow{X_i} \right\| ^2+2\overrightarrow{W}^{\mathrm{T}}\left( k \right) \overrightarrow{X_i}-2a\overrightarrow{W}_{\mathrm{opt}}^{\mathrm{T}}\overrightarrow{X_i}<0 ∥∥∥Xi∥∥∥2+2WT(k)Xi−2aWoptTXi<0进而
∥ W → ( k + 1 ) − a W → o p t ∥ 2 < ∥ W → ( k ) − a W → o p t ∥ 2 \left\| \overrightarrow{W}\left( k+1 \right) -a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2<\left\| \overrightarrow{W}\left( k \right) -a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2 ∥∥∥W(k+1)−aWopt∥∥∥2<∥∥∥W(k)−aWopt∥∥∥2
定义
β = max i = 1 , . . . , N ∥ X i → ∥ , γ = min i = 1 , . . . , N W → o p t X i → \beta =\underset{i=1,...,N}{\max}\left\| \overrightarrow{X_i} \right\| , \gamma =\underset{i=1,...,N}{\min}\overrightarrow{W}_{\mathrm{opt}}\overrightarrow{X_i} β=i=1,...,Nmax∥∥∥Xi∥∥∥,γ=i=1,...,NminWoptXi取
a = β 2 + 1 2 γ a=\frac{\beta ^2+1}{2\gamma} a=2γβ2+1则
∥ W → ( k + 1 ) − a W → o p t ∥ 2 < ∥ W → ( k ) − a W → o p t ∥ 2 − 1. \left\| \overrightarrow{W}\left( k+1 \right) -a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2<\left\| \overrightarrow{W}\left( k \right) -a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2-1. ∥∥∥W(k+1)−aWopt∥∥∥2<∥∥∥W(k)−aWopt∥∥∥2−1.
取 D = ∥ W → ( 0 ) − a W → o p t ∥ D=\left\| \overrightarrow{W}\left( 0 \right) -a\overrightarrow{W}_{\mathrm{opt}} \right\| D=∥∥∥W(0)−aWopt∥∥∥,则至多经过 D 2 D^2 D2步, W → \overrightarrow{W} W将会收敛于 a W → o p t . □ a\overrightarrow{W}_{\mathrm{opt}}.\quad \Box aWopt.□
补充说明: D D D为有限大的证明.
D 2 = ∥ W → ( 0 ) − a W → o p t ∥ 2 = ∥ W → ( 0 ) ∥ 2 + a 2 ∥ W → o p t ∥ 2 − 2 a W → T ( 0 ) W → o p t = ∥ W → ( 0 ) ∥ 2 + a 2 ∥ W → o p t ∥ 2 − 2 a ∥ W → ( 0 ) ∥ ∥ W → o p t ∥ cos θ ⩽ ∥ W → ( 0 ) ∥ 2 + a 2 + 2 a ∥ W → ( 0 ) ∥ \begin{aligned} D^2&=\left\| \overrightarrow{W}\left( 0 \right) -a\overrightarrow{W}_{\mathrm{opt}} \right\| ^2 \\ &=\left\| \overrightarrow{W}\left( 0 \right) \right\| ^2+a^2\left\| \overrightarrow{W}_{\mathrm{opt}} \right\| ^2-2a\overrightarrow{W}^{\mathrm{T}}\left( 0 \right) \overrightarrow{W}_{\mathrm{opt}} \\ &=\left\| \overrightarrow{W}\left( 0 \right) \right\| ^2+a^2\left\| \overrightarrow{W}_{\mathrm{opt}} \right\| ^2-2a\left\| \overrightarrow{W}\left( 0 \right) \right\| \left\| \overrightarrow{W}_{\mathrm{opt}} \right\| \cos \theta \\ &\leqslant \left\| \overrightarrow{W}\left( 0 \right) \right\| ^2+a^2+2a\left\| \overrightarrow{W}\left( 0 \right) \right\| \end{aligned} D2=∥∥∥W(0)−aWopt∥∥∥2=∥∥∥W(0)∥∥∥2+a2∥∥∥Wopt∥∥∥2−2aWT(0)Wopt=∥∥∥W(0)∥∥∥2+a2∥∥∥Wopt∥∥∥2−2a∥∥∥W(0)∥∥∥∥∥∥Wopt∥∥∥cosθ⩽∥∥∥W(0)∥∥∥2+a2+2a∥∥∥W(0)∥∥∥
Minsky创造了线性可分(不可分)的概念(1969《Perceptron》). 书中提及日常生活中很多事物是非线性可分的.
例子:识别一个二值图是否全连通(下图例子中, class 1 \text{class 1} class 1为全连通, class 2 \text{class 2} class 2不是全连通).
人们认为既然大多事物非线性可分,而感知机只能解决线性可分的问题,用途较为狭隘,研究它的实际意义不大,导致人工智能发展进入了停滞时期.
想法:使用非线性模型来划分非线性的样本.
这样一个神经网络包含两层. 其中 φ ( ⋅ ) \varphi(\cdot) φ(⋅)是一个非线性函数.
若没有 φ ( ⋅ ) \varphi(\cdot) φ(⋅),会导致输出与输入仍呈线性关系. 具体计算如下:
{ a 1 = w 11 x 1 + w 12 x 2 + b 1 a 2 = w 21 x 1 + w 22 x 2 + b 2 z 1 = φ ( a 1 ) z 2 = φ ( a 2 ) y = w 1 z 1 + w 2 z 2 + b ⇒ y = w 1 φ ( w 11 x 1 + w 12 x 2 + b 1 ) + w 2 φ ( w 21 x 1 + w 22 x 2 + b 2 ) \begin{cases} a_1=w_{11}x_1+w_{12}x_2+b_1\\ a_2=w_{21}x_1+w_{22}x_2+b_2\\ z_1=\varphi \left( a_1 \right)\\ z_2=\varphi \left( a_2 \right)\\ y=w_1z_1+w_2z_2+b\\ \end{cases}\Rightarrow y=w_1\varphi \left( w_{11}x_1+w_{12}x_2+b_1 \right) +w_2\varphi \left( w_{21}x_1+w_{22}x_2+b_2 \right) ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧a1=w11x1+w12x2+b1a2=w21x1+w22x2+b2z1=φ(a1)z2=φ(a2)y=w1z1+w2z2+b⇒y=w1φ(w11x1+w12x2+b1)+w2φ(w21x1+w22x2+b2)如果没有 φ ( ⋅ ) \varphi(\cdot) φ(⋅),显然 y y y是关于 x 1 , x 2 x_1,x_2 x1,x2的线性函数. 虽学习的参数多了,但与单层的神经网络的学习结果没有任何区别. φ ( ⋅ ) \varphi(\cdot) φ(⋅)叫作激活函数.
原因:如果非线性函数用阶跃函数,那么三层神经网络可以模拟任意的非线性函数,说明如下.
【例1】 考虑平面上的三角形区域 C 1 C_1 C1与其外部区域 C 2 C_2 C2. 规定直线划分平面包含 C 1 C_1 C1的一侧,直线方程左侧 > 0 >0 >0.
要使得输出 y = 1 y=1 y=1(表示 ( x 1 , x 1 ) ∈ C 1 (x_1,x_1)\in C_1 (x1,x1)∈C1),则需要 w 1 , w 2 , w 3 w_1,w_2,w_3 w1,w2,w3全为 1 1 1,否则输出 y = 0 y=0 y=0. 那么只需设置参数 b = − 2.5 b=-2.5 b=−2.5即可.
【例3】 若 C 1 C_1 C1为圆形?
考虑用无数条数直线分割区域,那么将会有无穷多个神经元.
【例4】 若 C 1 C_1 C1为不连通的图形?
构建如下图所示的三层神经网络:
接下来还需要解决两个问题:
① 如何只通过数据来获得神经网络的参数?
② 每一层神经元个数,神经网络的层数如何设计?
目前还没有完备的理论来回答这两个问题. 很多时候是依靠不断的实验与经验来解决.
核心思想:梯度下降法求局部极值(Gradient Descent Method).
S t e p 1 : Step 1: Step1: 找一个 w 0 w_0 w0.
S t e p 2 : Step 2: Step2: 设 k = 0 k=0 k=0,若
d f ( w ) d w ∣ w k = 0 , \left. \frac{\mathrm{d}f\left( w \right)}{\mathrm{d}w} \right|_{w_k}=0, dwdf(w)∣∣∣∣wk=0,则退出循环. 否则
w k + 1 = w k − α d f ( w ) d w ∣ w k w_{k+1}=w_k-\alpha \left. \frac{\mathrm{d}f\left( w \right)}{\mathrm{d}w} \right|_{w_k} wk+1=wk−αdwdf(w)∣∣∣∣wk重复 S t e p 2 Step 2 Step2.
其中 α > 0 \alpha>0 α>0,称作步长或学习率,每步的步长可不同.
输入 { ( X i , Y i ) } i = 1 , ⋯ , N \left\{ \left(X_i,Y_i \right) \right\} _{i=1,\cdots ,N} {(Xi,Yi)}i=1,⋯,N.
针对输入 ( X , Y ) (X,Y) (X,Y),定义优化函数
E = 1 2 ( y − Y ) 2 . E=\frac{1}{2}\left( y-Y \right) ^2. E=21(y−Y)2.
S t e p 1 : Step1: Step1: 随机取
( w 11 w 12 w 21 w 22 b 1 b 2 w 1 w 2 b ) \left( \begin{matrix} w_{11}& w_{12}& w_{21}& w_{22}& b_1& b_2& w_1& w_2& b\\ \end{matrix} \right) (w11w12w21w22b1b2w1w2b)
S t e p 2 : Step2: Step2: 对所有 w w w,求 ∂ E ∂ w \frac{\partial E}{\partial w} ∂w∂E;
对所有 b b b,求 ∂ E ∂ b \frac{\partial E}{\partial b} ∂b∂E;
S t e p 3 : Step3: Step3: 计算
{ w ( n e w ) : = w ( o l d ) − α ∂ E ∂ w ∣ w ( o l d ) b ( n e w ) : = b ( o l d ) − α ∂ E ∂ b ∣ b ( o l d ) \left\{ \begin{array}{c} w^{\left( \mathrm{new} \right)}:=w^{\left( \mathrm{old} \right)}-\alpha \left. \frac{\partial E}{\partial w} \right|_{w^{\left( \mathrm{old} \right)}}\\ b^{\left( \mathrm{new} \right)}:=b^{\left( \mathrm{old} \right)}-\alpha \left. \frac{\partial E}{\partial b} \right|_{b^{\left( \mathrm{old} \right)}}\\ \end{array} \right. {w(new):=w(old)−α∂w∂E∣∣w(old)b(new):=b(old)−α∂b∂E∣∣b(old)
S t e p 4 : Step4: Step4: 当所有的
∂ E ∂ w = ∂ E ∂ b = 0 \frac{\partial E}{\partial w}=\frac{\partial E}{\partial b}=0 ∂w∂E=∂b∂E=0时,退出循环.
{ a 1 = w 11 x 1 + w 12 x 2 + b 1 a 2 = w 21 x 1 + w 22 x 2 + b 2 z 1 = φ ( a 1 ) z 2 = φ ( a 2 ) y = w 1 z 1 + w 2 z 2 + b \begin{cases} a_1=w_{11}x_1+w_{12}x_2+b_1\\ a_2=w_{21}x_1+w_{22}x_2+b_2\\ z_1=\varphi \left( a_1 \right)\\ z_2=\varphi \left( a_2 \right)\\ y=w_1z_1+w_2z_2+b\\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧a1=w11x1+w12x2+b1a2=w21x1+w22x2+b2z1=φ(a1)z2=φ(a2)y=w1z1+w2z2+b
首先计算 d E d y \frac{\mathrm{d}E}{\mathrm{d}y} dydE,即
d E d y = y − Y . \frac{\mathrm{d}E}{\mathrm{d}y}=y-Y. dydE=y−Y.然后计算
∂ E ∂ a 1 = d E d y ⋅ ∂ y ∂ z 1 ⋅ d z 1 d a 1 = ( y − Y ) w 1 φ ′ ( a 1 ) , ∂ E ∂ a 2 = d E d y ⋅ ∂ y ∂ z 2 ⋅ d z 2 d a 2 = ( y − Y ) w 2 φ ′ ( a 2 ) . \frac{\partial E}{\partial a_1}=\frac{\mathrm{d}E}{\mathrm{d}y}\cdot \frac{\partial y}{\partial z_1}\cdot \frac{\mathrm{d}z_1}{\mathrm{d}a_1}=\left( y-Y \right) w_1\varphi '\left( a_1 \right), \\ \\ \frac{\partial E}{\partial a_2}=\frac{\mathrm{d}E}{\mathrm{d}y}\cdot \frac{\partial y}{\partial z_2}\cdot \frac{\mathrm{d}z_2}{\mathrm{d}a_2}=\left( y-Y \right) w_2\varphi '\left( a_2 \right) . ∂a1∂E=dydE⋅∂z1∂y⋅da1dz1=(y−Y)w1φ′(a1),∂a2∂E=dydE⋅∂z2∂y⋅da2dz2=(y−Y)w2φ′(a2).其余偏导数
{ ∂ E ∂ b = d E d y ⋅ ∂ y ∂ b = y − Y ∂ E ∂ w 1 = d E d y ⋅ ∂ y ∂ w 1 = ( y − Y ) z 1 ∂ E ∂ w 2 = d E d y ⋅ ∂ y ∂ w 2 = ( y − Y ) z 2 ∂ E ∂ w 11 = d E d a 1 ⋅ ∂ a 1 ∂ w 11 = ( y − Y ) w 1 φ ′ ( a 1 ) x 1 ∂ E ∂ w 12 = d E d a 1 ⋅ ∂ a 1 ∂ w 12 = ( y − Y ) w 1 φ ′ ( a 1 ) x 2 ∂ E ∂ b 1 = ( y − Y ) w 1 φ ′ ( a 1 ) ∂ E ∂ b 2 = ( y − Y ) w 2 φ ′ ( a 2 ) ∂ E ∂ w 21 = ( y − Y ) w 2 φ ′ ( a 2 ) x 1 ∂ E ∂ w 22 = ( y − Y ) w 2 φ ′ ( a 2 ) x 2 \begin{cases} \frac{\partial E}{\partial b}=\frac{\mathrm{d}E}{\mathrm{d}y}\cdot \frac{\partial y}{\partial b}=y-Y\\ \frac{\partial E}{\partial w_1}=\frac{\mathrm{d}E}{\mathrm{d}y}\cdot \frac{\partial y}{\partial w_1}=\left( y-Y \right) z_1\\ \frac{\partial E}{\partial w_2}=\frac{\mathrm{d}E}{\mathrm{d}y}\cdot \frac{\partial y}{\partial w_2}=\left( y-Y \right) z_2\\ \frac{\partial E}{\partial w_{11}}=\frac{\mathrm{d}E}{\mathrm{d}a_1}\cdot \frac{\partial a_1}{\partial w_{11}}=\left( y-Y \right) w_1\varphi '\left( a_1 \right) x_1\\ \frac{\partial E}{\partial w_{12}}=\frac{\mathrm{d}E}{\mathrm{d}a_1}\cdot \frac{\partial a_1}{\partial w_{12}}=\left( y-Y \right) w_1\varphi '\left( a_1 \right) x_2\\ \frac{\partial E}{\partial b_1}=\left( y-Y \right) w_1\varphi '\left( a_1 \right)\\ \frac{\partial E}{\partial b_2}=\left( y-Y \right) w_2\varphi '\left( a_2 \right)\\ \frac{\partial E}{\partial w_{21}}=\left( y-Y \right) w_2\varphi '\left( a_2 \right) x_1\\ \frac{\partial E}{\partial w_{22}}=\left( y-Y \right) w_2\varphi '\left( a_2 \right) x_2\\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧∂b∂E=dydE⋅∂b∂y=y−Y∂w1∂E=dydE⋅∂w1∂y=(y−Y)z1∂w2∂E=dydE⋅∂w2∂y=(y−Y)z2∂w11∂E=da1dE⋅∂w11∂a1=(y−Y)w1φ′(a1)x1∂w12∂E=da1dE⋅∂w12∂a1=(y−Y)w1φ′(a1)x2∂b1∂E=(y−Y)w1φ′(a1)∂b2∂E=(y−Y)w2φ′(a2)∂w21∂E=(y−Y)w2φ′(a2)x1∂w22∂E=(y−Y)w2φ′(a2)x2
偏导数计算由后到前(包括三个重要节点偏导数,以及其余各点的偏导数),因此叫作“后向传播”.
若 φ ( x ) \varphi(x) φ(x)仍取阶跃函数,那么其导数除了在 x = 0 x=0 x=0处为无穷大以外,其余皆为 0 0 0,无法应用在BP算法中. 因此需要选取其他的 φ ( ⋅ ) \varphi(\cdot) φ(⋅).
φ ( ⋅ ) \varphi(\cdot) φ(⋅)有以下几种常见的选取方法:
φ ( x ) = 1 1 + e − x \varphi \left( x \right) =\frac{1}{1+\mathrm{e}^{-x}} φ(x)=1+e−x1其导数具有良好性质:
φ ′ ( x ) = e − x ( 1 + e − x ) 2 = 1 1 + e − x ⋅ e − x 1 + e − x = φ ( x ) [ 1 − φ ( x ) ] . \begin{aligned} \varphi '\left( x \right) &=\frac{\mathrm{e}^{-x}}{\left( 1+\mathrm{e}^{-x} \right) ^2}=\frac{1}{1+\mathrm{e}^{-x}}\cdot \frac{\mathrm{e}^{-x}}{1+\mathrm{e}^{-x}} \\ &=\varphi \left( x \right) \left[ 1-\varphi \left( x \right) \right]. \end{aligned} φ′(x)=(1+e−x)2e−x=1+e−x1⋅1+e−xe−x=φ(x)[1−φ(x)].
其模拟了阶跃函数的图象特征,并且导数容易计算. 同时,也能证明使用其作为激活函数的三层神经网络能够模拟所有决策面.
φ ( x ) = tanh ( x ) = e x − e − x e x + e − x \varphi \left( x \right) =\tanh \left( x \right) =\frac{\mathrm{e}^x-\mathrm{e}^{-x}}{\mathrm{e}^x+\mathrm{e}^{-x}} φ(x)=tanh(x)=ex+e−xex−e−x并且
φ ′ ( x ) = 1 cosh 2 ( x ) = 1 − [ φ ( x ) ] 2 \varphi '\left( x \right) =\frac{1}{\cosh ^2\left( x \right)}=1-\left[ \varphi \left( x \right) \right] ^2 φ′(x)=cosh2(x)1=1−[φ(x)]2可以证明使用其作为激活函数的三层神经网络能够模拟所有决策面.
以下是深度学习中常用的激活函数.
φ ( x ) = { x , x > 0 0 , x ⩽ 0 = max { 0 , x } φ ′ ( x ) = { 1 , x > 0 0 , x ⩽ 0 \begin{aligned} &\varphi \left( x \right) =\left\{ \begin{array}{c} x,x>0\\ 0,x\leqslant 0\\ \end{array}=\max \left\{ 0,x \right\} \right.\\ &\varphi '\left( x \right) =\left\{ \begin{array}{c} 1,x>0\\ 0,x\leqslant 0\\ \end{array} \right. \end{aligned} φ(x)={x,x>00,x⩽0=max{0,x}φ′(x)={1,x>00,x⩽0
与Sigmoid相比,ReLU的特点
① 避免Sigmoid函数的“梯度消失”;
② 稀疏激活性;
③ 运算速度快;
…
神经网络可用矩阵形式表示如下:
X 向量 = a ( 0 ) ⇒ 输入 W ( 1 ) M × N a ( 0 ) N × 1 + b ( 1 ) M × 1 = z ( 1 ) M × 1 → φ a ( 1 ) M × 1 → 进入第二层神经网络 z ( 2 ) = W ( 2 ) a ( 1 ) + b ( 2 ) → φ a ( 2 ) → 进入第三层神经网络 z ( 3 ) = W ( 3 ) a ( 2 ) + b ( 3 ) → φ a ( 3 ) → 进入第四层神经网络 ⋯ → 进入第 l 层神经网络 z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) → φ a ( l ) ⇒ 输出 y = a ( l ) = φ ( z ( l ) ) \begin{aligned} \underset{\text{向量}}{X}=a^{\left( 0 \right)}&\xRightarrow{\text{输入}}\underset{M\times N}{W^{\left( 1 \right)}}\underset{N\times 1}{a^{\left( 0 \right)}}+\underset{M\times 1}{b^{\left( 1 \right)}}=\underset{M\times 1}{z^{\left( 1 \right)}}\xrightarrow{\varphi}\underset{M\times 1}{a^{\left( 1 \right)}} \\ &\xrightarrow{\text{进入第二层神经网络}}z^{\left( 2 \right)}=W^{\left( 2 \right)}a^{\left( 1 \right)}+b^{\left( 2 \right)}\xrightarrow{\varphi}a^{\left( 2 \right)} \\ &\xrightarrow{\text{进入第三层神经网络}}z^{\left( 3 \right)}=W^{\left( 3 \right)}a^{\left( 2 \right)}+b^{\left( 3 \right)}\xrightarrow{\varphi}a^{\left( 3 \right)} \\ &\xrightarrow{\text{进入第四层神经网络}}\cdots \\ &\xrightarrow{\text{进入第}l\text{层神经网络}}z^{\left( l \right)}=W^{\left( l \right)}a^{\left( l-1 \right)}+b^{\left( l \right)}\xrightarrow{\varphi}a^{\left( l \right)} \\ &\xRightarrow{\text{输出}}y=a^{\left( l \right)}=\varphi \left( z^{\left( l \right)} \right) \end{aligned} 向量X=a(0)输入M×NW(1)N×1a(0)+M×1b(1)=M×1z(1)φM×1a(1)进入第二层神经网络z(2)=W(2)a(1)+b(2)φa(2)进入第三层神经网络z(3)=W(3)a(2)+b(3)φa(3)进入第四层神经网络⋯进入第l层神经网络z(l)=W(l)a(l−1)+b(l)φa(l)输出y=a(l)=φ(z(l))
备注:此处的 z 、 a z、a z、a与(2)中记号相反,以下的推导以此处符号为准.
一些参数说明如下:
① 层数: l l l;
② z ( k ) , a ( k ) , b ( k ) z^{\left( k \right)},a^{\left( k \right)},b^{\left( k \right)} z(k),a(k),b(k)是第 k k k层的列向量,其维数等于第 k k k层神经元个数;
③ z i ( k ) , a i ( k ) , b i ( k ) z_{i}^{(k)},a_{i}^{(k)},b_{i}^{(k)} zi(k),ai(k),bi(k)是数,分别表示 z ( k ) , a ( k ) , b ( k ) z^{\left( k \right)},a^{\left( k \right)},b^{\left( k \right)} z(k),a(k),b(k)的第 i i i个分量;
④ y i y_i yi表示 y y y的第 i i i个分量.
BP算法:
S t e p 1 : Step 1: Step1: 随机初始化 ( W , b ) (W,b) (W,b).
S t e p 2 : Step 2: Step2: 训练样本 ( X , Y ) (X,Y) (X,Y),代入网络,可求出所有的 ( z , a , y ) (z,a,y) (z,a,y). (前向传播(Forward Propagation))
S t e p 3 : Step 3: Step3: 链式法则求偏导.
定义目标函数
min E = 1 2 ∥ y − Y ∥ 2 = 1 2 ∑ i = 1 m ( y i − Y i ) 2 \min E=\frac{1}{2}\left\| y-Y \right\| ^2=\frac{1}{2}\sum_{i=1}^m{\left( y_i-Y_i \right) ^2} minE=21∥y−Y∥2=21i=1∑m(yi−Yi)2求所有的
∂ E ∂ w , ∂ E ∂ b . \frac{\partial E}{\partial w}, \frac{\partial E}{\partial b}. ∂w∂E,∂b∂E.
记关键节点
δ i ( m ) = ∂ E ∂ z i ( m ) \delta _{i}^{\left( m \right)}=\frac{\partial E}{\partial z_{i}^{(m)}} δi(m)=∂zi(m)∂E那么
① δ i ( l ) = ∂ E ∂ y i ⋅ ∂ y i ∂ z i ( l ) = ( y i − Y i ) φ ′ ( z i ( l ) ) ( 注 意 该 式 中 所 有 量 已 知 , 可 以 直 接 算 出 值 ) ② 递 推 公 式 : δ i ( m ) = ∑ j = 1 S m + 1 ( δ j ( m + 1 ) w j i ( m + 1 ) ) ⋅ φ ′ ( z i ( m ) ) \begin{aligned} &① \quad \delta _{i}^{\left( l \right)}=\frac{\partial E}{\partial y_i}\cdot \frac{\partial y_i}{\partial z_{i}^{(l)}}=\left( y_i-Y_i \right) \varphi '\left( z_{i}^{\left( l \right)} \right) (注意该式中所有量已知,可以直接算出值) \\ &②\quad 递推公式: \delta _{i}^{\left( m \right)}=\sum_{j=1}^{S_{m+1}}{\left( \delta _{j}^{\left( m+1 \right)}w_{ji}^{(m+1)} \right)}\cdot \varphi '\left( z_{i}^{(m)} \right) \end{aligned} ①δi(l)=∂yi∂E⋅∂zi(l)∂yi=(yi−Yi)φ′(zi(l))(注意该式中所有量已知,可以直接算出值)②递推公式:δi(m)=j=1∑Sm+1(δj(m+1)wji(m+1))⋅φ′(zi(m))
S t e p 4 : Step 4: Step4: 更新
{ W ( n e w ) = W ( o l d ) − α ∂ E ∂ W ∣ W ( o l d ) b ( n e w ) = b ( o l d ) − α ∂ E ∂ b ∣ b ( o l d ) \begin{cases} W^{\left( \mathrm{new} \right)}=W^{\left( \mathrm{old} \right)}-\alpha \left. \frac{\partial E}{\partial W} \right|_{W^{\left( \mathrm{old} \right)}}\\ b^{\left( \mathrm{new} \right)}=b^{\left( \mathrm{old} \right)}-\alpha \left. \frac{\partial E}{\partial b} \right|_{b^{\left( \mathrm{old} \right)}}\\ \end{cases} {W(new)=W(old)−α∂W∂E∣∣W(old)b(new)=b(old)−α∂b∂E∣∣b(old)
注:以上的②是为了求得 δ i ( m ) \delta _{i}^{\left( m \right)} δi(m)与 δ i ( m + 1 ) \delta _{i}^{\left( m+1 \right)} δi(m+1)的关系,由此可以由后往前计算得到各层的 δ i ( m ) \delta _{i}^{\left( m \right)} δi(m),实现反向传播. 具体推导过程如下.
在 m m m到 m + 1 m+1 m+1层过程中,有以下关系
z ( m ) = W ( m ) a ( m − 1 ) + b ( m ) → φ a ( m ) → 进入第 ( m + 1 ) 层神经网络 z ( m + 1 ) = W ( m + 1 ) a ( m ) + b ( m ) → φ a ( m + 1 ) z^{\left( m \right)}=W^{\left( m \right)}a^{\left( m-1 \right)}+b^{\left( m \right)}\xrightarrow{\varphi}a^{\left( m \right)}\xrightarrow{\text{进入第}\left( m+1 \right) \text{层神经网络}}z^{\left( m+1 \right)}=W^{\left( m+1 \right)}a^{\left( m \right)}+b^{\left( m \right)}\xrightarrow{\varphi}a^{\left( m+1 \right)} z(m)=W(m)a(m−1)+b(m)φa(m)进入第(m+1)层神经网络z(m+1)=W(m+1)a(m)+b(m)φa(m+1)因此
δ i ( m ) = ∂ E ∂ z i ( m ) = ∑ j = 1 S m + 1 ( ∂ E ∂ z j ( m + 1 ) ⋅ ∂ z j ( m + 1 ) ∂ z i ( m ) ) = ∑ j = 1 S m + 1 ( δ j ( m + 1 ) ⋅ ∂ z j ( m + 1 ) ∂ z i ( m ) ) = ∑ j = 1 S m + 1 ( δ j ( m + 1 ) ⋅ ∂ z j ( m + 1 ) ∂ z i ( m ) ) = ∑ j = 1 S m + 1 ( δ j ( m + 1 ) ⋅ ∂ z j ( m + 1 ) ∂ a i ( m ) ⋅ ∂ a j ( m ) ∂ z i ( m ) ) = ∑ j = 1 S m + 1 ( δ j ( m + 1 ) ⋅ ∂ z j ( m + 1 ) ∂ a i ( m ) ⋅ ∂ a i ( m ) ∂ z i ( m ) ) = ∑ j = 1 S m + 1 ( δ j ( m + 1 ) ⋅ w j i ( m + 1 ) ⋅ φ ′ ( z i ( m ) ) ) = ∑ j = 1 S m + 1 ( δ j ( m + 1 ) w j i ( m + 1 ) ) ⋅ φ ′ ( z i ( m ) ) \begin{aligned} \delta _{i}^{\left( m \right)}&=\frac{\partial E}{\partial z_{i}^{(m)}}=\sum_{j=1}^{S_{m+1}}{\left( \frac{\partial E}{\partial z_{j}^{(m+1)}}\cdot \frac{\partial z_{j}^{(m+1)}}{\partial z_{i}^{(m)}} \right)} \\ &=\sum_{j=1}^{S_{m+1}}{\left( \delta _{j}^{\left( m+1 \right)}\cdot \frac{\partial z_{j}^{(m+1)}}{\partial z_{i}^{(m)}} \right)} \\ &=\sum_{j=1}^{S_{m+1}}{\left( \delta _{j}^{\left( m+1 \right)}\cdot \frac{\partial z_{j}^{(m+1)}}{\partial z_{i}^{(m)}} \right)} \\ &=\sum_{j=1}^{S_{m+1}}{\left( \delta _{j}^{\left( m+1 \right)}\cdot \frac{\partial z_{j}^{(m+1)}}{\partial a_{i}^{(m)}}\cdot \frac{\partial a_{j}^{(m)}}{\partial z_{i}^{(m)}} \right)} \\ &=\sum_{j=1}^{S_{m+1}}{\left( \delta _{j}^{\left( m+1 \right)}\cdot \frac{\partial z_{j}^{(m+1)}}{\partial a_{i}^{(m)}}\cdot \frac{\partial a_{i}^{(m)}}{\partial z_{i}^{(m)}} \right)} \\ &=\sum_{j=1}^{S_{m+1}}{\left( \delta _{j}^{\left( m+1 \right)}\cdot w_{ji}^{(m+1)}\cdot \varphi '\left( z_{i}^{(m)} \right) \right)} \\ &=\sum_{j=1}^{S_{m+1}}{\left( \delta _{j}^{\left( m+1 \right)}w_{ji}^{(m+1)} \right)}\cdot \varphi '\left( z_{i}^{(m)} \right) \end{aligned} δi(m)=∂zi(m)∂E=j=1∑Sm+1(∂zj(m+1)∂E⋅∂zi(m)∂zj(m+1))=j=1∑Sm+1(δj(m+1)⋅∂zi(m)∂zj(m+1))=j=1∑Sm+1(δj(m+1)⋅∂zi(m)∂zj(m+1))=j=1∑Sm+1(δj(m+1)⋅∂ai(m)∂zj(m+1)⋅∂zi(m)∂aj(m))=j=1∑Sm+1(δj(m+1)⋅∂ai(m)∂zj(m+1)⋅∂zi(m)∂ai(m))=j=1∑Sm+1(δj(m+1)⋅wji(m+1)⋅φ′(zi(m)))=j=1∑Sm+1(δj(m+1)wji(m+1))⋅φ′(zi(m))
至此,最基本的BP算法构建完成. 但在实际应用中还需对算法的每一个步骤进行优化,才能得到性能较好的神经网络.