loading...
梯度校验
Published in:2022-05-17 | category: 人工智能

梯度校验

梯度校验是一种判断梯度(导数)是否出错的方法,通常我们会通过反向传播的方法来计算梯度,并通过梯度校验的方式来判断最终的梯度是否正确。

如何计算梯度

除了神经网络的反向传播之外,我们可以通过类似于极限的方式来取近似的梯度,在数学中对于$x$在$x_0$处的梯度有如下定义
$$
\large f’(x_0)=\lim_{x\to x_0}\frac{f(x)-f(x_0)}{x-x_0}
$$
在梯度校验中我们取
$$
\large f’(x)=\lim_{\epsilon\to 0}\frac{f(x+\epsilon)-f(x-\epsilon)}{2\epsilon}
$$

$$
\large \frac {\partial}{\partial\theta_1}J(\theta)=\frac{J(\theta_1+\epsilon,\theta_2…\theta_n)-J(\theta_1-\epsilon,\theta_2…\theta_n)}{2\epsilon}
$$

对每一个$\theta$都进行一次该操作,就能得出最终的梯度向量,与通过反向传播求出来的梯度向量(由梯度矩阵展开而来)比较,如果差不多,就说明反向传播写的没问题。

TIPS:不要把梯度校验作为计算梯度的方式用于训练,因为它极其费时。

Prev:
pytorch中的log_softmax
Next:
神经网络的反向传播