神经网络优化篇:详解梯度的数值逼近(Numerical approximation of gradients)
在實施backprop時,有一個測試叫做梯度檢驗,它的作用是確保backprop正確實施。因為有時候,雖然寫下了這些方程式,卻不能100%確定,執行backprop的所有細節都是正確的。為了逐漸實現梯度檢驗,首先說說如何計算梯度的數值逼近。
先畫出函數\(f\),標記為\(f\left( \theta \right)\),\(f\left( \theta \right)=\theta^{3}\),先看一下\(\theta\)的值,假設\(\theta=1\),不增大\(\theta\)的值,而是在\(\theta\) 右側,設置一個\(\theta +\varepsilon\),在\(\theta\)左側,設置\(\theta -\varepsilon\)。因此\(\theta=1\),\(\theta +\varepsilon =1.01,\theta -\varepsilon =0.99\),,跟以前一樣,\(\varepsilon\)的值為0.01,看下這個小三角形,計算高和寬的比值,就是更準確的梯度預估,選擇\(f\)函數在\(\theta -\varepsilon\)上的這個點,用這個較大三角形的高比上寬,技術上的原因就不詳細解釋了,較大三角形的高寬比值更接近于\(\theta\)的導數,把右上角的三角形下移,好像有了兩個三角形,右上角有一個,左下角有一個,通過這個綠色大三角形同時考慮了這兩個小三角形。所以得到的不是一個單邊公差而是一個雙邊公差。
寫一下數據算式,圖中綠色三角形上邊的點的值是\(f( \theta +\varepsilon )\),下邊的點是\(f( \theta-\varepsilon)\),這個三角形的高度是\(f( \theta +\varepsilon)-f(\theta -\varepsilon)\),這兩個寬度都是ε,所以三角形的寬度是\(2\varepsilon\),高寬比值為\(\frac{f(\theta + \varepsilon ) - (\theta -\varepsilon)}{2\varepsilon}\),它的期望值接近\(g( \theta)\),\(f( \theta)=\theta^{3}\)傳入參數值,\(\frac {f\left( \theta + \varepsilon \right) - f(\theta -\varepsilon)}{2\varepsilon} = \frac{{(1.01)}^{3} - {(0.99)}^{3}}{2 \times0.01}\),大家可以暫停視頻,用計算器算算結果,結果應該是3.0001,而當\(\theta =1\)時,\(g( \theta)=3\theta^{2} =3\),所以這兩個\(g(\theta)\)值非常接近,逼近誤差為0.0001,前面只考慮了單邊公差,即從\(\theta\)到\(\theta +\varepsilon\)之間的誤差,\(g( \theta)\)的值為3.0301,逼近誤差是0.03,不是0.0001,所以使用雙邊誤差的方法更逼近導數,其結果接近于3,現在更加確信,\(g( \theta)\)可能是\(f\)導數的正確實現,在梯度檢驗和反向傳播中使用該方法時,最終,它與運行兩次單邊公差的速度一樣,實際上,認為這種方法還是非常值得使用的,因為它的結果更準確。
這是一些可能比較熟悉的微積分的理論,如果不太明白講的這些理論也沒關系,導數的官方定義是針對值很小的\(\varepsilon\),導數的官方定義是\(f^{'}\theta) = \operatorname{}\frac{f( \theta + \varepsilon) -f(\theta -\varepsilon)}{2\varepsilon}\),這里有涉及到微積分的知識。
對于一個非零的\(\varepsilon\),它的逼近誤差可以寫成\(O(\varepsilon^{2})\),ε值非常小,如果\(\varepsilon=0.01\),\(\varepsilon^{2}=0.0001\),大寫符號\(O\)的含義是指逼近誤差其實是一些常量乘以\(\varepsilon^{2}\),但它的確是很準確的逼近誤差,所以大寫\(O\)的常量有時是1。然而,如果用另外一個公式逼近誤差就是\(O(\varepsilon)\),當\(\varepsilon\)小于1時,實際上\(\varepsilon\)比\(\varepsilon^{2}\)大很多,所以這個公式近似值遠沒有左邊公式的準確,所以在執行梯度檢驗時,使用雙邊誤差,即\(\frac{f\left(\theta + \varepsilon \right) - f(\theta -\varepsilon)}{2\varepsilon}\),而不使用單邊公差,因為它不夠準確。
如果不理解上面兩條結論,所有公式都在這兒,不用擔心,如果對微積分和數值逼近有所了解,這些信息已經足夠多了,重點是要記住,雙邊誤差公式的結果更準確。
這篇講了如何使用雙邊誤差來判斷別人給的函數\(g( \theta)\),是否正確實現了函數\(f\)的偏導,現在可以使用這個方法來檢驗反向傳播是否得以正確實施,如果不正確,它可能有bug需要來解決。
總結
以上是生活随笔為你收集整理的神经网络优化篇:详解梯度的数值逼近(Numerical approximation of gradients)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文心一言 VS 讯飞星火 VS chat
- 下一篇: 【经典问题】mysql和redis数据一