1.12 梯度的数值逼近-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 1.11 神經網絡的權重初始化 | 回到目錄 | 1.13 梯度檢驗 |
梯度的數值逼近 (Numerical Approximation of Gradients)
在實施backprop時,有一個測試叫做梯度檢驗,它的作用是確保backprop正確實施。因為有時候,你雖然寫下了這些方程式,卻不能100%確定,執行backprop的所有細節都是正確的。為了逐漸實現梯度檢驗,我們首先說說如何計算梯度的數值逼近,下節課,我們將討論如何在backprop中執行梯度檢驗,以確保backprop正確實施。
我們先畫出函數 fff ,標記為 f(θ)f(\theta)f(θ) , f(θ)=θ3f(\theta)=\theta^3f(θ)=θ3 ,先看一下 θ\thetaθ 的值,假設 θ=1\theta=1θ=1 ,不增大 θ\thetaθ 的值,而是在 θ\thetaθ 右側,設置一個 θ+?\theta+\epsilonθ+? ,在 θ\thetaθ 左側,設置 θ??\theta-\epsilonθ?? 。因此 θ=1\theta=1θ=1 , θ+?=1.01\theta+\epsilon=1.01θ+?=1.01 , θ??=0.99\theta-\epsilon=0.99θ??=0.99 ,跟以前一樣, ?\epsilon? 的值為0.01,看下這個小三角形,計算高和寬的比值,就是更準確的梯度預估,選擇 fff 函數在 θ??\theta-\epsilonθ?? 上的這個點,用這個較大三角形的高比上寬,技術上的原因我就不詳細解釋了,較大三角形的高寬比值更接近于 θ\thetaθ 的導數,把右上角的三角形下移,好像有了兩個三角形,右上角有一個,左下角有一個,我們通過這個綠色大三角形同時考慮了這兩個小三角形。所以我們得到的不是一個單邊公差而是一個雙邊公差。
我們寫一下數據算式,圖中綠色三角形上邊的點的值是 f(θ+?)f(\theta+\epsilon)f(θ+?) ,下邊的點是 f(θ??)f(\theta-\epsilon)f(θ??) ,這個三角形的高度是 f(θ+?)?f(θ??)f(\theta+\epsilon)-f(\theta-\epsilon)f(θ+?)?f(θ??) ,這兩個寬度都是 εεε ,所以三角形的寬度是 2?2\epsilon2? ,高寬比值為 f(θ+?)?f(θ??)2?\frac{f(\theta+\epsilon)-f(\theta-\epsilon)}{2\epsilon}2?f(θ+?)?f(θ??)? ,它的期望值接近 g(θ)g(\theta)g(θ) , f(θ)=θ3f(\theta)=\theta^3f(θ)=θ3 傳入參數值, f(θ+?)?f(θ??)2?=(1.01)3?(0.99)32?0.01\frac{f(\theta+\epsilon)-f(\theta-\epsilon)}{2\epsilon}=\frac{(1.01)^3-(0.99)^3}{2*0.01}2?f(θ+?)?f(θ??)?=2?0.01(1.01)3?(0.99)3? ,大家可以暫停視頻,用計算器算算結果,結果應該是3.0001,而前面一張幻燈片上面是,當 θ=1\theta=1θ=1 時, g(θ)=3θ2=3g(\theta)=3\theta^2=3g(θ)=3θ2=3 ,所以這兩個值非常接近,逼近誤差為0.0001,前一張幻燈片,我們只考慮了單邊公差,即從 θ\thetaθ 到 θ+?\theta+\epsilonθ+? 之間的誤差, g(θ)g(\theta)g(θ) 的值為3.0301,逼近誤差是0.03,不是0.0001,所以使用雙邊誤差的方法更逼近導數,其結果接近于3,現在我們更加確信, g(θ)g(\theta)g(θ) 可能是 fff 導數的正確實現,在梯度檢驗和反向傳播中使用該方法時,最終,它與運行兩次單邊公差的速度一樣,實際上,我認為這種方法還是非常值得使用的,因為它的結果更準確。
這是一些你可能比較熟悉的微積分的理論,如果你不太明白我講的這些理論也沒關系,導數的官方定義是針對值很小的 ?\epsilon? ,導數的官方定義是 f′(θ)=f(θ+?)?f(θ??)2?f^\prime(\theta)=\frac{f(\theta+\epsilon)-f(\theta-\epsilon)}{2\epsilon}f′(θ)=2?f(θ+?)?f(θ??)? ,如果你上過微積分課,應該學過無窮盡的定義,我就不在這里講了。
對于一個非零的 ?\epsilon? ,它的逼近誤差可以寫成 O(?2)O(\epsilon^2)O(?2) ,εεε 值非常小,如果 ?=0.01\epsilon=0.01?=0.01 , ?2=0.0001\epsilon^2=0.0001?2=0.0001 ,大寫符號 OOO 的含義是指逼近誤差其實是一些常量乘以 ?2\epsilon^2?2 ,但它的確是很準確的逼近誤差,所以大寫 OOO 的常量有時是1。然而,如果我們用另外一個公式逼近誤差就是 O(?)O(\epsilon)O(?) ,當 ?\epsilon? 小于1時,實際上 ?\epsilon? 比 ?2\epsilon^2?2 大很多,所以這個公式近似值遠沒有左邊公式的準確,所以在執行梯度檢驗時,我們使用雙邊誤差,即 f(θ+?)?f(θ??)2?\frac{f(\theta+\epsilon)-f(\theta-\epsilon)}{2\epsilon}2?f(θ+?)?f(θ??)? ,而不使用單邊公差,因為它不夠準確。
如果你不理解上面兩條結論,所有公式都在這兒,不用擔心,如果你對微積分和數值逼近有所了解,這些信息已經足夠多了,重點是要記住,雙邊誤差公式的結果更準確,下節課我們做梯度檢驗時就會用到這個方法。
今天我們講了如何使用雙邊誤差來判斷別人給你的函數 g(θ)g(\theta)g(θ) ,是否正確實現了函數 fff 的偏導,現在我們可以使用這個方法來檢驗反向傳播是否得以正確實施,如果不正確,它可能有bug需要你來解決。
課程PPT
| 1.11 神經網絡的權重初始化 | 回到目錄 | 1.13 梯度檢驗 |
總結
以上是生活随笔為你收集整理的1.12 梯度的数值逼近-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.11 神经网络的权重初始化-深度学习
- 下一篇: 1.13 梯度检验-深度学习第二课《改善