我最近学习了“梯度检查”算法,以确保正确计算神经网络的反向传播的导数。
The course from which I have learned和许多其他来源,例如this one,声称它比计算导数要慢得多,但我似乎找不到任何能解释为什么的原因。
那么,为什么梯度检查比直接计算导数要慢?
慢多少?
答案 0 :(得分:3)
对于反向传播,您正在执行的是自动/算法微分的反向模式,该函数具有大量N的输入而只有一个输出。
在向后模式下,您可以在一遍操作链中计算所有输入的导数。这要花费大约3个功能评估的成本,再加上要向后执行操作链以及存储和访问中间结果的组织开销。
在相同情况下的正向模式下(用于“梯度检查”),独立于是否向前推AD导数或计算除差,您将需要分别计算每个导数。其总成本约为2 * N个功能评估。
当N大时,2 * N比3大得多。