1 """Softmax.""" 2 scores = [3.0, 1.0, 0.2] 3 4 import numpy as np 5 6 def softmax(x): 7 """Compute softmax values for x.""" 8 #pass # TODO:Compute and return softmax(x) 9 return np.exp(x) / np.sum(np.exp(x), axis=0) 10 11 #print(softmax(scores)) 12 print (softmax(scores*10)) 13 #print (softmax(scores / 10))
softmax模型可以用來給不同的對象分配概率。即使在之后,我們訓練更加精細的模型時,最后一步也需要用softmax來分配概率。
cross-entropy 交叉熵是度量這兩個向量距離的方法之一。我們將記它為D以表示距離。 labels標簽向量經過了one-hot編碼,所以會有很多的零,因而它不能作為對數的真數。
對於分布變量,它是由softmax方法計算得到的概率值。所以它總是會大於0, 也就是它可以被放在真數上。
對於一個給定的輸入 通過一個線性模型,它將被轉變為一個logit分數。這個運算很簡單,即輸入乘上一個矩陣w再加上一個偏置項b
接着 使用softmax方法,我們可以將logits分數轉化成概率值,接着我們通過交叉熵的方法計算概率向量與經過one-hot編碼的標簽向量的距離
我們稱這整個過程為Logistic 多項式回歸法
好了,現在我們對問題的各個方面有了一個大致的了解,這門課的任務 是教我們該如何確定權重項w和偏置項b的值
以使我們的分類器能夠完成我們所期望的工作。
也就是說 要使之對正確分類距離要足夠小 對錯誤分類的距離足夠大
可以選擇通過這樣的方式衡量,求出對所有訓練集樣本和所有類別的距離之和,也就是求出訓練罰函數(That's called the training loss.)
這個函數 求出了對於所有訓練集樣本的交叉熵的均值,是一個非常龐大的函數。
訓練集中的每個樣本 都將被乘上這個巨大的W矩陣,並且他們都將被加起來,得到這個巨大的求和。
我們希望每一個距離值都很小,也就是說分類器能夠 對訓練集中的每個樣本都能很好的分類,因而我們希望這個罰函數值很小。
罰函數是一個關於權重項w和偏差項b的函數,那么我們如何求罰函數的最小值
作為演示 考察某罰函數 只有兩個自變量,我們記為w1和w2。該函數的值在某些區域很大,在另一些區域很小。
我們的目標 是去尋找使得罰函數值最小的權重值w,因而我們將一個機器學習問題 轉化為了一個數值優化問題
而我們有許多的方法來解決這個數值優化的問題
最簡單的方法之一 也許你可能遇到過 是梯度下降法(gradient descent)
對罰函數的每一個變量求偏導數,並將每個變量值加上該偏導數值,直到你達到全局最小值
梯度下降法相對而言比較簡單,特別是你能夠幫你高效求出偏導數的數值工具的時候,這個只是演示了一個二元函數的偏導數求算過程,但對於一個一般的問題
我們可能面對的是一個有成百上千參數的函數。
在接下來的課程中 我們將會討論為你計算導數的工具,和梯度下降的一些優點和缺點,目前,我們將會假設我給你的優化程序是一個黑盒子,你可以簡單的使用
最后有兩個實用的東西阻擋在你訓練模型的路上,第一個是你怎么把圖像像素填充到分類器,第二個是在哪里初始化最優化過程