机器学习入门(06)— 输出层多元分类、softmax 归一化指数函数以及输出层的神经元数量
輸出層所用的激活函數,要根據求解問題的性質決定。一般地,
- 回歸問題可以使用恒等函數,也就是說會將輸入按原樣輸出;
- 二元分類問題可以使用
sigmoid函數; - 多元分類問題可以使用
softmax函數;
1. softmax 函數定義
用圖表示 softmax 函數的話,如圖 3-22所示。圖 3-22中,softmax 函數的輸出通過箭頭與所有的輸入信號相連。這是因為,從式(3.10)可以看出,輸出層的各個神經元都受到所有輸入信號的影響。
2. softmax 函數實現
在 IPython 中實現過程:
In [1]: import numpy as npIn [2]: a = np.array([0.3, 2.9, 4.0])In [3]: exp_a = np.exp(a)In [4]: exp_a
Out[4]: array([ 1.34985881, 18.17414537, 54.59815003])In [5]: sum_exp_a = np.sum(exp_a)In [6]: sum_exp_a
Out[6]: 74.1221542101633In [7]: y = exp_a/sum_exp_aIn [8]: y
Out[8]: array([0.01821127, 0.24519181, 0.73659691])In [9]:
將其封裝成函數顯示為:
In [9]: def softmax(x):...: exp_x = np.exp(x)...: sum_exp_x = np.sum(exp_x)...: y = exp_x/sum_exp_x...: return y...: In [10]: a = np.array([0.3, 2.9, 4.0])In [11]: softmax(a)
Out[11]: array([0.01821127, 0.24519181, 0.73659691])In [12]:
3. softmax 函數缺陷
softmax 函數的實現中要進行指數函數的運算,但是此時指數函數的值很容易變得非常大。比如,e10 的值會超過 20000,e100 會變成一個后面有 40 多個 0 的超大值,e1000 的結果會返回一個表示無窮大的 inf 。如果在這些超大值之間進行除法運算,結果會出現“不確定”的情況,也就是人們常說的發生溢出問題。
4. softmax 函數改進
式(3.11)說明,在進行 softmax 的指數函數的運算時,加上(或者減去)某個常數并不會改變運算的結果。這里的 C 可以使用任何值,但是為了防止溢出,一般會使用輸入信號中的最大值。我們來看一個具體的例子。
In [13]: a = np.array([1010, 1000, 990])In [14]: np.exp(a)/ np.sum(np.exp(a))
Out[14]: array([nan, nan, nan])In [16]: c = np.max(a)In [17]: c
Out[17]: 1010In [18]: a - c
Out[18]: array([ 0, -10, -20])In [19]: np.exp(a-c)/np.sum(np.exp(a-c))
Out[19]: array([9.99954600e-01, 4.53978686e-05, 2.06106005e-09])In [20]:
如該例所示,通過減去輸入信號中的最大值(上例中的 c ),我們發現原本為 nan (not a number,不確定)的地方,現在被正確計算了。綜上,我們可以像下面這樣實現 softmax 函數。
In [22]: 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...: In [23]:
5. softmax 函數特征
使用 softmax() 函數,可以按如下方式計算神經網絡的輸出。
In [5]: a = np.array([0.3, 2.9 ,4.0])In [6]: y = softmax(a)In [7]: y
Out[7]: array([0.01821127, 0.24519181, 0.73659691])In [8]: np.sum(y)
Out[8]: 1.0In [9]:
如上所示,softmax 函數的輸出是 0.0 到 1.0之間的實數。并且,softmax 函數的輸出值的總和是 1。輸出總和為 1 是 softmax 函數的一個重要性質。正因為有了這個性質,我們才可以把 softmax 函數的輸出解釋為“概率”。
比如,上面的例子可以解釋成 y[0] 的概率是 0.018(1.8%),y[1] 的概率是 0.245(24.5%),y[2] 的概率是0.737(73.7%)。
這里需要注意的是,即便使用了 softmax 函數,各個元素之間的大小關系也不會改變。這是因為指數函數(y = exp(x))是單調遞增函數。實際上,上例中 a 的各元素的大小關系和 y 的各元素的大小關系并沒有改變。比如,a 的最大值是第 2 個元素,y 的最大值也仍是第 2 個元素。
一般而言,神經網絡只把輸出值最大的神經元所對應的類別作為識別結果。并且,即便使用 softmax 函數,輸出值最大的神經元的位置也不會變。
因此,神經網絡在進行分類時,輸出層的 softmax 函數可以省略。在實際的問題中,由于指數函數的運算需要一定的計算機運算量,因此輸出層的 softmax 函數一般會被省略。
6. 輸出層神經元數量
輸出層的神經元數量需要根據待解決的問題來決定。
對于分類問題,輸出層的神經元數量一般設定為類別的數量。比如,對于某個輸入圖像,預測是圖中的數字 0 到 9 中的哪一個的問題(10 類別分類問題),可以像圖3-23 這樣,將輸出層的神經元設定為 10 個。
如圖 3-23 所示,在這個例子中,輸出層的神經元從上往下依次對應數字 0, 1, . . ., 9。此外,圖中輸出層的神經元的值用不同的灰度表示。這個例子中神經元 y2 顏色最深,輸出的值最大。這表明這個神經網絡預測的是 y2 對應的類別,也就是“2”。
參考:《深度學習入門:基于Python的理論與實現》
總結
以上是生活随笔為你收集整理的机器学习入门(06)— 输出层多元分类、softmax 归一化指数函数以及输出层的神经元数量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “何烦故挥弄”下一句是什么
- 下一篇: 美子开头的成语有哪些?