Chansh

Keep on writing.

Deep Learning深度学习(二):反向传播

本文为Neural Networks and Deep Learning一书的学习笔记,仅记录书中的理论部分,省略了实验和例子,用到的图都来自于书中。

这本书很适合初学者读,作者写得非常详细,简单易懂,里面涉及到的内容都有解释,还有配有代码和例子,强烈推荐!

神经网络的训练目标是最小化目标函数,使用梯度下降的方法来训练参数。在梯度下降中,需要根据的计算结果来决定参数的改变幅度。反向传播便提供了一种计算偏导的方法。

在前一章里已经讲过,每个神经元的计算过程可以写作:

为第l层的神经元的输出的向量,为参数,为非线性的激活函数,如sigmoid。

给整个神经网络设定一个目标函数为(Cost Function),例如:

是样本的label,是输出层输出的结果。

在用梯度下降法求使目标函数最小的参数时,每一步参数的更新方法是:

其中是步长,每个mini-batch包含m个训练数据。下面通过反向传播来计算

为方便计算,定义残差(error):

表示l层第j个神经元的input的加权和。根据定义,可以推算出每一层残差的计算方法:

在此基础上,得到我们关心的的计算方法,用error表示为:

根据上面4个公式,可以从output层往input层计算出每一层的参数在进行梯度下降时应该下降的幅度。

为什么说backpropagation很快?

试想如果不使用backpropagation方法,一个直观的做法是:

其中是一个极小正数,方向上的单位向量。用这个方法计算每个参数每一次迭代时调整的方向和大小,这意味着假设整个网络共层,每层个全连接的节点,那么一共有变量和变量,梯度下降法中,每一次迭代(假设mini-batch size为,即根据个样本的情况对所有变量更新一次)就要遍历整个网络次。相比之下,backpropagation中一次迭代只需要对整个网络进行2次遍历(一次feedforwarding,一次backpropagation),节省了非常多的时间。

Written with StackEdit.