Neural Network and Deep Learning读书笔记-Chap2

Chap2

反向转播算法的目的是计算成本函数对于权重和偏置的偏导数。

反向传播的两个前提假设:

1. 成本函数可以写成每个样本成本的平均形式,因为反向传播实际上是先计算针对每个样本的偏导数,再将他们平均。

2. 成本函数可以被看作是实际输出的函数。

反向传播的四个基本方程:

1. 最后一层误差计算方程

2. 误差的向前传播方程

3. 针对偏置的梯度计算

4. 针对权重的梯度计算

思考过程实际上从4到1,计算过程是从1到4。反向传播是怎样的一个思考过程?实际我们想求的是损失函数对权重和偏置的梯度,而在计算过程中,我们发现,权重和偏置的偏导取决于当前层的偏C偏z,那就想计算当前层的偏C偏z。而在计算当前层的偏C偏z的时候,又发现它们取决于后一层的偏C偏z,一直推到输出层。而输出层的偏C偏z是可以显式地计出来的,因此就总结出了反向传播算法。

反向传播的代码逻辑:

1. 输入一批样本

2. 对于每个样本,计算

      a:前向传播:计算每个神经元的加权和和activation

      b:计算输出神经元误差

      c:利用基本方程反向传播误差

3. 梯度下降:对于每一个w利用误差和activation计算权重梯度,然后每一个样本的梯度平均值作为总梯度。利用误差计算偏置梯度,同样利用梯度平均值计算总梯度,然后更新权重和偏置。

之所以用偏c偏z而不是偏c偏a是因为发现在计算过程中前者更方便。为什么更方便?因为如果用偏c偏a来表示的话,中间相当于嵌套了一层a=sigma(z),更复杂。现在的后两个方程实际上是相当于把这个嵌套分成了两步。

为何反向传播算法更好?与之相比的传统算法计算梯度需要计算函数的差分,意味着要计算函数值,而每改变一次w或b就要重新计算一次函数值,如果有一百万个w,意味着为了计算梯度要计算一百万次函数值,这太慢了。而实际上,各个w的梯度之间是相关的,可以通过链式法则一次性解决,这就大大减少了计算量。

你可能感兴趣的:(Neural Network and Deep Learning读书笔记-Chap2)