跳至內容

英文维基 | 中文维基 | 日文维基 | 草榴社区

Softmax函式

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

數學,尤其是機率論和相關領域中,Softmax函式,或稱歸一化指數函式[1]:198,是邏輯斯諦函式的一種推廣。它能將一個含任意實數的K維向量  「壓縮」到另一個K維實向量  中,使得每一個元素的範圍都在之間,並且所有元素的和為1(也可視為一個 (k-1)維的hyperplane或subspace)。該函式的形式通常按下面的式子給出:

   for j = 1, …, K.

Softmax函式實際上是有限項離散機率分布的梯度對數歸一化。因此,Softmax函式在包括 多項邏輯迴歸[1]:206–209 ,多項線性判別分析樸素貝葉斯分類器類神經網路等的多種基於機率的多分類問題方法中都有著廣泛應用。[2] 特別地,在多項邏輯迴歸和線性判別分析中,函式的輸入是從K個不同的線性函式得到的結果,而樣本向量 x 屬於第 j 個分類的機率為:

這可以被視作K個線性函式Softmax函式的複合)。

實際實現的時候,為了防止溢位,會先把每個元素減去原先的最大值

例子

[編輯]

輸入向量對應的Softmax函式的值為。輸出向量中擁有最大權重的項對應著輸入向量中的最大值「4」。這也顯示了這個函式通常的意義:對向量進行歸一化,凸顯其中最大的值並抑制遠低於最大值的其他分量。

下面是使用Python進行函式計算的範例程式碼:

import math
z = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]
z_exp = [math.exp(i) for i in z]  
print(z_exp)  # Result: [2.72, 7.39, 20.09, 54.6, 2.72, 7.39, 20.09] 
sum_z_exp = sum(z_exp)  
print(sum_z_exp)  # Result: 114.98 
softmax = [round(i / sum_z_exp, 3) for i in z_exp]
print(softmax)  # Result: [0.024, 0.064, 0.175, 0.475, 0.024, 0.064, 0.175]

Python使用numpy計算的範例代碼:

import numpy as np
z = np.array([1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0])
print(np.exp(z)/sum(np.exp(z)))


Julia 的範例:

julia> A = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]
7-element Array{Float64,1}:
 1.0
 2.0
 3.0
 4.0
 1.0
 2.0
 3.0

julia> exp.(A) ./ sum(exp.(A))
7-element Array{Float64,1}:
 0.0236405
 0.0642617
 0.174681
 0.474833
 0.0236405
 0.0642617
 0.174681

參考資料

[編輯]
  1. ^ 1.0 1.1 Bishop, Christopher M. (2006).
  2. ^ ai-faq What is a softmax activation function?頁面存檔備份,存於網際網路檔案館