Python NumPy 中的 Softmax

Muhammad Waiz Khan 2023年1月30日 2021年2月7日
  1. 在 Python 中實現一維陣列的 NumPy Softmax 函式
  2. 在 Python 中對二維陣列的 NumPy softmax 函式
Python NumPy 中的 Softmax

本教程將解釋如何使用 Python 中的 NumPy 庫實現 softmax 函式。softmax 函式是對數函式的一種廣義多維形式,它被用於多項式對數迴歸和人工神經網路中的啟用函式。它被用於多項式邏輯迴歸和人工神經網路中的啟用函式。

softmax 函式將陣列中的所有元素在區間 (0,1) 內進行歸一化處理,使其可以作為概率處理。softmax 函式由以下公式定義。

softmax 公式

我們將看一下在 Python 中使用 NumPy 庫對一維和二維陣列實現 softmax 函式的方法。

在 Python 中實現一維陣列的 NumPy Softmax 函式

假設我們需要定義一個 softmax 函式,將一個 1D 陣列作為輸入,並返回所需的歸一化陣列。

在應用 softmax 的時候,常見的問題是數值穩定性問題,也就是說,由於可能出現的指數和溢位誤差,∑j e^(z_j) 可能會變得非常大。這個溢位誤差可以通過用陣列的每個值減去其最大值來解決。

下面的程式碼示例演示了 softmax 函式的原始實現和使用 Python 中的 NumPy 庫進行最大減法的實現。

  • 原始 softmax:
import numpy as np

def softmax(x):
    
    f_x = np.exp(x) / np.sum(np.exp(x))
    return f_x
  • 數值穩定的 softmax:
import numpy as np

def softmax(x):

    y = np.exp(x - np.max(x))
    f_x = y / np.sum(np.exp(x))
    return f_x

在 Python 中對二維陣列的 NumPy softmax 函式

二維陣列的 softmax 函式會沿行進行 softmax 變換,也就是沿行計算最大和。在 1D 陣列的情況下,我們不必擔心這些事情,我們只需要在完整的陣列上應用所有的操作。

下面的程式碼示例演示瞭如何使用 Python 中的 NumPy 庫對一個 2D 陣列輸入進行 softmax 變換。

import numpy as np

def softmax(x):
    
    max = np.max(x,axis=1,keepdims=True) #returns max of each row and keeps same dims
    e_x = np.exp(x - max) #subtracts each row with its max value
    sum = np.sum(e_x,axis=1,keepdims=True) #returns sum of each row and keeps same dims
    f_x = e_x / sum 
    return f_x

假設我們需要沿著二維陣列的列進行 softmax 變換,我們只需將輸入和輸出的 softmax() 方法進行傳輸即可。

示例程式碼:

softmax(x.T).T