上一篇簡單介紹了二元分類及隱藏層常用到的幾種啟動函數以及其採用的反向傳播算法,緊接著就來談談自然語言處理NLP、數字辨識器及ImageNet的輸出層中佔有重要地位的Softmax及其反向傳播是如何計算的。

What is Softmax?

在多類別的訓練分析中通常會對資料集的標記值做one-hot-coding,把單個標記數值改為0或1的矩陣。舉例來說,數字辨識器在進行訓練時便會將0~9的標記值改為一個1*10的矩陣:

0 = [1,0,0,0,0,0,0,0,0,0]          9 = [0,0,0,0,0,0,0,0,0,1]

但實際在訓練時很難用sigmoid或其他邏輯函數將輸出值鎖定在僅有一個值是1但其他均為0且個別輸出值之間具備關聯性可採用反向傳播學習參數最佳化。

sigmoid的多類別版本softmax正是為了解決這樣的多類別分類問題。其作法釋例如下:

螢幕快照 2018-03-29 上午12.03.22螢幕快照 2017-12-27 上午12.01.12

透過將輸出值轉為指數函數並除以指數函數的加總值,可以有效的輸出一個所有值加總為1的機率矩陣,其中的最大值即為演算法預測的標記值。

What does softmax do in the backprop?

Softmax的微分方程用到比sigmoid更多且更複雜的計算式,加上網路上其實找不太到詳細的推導過程,故直接放上筆者自行google研究諸多文章之後自行寫下的計算推導過程:

IMG_2904.jpgIMG_2908

後續問題:

  1. 在許多Deep learning的課程中都提到因為softmax是採用指數函數來計算,故如果帶入值太大會使計算程式出錯而輸出nan值,故在運算前先執行normalization是很重要的(例如減掉該矩陣的max值),至於為何減掉max值並不會影響機率分配,可詳Stanford CS224N提供的公式推導(Question 1a)
  2.  在NLP或ImageNet的多類別分類問題中,類別動輒上千甚至可能上百萬,在輸出時對所有類別進行softmax計算非常消耗計算資源且對絕大部分的標記值參數更新沒有意義,故如何採用更有效率的方式計算softmax及更新相關參數便變得非常重要。可能先前在NLP筆記中提到的Negative Sampling不失為一種方法。之後如果有看到其他方式再陸續更新。

Reference:

Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization (Week3)

Stanford CS224N

Wiki – Softmax

發表留言