最近在coursera上看Andrew Ng的machine learning,其中提到了BP算法,但没有给出具体的推导过程。因此想写一篇笔记,把这个算法的逻辑理清楚。

1. 神经网络

神经网络是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。

神经网络通常由输入层 x x x、隐层和输出层 h h h构成。输入层的每个神经元代表一个特征,输出层的每个神经元代表一个分类标签,而隐层的层数和神经元数目则由人工设定。

一个典型的3层神经网络如图所示:

设第 l l l层神经元个数为 s l s_l sl,其中第 i i i个神经元为 a i ( l ) a_i^{(l)} ai(l)
相邻两层神经元的转移如下:

z ( l + 1 ) = Θ ( l ) ˉ a ( l ) ˉ , a ( l + 1 ) = g ( z ( l + 1 ) ) z^{(l+1)}=\bar{\Theta^{(l)}}\bar{a^{(l)}}, a^{(l+1)}=g(z^{(l+1)}) z(l+1)=Θ(l)ˉa(l)ˉ,a(l+1)=g(z(l+1))

其中:

  • a ( l ) ˉ = [ 1 a ( l ) ] \bar{a^{(l)}}=\begin{bmatrix}1\\a^{(l)}\end{bmatrix} a(l)ˉ=[1a(l)]
  • Θ ( l ) ∈ R s l + 1 × s l \Theta^{(l)}\in R^{s_{l+1}\times s_l} Θ(l)Rsl+1×sl权重矩阵 Θ ( l ) ˉ = [ Θ 0 ( l ) Θ ( l ) ] \bar{\Theta^{(l)}}=\begin{bmatrix}\Theta_0^{(l)}&\Theta^{(l)}\end{bmatrix} Θ(l)ˉ=[Θ0(l)Θ(l)]
  • g ( z ) g(z) g(z)激励函数,常用sigmoid函数 g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1

2. 目标函数

J ( Θ ) = − mean ( y log ⁡ h + ( 1 − y ) log ⁡ ( 1 − h ) ) + λ 2 m ∣ ∣ Θ ∣ ∣ 2 J(\Theta)=-\text{mean}(y\log h+(1-y)\log (1-h))+\frac{\lambda}{2m}||\Theta||^2 J(Θ)=mean(ylogh+(1y)log(1h))+2mλΘ2

min ⁡ Θ J ( Θ ) \min_\Theta J(\Theta) minΘJ(Θ)需要利用梯度下降法,这需要求出每一步的 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta) Θij(l)J(Θ)

直接求导比较麻烦,可以利用BP算法递推求解。

3. BP算法

第一步:求出 ∂ ∂ h J ( Θ ) \frac{\partial}{\partial h}J(\Theta) hJ(Θ)
∂ ∂ h J ( Θ ) = h − y m h ∘ ( 1 − h ) \frac{\partial}{\partial h}J(\Theta)=\frac{h-y}{mh\circ (1-h)} hJ(Θ)=mh(1h)hy

第二步:从后往前依次求出 ∂ ∂ a ( l ) J ( Θ ) \frac{\partial}{\partial a^{(l)}}J(\Theta) a(l)J(Θ)
∂ J ∂ a ( l ) ˉ = ∂ J ∂ a ( l + 1 ) ∂ a ( l + 1 ) ∂ z ( l + 1 ) ∂ z ( l + 1 ) ∂ a ( l ) ˉ = ∂ J ∂ a ( l + 1 ) ∘ g ′ ( z ( l + 1 ) ) Θ ( l ) ˉ \frac{\partial J}{\partial \bar{a^{(l)}}}=\frac{\partial J}{\partial a^{(l+1)}}\frac{\partial a^{(l+1)}}{\partial z^{(l+1)}}\frac{\partial z^{(l+1)}}{\partial \bar{a^{(l)}}}=\frac{\partial J}{\partial a^{(l+1)}}\circ g'(z^{(l+1)})\bar{\Theta^{(l)}} a(l)ˉJ=a(l+1)Jz(l+1)a(l+1)a(l)ˉz(l+1)=a(l+1)Jg(z(l+1))Θ(l)ˉ

第三步:求出 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial \Theta_{ij}^{(l)}}J(\Theta) Θij(l)J(Θ)
∂ J ∂ Θ ( l ) = ∂ J ∂ a ( l + 1 ) ∂ a ( l + 1 ) ∂ z ( l + 1 ) ∂ z ( l + 1 ) ∂ Θ ( l ) ˉ = ∂ J ∂ a ( l + 1 ) ∘ g ′ ( z ( l + 1 ) ) a ( l ) ˉ \frac{\partial J}{\partial \Theta^{(l)}}=\frac{\partial J}{\partial a^{(l+1)}}\frac{\partial a^{(l+1)}}{\partial z^{(l+1)}}\frac{\partial z^{(l+1)}}{\partial \bar{\Theta^{(l)}}}=\frac{\partial J}{\partial a^{(l+1)}}\circ g'(z^{(l+1)})\bar{a^{(l)}} Θ(l)J=a(l+1)Jz(l+1)a(l+1)Θ(l)ˉz(l+1)=a(l+1)Jg(z(l+1))a(l)ˉ

3b1b的视频