在神经网络中,使用前向或者反向传播计算后,再使用梯度下降去寻找代价函数最小时 θ \theta θ的取值是一个可行的方法,但是它很容易出错:因为在这个算法中含有海量的细节,容易产生微小而又难以察觉的bug。即便是存在bug,梯度下降计算出来的 J ( θ ) J(\theta) J(θ)还是会照常迭代下降,但是得出来的结果的误差将会比正确的情况高出一个量级。因此我们需要使用梯度检验的方法赖解决这种问题,只要需要使用类似梯度下降或者反向传播的算法都可以使用这种方法,这种方法能够确保你的前向\反向传播完全正确。
首先我们以下图为例子,其中有一个点 
     
      
       
       
         θ 
        
       
      
        \theta 
       
      
    θ,而 
     
      
       
       
         ϵ 
        
       
      
        \epsilon 
       
      
    ϵ是一个很小的数,类似于微积分中的微小增量,一般可以将 
     
      
       
       
         ϵ 
        
       
      
        \epsilon 
       
      
    ϵ取作 
     
      
       
       
         1 
        
        
        
          0 
         
         
         
           − 
          
         
           4 
          
         
        
       
      
        10^{-4} 
       
      
    10−4
 
 而另外两个点分别为 
     
      
       
       
         ( 
        
       
         θ 
        
       
         − 
        
       
         ϵ 
        
       
         , 
        
       
         J 
        
       
         ( 
        
       
         θ 
        
       
         − 
        
       
         ϵ 
        
       
         ) 
        
       
         ) 
        
       
      
        (\theta-\epsilon , J(\theta-\epsilon )) 
       
      
    (θ−ϵ,J(θ−ϵ))和 
     
      
       
       
         ( 
        
       
         θ 
        
       
         + 
        
       
         ϵ 
        
       
         , 
        
       
         J 
        
       
         ( 
        
       
         θ 
        
       
         + 
        
       
         ϵ 
        
       
         ) 
        
       
         ) 
        
       
      
        (\theta+\epsilon , J(\theta+\epsilon )) 
       
      
    (θ+ϵ,J(θ+ϵ)),这和导数十分像不是吗?那当然我们可以得出如下的式子 
      
       
        
         
         
           δ 
          
          
          
            δ 
           
          
            θ 
           
          
         
        
          J 
         
        
          ( 
         
        
          θ 
         
        
          ) 
         
        
          ≈ 
         
        
          g 
         
        
          r 
         
        
          a 
         
        
          d 
         
        
          A 
         
        
          p 
         
        
          p 
         
        
          r 
         
        
          o 
         
        
          x 
         
        
          = 
         
         
          
          
            J 
           
          
            ( 
           
          
            θ 
           
          
            + 
           
          
            ϵ 
           
          
            ) 
           
          
            − 
           
          
            J 
           
          
            ( 
           
          
            θ 
           
          
            − 
           
          
            ϵ 
           
          
            ) 
           
          
          
          
            2 
           
          
            ϵ 
           
          
         
        
       
         \frac{\delta }{\delta \theta } J(\theta )\approx gradApprox= \frac{J(\theta+\epsilon )-J(\theta-\epsilon )}{2\epsilon } 
        
       
     δθδJ(θ)≈gradApprox=2ϵJ(θ+ϵ)−J(θ−ϵ)
接下来我们呢考虑更加广泛的情况比如假设 
     
      
       
       
         θ 
        
       
      
        \theta 
       
      
    θ是一个n维向量,也就是 
     
      
       
       
         θ 
        
       
         ∈ 
        
        
        
          R 
         
        
          n 
         
        
       
         , 
        
       
         θ 
        
       
         = 
        
       
         [ 
        
        
        
          θ 
         
        
          1 
         
        
       
         , 
        
        
        
          θ 
         
        
          2 
         
        
       
         , 
        
        
        
          θ 
         
        
          3 
         
        
       
         , 
        
       
         . 
        
       
         . 
        
       
         . 
        
       
         , 
        
        
        
          θ 
         
        
          n 
         
        
       
         ] 
        
       
      
        \theta \in R^n,\theta=[\theta_1,\theta_2,\theta_3,...,\theta_n] 
       
      
    θ∈Rn,θ=[θ1,θ2,θ3,...,θn],那么我们可以使用相同的办法得出对应偏导数的大约值
 
 接下来我们需要使用到反向传播所计算出来的导数向量 
     
      
       
       
         D 
         
       
         V 
        
       
         e 
        
       
         c 
        
       
         = 
        
       
         [ 
        
        
        
          D 
         
         
         
           ( 
          
         
           1 
          
         
           ) 
          
         
        
       
         , 
        
        
        
          D 
         
         
         
           ( 
          
         
           2 
          
         
           ) 
          
         
        
       
         , 
        
        
        
          D 
         
         
         
           ( 
          
         
           3 
          
         
           ) 
          
         
        
       
         . 
        
       
         . 
        
       
         . 
        
        
        
          D 
         
         
         
           ( 
          
         
           n 
          
         
           ) 
          
         
        
       
         ] 
        
       
      
        D\:Vec=[D^{(1)},D^{(2)},D^{(3)}...D^{(n)}] 
       
      
    DVec=[D(1),D(2),D(3)...D(n)],检查 
     
      
       
       
         g 
        
       
         r 
        
       
         a 
        
       
         d 
        
       
         A 
        
       
         p 
        
       
         p 
        
       
         r 
        
       
         o 
        
       
         x 
        
       
         ≈ 
        
       
         D 
         
       
         V 
        
       
         e 
        
       
         c 
        
       
      
        gradApprox\approx D\:Vec 
       
      
    gradApprox≈DVec,如果成立的话,则可以认为反向传播是正确的,把DVex用于梯度下降则可以得出较好的结果
主要的步骤如下:
 


















