反向传播算法
基础知识
我们在计算神经网络预测结果时采用了正向传播方法,从第一层开始正向一层一层进行计算算,直到最后一层的 h θ ( x ) h_\theta (x) hθ(x)。在不作正则化处理的情况下,逻辑回归中的代价函数如下所示:
J ( θ ) = − 1 m [ ∑ j = 1 m y ( i ) l o g h θ ( x i ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=-\frac{1}{m}[\sum_{j=1}^my^{(i)}logh_{\theta}(x^{i})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))] J(θ)=−m1[j=1∑my(i)loghθ(xi)+(1−y(i))log(1−hθ(x(i)))]
在神经网络中可以有很多输出变量,所以 h θ ( x ) h_\theta(x) hθ(x)是一个维度为 K K K的向量。此时代价函数如下所示:
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)=-\frac{1}{m}\left[\sum_{i=1}^{m} \sum_{k=1}^{k}y_k^{(i)}log\left(h_\theta(x^{(i)})\right)_k + \left(1-y_k^{(i)}\right)log\left(1-\left(h_\theta(x^{(i)})\right)\right)_k \right] J(θ)=−m1[i=1∑mk=1∑kyk(i)log(hθ(x(i)))k+(1−yk(i))log(1−(hθ(x(i))))k]
为了计算代价函数的偏导数 ∂ J ( θ ) ∂ θ i j ( l ) \frac{\partial J(\theta)}{\partial \theta_{ij}^{(l)}} ∂θij(l)∂J(θ),我们需要一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层(第一层不存在误差)。以下面例子说明反向传播算法。
假设我们的训练集只有一个实例 ( x ( 1 ) , y ( 1 ) ) (x^{(1)},y^{(1)}) (x(1),y(1)),神经网络是一个四层的神经网络,其中 K = 4 , S L = 4 , L = 4 K=4,S_L=4,L=4