二分類問題,應該選擇sigmoid還是softmax?

時間 2021-05-07 02:18:43

1樓:讓cpu飛一會兒

看大部分回答都是根據主觀經驗和直覺直接得出兩者沒什麼區別的結論,我就從公式推導層面來嚴格推導一下吧。

softmax交叉熵損失:

-log(exp(sp)/(exp(sp)+exp(sn)))

=log(1+exp(sn-sp))

=logsumexp([0, sn-sp])

~=max(0, sn-sp)

sigmoid交叉熵損失:

-ylog(y_hat)-(1-y)log(1-y_hat)

=ylog(1+exp(-s))+(1-y)log(1+exp(s))

=log(1+exp(-sp))

=logsumexp([0, -sp])

~=max(0, -sp)

如上推導,從logits輸出而言是有區別的,softmax的損失是懲罰正例的logits小於負例(因為有兩個輸出),sigmoid的損失是懲罰正例的logits小於0(如果目標是負例則懲罰負例的logits大於0,因為只有乙個輸出,正負例是對稱的),但是對於概率輸出而言是等價的,都是正例要大於0.5。

所以對於logits輸出而言,乙個是相對值判斷,乙個是絕對值判斷,簡單而言,如果輸出看的是logits而不是概率,那麼sigmoid是應該大於0,而softmax則不一定。logits就是在加啟用函式之前的輸出。

2樓:

你都機器學習了,就不能讓機器自己試一下那種更好嗎?實驗引數本身就是工作的一部分,而且引數本身可能就比較複雜,不是二選一的問題,而是複雜的排練組合。讓機器學習自己提高自己,才是機器學習的精髓。

3樓:star all

這邊有個TF版本的實現對比,可以做個參考。

< Tensorflow > Softmax cross entropy & Sigmoid cross entropy

4樓:子沐禹

這個要看輸出的個數,一種是輸出乙個0到1的概率值,需要使用乙個閾值確定屬於哪乙個類別,就只能使用sigmoid,第二種是輸出兩個概率值,分別是兩種類別的概率,這個使用softmax

5樓:歐陽瘋

說softmax和sigmoid在二分類的時候的等價的答案很多,截至目前應該沒有兩個神經網路等價的定義(至少我沒有看到,如果哪位兄台知道,麻煩給出,感激不盡)而答主又沒有給出等價的定義。在沒有搞清楚什麼叫等價的情況下,給出」softmax和sigmoid在二分類的時候的等價「這個論斷是沒有意義的。

我給出乙個等價的定義:在神經網路中,說兩個網路是等價的當且僅當乙個網路的引數通過加減乘除合併引數後可以完全等於(結構完全相等)另乙個網路。

在這個定義下,只能說常見的二分類神經網路中,sigmoid等價於softmax。但是你可以構造出不等價的

最後建議是二分類的情況下只用sigmoid,除非你有很獨到的主意。因為在sigmoid和softmax等價的網路中,用softmax沒有特別的好處,反而會浪費計算資源。

6樓:圖靈測試滿分bot

sigmoid其實就是把softmax中的一組引數固定為0而已,二者相合 (即,收斂後一致)。

不過sigmoid引數會少一些,更好優化,沒有多餘的引數干擾,所以最終效果應該略好。

7樓:boole

先給答案:在二分類問題上,sigmoid和softmax等價。

就單獨回答這個問題而言,總感覺少點什麼,如果問成sigmoid和softmax的區別和聯絡或許更好些,下面就簡單說說這兩者的關係吧。

sigmoid函式形式

sigmoid是乙個可微的有界(0, 1)函式,在各點的的導數均非負。當 時, ,當 時, 。

softmax函式形式

對於乙個長度為n的任意實數向量,softmax把它壓縮為乙個長度為n,取值在(0, 1)區間的實數向量,向量中各元素之和為1。

在二分類問題上,sigmoid函式可以表示為:

在二分類問題上,softmax函式可以表示為 :

在二分類問題上,sigmoid函和softmax函式形式完全相同。所以兩者當然等價。

總的來說,他們兩者都是把資料壓縮到(0, 1)區間內,但sigmoid函式只處理二分類問題,softmax函式處理任意多分類問題,當n為2時,softmax函式就退化成了sigmoid函式。

8樓:Kagging咖金

Yo, yo, check it out...

Sigmoid只選自己喜歡的男神,結果就是yes or no

Softmax把所有備胎全部拉出來評分,最後還歸一化一下。

9樓:Nanoha

在二分類問題上sigmoid與softmax理論上是等價的。softmax會為兩個label分別訓練w1和w2,而sigmoid只為positive label訓練乙個w,另乙個label自動使用-w。如果在實踐過程中出現明顯區別,很有可能是框架底層實現的問題 (如對不同形式的pos 與neg label是如何處理的,比如[1,-1]與[1,0])。

10樓:王小明

等價的, 可以看stackexchange上面這個回答https://

11樓:天涯

多分類顯然應該使用softmax,對於二分類其實使用sigmoid和softmax是等價的,如果最後輸出層只有乙個結點,使用sigmoid,如果輸出層有兩個結點,使用softmax。

12樓:

可以認為sigmoid輸出的是乙個二項分布,而softmax是在其之上推廣的多項式分布;當softmax退化到二分類時跟sigmoid等價的。

13樓:ivy zheng

Sigmoid函式:

Softmax函式:

其中:因此這兩個完全等價,連梯度消失的位置都是等價的。

關於靈犀的問題:

採用sigmoid輸出時,使用[0-1.0]的threshold來得到不同的precision和recall;

而採用softmax輸出時,我們常常直接取兩類中最大概率的類別(這種方法我理解應該是直接預設設定了threshold為0.5),那我如果在softmax下想獲得PR曲線的話,應該怎麼操作呢?

1、我覺得你對precision和recall有什麼誤解,如果計算PR曲線,需要的就是類別,而不是概率值。比如你準確率,就是正確匹配的除以總數,那麼正確匹配的個數肯定是通過判定的類別是否正確得到啊。

2、如果想要得到概率,Softmax是可以的。CAFFE的Softmax層可以輸出 的結果,比如有n個類,就可以得到乙個向量 ,那麼屬於第 個類的概率就是:

____20190805補充_

14樓:托比昂

題主說的這個問題我也遇到過,並且親身實踐過,效果是sigmoid要比softmax好,如果就是二分類的話,感覺沒必要使用softmax,畢竟負樣本的那乙個通過梯度不是直接傳遞的

pytorch分類損失 二分類 ,穩定的損失值在10的負一次方量級正常嗎?

清風笑煙雨 個人感覺你的標籤有問題,要麼就是類別數沒設定對。你應該看一看損失曲線在降低沒有,二分類這個這個量級,測試結果應該不好看吧 學無止境 模型沒有使用預訓練模型嗎,使用的話是自己寫的loss函式嗎,如果以上都存在,那麼loss高很正常。如果使用預訓練,使用torch自帶bceloss,那麼資料...

pytorch訓練二分類器,訓練集loss下降的很慢或者剛開始較快然後越來越慢,大佬們這是什麼原因呢?

披著狼皮的羊 模擬考試 作為差生的時候,隨便努力一點就可以取得很大進步,差生的進步空間很大 變成學習好點的學生後,同樣努力的條件下,進步沒那麼明顯 當達到這個學生的最大潛力時,即使再努力也沒有進步。訓練model也是如此。 首先得看valid和test資料集一起看。現在假設valid和test資料集...

內傾型深覆合加下牙不齊,診斷是二類二分類。側面如下圖,我想知道我下巴是怎麼回事?

我和你一模一樣,深覆合但是下巴骨頭前突,但我更慘,我下頜骨超級方,90 深覆合嚴重,上牙完全包裹下牙。感覺下頜的地方沒有向下生長,完全是向前發育。我一直覺得是由於小時候誤拔了中間一顆下牙,才導致我下巴向前發育。反應到臉上就超級奇怪,因為臉的走勢別人都是向下,我是走著走著詭異的向上。感覺哪怕是沒下巴也...