本文主要介绍反向传播的代价函数,应用过程,梯度检测、以及前向和反向的区别等内容。
1.反向传播
我们使用反向传播计算导数项(为了求最小代价函数,可以对比梯度下降法导数的作用)。反向传播,就是对每一个节点求误差。根据反向传播的定义:
其中,δ j^((i))代表第i层,第j个节点的误差,代表第i层,第j个节点的拟合结果,yi代表实际值。
将上式写成向量形式为:
我们以上边的4层网络为例:
表示整个网络的误差,接下来我们要求第三层和第二层网络的误差:
其中,
以上就是反向传播。反向传播是指,从输出层开始计算误差,然后一层一层的向前计算直到第二层。
2.反向传播的应用过程
1.对于给定的训练集:
设每一个节点的误差均为0。使用前向传播计算a((l))(l=2,…,L),使用计算传来的a((l))与给定值做差,计算误差函数:
2.误差函数累计为:
3.接写来计算:
计算出来的D_ij((l))就是∂/(∂θ_ij((l) ) ) J(θ)。之后就可以使用梯度下降法优化。
3.梯度检测
反向传播在和优化算法(梯度下降等)一起运行时,会产生误差(程序BUG的原因,且不易发现)。虽然代价函数也是一直在下降。但是,与没有BUG相比,代价函数会高出一个数量级。因此,使用梯度检测求代价函数的导数,比较两种方法求导的结果,避免这种情况。
上图中θ点的导数为:
按照以上规则求取θ的各个导数:
应用以上公式,可以估算代价函数关于任何参数的偏导数。使用本方法得到的偏导数,与上文中的D_ij^((l))进行比较,就可以确定反向传播中的计算结果是否正确。
4.前向传播和反向传播
神经网络前向传播的计算方式是由输入层向输出层逐层计算,反向传播由输出层向第二层逐层计算。
神经网络中的前向传播就是计算目标函数和代价函数(损失值)的过程,而反向传播是计算偏导数,使用优化算法优化参数的过程。