先來看乙個導數的公式
其中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 為什麼深層網路比淺層網路的表達能力更好?最優化...