1. 程式人生 > >深度學習:用於multinoulli輸出分佈的softmax單元

深度學習:用於multinoulli輸出分佈的softmax單元

首先說明Bernoulli分佈對應sigmoid單元,Multinoulli分佈對應softmax單元。瞭解multinoulli分佈請看:機器學習:Multinoulli分佈與多項式分佈。

softmax函式可以看作sigmoid函式的擴充套件,其中sigmoid函式用來表示二值型變數的分佈。為了推廣得到具有n個值的離散型變數的情況,現在需要創造一個向量\widehat{y},它的每個元素是\widehat{y}_{i}=P(y=i|x)。我們不僅要求每個\widehat{y}_{i}元素介於0和1之間,還要使得整個向量的和為1,使得它表示一個有效的概率分佈。首先線性層預測了為歸一化的對數概率:

                               z=W^{T}h + b

其中z_{i} = log\widehat{P}(y=i|x).softmax函式然後可以對z指數化和歸一化來獲得需要的\widehat{y}。得到softmax函式的形式為

                              softmax(z)_{i}=\frac{exp(z_{i})}{\sum _{j}exp(z_{i})}

但是用最大化對數似然訓練softmax來輸出目標值y時,使用指數函式工作的非常好。我們想要最大化

                              logP(y=i;z)=log\, softmax(z)_{i}

將softmax定義成指數的形式是很自然的,因為對數似然中的log可以抵消softmax中的exp:

                              log\, softmax(z)_{i}=z_{i}-log\sum_{j}exp(z_{j})

當最大化對數似然時,第一項鼓勵z_{i}被推高,而第二項則鼓勵所有的z被壓低。第二項可以大致近似為max_{j}z_{j}

                            log\sum_{j}exp(z_{j})\approx max_{j}z_{j}

這種近似基於對於任何明顯小於max_{j}z_{j}z_{k}exp(z_{k})都是不重要的。負對數似然代價函式總是強烈的懲罰最活躍的不正確預測。如果正確答案已經具有了softmax最大輸入,那麼-z_{i}項和log\sum_{j}exp(z_{j})\approx max_{j}z_{j}=z_{i}項將大致抵消。這個樣本對於整體訓練代價價貢獻很小,這個代價主要由其他未被正確分類的樣本產生。

像sigmoid一樣,softmax啟用函式可能會飽和。對於softmax函式,它有多個輸出值,當輸出值之間的差異變的極端時,這些輸出值可能飽和。softmax函式當所有輸入都加上一個相同的常數時softmax的輸出不變:

                            softmax(z)=softmax(z+c)

使用這個性質,我們匯出一個數值方法穩定的softmax函式的變體:

                           softmax(z)=softmax(z-max_{i}z_{i})

當其中一個輸入是最大並且z_{i}遠大於其他的輸入時,響應的輸出softmax(z)_{i}會飽和到1,當z_{i}不是最大值並且最大值非常大時,相應的輸出softmax(z)_{i}也會飽和到0。

softmax函式更接近於argmax函式而不是max函式。“soft”這個術語來源於softmax函式是連續可微的。“argmax”函式的結果表示為一個one-hot向量,不是連續可微的。softmax函式因此提供了argmax的“軟化版本”。可能最好是把softmax函式稱為“softargmax”,但當前名稱已經是一個根深蒂固的習慣了。