为什么反向传播的梯度检查很慢?

Why is Gradient Checking Slow For Back Propagation?

我最近学习了算法 "Gradient Checking" 以确保正确计算我的神经网络反向传播的导数。

The course from which I have learned, and many other sources such as this one,声称它比计算导数慢得多,但我似乎找不到任何地方可以解释为什么。

那么,为什么梯度检查比直接计算导数慢?

慢了多少?

你在反向传播中所做的是automatic/algorithmic微分的向后模式,用于具有大量N输入和只有一个输出的函数。这里的"inputs"主要是指神经网络节点的实数参数,也可能是网络的输入变量。

在向后模式中,您通过操作链一次计算所有输入的导数。这具有大约 3 个功能评估的成本加上向后执行操作链以及存储和访问中间结果的组织开销。

在用于 "gradient checking" 的相同情况的正向模式中,无论是向前推 AD 导数还是计算除差,都需要单独计算每个导数。其总成本约为 2*N 次函数评估。

并且由于 N 很大,2*N 比 3 大得多。