close

image

本週的最後,介紹多元分類所需要使用的演算法。

先前介紹的都是二元分類,因此數字只會有0或1兩種可能性,使用 cross entropy 等演算法,

但是如果要區分的類別並不是只有2類,而是更多,就比較複雜了。

這裡要引入的新概念叫做 softmax,如下面投影片的右邊,

softmax regression 和 logistic regression 在本質上是類似的,都是要讓輸出值的加總 = 1,

如果只有二元分類時,在算出其中一個輸出值為1的機率是多少之後,

該輸出值為0的機率就是1扣掉它是1的機率,即投影片中的0.71 和 1-0.71 =0.29。

Softmax 的運算形式則是如下 (投影片左下角也有): 

image

通常會把 softmax function 放在輸出層,目的是要把hidden layer 處理完的數值給重新處理,

分母是所有值經過指數函數運算後的加總,分子則是每一個類別各自經過指數函數運算後的數值,

因此可以看到投影片中每一個類別的分母都是一樣的,但是分子就是各自類別的數值。

image

在做 softmax regression 時,w1~w4 以及 b1~b4 就是演算法會不斷更新的部分,

只要這8個參數能夠學正確,理論上就能把四個類別各自的百分比給學正確。

 

image

接下來探討模型的評價機制: cost function。

在二元分類時,loss function 就是 cross entropy equation,

寫成 loss = -y loga1 - (1-y)log(1-a1),

其含義在於當y=1時,loss 會只剩下 -log a1,在y=0時,loss 則是剩下 -log(1-a1)。

image

在多元分類時這樣的手法依舊被沿用,寫為 loss = -log aj,

假設 aj 是1而model 也認為它是1的機率很高,則loss 會很低,反之則loss會不斷升高。

image

接下來,假定我們有10個分類,則在建構類神經網路時,需要把最後的輸出層設定為10個神經元,

10個類別各自代表的機率會因此而被輸出來,成為下面的形式。

image

在tensorflow 上的寫法和之前基本一致,

只不過要在輸出層的部分使用softmax function,

另外loss function 要使用 SparseCategoricalCrossentropy,Sparce 指的是每個物件只會屬於一個類別。

image

 

但是這樣的寫法可能在運算精度上會發生一些問題,稱之為numerical round-off error。

例如下面所示的 2/10000 的算法,如果使用更複雜的 1+(1/10000) - (1-10000),

明明對我們的腦袋而言會很直覺地視為2/10000,但是電腦卻會算成一個很逼近的0.0019999999...的數字。

image

會發生這個現象是因為在計算機中使用的浮點數 (floating point numbers) 在一些數字上只能以近似的方法來表示,

在儲存時,會用一定的位數來限制精度,如果計算式中的數值太大、大小、接近0等狀況,

計算過程中小數點後面的位數會被截掉,就形成所謂的 round-off error,

如果想要降低 round-off error 的發生,最簡單的做法就是減少運算的複雜度/次數,讓這種捨入的誤差能降低。

在softmax function 與 tensorflow 中的運用方法則如下所示: 

image

image

image

透過在 loss function 公式後面加一個 from_logits=True,同時把輸出層的activation function 改成 linear,

原本的作法是先把輸出值丟進 sigmoid function 做完轉換得到機率值之後,再拿去計算 loss (誤差), 

新的作法則先不經過這個轉換,直接告訴tensorflow 要使用 logits (logits 就是指未經轉換的輸出層的數值,即 z),

這樣會讓 tensorflow 更有彈性去決定他要怎麼去運算 loss 會得到更準的結果。

arrow
arrow
    全站熱搜

    William.Echoes 發表在 痞客邦 留言(0) 人氣()