对反向传播算法的理解
求梯度用反向传播算法,核心是“链式求导”法则,又如何具体实现呢?这里,主要参考Michael Nielsen的Neural Networks and Deep Learning里的第二章。
介绍反向传播算法之前,我们需要知道以下几点:
- 确定Cost function
- 根据
符号定义
对于一个训练样本,我们记做
对于神经网络里每一层的权值,我们记做
对于神经网络里每一层的偏差,我们记做
对于神经网络里每一层的输入,我们记做
对于神经网络里每一层的输出,我们记做
定义激活函数为
那么
神经网络的前向传播过程即:
…….
这样依次进行下去,即
前面提到我们需要求得一个训练样本的损失函数
例如:损失函数
下面为了方便,我们把
反向传播算法
定义神经网络里每一层的误差:
下面介绍的四个公式会给我们计算
公式1:
我们使用公式1,求得神经网络里最后一层的误差,最后一层通常不使用激活函数,因此在最后一层里
公式2:
这个公式是让我们通过递推的方式求得每一层的
公式3:
求得偏差
公式4:
以上是对一个训练样本的损失函数进行梯度计算,最后只需要我们把所有训练样本的梯度累加,然后除以样本数目,作为最终的梯度。(如有正则化,需要再加上正则化部分的梯度,而这个是最好求的,略讲)。
如果我们直接从所有训练样本出发,又该如何呢?注意!!下面在使用上述4个公式的时候,都是在使用整个训练样本,之前的
公式3表明了一个训练样本的
最后一层的
运用公式4,即可求得所有训练样本的
通过所有上面讲述的,我们可以意识到,关键点和难点是如何求出最后一层的
之后我会贴一份具体的实例代码。