SoftMax回歸
對於MNIST中的每個圖像都是零到九之間的手寫數字。所以給定的圖像只能有十個可能的東西。我們希望能夠看到一個圖像,並給出它是每個數字的概率。
例如,我們的模型可能會看到一個九分之一的圖片,80%的人肯定它是一個九,但是給它一個5%的幾率是八分之一(因為頂級循環),並有一點概率所有其他,因為它不是100%確定。
這是一個經典的情況,其中softmax回歸是一種自然簡單的模型。如果要將概率分配給幾個不同的東西之一的對象,softmax是要做的事情,因為softmax給出了一個[0,1]之間的概率值加起來為1的列表。
稍后,當我們訓練更復雜型號,最后一步將是一層softmax。
那么我們通常說的激活函數有很多,我們這個使用softmax函數.softmax模型可以用來給不同的對象分配概率。即使在之后,我們訓練更加精細的模型時,最后一步也需要用softmax來分配概率。
這里的softmax可以看成是一個激勵(activation)函數,把我們定義的線性函數的輸出轉換成我們想要的格式,也就是關於10個數字類的概率分布。
因此,給定一張圖片,它對於每一個數字的吻合度可以被softmax函數轉換成為一個概率值。
softmax回歸有兩個步驟:首先我們將我們的輸入的證據加在某些類中,然后將該證據轉換成概率。每個輸出的概率,對應着獨熱編碼中具體的類別。
下面是softmax的公式:
在神經網絡中,整個過程如下:
也就是最后的softmax模型,用數學式子表示:
交叉熵損失
我們前面學習過了一種計算誤差損失,預測值與標准值差的平方和。不過在這里我們不能再使用這個方式,我們的輸出值是概率並且還有標簽。那么就需要一種更好的方法形容這個分類過程的好壞。
這里就要用到交叉熵損失。確定模型損失的一個非常常見的非常好的功能稱為“交叉熵”。交叉熵來源於對信息理論中的信息壓縮代碼的思考,但是從壓縮到機器學習在很多領域都是一個重要的思想。它定義為
它表示的是目標標簽值與經過權值求和過后的對應類別輸出值
tf.nn.softmax_cross_entropy_with_logits
tf.nn.softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, dim=-1, name=None)
計算logits與labels之間的softmax交叉熵損失,該函數已經包含了softmax功能,logits和labels必須有相同的形狀[batch_size, num_classes]和相同的類型(float16, float32, or float64)。
- labels 獨熱編碼過的標簽值
- logits 沒有log調用過的輸入值
- 返回 交叉熵損失列表
tf.nn.softmax_cross_entropy_with_logits(labels=y_label, logits=y))