@songying
2018-12-31T15:48:20.000000Z
字数 1333
阅读 1070
deep-learning
梯度下降算法应该都有所了解,该方法无论是在传统机器学习方法还是如今大热的深度学习方法中都应用广泛。但是思考一下:对于一个函数而言,如何计算它的梯度呢? 通常来说有两种方式:
- 求导计算(analytic gradient)
- 数值计算 ( numerical gradient)
求导计算出来的固然是准确解,但是它一定是我们要的梯度吗? 于是你需要给自己的梯度加层保护。
参考:梯度检验与高级优化
实际中,反向传播算法并不像想象中的那么简单,通常都要通过多次调试才能得到正确的结果,尤其是你程序中有许多难以发现的bug时,有时,这些bug会使你得到看似合理的结果但实际上比正确代码的结果要差)。因此,但从计算结果上来看,我们很难发现代码中有什么东西遗漏了。
这就是我们需要梯度检验的原因。
这里我们先假设我们要最小化以 为自变量的目标函数 。 那么根据梯度下降有:
如果依稀记得高等数学的话,有这么一个公式:
此时我们需要比较近似值与准确值之间的大小来判断你的求导函数是否正确。
以上就是梯度检验的基本思想
思考一下,我们为什么要使用: 而不使用 ?
不妨假设 , 这样我们可以得出 , 而 ,很明显,第一个公式比第二个公式的准确度要高很多。
参考:吴恩达第一周: 1.14
如果在每次训练中我们都要对梯度进行检验,会极大的增大计算量,完全没有必要。