#对反向传播算法的理解
求梯度用反向传播算法,核心是“链式求导”法则,又如何具体实现呢?这里,主要参考Michael Nielsen的Neural Networks and Deep Learning里的第二章。
介绍反向传播算法之前,我们需要知道以下几点:
- 确定Cost function C C C,即损失函数
- 根据 C C C得出 C x C_x Cx,即一个训练样本的损失函数。需要 C x C_x Cx的原因是,我们接下来的反向传播算法是对一个训练样本进行的。重复这个操作,最终对所有训练样本进行完反向传播。这些我们后面会细说。
符号定义
对于一个训练样本,我们记做 x x x
对于神经网络里每一层的权值,我们记做 w l w^l wl
对于神经网络里每一层的偏差,我们记做 b l b^l bl
对于神经网络里每一层的输入,我们记做 z l z^l zl
对于神经网络里每一层的输出,我们记做 a l a^l al
定义激活函数为 f f f
那么 a l = f ( z l ) a^l = f(z^l) al=f(zl)
神经网络的前向传播过程即:
$a^0 = x $
z 1 = w 1 a 0 + b 1 z^1 = w^1a^0+b^1 z1=w1a0+b1
a 1 = f ( z 1 ) a^1 = f(z^1) a1=f(z1)
z 2 = w 2 a 1 + b 2 z^2 = w^2a^1+b^2 z2=w2a1+b