Cost Function
-
(L):表示神经网络的总层数。
-
(S_l):表示第(l)层的单元数(即神经元的数量),其中不包括第(l)层的偏置单元。
-
(K):输出层单元数目。
-
(left( h_Theta left( x^{left( i ight)} ight) ight)_k):表示输出神经网络输出向量中的第(k)个元素。
-
如果一个网络在第(j)层有(S_j)个单元,在(j+1)层有(S_{j+1})个单元,那么矩阵( heta^{left(j ight)}),即控制第(j)层到第(j+1)层映射的矩阵,他的维度是(S_{j+1} imes(S_j+1)).
-
神经网络代价函数(带正则化项):
[J( heta)=frac1m sum_{i=1}^m sum_{k=1}^K left[ - y^{left(i
ight)}_k log left( h_Theta left( x^{left( i
ight)}
ight)
ight)_k - left( 1-y^{left( i
ight)}_k
ight) log left( 1- left( h_Theta left( x^{left( i
ight)}
ight)
ight)_k
ight)
ight] + frac {lambda}{2m} sum_{l=1}^{L-1} sum_{i=1}^{S_l} sum_{j=1}^{S_{l+1}} left( Theta_{ji}^ { left( l
ight) }
ight)^2
]
- 看起来复杂很多的代价函数背后的思想还是一样的,通过代价函数来观察算法预测的结果与真实情况的误差有多大。
- 唯一不同的是对于每一行特征,都会给出(K)个预测。在(K)个预测中选择可能性最高的一个,将其与(y)中的实际数据进行比较。
- 正则化的那一项是排除了每层的( heta_0)后,每一层的( heta)矩阵的和。最里面的循环(j)循环所有的行,由(S_{l+1})层的激活单元数决定;循环(i)则循环所有的列,由(S_l)层的激活单元数决定。
Forward propagation
假设有一个三层的神经网络
参数含义:
- ( heta^{left(i ight)}):第(i)层的参数矩阵(即控制第(i)层到第(i+1)层映射的矩阵)
- (z^{left(l ight)}):第(l)层的输入
- (a^{left(l ight)}):第(l)层的输出
向前传播算法过程:(其中(g)为sigmoid激活函数。)
- (a^{left(1 ight)}=x quad (add quad a_0^{left(1 ight)}))
- (z^{left(2 ight)}= heta^{left(1 ight)}a^{left(1 ight)})
- (a^{left(2 ight)}=gleft(z^{left(2 ight)} ight) quad (add quad a_0^{left(2 ight)}))
- (z^{left(3 ight)}= heta^{left(2 ight)}a^{left(2 ight)})
- (a^{left(3 ight)}=gleft(z^{left(3 ight)} ight)=h_ heta(x))
Backpropagation Algorithm
参数含义:
- (delta^{left(l ight)}):第(l)层的误差
- (y):每个样本的标签(要转化成非线性相关的向量)
- (h):每个样本的预测值
先来从后往前计算每层的“误差“。注意到这里的误差用双引号括起来,因为并不是真正的误差。
- (delta^{left(3 ight)}=h-y=a^{left(3 ight)}-y)
- (delta^{left(2 ight)}=left( heta^{left(2 ight)} ight)^T·delta^{left(3 ight)}.*{g^prime (z^{left(2 ight)}) })
- 没有(delta^{left(1 ight)}),因为第一层是输入变量不存在误差。
然后来计算每层参数矩阵的梯度,用(Delta^{(l)})表示。
当(lambda=0)时,即不考虑正则化处理
- (Delta^{(2)}=a^{left(2 ight)}·delta^{left(3 ight)})
- (Delta^{(1)}=a^{left(1 ight)}·delta^{left(2 ight)})
则利用反向传播算法计算所有的偏导数(不考虑正则化)
- (frac{partial}{partial Theta^{left( 2 ight)}} Jleft(Theta ight) = Delta^{left( 2 ight)}=a^{left(2 ight)}·delta^{left(3 ight)})
- (frac{partial}{partial Theta^{left( 1 ight)}} Jleft(Theta ight) = Delta^{left( 1 ight)}=a^{left(1 ight)}·delta^{left(2 ight)})
推导:
- 要优化的参数有( heta^{left( 2 ight)})、( heta^{left( 1 ight)})。
- 利用梯度下降法的思想,我们只需要求解出代价函数对参数的梯度即可。
- 假设只有一个输入样本,则代价函数是:
[Jleft( heta
ight)=-y log h(x)-(1-y)log (1-h(x))
]
- 回顾下正向传递的过程,理解其中函数的嵌套关系:
- (a^{left(1 ight)}=x quad (add quad a_0^{left(1 ight)}))
- (z^{left(2 ight)}= heta^{left(1 ight)}a^{left(1 ight)})
- (a^{left(2 ight)}=gleft(z^{left(2 ight)} ight) quad (add quad a_0^{left(2 ight)}))
- (z^{left(3 ight)}= heta^{left(2 ight)}a^{left(2 ight)})
- (a^{left(3 ight)}=gleft(z^{left(3 ight)} ight)=h_ heta(x))
- 然后我们来求解代价函数对参数的梯度:(frac{partial}{partial heta^{left( 2 ight)}} Jleft( heta ight)),(frac{partial}{partial heta^{left( 1 ight)}} Jleft( heta ight))
- 根据链式求导法则,可以计算得到:
[frac{partial}{partial heta^{left( 2
ight)}} Jleft( heta
ight)=frac{partial Jleft( heta
ight)}{partial a^{left( 3
ight)}}·frac{partial a^{left( 3
ight)}}{partial z^{left( 3
ight)}}·frac {partial z^{left( 3
ight)}}{partial heta^{left( 2
ight)}}
]
- 其中,$frac{partial Jleft( heta
ight)}{partial a^{left( 3
ight)}}=frac{partial Jleft( heta
ight)}{partial h(x)}=-frac yh+(1-y)frac1{1-h}=frac{h-y}{h·(1-h)}$
- $frac{partial a^{left( 3
ight)}}{partial z^{left( 3
ight)}}=frac{ e^{-z} }{ (1+e^-z)^2}=a^{left( 3
ight)}·left(1-a^{left( 3
ight)}
ight)=h·(1-h)$
- $frac {partial z^{left( 3
ight)}} {partial heta^{left( 2
ight)}}=a^{(2)}$
- 所以可得:
[frac{partial}{partial heta^{left( 2
ight)}} Jleft( heta
ight)=(h-y)·a^{(2)}=delta^{left(3
ight)}·a^{(2)}
]
- 同理,根据链式求导法则,计算:
[frac{partial}{partial heta^{left( 1
ight)}} Jleft( heta
ight)=frac{partial Jleft( heta
ight)}{partial a^{left( 3
ight)}}·frac{partial a^{left( 3
ight)}}{partial z^{left( 3
ight)}}·frac {partial z^{left( 3
ight)}}{partial a^{left( 2
ight)}}·frac{partial a^{left( 2
ight)}}{partial z^{left( 2
ight)}}·frac {partial z^{left( 2
ight)}}{partial heta^{left( 1
ight)}}
]
- 其中,由上可知,$frac{partial Jleft( heta
ight)}{partial a^{left( 3
ight)}}·frac{partial a^{left( 3
ight)}}{partial z^{left( 3
ight)}}=h-y=delta^{left(3
ight)}$
- $frac {partial z^{left( 3
ight)}}{partial a^{left( 2
ight)}}= heta^{(2)}$
- $frac{partial a^{left( 2
ight)}}{partial z^{left( 2
ight)}}=g^primeleft(z^{left(2
ight)}
ight)$
- $frac {partial z^{left( 2
ight)}}{partial heta^{left( 1
ight)}}=a^{(1)}$
- 所以可得:
[frac{partial}{partial heta^{left( 1
ight)}} Jleft( heta
ight)=delta^{left(3
ight)} heta^{(2)} g^primeleft(z^{left(2
ight)}
ight) a^{(1)}=delta^{left(2
ight)}·a^{(1)}
]
当(lambda eq 0)时,即考虑正则化处理:
[frac{partial}{partial Theta_{ij}^{left( l
ight)}} Jleft(Theta
ight) = D_{ij}^{left( l
ight)}= frac1m Delta_{ij}^{left( l
ight)} quad for quad j=0
]
[frac{partial}{partial Theta_{ij}^{left( l
ight)}} Jleft(Theta
ight) = D_{ij}^{left( l
ight)}= frac1m Delta_{ij}^{left( l
ight)}+frac{lambda}{m} Theta_{ij}^{left( l
ight)} quad for quad j geq 1
]