- 從零開始大模型開發與微調:基于PyTorch與ChatGLM
- 王曉華
- 552字
- 2024-12-31 17:37:12
2.1.3 Python代碼小練習:計算Softmax函數
對于Python科學計算來說,最簡單的想法就是可以將數學公式直接表達成程序語言,可以說,Python滿足了這個想法。本小節將使用Python實現和計算一個深度學習中最為常見的函數——Softmax函數。至于這個函數的作用,現在不加以說明,筆者只是帶領讀者嘗試實現其程序的編寫。
Softmax函數的計算公式如下:

其中Vi是長度為j的數列V中的一個數,代入Softmax的結果就是先對每一個Vi取以e為底的指數計算變成非負,然后除以所有項之和進行歸一化,之后每個Vi就可以解釋成:在觀察到的數據集類別中,特定的Vi屬于某個類別的概率,或者稱作似然(Likelihood)。
提示:Softmax用以解決概率計算中概率結果大而占絕對優勢的問題。例如函數計算結果中的2個值a和b,且a>b,如果簡單地以值的大小為單位衡量的話,那么在后續的使用過程中,a永遠被選用,而b由于數值較小不會被選擇,但是有時也需要使用數值較小的b,Softmax就可以解決這個問題。
Softmax按照概率選擇a和b,由于a的概率值大于b,因此在計算時a經常會被取得,而b由于概率較小,取得的可能性也較小,但是也有概率被取得。
Softmax公式的代碼如下:
import numpy def softmax(inMatrix): m,n = numpy.shape(inMatrix) outMatrix = numpy.mat(numpy.zeros((m,n))) soft_sum = 0 for idx in range(0,n): outMatrix[0,idx] = math.exp(inMatrix[0,idx]) soft_sum += outMatrix[0,idx] for idx in range(0,n): outMatrix[0,idx] = outMatrix[0,idx] / soft_sum return outMatrix
可以看到,當傳入一個數列后,分別計算每個數值所對應的指數函數值,將其相加后計算每個數值在數值和中的概率。
a = numpy.array([[1,2,1,2,1,1,3]])
結果請讀者自行打印驗證。