首先,繼續上節的話題。softmax()函式。
這只就是softmax函式了。其中a代表輸出層的輸入資料,ak代表第k個輸入。
如果你覺得又難理解又難記,其實可以拆成3步來理解:
1.把所有的輸入計算成序列[e**(a1),e**(a2),e**(a3)...e**(an)],用np的廣播功能一行就能搞定
2.計算得到上面的結果之和sum
3.第k個輸入的softmax之值即為 e**(ak)/sum
是不是用python語言比數學語言好理解多了?下面是python實現,感受下。
def softmax(a):
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
但是這個函式還有乙個瑕疵,如果np.exp方法的引數過大,會出現很大很大很大的數,
畢竟指數**不是鬧著玩的。
所以下面是改進版本
def softmax(a):
c = np.max(a)
exp_a = np.exp(a - c) # 溢位對策
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
括號裡減掉乙個c難道不影響結果嗎?不要著急懵,非數學精英請跟隨我的證明。
如果理解依然有困難。可以這麼想,e**(a+c)=e**a乘以e**c
既然分子和分母同時乘以e**c了,它們有什麼理由不相同呢?
所以,括號裡的部分,只要分子和分母加的是同乙個東西,就不影響結果。
softmax()的結果在0~1之間。所以把softmax()的輸出稱為概率。
softmax()是單調遞增的:
也就是說如果輸入資料本來就是最大的,經過softmax()計算之後還是最大。
如果輸入資料本來排行老二,經過softmax()計算之後還是排行老二。
所以神經網路在'推理'的過程可以省略softmax()。
'推理'是指用學到的模型對未知的資料進行分類,
也稱為神經網路的前向傳播(forward propagation)。
在輸出層使用softmax函式是因為它和神經網路的學習有關係,這部分的內容在後面博文裡。
--------結語--------
下集預告:手寫數字識別。
深度學習理論基礎1 Numpy
夜夢,語文老師勒令我寫一篇 深度學習入門 基於python的理論與實現 讀後感。我不敢懈怠,立即翻出我的膝上型電腦,開始寫作文。numpy 簡介 是乙個python第三方模組 處理陣列,矩陣,多維陣列十分便捷 底層用c語言實現,高效 numpy陣列的加減乘除運算 np arr np.array 1,...
深度學習理論基礎14 數值微分
先來看乙個導數的公式 其中h是趨近無限小的數。導數表示x方向的微小變化導致f x 的值在多大程度發生變化。如果用 幫助你的理解,這個 是這樣的 def numerical diff f,x h 10e 50 return f x h f x h 現在你大約了解了導數是怎麼回事 學渣才不知道的吧,喂!...
深度學習的理論基礎
在 1989 年提出通用近似定理以來,至少我們有了最基本的乙個理論基礎,即神經網路有潛力解決各種複雜的現實問題。mit 教授 tomaso poggio 曾在他的系列研究中 1 表示深度學習理論研究可以分為三大類 表徵問題 representation 為什麼深層網路比淺層網路的表達能力更好?最優化...