> For the complete documentation index, see [llms.txt](https://baozoulin.gitbook.io/neural-networks-and-deep-learning/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://baozoulin.gitbook.io/neural-networks-and-deep-learning/di-er-men-ke-gai-shan-shen-ceng-shen-jing-wang-luo-chao-can-shu-tiao-shi-zheng-ze-hua-yi-ji-you-hua/improving-deep-neural-networks/practical-aspects-of-deep-learning/113-ti-du-jian-yan-ff08-gradient-checking.md).

# 1.13 梯度检验（Gradient checking）

* 梯度检查要做的是将$$W^{\[1]},b^{\[1]},\cdots,W^{\[L]},b^{\[L]}$$这些矩阵构造成一维向量，然后将这些一维向量组合起来构成一个更大的一维向量$$\theta$$。这样的cost function$$J(W^{\[1]},b^{\[1]},\cdots,W^{\[L]},b^{\[L]})$$可以表示成$$J(\theta)$$

![](/files/-Le0ct1GdLCfcELi7tc-)

* 然后将反向传播过程通过梯度下降算法得到的$$dW^{\[1]},db^{\[1]},\cdots,dW^{\[L]},db^{\[L]}$$按照一样的顺序构造成一个一维向量$$d\theta$$。$$d\theta$$的维度与$$\theta$$一致
* 接着利用$$J(\theta)$$对每个$$\theta\_i$$算近似梯度，其值与反向传播算法得到的$$d\theta\_i$$相比较，检查是否一致。例如，对于第$$i$$个元素，近似梯度为：

$$
d\theta\_{approx}\[i]=\frac{J(\theta\_1,\theta\_2,\cdots,\theta\_i+\varepsilon,\cdots)-J(\theta\_1,\theta\_2,\cdots,\theta\_i-\varepsilon,\cdots)}{2\varepsilon}
$$

* 计算完所有$$\theta\_i$$的近似梯度后，可以计算$$d\theta\_{approx}$$与$$d\theta$$的欧氏（Euclidean）距离来比较二者的相似度。公式如下：

$$
\frac{||d\theta\_{approx}-d\theta||*2}{||d\theta*{approx}||\_2+||d\theta||\_2}
$$

* 如果欧氏距离越小，例如$$10^{-7}$$，甚至更小，则表明$$d\theta\_{approx}$$与$$d\theta$$越接近，即反向梯度计算是正确的，没有bugs。如果欧氏距离较大，例如$$10^{-5}$$，则表明梯度计算可能出现问题，需要再次检查是否有bugs存在。如果欧氏距离很大，例如$$10^{-3}$$，甚至更大，则表明$$d\theta\_{approx}$$与$$d\theta$$差别很大，梯度下降计算过程有bugs，需要仔细检查
