Thursday, April 26, 2018

Machine Learning Discussion(一):Softmax and Cross-Entropy

Machine Learning Discussion(一):Softmax and Cross-Entropy

2018/04/24
 
Softmax 將輸出轉為總和為 1 的離散機率分布。由於輸出與標籤都是總和為 1 的機率分布,Loss 函數就可採用 Cross-Entropy,也就是計算兩個機率分布之間的 KL divergence (距離的概念,稍弱一點)。

-----

Jason Tsai:Softmax 因為 normalization 的關係是所有輸出機率加總為一沒錯,但用標籤總和為一說法很奇怪,觀念上應是最大的輸出機率是否對應到正確的標籤 (位置)。

Zong-Ming Tai:其實不會奇怪,在將標籤做 one-hot encoding 時可視為轉作離散機率分布。如此 KL 散度比較兩個機率分布在理論上才站得住腳。不做 one-hot encoding 則不能使用 softmax 加上 KL 散度,應作為 regression,拿最後一層輸出跟標籤做 MSE。

Jason Tsai:將標籤做 on-hot coding 是要算 cross-entropy,你把它和 softmax 混淆在一起了

Zong-Ming Tai:cross entropy 為 KL 散度,若不做 one hot encoding,則只有 softmax 的 output 是機率分布,你如何拿 KL 散度比較機率與標籤,若標籤不是一個機率分布?

Zong-Ming Tai 實際上 one hot encoding 的確是一種分布,可參考 https://en.m.wikipedia.org/wiki/Dirac_delta_function

Jason Tsai:將 softmax 視為 KL divergence 一道是錯誤的,要算 cross-entropy 用 softmax 不是唯一,譬如你也可以用 sigmoid 輸出和 label coding 做 cross-entropy。

Zong-Ming Tai:的確你可以用任何方式做,只是是否合理而已,就數學上而已,機率分布須符合總和為一,sigmoid 不保證成立這個條件。程式可以寫,只是意義在哪裡?

Jason Tsai:Check “tf.nn.sigmoid_cross_entropy_with_logits“ if you know TF

Zong-Ming Tai:我的確不懂太多 TF,我研究 DL 時只有 torch 跟 theano. Anyway, please check

https://stackoverflow.com/questions/46291253/tensorflow-sigmoid-and-cross-entropy-vs-sigmoid-cross-entropy-with-logits

It used with different scenario as we are discussing “You're confusing the cross-entropy for binary and multi-class problems.”

Zong-Ming Tai:我會去找上面的討論只是因為我想確認你是不是搞錯了那個 API 設計的目的。我想繼續討論也不得共識,不過其實以上的討論 Ian Goodfellow 的著作中也有充分的討論,我想我更注重的是理論上的解釋而不是工程上可不可以做出來

Jason Tsai:它們當然不是用在同樣的 case。回到原點,我要講的是將 softmax 視為就是要做 cross-entropy 這概念是不對的。

劉馬克:Sigmoid跟softmax是有很大的關係,softmax是sigmoid的推廣。所以我也無法完全認同用one-hot是為了讓問題變成機率散佈(不過這說法蠻有意思的)。

郭宗賢:(跳進來參與討論..) 我一直的看法是與 Zong-ming 意見一樣 One - hot 是變成一種機率: (譬如, 如果ground truth 是第一類, 則 以 one-hot 表示: 可以視為第一類發生的機率為 1。 其餘為0.) @ Jason 大大 softmax 用cross entropy , 在 minimize 的動作 其實是 等同, KL-divergence minimize... 所以, 你與 Zong-Ming 講的都沒錯...

Jason Tsai:你們講的就是對應到 TF 的 “tf.losses.sparse_softmax_cross_entropy” API

Zong-Ming Tai:Don’t be confused by the multiple terms, “sparse” cross entropy automatically did the one-hot encoding for you, just as binary cross entropy. **There are no mathematical theory behind them**

Jason Tsai:在這裡有能力討論的所有人應該沒有人不知道 one hot coding,所以不用再在這上面兜圈圈了。

Zong-Ming Tai:為什麼我之後完全沒提到 one-hot encoding 也被說在兜圈圈。你可以去看 tf source code,我雖然不寫 tf 但卻沒少看它的 source,實際上就是 syntax suger。拿一大堆 API 一點意義都沒有,許多論文不往這邊探討只是礙於篇幅或是認為不講自明,但是這些基本功是踏出下一步的基本能力,你是否接受這些理論是自由,不過說是兜圈圈還真是耐人尋味

Jason Tsai:社團於 2016 年11月開始讀 Deep Learning 一書的讀書會開頭第五章關於 softmax、cross entropy、KL divergence 的理論是我講的.....

Zong-Ming Tai:既然你清楚 cross-entropy 與 negative log-likelihood,那怎麼還會覺得 likelihood 與 divergence 可以評估機率分布以外的東西?你如果同意 likelihood 與 divergence 只能評估兩個機率分布的距離,那也隱含上面一堆繞著 one-hot encoding 的討論的確是在繞圈圈,因為我從來沒有討論網路的輸出,而只聚焦在 "one-hot encoding 是不是一種機率分布“,然後你就開始貼一堆 API 跟 softmax 與 sigmoid

劉馬克:先別這樣。我本來有畫一些投影片想稍微講一下我的理解。不過時間有點晚就改天再說。softmax是sigmoid的推廣,所以先把這問題簡單化,從sigmoid來講,softmax概念就不會差太多。先直接從sigmoid的圖形來看就好,假設一個真實資料是0,但答案是1,那這網路不需要真的把輸出從1推到0, 因為在sigmoid那邊有個斜率特高的部分,只要把數值壓到那個區域輸出其實就會有很大的變化。從行為來看,這不像是單純要去逼近一個概率,而是要強迫模型去趨近一的輸出。為什麼我無法完全接受one-hot是一個分布,原因是因為"分布"的概念都會有點出現山峰然後兩邊緩降的圖形。sigmoid做出來的圖形並不會是這樣的樣子(當然可以用白努力分布來描述sigmoid行為,實際上也是先弄成白努力分布以後才來逼近,但做成白努力分布以後就不是sigmoid或是one-hot),所以我無法完全接受sigmoid是一個分布,自然就很難完全接受softmax是一個分布。我想我對Jason說的話的理解也差不多是這樣,也就是做softmax主要還是要把指向某個結果的模型盡量指向我們想要的那個點。至於one-hot是不是一種分布的畫,我對分布的理解就是上面我所說的,加上一個結果只有0跟1,一下子我真的很難完全接受這是一個"分布"(儘管我覺得這說法挺有意思的)。

Zong-Ming Tai:其實我留言的原意本來就是討論,但後來充滿針對性,不知道為什麼從理論又跑到程式語言的層面。Ok,我同意任何看法,也從沒說正確與錯誤,如我之前說的,接不接受其實是可以去論證的。沒錯,可以不以機率分布來看待,那如此其實等同作為一個 regression 來看待,你可以使用 MSE 或是類似的損失函數直接去逼近答案,這也行得通。那問題就來了,你可以使用機率分布的看法去使用 cross-entropy,或是使用 regression 的觀點去使用 MSE,那如何挑選?我是想針對這部份做一些討論,任何意見都歡迎。

劉馬克:這本來也是我投影片想呈現的部分。如果最後選擇用MSE去取代softmax,從理論上來看,就是只有一開始的資料散佈非常漂亮呈現常態分布,這樣做出來的模型才會漂亮。但是如果資料不太理想或是出現太多outliner,這樣做的模型會很容易被拖垮。而真實資料其實都不是這麼完美,所以用MSE做的模型泛化能力可能都不是很足夠。這樣的模型個人猜想,以傳統的淺層網路可能能達到一定的預測力雖然效果可能不會太好,但是目前深度學習的網路架構vc dimention這麼大,有可能會硬記資料,所以造成overfitting狀況可能會嚴重些。不過深度學習很奇妙,常出現讓人很難解釋的現象,所以這要測過才知道。

Jason Tsai:啊本來想說懶得打這麼多字說明,用個最流行框架 TF 的 API 就可很清楚解釋,沒想到反而更造成誤解。😔 第一個 API 是要說明 “multi-label classification”,第二個 API 只是要說 binomial cross-entropy 是個特例。

劉馬克:我之前也是被宏毅哥電了一下才知道binomial cross-entropy的奧妙,不過被電完渾身通暢這樣。整個討論來看我應該明白Jason想表達的事情,也知道Jason保有的一貫簡潔文字的風格。幾個討論下來我也有觀察到除了討論題目以外的事情包括表達方式。感謝幾位大神精彩的討論。

郭宗賢:@ 馬克兄, 想請教一下 假設我有一個骰子,每一面都是1, 所以我不管怎麼擲骰子, 都出現 1. 所以, 出現1 的機率是1, 其餘為 0.。 這不就是等同於 One-hot -encoding 視為機率分佈的意思嗎嗎??

劉馬克:我個人是這樣思考的:骰子出現1或是0,這是一種表達。但骰子丟兩萬次出現0跟1的次數是一種分布。再更簡化問個問題:我丟不丟骰子能得到這骰子的one hot嗎?可以那就不是分布。但郭大哥的問題,把分布跟one hot混在一起了。所以Jason要表達的應該是"這兩者是不同的"。我不知道有沒有誤解這樣。

郭宗賢:@馬克兄, 再討論一下 : 【我丟不丟骰子能得到這骰子的one hot嗎?可以那就不是分布】 我們知道一般的骰子出現 1,2,3,4,5,6 各為 1/6 . 但是 有一顆特殊骰子, 每一面都是 1 (已知, or given), 所以, 它的分佈, 不就應該是 1: 1, 其餘為0 這就像是, 我有一堆 data, 共有6類, randome sampling, 每一類機率均為 1/6 現在, 我只留下 第一類的資料, 那, 我無論再如何 sample 都會是 第一類.., 所以 第一類的機率為 1 , 其餘 為 0.... 這也是, 我認為把類別 用one-hot encoding 後, 它可以被視為機率分佈的意思... 反過來說,我們也可以把data 的整體, 考量為, 每一類機率分佈的聯合分佈...

Jason Tsai:亂入。不要算我一份啦,我小時候機率修的很爛!

劉馬克:就單純鎖定一個點,也就是郭大哥的內容:"這就像是, 我有一堆 data, 共有6類, randome sampling"其實可以發現這行為跟one-hot沒有甚麼關係這樣。而這樣的行為是在"找一個分布",而不是"找one-hot"。再換句話說,這樣可以找到"one-hot資料的分布狀況",而不是"找one-hot"。這也是我可以盡量表達的極限了這樣 orz。我是覺得這樣的混淆在我開始研究統計時也曾經歷過,因為當一個事件只有"出現"或是"不出現"的時候,拿這狀況用做機率來就需要一些轉換,這個故事好長的。 管理 讚 · 回覆 · 8小時

郭宗賢:@馬克兄,感謝回答, 我消化一下

No comments: