神经网络结构
这里我们以3层神经网络为例,来分析反向传播的过程,结构图如下:
3层神经网络结构图 |
这里的每一个神经元的计算都可以理解为一次逻辑回归的计算过程,其中:
h
θ
(
x
)
=
g
(
θ
T
∗
x
)
h_{\theta}(x) = g({\theta}^T * x)
hθ(x)=g(θT∗x)
g
(
z
)
=
1
(
1
+
e
−
z
)
g(z) = \frac{1} {(1 + e^{-z})}
g(z)=(1+e−z)1
g
′
(
z
)
=
g
(
z
)
∗
(
1
−
g
(
z
)
)
g'(z)=g(z)*(1-g(z))
g′(z)=g(z)∗(1−g(z))
所以:
h
θ
(
x
)
=
1
(
1
+
e
−
θ
T
∗
x
)
h_{\theta}(x) = \frac{1} {(1 + e^{-{\theta}^T * x})}
hθ(x)=(1+e−θT∗x)1
神经网络的代价函数如下:
J
(
θ
)
=
1
/
m
∗
∑
i
=
1
m
∑
k
=
1
K
[
−
y
k
(
i
)
l
o
g
(
(
h
θ
(
x
(
i
)
)
)
k
)
−
(
1
−
y
k
(
i
)
)
l
o
g
(
1
−
(
h
θ
(
x
(
i
)
)
)
k
]
J(\theta) = 1/m * \sum_{i=1}^m \sum_{k=1}^K [-y_k^{(i)} log((h_{\theta}(x^{(i)}))_k) - (1-y_k^{(i)})log(1 - (h_{\theta}(x^{(i)}))_k]
J(θ)=1/m∗i=1∑mk=1∑K[−yk(i)log((hθ(x(i)))k)−(1−yk(i))log(1−(hθ(x(i)))k]
这里是不带正则化的代价函数 C o s t ( i ) Cost(i) Cost(i),它与逻辑回归的代价函数很相似。
这里的k表示第k个输出类别,因为神经网络输出层有 K K K个神经元 。
理解反向传播(Back Propagation)
我们这里以1个样本(i)的3层神经网络来分析, 1个输入层,1个隐藏层,1个输出层。
其实反向传播就是计算代价函数对每一层的
θ
i
j
\theta_{ij}
θij参数的偏微分,和之前的逻辑回归算法类似,用这些偏微分进行梯度下降求代价函数的最小值。
那么代价函数可以简化为:
J
(
θ
)
=
−
y
l
o
g
(
a
(
3
)
)
−
(
1
−
y
)
l
o
g
(
1
−
a
(
3
)
)
J(\theta) = -ylog(a^{(3)}) - (1-y)log(1-a^{(3)})
J(θ)=−ylog(a(3))−(1−y)log(1−a(3))
J
(
θ
)
=
−
y
l
o
g
(
g
(
z
(
3
)
)
)
−
(
1
−
y
)
l
o
g
(
1
−
g
(
z
(
3
)
)
)
J(\theta) = -ylog(g(z^{(3)})) - (1-y)log(1-g(z^{(3)}))
J(θ)=−ylog(g(z(3)))−(1−y)log(1−g(z(3)))
其中 y y y和 a ( 3 ) a^{(3)} a(3)都是向量,维度为K,表示K个输出神经元
反向传播推导过程 |
从后往前推导,首先计算代价函数对第2层
θ
\theta
θ的偏微分,可以表示为:
∂
J
(
θ
)
∂
θ
i
j
(
2
)
=
∂
J
(
θ
)
∂
z
j
(
3
)
∗
∂
z
j
(
3
)
∂
θ
i
j
(
2
)
\frac{\partial J(\theta)}{\partial \theta_{ij}^{(2)}} = \frac{\partial J(\theta)}{\partial z_{j}^{(3)}} * \frac{\partial z_j^{(3)}}{\partial \theta_{ij}^{(2)}}
∂θij(2)∂J(θ)=∂zj(3)∂J(θ)∗∂θij(2)∂zj(3)
∵
∂
J
(
θ
)
∂
z
j
(
3
)
=
∂
J
(
θ
)
∂
a
j
(
3
)
∗
∂
a
j
(
3
)
∂
z
j
(
3
)
=
g
(
z
j
(
3
)
)
−
y
j
=
a
j
(
3
)
−
y
j
\because \frac{\partial J(\theta)}{\partial z_{j}^{(3)}} = \frac{\partial J(\theta)}{\partial a_{j}^{(3)}}*\frac{\partial a_{j}^{(3)}}{\partial z_{j}^{(3)}}=g(z_j^{(3)})-y_j=a_{j}^{(3)}-y_j
∵∂zj(3)∂J(θ)=∂aj(3)∂J(θ)∗∂zj(3)∂aj(3)=g(zj(3))−yj=aj(3)−yj
∵ ∂ z j ( 3 ) ∂ θ i j ( 2 ) = ( a j ( 2 ) ) T \because \frac{\partial z_j^{(3)}}{\partial \theta_{ij}^{(2)}}=(a_j^{(2)})^T ∵∂θij(2)∂zj(3)=(aj(2))T
所以,代价函数对第2层
θ
\theta
θ的偏微分:
∂
J
(
θ
)
∂
θ
i
j
(
2
)
=
(
a
j
(
3
)
−
y
j
)
∗
(
a
j
(
2
)
)
T
\frac{\partial J(\theta)}{\partial \theta_{ij}^{(2)}} = (a_j^{(3)}-y_j)*(a_j^{(2)})^T
∂θij(2)∂J(θ)=(aj(3)−yj)∗(aj(2))T
这里我们引入一个
δ
(
l
)
\delta^{(l)}
δ(l)项,它表示代价函数对每一层上的
z
(
l
)
z^{(l)}
z(l)的偏导数,所以前面我们推导的:
δ
j
(
3
)
=
∂
J
(
θ
)
∂
z
j
(
3
)
=
a
j
(
3
)
−
y
j
\delta_j^{(3)}= \frac{\partial J(\theta)}{\partial z_{j}^{(3)}}=a_{j}^{(3)}-y_j
δj(3)=∂zj(3)∂J(θ)=aj(3)−yj
l l l表示层数;
δ j ( 3 ) \delta_j^{(3)} δj(3)表示代价函数 J ( θ ) J(\theta) J(θ)对 z j ( 3 ) z_{j}^{(3)} zj(3)的偏导数;
以此类推, δ j ( 2 ) \delta_j^{(2)} δj(2)就表示代价函数 J ( θ ) J(\theta) J(θ)对 z j ( 2 ) z_{j}^{(2)} zj(2)的偏导数。
接下来我们计算代价函数对第1层
θ
\theta
θ的偏微分,可以表示为:
∂
J
(
θ
)
∂
θ
i
j
(
1
)
=
∂
J
(
θ
)
∂
z
j
(
2
)
∗
∂
z
j
(
2
)
∂
θ
i
j
(
1
)
\frac{\partial J(\theta)}{\partial \theta_{ij}^{(1)}} = \frac{\partial J(\theta)}{\partial z_{j}^{(2)}} * \frac{\partial z_j^{(2)}}{\partial \theta_{ij}^{(1)}}
∂θij(1)∂J(θ)=∂zj(2)∂J(θ)∗∂θij(1)∂zj(2)
∵ ∂ J ( θ ) ∂ z j ( 2 ) = ∂ J ( θ ) ∂ a j ( 2 ) ∗ ∂ a j ( 2 ) ∂ z j ( 2 ) = ∂ J ( θ ) ∂ a j ( 2 ) ∗ g ′ ( z j ( 2 ) ) = ∂ J ( θ ) ∂ z j ( 3 ) ∗ ∂ z j ( 3 ) ∂ a j ( 2 ) ∗ g ′ ( z j ( 2 ) ) \because \frac{\partial J(\theta)}{\partial z_{j}^{(2)}} = \frac{\partial J(\theta)}{\partial a_{j}^{(2)}}*\frac{\partial a_{j}^{(2)}}{\partial z_{j}^{(2)}}=\frac{\partial J(\theta)}{\partial a_{j}^{(2)}}*g'(z_{j}^{(2)})= \frac{\partial J(\theta)}{\partial z_{j}^{(3)}}* \frac{\partial z_{j}^{(3)}}{\partial a_{j}^{(2)}}*g'(z_{j}^{(2)}) ∵∂zj(2)∂J(θ)=∂aj(2)∂J(θ)∗∂zj(2)∂aj(2)=∂aj(2)∂J(θ)∗g′(zj(2))=∂zj(3)∂J(θ)∗∂aj(2)∂zj(3)∗g′(zj(2))
∵ δ j ( 3 ) = ∂ J ( θ ) ∂ z j ( 3 ) \because \delta_j^{(3)}= \frac{\partial J(\theta)}{\partial z_{j}^{(3)}} ∵δj(3)=∂zj(3)∂J(θ)
∵ z j ( 3 ) = Θ j ( 2 ) ∗ a j ( 2 ) \because z_j^{(3)}=\Theta_j^{(2)}*a_{j}^{(2)} ∵zj(3)=Θj(2)∗aj(2)
∴ ∂ z j ( 3 ) ∂ a j ( 2 ) = ( Θ j ( 2 ) ) T \therefore \frac{\partial z_{j}^{(3)}}{\partial a_{j}^{(2)}}= (\Theta_j^{(2)})^T ∴∂aj(2)∂zj(3)=(Θj(2))T
∴ δ j ( 2 ) = ∂ J ( θ ) ∂ z j ( 2 ) = ( Θ j ( 2 ) ) T ∗ δ j ( 3 ) ∗ g ′ ( z j ( 2 ) ) \therefore \delta_j^{(2)}=\frac{\partial J(\theta)}{\partial z_{j}^{(2)}} =(\Theta_j^{(2)})^T*\delta_j^{(3)}*g'(z_{j}^{(2)}) ∴δj(2)=∂zj(2)∂J(θ)=(Θj(2))T∗δj(3)∗g′(zj(2))
∵ ∂ z j ( 2 ) ∂ θ i j ( 1 ) = ( a j ( 1 ) ) T \because \frac{\partial z_j^{(2)}}{\partial \theta_{ij}^{(1)}}=(a_j^{(1)})^T ∵∂θij(1)∂zj(2)=(aj(1))T
所以代价函数对第1层
θ
\theta
θ的偏微分:
∂
J
(
θ
)
∂
θ
i
j
(
1
)
=
(
Θ
j
(
2
)
)
T
∗
δ
j
(
3
)
∗
g
′
(
z
j
(
2
)
)
∗
(
a
j
(
1
)
)
T
\frac{\partial J(\theta)}{\partial \theta_{ij}^{(1)}} = (\Theta_j^{(2)})^T*\delta_j^{(3)}*g'(z_{j}^{(2)})*(a_j^{(1)})^T
∂θij(1)∂J(θ)=(Θj(2))T∗δj(3)∗g′(zj(2))∗(aj(1))T
最后累加每个样本在每一层的偏微分:
Δ
(
i
j
)
(
l
)
=
Δ
(
i
j
)
(
l
)
+
a
j
(
l
)
∗
δ
i
(
l
+
1
)
\Delta_{(ij)}^{(l)}=\Delta_{(ij)}^{(l)}+a_j^{(l)}* \delta_i^{(l+1)}
Δ(ij)(l)=Δ(ij)(l)+aj(l)∗δi(l+1)