梯度的数值逼近
当实施反向传播的时候,有一个测试叫做梯度检验,它的作用是保证反向传播可以正确实施。在写好反向传播公式的时候,你没有办法保证执行反向传播的所有细节全部都是正确的。为了实现逐步梯度检验,我们先来说一下如何对梯度做数值逼近。
如图所示,我们只需记住,双边检测误差更低,精度更高。
那么为什么是平方误差关系呢,这里用到了泰勒展开式,做差所得,我们先来复习一下泰勒展开式的知识
然后这个公式的推导过程如下:
梯度检验
下面我们介绍一下如何用梯度检验来检验反向传播实施是否正确。
如图所示,为了执行梯度检验,我们首先要把所有参数转化成一个巨大的向量数据。
转换完之后那么现在的问题是 dθ ,或者说是代价函数J的梯度和代价函数之间有什么关系。而这,就是实施梯度检验的过程。英语里通常称为grad check。
如图所示,为了执行梯度检验,你要做的就是使用循环操作。
我们执行双边误差检测。由上节课的知识我们应该知道,这个双边误差应该近似于 dθ 。
那么如何定义两个向量是否彼此接近呢?我们一般使用二范数来进行度量。最后我们将向量长度做归一化处理,得到上图中最下面的公式。如果我们得到的这个误差在10的负7次方的数量级,那么非常好,如果这个误差比较大,那么我们就要重新检验了。
关于梯度检验实现的注记
这里我们谈一下在神经网络中实现梯度检验的注意技巧和注意事项
最后的一点说明一下,最好在反复训练神经网络之后再进行梯度检验。