深度學習理論基礎14 數值微分

2021-09-07 14:58:23 字數 1630 閱讀 7985

先來看乙個導數的公式

其中h是趨近無限小的數。導數表示x方向的微小變化導致f(x)的值在多大程度發生變化。

如果用**幫助你的理解,這個**是這樣的:

def numerical_diff(f, x):

h = 10e-50

return (f(x+h) - f(x)) / h

現在你大約了解了導數是怎麼回事(學渣才不知道的吧,喂!)

但是這個實現是不能用的。因為小數點後50位早就被計算機省略了。10e-50對計算機來說就是個0。

所以這個實現需要改進。實際上可以把h改為0.0001。

咦,這個值會不會太大了?造成導數的誤差太大吧?沒關係,有乙個很好的辦法可以把誤差縮小。

中心差分!(誰人不屑?又誰人懵逼?)

通過圖表可以看出,f(x+h) 與 f(x-h)的中點位置已經非常接近真實的導數了。

相像一下,(f(x+h) - f(x)) / h(注意:這叫向前差分)的影象怎麼表示呢?它與導數的誤差大約是什麼水平呢?

當你想明白中心差分比向前差分更準確這一點,請繼續下面的內容。

--------偏導數--------

下面是乙個函式(多個變數)的公式

**

def function_2(x):

return x[0]**2 + x[1]**2

影象化表示:

那麼,什麼是偏導數呢?

為x0賦值,求此時x1的導數,這就叫偏導數了。

為x1賦值,求此時x0的導數,這也叫偏導數了。

偏導數怎麼求?

第一步,為其中乙個變數賦值,得到乙個新的函式

第二步,求這個新函式在某點的導數

問題舉例:求x 0 = 3, x 1 = 4時,關於x 0 的偏導數

第一步:為其中乙個變數賦值,得到乙個新的函式

因為要求關於x0的偏導數,所以把x1賦值,得到函式

def function_tmp1(x0):

return x0**2 + 4**2

第二步,求這個新函式在某點的導數

實際我們求的是function_tmp1()在點3的導數。

這個還真難不倒我們,

d=numerical_diff(function_tmp1, 3)

結果為6.00000000000378

至此,我們掌握了類似「求x 0 = 3, x 1 = 4時,關於x 0 的偏導數」這樣的問題的求解步驟。

請理解偏導數並掌握其實現方法。下一節將會使用偏導數的知識去實現梯度。

而後面深度學習的實現又依賴於梯度法,人工智慧的問世又依賴於深度學習,

火星殖民又依賴於人工智慧(好嚴謹的邏輯,我竟然無言以對。。。)

深度學習理論基礎1 Numpy

夜夢,語文老師勒令我寫一篇 深度學習入門 基於python的理論與實現 讀後感。我不敢懈怠,立即翻出我的膝上型電腦,開始寫作文。numpy 簡介 是乙個python第三方模組 處理陣列,矩陣,多維陣列十分便捷 底層用c語言實現,高效 numpy陣列的加減乘除運算 np arr np.array 1,...

深度學習理論基礎11 輸出層的設計

首先,繼續上節的話題。softmax 函式。這只就是softmax函式了。其中a代表輸出層的輸入資料,ak代表第k個輸入。如果你覺得又難理解又難記,其實可以拆成3步來理解 1.把所有的輸入計算成序列 e a1 e a2 e a3 e an 用np的廣播功能一行就能搞定 2.計算得到上面的結果之和su...

深度學習的理論基礎

在 1989 年提出通用近似定理以來,至少我們有了最基本的乙個理論基礎,即神經網路有潛力解決各種複雜的現實問題。mit 教授 tomaso poggio 曾在他的系列研究中 1 表示深度學習理論研究可以分為三大類 表徵問題 representation 為什麼深層網路比淺層網路的表達能力更好?最優化...