神经网络

感知机

1943年,心理学家W.S.McCulloch和数理逻辑学家W.Pitts基于神经元的生理特征,建立了单个神经元的数学模型(MP模型)

1590596848395

实际上没啥依据


1957年,Frank Rosenblatt从纯数学的度重新考察这一模型,指出能够从一些输入输出对 中通过学习算法获得权重 w \boldsymbol{w} w b b b 。(这被认为是第一个机器学习算法,SVM是90年代的算法)

问题:给定一些输入输出对 ( x , y ) (\boldsymbol{x},y) (x,y),其中 y = ± 1 y=\pm 1 y=±1,求一个函数,使: f ( x ) = y f\left( \boldsymbol{x} \right) =y f(x)=y

感知机算法:设定 f ( x ) = s i g n ( w T x + b ) f\left( \boldsymbol{x} \right) =sign\left( \boldsymbol{w}^{\boldsymbol{T}}\boldsymbol{x}+b \right) f(x)=sign(wTx+b),从一堆输入输出中自动学习,获得权重 w \boldsymbol{w} w b b b

感知器算法(Perceptron Algorithm):

对于样本数据 ( x , y ) (\boldsymbol{x},y) (x,y)

  1. 随机选取 w \boldsymbol{w} w b b b
  2. 取一个训练样本 ( x i , y i ) \left( \boldsymbol{x_i},y_i \right) (xi,yi)
    • w T x i + b > 0 \boldsymbol{w}^{\boldsymbol{T}}\boldsymbol{x_i}+b>0 wTxi+b>0 y i = − 1 y_i=-1 yi=1,则: w = w − x i , b = b − 1 \boldsymbol{w}=\boldsymbol{w}-\boldsymbol{x_i},b=b-1 w=wxi,b=b1
    • w T x i + b < 0 \boldsymbol{w}^{\boldsymbol{T}}\boldsymbol{x_i}+b<0 wTxi+b<0 y i = + 1 y_i=+1 yi=+1,则: w = w + x i , b = b + 1 \boldsymbol{w}=\boldsymbol{w}+\boldsymbol{x_i},b=b+1 w=w+xi,b=b+1
  3. 再取另外一个 ( x i , y i ) \left( \boldsymbol{x_i},y_i \right) (xi,yi),回到(2)
  4. 终止条件:直到所有输入和输出对都不满足(2)中的任意一条,退出循环

关于调整 w \boldsymbol{w} w b b b 的一点点直观的解释:(和梯度下降法推导出来的不同,这里是原论文的方法,比较naive)

w T x + b > 0 \boldsymbol{w}^{\boldsymbol{T}}\boldsymbol{x}+b>0 wTx+b>0 y = − 1 y=-1 y=1,则: w = w − x , b = b − 1 \boldsymbol{w}=\boldsymbol{w}-\boldsymbol{x},b=b-1 w=wx,b=b1,于是有:
w 新 T x + b 新 = ( w − x ) T x + b − 1 = ( w T x + b ) − ( ∥ x ∥ 2 + 1 ) \boldsymbol{w}_{\text{新}}^{T}\boldsymbol{x}+b_{\text{新}}=\left( \boldsymbol{w}-\boldsymbol{x} \right) ^T\boldsymbol{x}+b-1=\left( \boldsymbol{w}^T\boldsymbol{x}+b \right) -\left( \lVert \boldsymbol{x} \rVert ^2+1 \right) wTx+b=(wx)Tx+b1=(wTx+b)(x2+1)
( ∥ x ∥ 2 + 1 ) \left( \lVert \boldsymbol{x} \rVert ^2+1 \right) (x2+1)是大于1的正数,它会把 w T x + b \boldsymbol{w}^T\boldsymbol{x}+b wTx+b往负的方向调整。
w T x + b < 0 \boldsymbol{w}^{\boldsymbol{T}}\boldsymbol{x}+b<0 wTx+b<0时同理


Frank Rosenblatt从数学上证明了,若数据集线性可分,那么以上的算法一定会收敛,下图是感知机在二维特征空间画出的一条直线

1590598322944

注意,感知机画出的直线与SVM有很大不同。感知机画出的直线只是做到了划分正负样本,而没有像SVM那样有最大的margin(毕竟SVM是90年代的东西,感知机早了将近半个世纪)



感知机算法收敛定理

刚刚我们提到了,Frank Rosenblatt从数学上证明了,若数据集线性可分,那么感知机算法一定会收敛。下面我们加以证明:


首先,为下面证明过程书写方便,

定义增广矩阵 X \boldsymbol{X} X

  • y = + 1 y=+1 y=+1,则 X = [ x 1 ] \boldsymbol{X}=\left[ \begin{array}{c} \boldsymbol{x}\\ 1\\ \end{array} \right] X=[x1]
  • y = − 1 y=-1 y=1,则 X = [ − x − 1 ] \boldsymbol{X}=\left[ \begin{array}{c} -\boldsymbol{x}\\ -1\\ \end{array} \right] X=[x1]

定义增广矩阵 W = [ w b ] \boldsymbol{W}=\left[ \begin{array}{c} \boldsymbol{w}\\ b\\ \end{array} \right] W=[wb]


然后我们重写感知机算法:

对于样本数据 X \boldsymbol{X} X

  1. 随机选取 W \boldsymbol{W} W
  2. 取一个训练样本 X i \boldsymbol{X_i} Xi
    • W T X i < 0 \boldsymbol{W}^{\boldsymbol{T}}\boldsymbol{X_i}<0 WTXi<0 y i = − 1 y_i=-1 yi=1,则: W = W + X i \boldsymbol{W}=\boldsymbol{W}+\boldsymbol{X_i} W=W+Xi
  3. 再取另外一个 X i \boldsymbol{X_i} Xi,回到(2)
  4. 终止条件:直到所有输入和输出对都不满足(2)中的任意一条,退出循环

感知机算法收敛定理:

若样本数据集 { X i } i ∼ N \left\{ \boldsymbol{X}_i \right\} _{i\sim N} {Xi}iN线性可分,即 ∃ W o p t \exists \boldsymbol{W}_{opt} Wopt,使
W o p t T X i > 0 ( i = 1 ∼ N ) \boldsymbol{W}_{opt}^{T}\boldsymbol{X}_i>0 \left( i=1\sim N \right) WoptTXi>0(i=1N)
则利用上述感知机算法,经过有限步后,得到一个 W \boldsymbol{W} W,使
W T X i > 0 ( i = 1 ∼ N ) \boldsymbol{W}^{T}\boldsymbol{X}_i>0 \left( i=1\sim N \right) WTXi>0(i=1N)

proof:不失一般性,设 ∥ W o p t ∥ = 1 \lVert \boldsymbol{W}_{opt} \rVert =1 Wopt=1,假设第k步时的 W \boldsymbol{W} W W ( k ) \boldsymbol{W}(k) W(k),且有一个 X i \boldsymbol{X_i} Xi使得 W ( k ) T X i < 0 \boldsymbol{W}(k)^{\boldsymbol{T}}\boldsymbol{X_i}<0 W(k)TXi<0。根据感知机算法可以推导出:
W ( k + 1 ) = W ( k ) + X i → ∥ W ( k + 1 ) − a W o p t ∥ 2 = ∥ W ( k ) − a W o p t + X i ∥ 2 ∥ W ( k ) − a W o p t + X i ∥ 2 = ∥ W ( k ) − a W o p t ∥ 2 + ∥ X i ∥ 2 + 2 W ( k ) T X i − 2 a W o p t T X i \boldsymbol{W}\left( k+1 \right) =\boldsymbol{W}\left( k \right) +\boldsymbol{X}_{\boldsymbol{i}}\rightarrow \lVert \boldsymbol{W}\left( k+1 \right) -a\boldsymbol{W}_{opt} \rVert ^2=\lVert \boldsymbol{W}\left( k \right) -a\boldsymbol{W}_{opt}+\boldsymbol{X}_{\boldsymbol{i}} \rVert ^2 \\ \lVert \boldsymbol{W}\left( k \right) -a\boldsymbol{W}_{opt}+\boldsymbol{X}_{\boldsymbol{i}} \rVert ^2=\lVert \boldsymbol{W}\left( k \right) -a\boldsymbol{W}_{opt} \rVert ^2+\lVert \boldsymbol{X}_{\boldsymbol{i}} \rVert ^2+2\boldsymbol{W}\left( k \right) ^T\boldsymbol{X}_{\boldsymbol{i}}-2a\boldsymbol{W}_{opt}^{T}\boldsymbol{X}_i W(k+1)=W(k)+XiW(k+1)aWopt2=W(k)aWopt+Xi2W(k)aWopt+Xi2=W(k)aWopt2+Xi2+2W(k)TXi2aWoptTXi

注意到 W ( k ) T X i < 0 \boldsymbol{W}\left( k \right)^T\boldsymbol{X}_{\boldsymbol{i}}<0 W(k)TXi<0以及 W o p t T X i > 0 \boldsymbol{W}_{opt}^{T}\boldsymbol{X}_i>0 WoptTXi>0,则一定可以取很大的 a a a,使得

∥ W ( k + 1 ) − a W o p t ∥ 2 < ∥ W ( k ) − a W o p t ∥ 2 \lVert \boldsymbol{W}\left( k+1 \right) -a\boldsymbol{W}_{opt} \rVert ^2<\lVert \boldsymbol{W}\left( k \right) -a\boldsymbol{W}_{opt} \rVert ^2 W(k+1)aWopt2<W(k)aWopt2

定义: β = max ⁡ i = 1 ∼ N { ∥ X i ∥ } , γ = min ⁡ i = 1 ∼ N { W o p t T X i } \beta =\underset{i=1\sim N}{\max}\left\{ \lVert \boldsymbol{X}_i \rVert \right\} , \gamma =\underset{i=1\sim N}{\min}\left\{ \boldsymbol{W}_{opt}^{T}\boldsymbol{X}_i \right\} β=i=1Nmax{Xi},γ=i=1Nmin{WoptTXi},取 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 \lVert \boldsymbol{W}\left( k+1 \right) -a\boldsymbol{W}_{opt} \rVert ^2<\lVert \boldsymbol{W}\left( k \right) -a\boldsymbol{W}_{opt} \rVert ^2-1 W(k+1)aWopt2<W(k)aWopt21
D = ∥ W ( 0 ) − a W o p t ∥ D=\lVert \boldsymbol{W}\left( 0 \right) -a\boldsymbol{W}_{opt} \rVert D=W(0)aWopt,则至多经过 D 2 D^2 D2步, W \boldsymbol{W} W将会收敛至 a W o p t a\boldsymbol{W}_{opt} aWopt

(注意是在条件 W ( k ) T X i < 0 \boldsymbol{W}(k)^{\boldsymbol{T}}\boldsymbol{X_i}<0 W(k)TXi<0下,才有 W \boldsymbol{W} W将会收敛至 a W o p t a\boldsymbol{W}_{opt} aWopt,而通常情况下这个条件很快就会消失。这个证明的意思是,若数据线性可分,并且很难线性划分, W o p t \boldsymbol{W}_{opt} Wopt几乎是唯一划分的选择,那么感知机最终也会收敛到 W o p t \boldsymbol{W}_{opt} Wopt这个决策平面)



多层神经网络

1969年,Minsky指出了感知机没办法处理非线性可分的数据,在日常生活中很多分类问题是非线性的,人工智能进入了第一次冬天。

在80年代,人们创造了多层神经网络(Multiple Layer Neural Networks),从而可以实现对非线性可分数据集的分类,人工智能从新复苏。

下面是一个两层神经网络的例子:

1590654191025

若$\varphi\left( \cdot \right) $为线性函数,则多层神经网络和单层没有区别


定理:当 φ ( x ) = u ( x ) \varphi\left( x \right)=u(x) φ(x)=u(x)(即阶跃函数)时,三层网络可以模拟任意决策面



反向传播算法

反向传播算法(Back Propogation Algorithm):从后往前计算各个参数的偏导数,然后使用梯度下降法对模型进行训练,最终达到收敛。

以上图为例:

首先定义误差函数: E = 1 2 ( y − Y ) 2 E=\frac{1}{2}\left( y-Y \right) ^2 E=21(yY)2,其中 y y y为前向传播计算出的模型输出, Y Y Y为数据标签,优化目标为最小化 E E E

模型中代求的偏导数为:
∂ 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 y ∂ y ∂ z 1 d z 1 d a 1 ∂ a 1 ∂ ω 11 = ( y − Y ) ω 1 φ ′ ( a 1 ) x 1 ∂ E ∂ w 12 = d E d y ∂ y ∂ z 1 d z 1 d a 1 ∂ a 1 ∂ ω 12 = ( y − Y ) ω 1 φ ′ ( a 1 ) x 2 ∂ E ∂ w 21 = d E d y ∂ y ∂ z 2 d z 2 d a 2 ∂ a 2 ∂ ω 21 = ( y − Y ) ω 2 φ ′ ( a 2 ) x 1 ∂ E ∂ w 22 = d E d y ∂ y ∂ z 2 d z 2 d a 2 ∂ a 2 ∂ ω 22 = ( y − Y ) ω 2 φ ′ ( a 2 ) x 2 ∂ E ∂ b 1 = d E d y ∂ y ∂ z 1 d z 1 d a 1 ∂ a 1 ∂ b 1 = ( y − Y ) ω 1 φ ′ ( a 1 ) ∂ E ∂ b 2 = d E d y ∂ y ∂ z 2 d z 2 d a 2 ∂ a 2 ∂ b 2 = ( y − Y ) ω 2 φ ′ ( a 2 ) ∂ E ∂ b 3 = d E d y ∂ y ∂ b 3 = ( y − Y ) \begin{aligned} &\frac{\partial E}{\partial w_1}=\frac{dE}{dy}\frac{\partial y}{\partial w_1}=\left( y-Y \right) z_1 \\ &\frac{\partial E}{\partial w_2}=\frac{dE}{dy}\frac{\partial y}{\partial w_2}=\left( y-Y \right) z_2 \\ &\frac{\partial E}{\partial w_{11}}=\frac{dE}{dy}\frac{\partial y}{\partial z_1}\frac{dz_1}{da_1}\frac{\partial a_1}{\partial \omega _{11}}=\left( y-Y \right) \omega _1\varphi '\left( a_1 \right) x_1 \\ &\frac{\partial E}{\partial w_{12}}=\frac{dE}{dy}\frac{\partial y}{\partial z_1}\frac{dz_1}{da_1}\frac{\partial a_1}{\partial \omega _{12}}=\left( y-Y \right) \omega _1\varphi '\left( a_1 \right) x_2 \\ &\frac{\partial E}{\partial w_{21}}=\frac{dE}{dy}\frac{\partial y}{\partial z_2}\frac{dz_2}{da_2}\frac{\partial a_2}{\partial \omega _{21}}=\left( y-Y \right) \omega _2\varphi '\left( a_2 \right) x_1 \\ &\frac{\partial E}{\partial w_{22}}=\frac{dE}{dy}\frac{\partial y}{\partial z_2}\frac{dz_2}{da_2}\frac{\partial a_2}{\partial \omega _{22}}=\left( y-Y \right) \omega _2\varphi '\left( a_2 \right) x_2 \\ &\frac{\partial E}{\partial b_1}=\frac{dE}{dy}\frac{\partial y}{\partial z_1}\frac{dz_1}{da_1}\frac{\partial a_1}{\partial b_1}=\left( y-Y \right) \omega _1\varphi '\left( a_1 \right) \\ &\frac{\partial E}{\partial b_2}=\frac{dE}{dy}\frac{\partial y}{\partial z_2}\frac{dz_2}{da_2}\frac{\partial a_2}{\partial b_2}=\left( y-Y \right) \omega _2\varphi '\left( a_2 \right) \\ &\frac{\partial E}{\partial b_3}=\frac{dE}{dy}\frac{\partial y}{\partial b_3}=\left( y-Y \right) \end{aligned} w1E=dydEw1y=(yY)z1w2E=dydEw2y=(yY)z2w11E=dydEz1yda1dz1ω11a1=(yY)ω1φ(a1)x1w12E=dydEz1yda1dz1ω12a1=(yY)ω1φ(a1)x2w21E=dydEz2yda2dz2ω21a2=(yY)ω2φ(a2)x1w22E=dydEz2yda2dz2ω22a2=(yY)ω2φ(a2)x2b1E=dydEz1yda1dz1b1a1=(yY)ω1φ(a1)b2E=dydEz2yda2dz2b2a2=(yY)ω2φ(a2)b3E=dydEb3y=(yY)

上面是一个小例子以帮助理解。


下面我们对反向传播算法进行向量化,并得到他的一般形式:

首先给出神经网络的向量化数学表达式

在这里插入图片描述

这是神经网络的第一层,记输入为 x \boldsymbol{x} x x \boldsymbol{x} x是一个 N × 1 N\times 1 N×1向量, N N N是输入特征的维数。

w ( 1 ) \boldsymbol{w}^{\left( 1 \right)} w(1)为第一层的参数矩阵:
w ( 1 ) = [ w 11 ( 1 ) w 12 ( 1 ) ⋯ w 1 N ( 1 ) w 21 ( 1 ) w 22 ( 1 ) ⋯ w 2 N ( 1 ) ⋮ ⋮ w M 1 ( 1 ) w M 2 ( 1 ) ⋯ w M N ( 1 ) ] \boldsymbol{w}^{\left( 1 \right)}=\left[ \begin{matrix} w_{11}^{\left( 1 \right)}& w_{12}^{\left( 1 \right)}& \cdots& w_{1N}^{\left( 1 \right)}\\ w_{21}^{\left( 1 \right)}& w_{22}^{\left( 1 \right)}& \cdots& w_{2N}^{\left( 1 \right)}\\ \vdots& & & \vdots\\ w_{M1}^{\left( 1 \right)}& w_{M2}^{\left( 1 \right)}& \cdots& w_{MN}^{\left( 1 \right)}\\ \end{matrix} \right] w(1)=w11(1)w21(1)wM1(1)w12(1)w22(1)wM2(1)w1N(1)w2N(1)wMN(1)
则有:
x ⇒ w ( 1 ) x + b ( 1 ) = z ( 1 ) → φ a ( 1 ) = φ ( z ( 1 ) ) \boldsymbol{x}\Rightarrow \boldsymbol{w}^{\left( 1 \right)}\boldsymbol{x}+\boldsymbol{b}^{\left( 1 \right)}=\boldsymbol{z}^{\left( 1 \right)}\xrightarrow{\varphi}\boldsymbol{a}^{\left( 1 \right)}=\varphi \left( \boldsymbol{z}^{\left( 1 \right)} \right) xw(1)x+b(1)=z(1)φ a(1)=φ(z(1))

关于维数和上下标的说明: b \boldsymbol{b} b z \boldsymbol{z} z a \boldsymbol{a} a都是列向量,维数取决于这一层的行数,比如上图第一层有M个神经元,则 b ( 1 ) \boldsymbol{b}^{(1)} b(1) z ( 1 ) \boldsymbol{z}^{(1)} z(1) a ( 1 ) \boldsymbol{a}^{(1)} a(1)都是M维列向量;上标表示第几层,下标表示连接关系。例如 w i j ( k ) \boldsymbol{w}^{\left( k \right)}_{ij} wij(k)表示第 ( k − 1 ) (k-1) (k1)层的第 j j j个输出到第 ( k ) (k) (k)层的第 i i i个神经元的参数。

PS: x = a ( 0 ) \boldsymbol{x}=\boldsymbol{a}^{\left( 0 \right)} x=a(0)


那么多层神经网络就是上面的重复级联,每一层的行数不一定相等。为方便表示,我们默认一共有 l l l层,则:
x ⇒ w ( 1 ) x + b ( 1 ) = z ( 1 ) → φ a ( 1 ) ⇒ w ( 2 ) a ( 1 ) + b ( 2 ) = z ( 2 ) → φ a ( 2 ) ⇒ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ → φ a ( l − 1 ) ⇒ w ( l ) a ( l − 1 ) + b ( l ) = z ( l ) → φ a ( l ) = y \begin{aligned} \boldsymbol{x}&\Rightarrow \boldsymbol{w}^{\left( 1 \right)}\boldsymbol{x}+\boldsymbol{b}^{\left( 1 \right)}=\boldsymbol{z}^{\left( 1 \right)}\xrightarrow{\varphi}\boldsymbol{a}^{\left( 1 \right)} \\ &\Rightarrow \boldsymbol{w}^{\left( 2 \right)}\boldsymbol{a}^{\left( 1 \right)}+\boldsymbol{b}^{\left( 2 \right)}=\boldsymbol{z}^{\left( 2 \right)}\xrightarrow{\varphi}\boldsymbol{a}^{\left( 2 \right)} \\ &\Rightarrow \cdots \cdots \cdots \cdots \cdots \cdots\cdots \xrightarrow{\varphi} \boldsymbol{a}^{\left( l-1 \right)} \\ &\Rightarrow \boldsymbol{w}^{\left( l \right)}\boldsymbol{a}^{\left( l-1 \right)}+\boldsymbol{b}^{\left( l \right)}=\boldsymbol{z}^{\left( l \right)}\xrightarrow{\varphi}\boldsymbol{a}^{\left( l \right)}=\boldsymbol{y} \end{aligned} xw(1)x+b(1)=z(1)φ a(1)w(2)a(1)+b(2)=z(2)φ a(2)φ a(l1)w(l)a(l1)+b(l)=z(l)φ a(l)=y
为方便计算,我们定义: δ i ( m ) = ∂ E ∂ z i ( m ) \delta _{i}^{\left( m \right)}=\frac{\partial E}{\partial z_{i}^{\left( m \right)}} δi(m)=zi(m)E

  1. 最后一层 ( m = l ) (m=l) (m=l)
    δ i ( l ) = ∂ E ∂ z i ( l ) = ∂ E ∂ y i ∂ y i ∂ z i ( l ) = ( y i − Y i ) φ ′ ( z i ( l ) ) \begin{aligned} \delta _{i}^{\left( l \right)}&=\frac{\partial E}{\partial z_{i}^{\left( l \right)}}=\frac{\partial E}{\partial y_i}\frac{\partial y_i}{\partial z_{i}^{\left( l \right)}} \\ &=\left( y_i-Y_i \right) \varphi '\left( z_{i}^{\left( l \right)} \right) \end{aligned} δi(l)=zi(l)E=yiEzi(l)yi=(yiYi)φ(zi(l))

  2. 非最后一层 ( m = 1 ∼ l − 1 ) (m=1\sim l-1) (m=1l1)
    δ i ( m ) = ∂ E ∂ z i ( m ) = ∂ E ∂ a i ( m ) ∂ a i ( m ) ∂ z i ( m ) = ( ∑ j = 1 S m + 1 ∂ E ∂ a i ( m + 1 ) ) φ ′ ( z i ( m ) ) = ( ∑ j = 1 S m + 1 w j i ( m + 1 ) δ j ( m + 1 ) ) φ ′ ( z i ( m ) ) \begin{aligned} \delta _{i}^{\left( m \right)}&=\frac{\partial E}{\partial z_{i}^{\left( m \right)}}=\frac{\partial E}{\partial a_{i}^{\left( m \right)}}\frac{\partial a_{i}^{\left( m \right)}}{\partial z_{i}^{\left( m \right)}} \\ &=\left( \sum_{j=1}^{S_{m+1}}{\frac{\partial E}{\partial a_{i}^{\left( m+1 \right)}}} \right) \varphi '\left( z_{i}^{\left( m \right)} \right) \\ &=\left( \sum_{j=1}^{S_{m+1}}{w_{ji}^{\left( m+1 \right)}\delta _{j}^{\left( m+1 \right)}} \right) \varphi '\left( z_{i}^{\left( m \right)} \right) \end{aligned} δi(m)=zi(m)E=ai(m)Ezi(m)ai(m)=(j=1Sm+1ai(m+1)E)φ(zi(m))=(j=1Sm+1wji(m+1)δj(m+1))φ(zi(m))

这就是反向传播算法的名词由来,先计算最后的偏导数,再逐层向前推进


计算出 δ i ( m ) \delta _{i}^{\left( m \right)} δi(m)后,可以很方便计算出:
∂ E ∂ w i j ( m ) = ∂ E ∂ z i ( m ) ∂ z i ( m ) ∂ w i j ( m ) = δ i ( m ) a j ( m − 1 ) ∂ E ∂ b i ( m ) = ∂ E ∂ z i ( m ) ∂ z i ( m ) ∂ b i ( m ) = ∂ E ∂ z i ( m ) = δ i ( m ) \begin{aligned} &\frac{\partial E}{\partial w_{ij}^{\left( m \right)}}=\frac{\partial E}{\partial z_{i}^{\left( m \right)}}\frac{\partial z_{i}^{\left( m \right)}}{\partial w_{ij}^{\left( m \right)}}=\delta _{i}^{\left( m \right)}a_{j}^{\left( m-1 \right)} \\ &\frac{\partial E}{\partial b_{i}^{\left( m \right)}}=\frac{\partial E}{\partial z_{i}^{\left( m \right)}}\frac{\partial z_{i}^{\left( m \right)}}{\partial b_{i}^{\left( m \right)}}=\frac{\partial E}{\partial z_{i}^{\left( m \right)}}=\delta _{i}^{\left( m \right)} \end{aligned} wij(m)E=zi(m)Ewij(m)zi(m)=δi(m)aj(m1)bi(m)E=zi(m)Ebi(m)zi(m)=zi(m)E=δi(m)


BP算法:

  1. 随机初始化 ( w , b ) \left( \boldsymbol{w},\boldsymbol{b} \right) (w,b)

  2. 训练样本 ( x , Y ) \left( \boldsymbol{x},\boldsymbol{Y} \right) (x,Y),输入网络前向传播可求出所有的 ( z , a , y ) \left( \boldsymbol{z},\boldsymbol{a},\boldsymbol{y} \right) (z,a,y)

  3. 通过上述迭代方法计算出 ( ∂ E ∂ w i j ( m ) , ∂ E ∂ b i ( m ) ) \left( \frac{\partial E}{\partial w_{ij}^{\left( m \right)}},\frac{\partial E}{\partial b_{i}^{\left( m \right)}} \right) (wij(m)E,bi(m)E)

  4. 更新:
    w ( 新 ) = w ( 旧 ) − α ∂ E ∂ w ∣ w ( 旧 ) b ( 新 ) = b ( 旧 ) − α ∂ E ∂ b ∣ b ( 旧 ) \begin{aligned} &\boldsymbol{w}^{\left( \text{新} \right)}=\boldsymbol{w}^{\left( \text{旧} \right)}-\alpha \frac{\partial E}{\partial \boldsymbol{w}}\mid_{\boldsymbol{w}^{\left( \text{旧} \right)}}^{} \\ &\boldsymbol{b}^{\left( \text{新} \right)}=\boldsymbol{b}^{\left( \text{旧} \right)}-\alpha \frac{\partial E}{\partial \boldsymbol{b}}\mid_{\boldsymbol{b}^{\left( \text{旧} \right)}} \end{aligned} w()=w()αwEw()b()=b()αbEb()

  5. 回到(2),跳出循环条件: ( ∂ E ∂ w i j ( m ) , ∂ E ∂ b i ( m ) ) \left( \frac{\partial E}{\partial w_{ij}^{\left( m \right)}},\frac{\partial E}{\partial b_{i}^{\left( m \right)}} \right) (wij(m)E,bi(m)E)足够小,或者 E E E足够小

这是通过反向传播算法(BP算法)训练多层神经网络的基本方法,但是训练多层神经网络特别是深层神经网络是个错综复杂的问题,下面会讨论到。



激活函数 φ ( ⋅ ) \varphi(\cdot) φ()的选择

若使用感知机的激活函数 φ ( x ) = u ( x ) \varphi\left( x \right)=u(x) φ(x)=u(x),则 φ ′ ( x ) ≡ 0 \varphi '\left( x \right) \equiv 0 φ(x)0(不考虑奇异函数,在x=0不可导就当x=0无定义)

由于 φ ′ ( x ) ≡ 0 \varphi '\left( x \right) \equiv 0 φ(x)0导致使用反向传播算法计算出来的关于各个参数的偏导数为0,则没有办法用梯度下降法优化模型,因此必须更换激活函数 φ ( ⋅ ) \varphi\left( \cdot \right) φ()

  1. sigmoid函数

1590668419063

sigmoid函数是阶跃函数的模拟,并且做到了处处可导。
φ ( x ) = 1 1 + e − x φ ′ ( x ) = φ ( x ) [ 1 − φ ( x ) ] \varphi \left( x \right) =\frac{1}{1+e^{-x}} \\ \varphi '\left( x \right) =\varphi \left( x \right) \left[ 1-\varphi \left( x \right) \right] φ(x)=1+ex1φ(x)=φ(x)[1φ(x)]


  1. tanh函数

    1590668654666
    φ ( x ) = tanh ⁡ ( x ) = e x − e − x e x + e − x φ ′ ( x ) = 1 − φ 2 ( x ) \varphi \left( x \right) =\tanh \left( x \right) =\frac{e^x-e^{-x}}{e^x+e^{-x}} \\ \varphi '\left( x \right) =1-\varphi ^2\left( x \right) φ(x)=tanh(x)=ex+exexexφ(x)=1φ2(x)

以上的激活函数都有一个问题,就是在x远离原点处的导数为0,这在深度网络的反向传播中通常会出现梯度消失(弥散)的现象,导致深层网络难以训练的问题。因此在深度学习出现以后,常常采用以下激活函数。


  1. ReLU函数

    修正线性单元(Rectify Linear Units)

1590669223861

φ ( x ) = { x , x > 0 0 , x ⩽ 0 = max ⁡ { 0 , x } φ ′ ( x ) = { 1 , x > 0 0 , x < 0 \varphi \left( x \right) =\begin{cases} x, x>0\\ 0, x\leqslant 0\\ \end{cases}=\max \left\{ 0,x \right\} \\ \varphi '\left( x \right) =\begin{cases} 1, x>0\\ 0, x< 0\\ \end{cases} φ(x)={x,x>00,x0=max{0,x}φ(x)={1,x>00,x<0

在x>0时的梯度弥散现象得到解决,但x<0时仍然存在梯度弥散现象


  1. Leak ReLU函数
    1590669599063
    φ ( x ) = { x , x > 0 β x , x ⩽ 0 φ ′ ( x ) = { 1 , x > 0 β , x < 0 \varphi \left( x \right) =\begin{cases} x, x>0\\ \beta x, x\leqslant 0\\ \end{cases} \\ \varphi '\left( x \right) =\begin{cases} 1, x>0\\ \beta , x<0\\ \end{cases} φ(x)={x,x>0βx,x0φ(x)={1,x>0β,x<0



神经网络参数设置方法


随机梯度下降

随机梯度(Stochastic Gradient Descent, SGD)

  1. 不用每输入一个样本就去变换参数,而是输入一批样本(叫做一个BATCH或MINI-BATCH),求出这些样本的梯度平均值后,根据这个平均值改变参数。(GD是BATCH为1的SGD)
  2. 在神经网络训练中,BATCH的样本数大致设置为50-200不等。

激活函数选择

1590739683797


训练数据初始化

1590739661702

标准差 s t d std std也可以用 ( m a x − m i n ) (max-min) (maxmin)来代替


( w , b ) (\boldsymbol{w},b) (w,b)的初始化

1590739733567

梯度消失现象:如果 w T x + b \boldsymbol{w}^T\boldsymbol{x}+b wTx+b一开始很大或很小,那么梯度将趋近于0,反向传播后前面与之相关的梯度也趋近于0,导致训练缓慢。 因此,我们要使 w T x + b \boldsymbol{w}^T\boldsymbol{x}+b wTx+b一开始在零附近。

一种比较简单有效的方法是: ( w , b ) (\boldsymbol{w},b) (w,b)初始化从区间 ( − 1 d , 1 d ) \left( -\frac{1}{\sqrt{d}},\frac{1}{\sqrt{d}} \right) (d 1,d 1)均匀随机取值。其中 d d d ( w , b ) (\boldsymbol{w},b) (w,b)所在层的神经元个数。

可以证明,如果 x \boldsymbol{x} x服从正态分布,均值0,方差1,且各个维度无关,而 ( w , b ) (\boldsymbol{w},b) (w,b) ( − 1 d , 1 d ) \left( -\frac{1}{\sqrt{d}},\frac{1}{\sqrt{d}} \right) (d 1,d 1)的均匀分布,则 w T x + b \boldsymbol{w}^T\boldsymbol{x}+b wTx+b是均值为0, 方差为1/3的正态分布。

参数初始化是一个研究热点领域


Batch normalization

论文:Batch normalization accelerating deep network training by reducing internal covariate shift (2015)

基本思想:既然我们希望每一层获得的值都在0附近,从而避免梯度消失现象,那么我们为什么不直接把每一层的值做基于均值和方差的归一化呢?

1590741458551

γ \gamma γ β \beta β的说明:以sigmoid和tanh为例,若归一化后的样本过于聚集在0附近,则激活函数对外表现出几乎的线性,这是我们不希望看到的。因此增加了 γ \gamma γ β \beta β两个待学习的参数,使归一化在避免梯度消失和失去非线性中权衡。


目标函数选择

  1. 可加正则项 (Regulation Term)
    L ( w ) = F ( w ) + R ( w ) = 1 2 ( ∑ i = 1 b a t c h s i z e ∥ y i − Y i ∥ 2 + β ∑ k ∑ l w k , l 2 ) L\left( w \right) =F\left( w \right) +R\left( w \right) =\frac{1}{2}\left( \sum_{i=1}^{batchsize}{\lVert y_i-Y_i \rVert ^2+\beta \sum_k^{}{\sum_l^{}{w_{k,l}^{2}}}} \right) \\ L(w)=F(w)+R(w)=21(i=1batchsizeyiYi2+βklwk,l2)

  2. 如果是分类问题, F ( w ) F(w) F(w)可以采用Softmax函数和交叉熵的组合

    (a)Softmax函数

    1590744769980

q i = exp ⁡ ( z i ) ∑ j = 1 N exp ⁡ ( z j ) , ∑ i = 1 N q i = 1 q_i=\frac{\exp \left( z_i \right)}{\sum_{j=1}^N{\exp \left( z_j \right)}},\sum_{i=1}^N{q_i}=1 qi=j=1Nexp(zj)exp(zi),i=1Nqi=1


(b)交叉熵(Cross Entropy)
E = − ∑ i = 1 N Y i log ⁡ ( y i ) E=-\sum_{i=1}^N{Y_i\log \left( y_i \right)} E=i=1NYilog(yi)

交叉熵可以作为误差函数,上面我们使用的误差函数为MSE,即 E = 1 2 ∑ i = 1 N ∥ y i − Y i ∥ 2 E=\frac{1}{2}\sum_{i=1}^N{\lVert y_i-Y_i \rVert ^2} E=21i=1NyiYi2。对于交叉熵,当 p p p q q q的分布越相近时, E E E的值越小。

综上,我们可以使用Softmax函数和交叉熵的组合作为目标函数:
E = − ∑ i = 1 N p i log ⁡ ( q i ) E=-\sum_{i=1}^N{p_i\log \left( q_i \right)} E=i=1Npilog(qi)

并且它的求导将会有非常简单的形式: ∂ E ∂ z i = q i − p i \frac{\partial E}{\partial z_i}=q_i-p_i ziE=qipi



参数更新策略

  1. 常规的更新 (Vanilla Stochastic Gradient Descent)
nn.W{k} = nn.W{k} - nn.learning_rate*nn.W_grad{k};
nn.b{k} = nn.b{k} - nn.learning_rate*nn.b_grad{k};

SGD的问题:

(1) ( w , b ) (\boldsymbol{w},b) (w,b)的每一个分量获得的梯度绝对值有大有小,一些情况下,将会迫使优化路径变成Z字形状

1590747272690


(2)SGD求梯度的策略过于随机,由于上一次和下一次用的是完全不同的BATCH数据,将会出现优化的方向随机的情况。

1590747310135
  1. AdaGrad(解决各个方向梯度不一致问题)

基本思想是:(1)引入了累计梯度的思想,希望这个梯度可以受过去梯度的影响;(2)对每一个梯度做了均值化,原来梯度大的地方变小一些,原来梯度小的地方放大一些,避免Z字形下降。


  1. RMSProp(解决各个方向梯度不一致问题)

在这里插入图片描述

与AdaGrad唯一的区别是 γ ← ρ γ + ( 1 − ρ ) g ⊙ g \gamma \gets \rho \gamma +\left( 1-\rho \right) g\odot g γργ+(1ρ)gg,引入了一个新的参数 ρ \rho ρ用于权衡过去梯度和现在梯度的权值


  1. Momentum(解决梯度随机性问题)
nn.vW{k} = 0.5*nn.vW{k} + nn.learning_rate*nn.W_grad{k};
 
nn.vb{k} = 0.5*nn.vb{k} + nn.learning_rate*nn.b_grad{k};
            
nn.W{k} = nn.W{k} - nn.vW{k};
nn.b{k} = nn.b{k} - nn.vb{k}; %rho = 0.5;

Momentum(动量)考虑了上一个梯度的对当前梯度的影响(AdaGrad和RMSProp考虑的是累计梯度对当前梯度的影响,没有Momentum那么有“冲劲”)


  1. Adam(同时解决两个问题)
    在这里插入图片描述

r r r是累计梯度,作为$\bigtriangleup\varTheta 的 分 母 可 以 解 决 各 个 方 向 梯 度 不 一 致 ; 的分母可以解决各个方向梯度不一致; s 是 动 量 梯 度 , 作 为 是动量梯度,作为 \bigtriangleup \varTheta $的分子可以解决梯度随机性问题



训练建议

(1)一般情况下,在训练集上的目标函数的平均值(cost)会随着训练的深入而不断减小,如果这个指标有增大情况,停下来。有两种情况:第一是采用的模型不够复杂,以致于不能在训练集上完全拟合;第二是已经训练很好了。

(2)分出一些验证集(Validation Set),训练的本质目标是在验证集上获取最大的识别率。因此训练一段时间后,必须在验证集上测试识别率,保存使验证集上识别率最大的模型参数,作为最后结果。

(3)注意调整学习率(Learning Rate),如果刚训练几步cost就增加,一般来说是学习率太高了;如果每次cost变化很小,说明学习率太低。

(4) Batch Normalization 比较好用,用了这个后,对学习率、参数更新策略等不敏感。建议如果用Batch Normalization, 更新策略用最简单的SGD即可,我的经验是加上其他反而不好。

(5)如果不用Batch Normalization, 我的经验是,合理变换其他参数组合,也可以达到目的。

(6)由于梯度累积效应,AdaGrad, RMSProp, Adam三种更新策略到了训练的后期会很慢,可以采用提高学习率的策略来补偿这一效应。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值