回歸(regression)問題是否比分類(classification)問題更難用神經網路模型學好?
從我個人的經驗以及看到的其他人的結果來說,用神經網路模型解決回歸問題似乎比分類問題要難。
從理論上來說,具有有序性的分類問題,都可以用回歸來解決。但現實中出現得更多的情況是,通過劃分區間,把回歸問題轉換為分類問題,這樣往往能取得更好的效果。在 Reddit 也有類似的討論,如 Neural Networks Regression vs Classification with bins ? r/MachineLearning我的問題是:
- 大家在實際使用神經網路或者其他模型解決回歸問題的時候有沒有類似的感受?
- 如果確實要難,是什麼原因造成了學習的難度?有沒有相關參考文獻?
- 如果不是,如何解釋上面 Reddit 帖子里提到的現象?
我個人覺得這可能取決於你怎樣評價網路……
大家習慣基於NRMSE之類的指標去評價一個回歸模型,基於ROC曲線去評價一個分類器,
但你如果真的用NRMSE去評價一個分類器,把它處理成一個(0,1)的回歸,簡單計算出NRMSE=sqrt(p),其中p是錯誤率
那其實看上去正確率很高的分類器,按照回歸模型的評價標準也挺爛的……
手機強行答一發
以下是我的理解,可能不準確。。
很多常見的分類演算法本質上都是對不同概率分布進行回歸比如常見的二分類問題中通常就採用邏輯回歸的形式舉個栗子
線性回歸中是對高斯分布進行建模
y=wX+b
而,邏輯回歸中(二分類中)是對二元伯努利分布進行建模(怎麼把非線性問題轉化到線性問題參考指數分布族和廣義線性模型)
y=logistic(wX+b)
依然是一個回歸問題,不同的是線性回歸中要回歸的是一條直線,而邏輯回歸中是回歸一條s型曲線
所以通常情況分類本質上都是在進行回歸而已
而訓練的難度與選取的概率分布本身是有關係的,某種程度上也許邏輯回歸確實比線性回歸要更不容易產生梯度問題影響迭代次數,這和最後計算誤差所用的似然函數的導數有關
但是有些時候,由於基礎不紮實,也有在邏輯回歸中用mean square的loss去訓練的現象,這樣肯定會對訓練效果以及迭代次數產生很大的影響。
不同的概率分布最後的最大似然函數是不同的,我們常用線性回歸lr或者二分類logistic、多分類softmax所以比較熟悉mean square 和 cross entropy 但是偶爾採用比如生成模型(GM),對多元高斯分布建模 又或者用泊松分布 去預測離散事件 一定要注意loss function的選取。。。首先這兩個從模型結構上沒有什麼大的影響,最多就是loss function用的不一樣, 比如hinge loss 之於分類, square loss對於回歸。
其次, 從模型的輸出來講,即使對於分類問題,那個predicted y, 一般都不是binary的, 最終的輸出是把一個probability轉化成binary, 比如 y_out=pred&>0.5.
最後, 這兩個最大的區別在於數據不一樣。label自然是不同的,此外問題也不一樣。比如分類的空間一般比較有限,而回歸的ground truth在一個連續的空間上。再有就是domain不一樣。
非要講哪個簡單,哪個難,恐怕很難說。即使可以分出來,也和用不用神經網路或是別的模型orthogonal。
回歸任務難以訓練主要有兩點。
一是回歸任務對目標的要求比較嚴苛,要預測值剛好等於真實值才會使得損失函數為0,而分類任務則寬鬆得多。
二則主要是優化方面的問題,如果使用了sigmoid/tanh等易飽和的激活函數,在使用softmax等分類任務的損失函數時一定程度上可以消除這種飽和影響,而回歸任務使用的損失函數不具備這種能力。更進一步,回歸任務的損失函數一般為MSE,反向傳播中求導後可以看到梯度是與真實的lable成正比的,所以回歸任務對於數據中的outlier十分敏感,訓練數據中的雜訊使得梯度波動很大甚至產生梯度爆炸,導致模型得不到有效訓練。這是神經網路中回歸任務難以訓練的一個重要原因。
這個我應該在行,我來分享吧?( ̄??)?
因為我這陣子就用神經網路在幹這個呀 (╯°Д°)╯┻━┻
為了方便,我會叫神經網路作NN
這個取決於兩個因素0.你有幾少個"好"的data point
1.做什麼樣的回歸緊記緊記,0是非常非常重要的,沒有0我們談不下去(╯°Д°)╯┻━┻
而且比起傳統的回歸(Lagrangian interpolation?) ,NN要很多很多的labelsssssssssssssssssssssssssss
沒有labelsssssss,NN是幹不下去的
那麼NN可以做什麼樣的回歸呢?舉個很適合NN的栗子
假設有一個大型房地產商,想估算香港一座屋子的價格( 香港交易大多數不是屋子吧,只買得起單位(╯°Д°)╯┻━┻ ),這就是一個典型的回歸問題
那可以估計價格的,就有幾個以下幾個參數1.地段 (中環? 旺角?)2. 房屋大小 (50 m^2? 100 m^2?)
3. 廁所數目 (0? 1?)
4.等等.....
首先,那個地產商的資料庫一定要非常大,保守估計沒有幾千個是不行的,其次就是labels分佈一定要夠全夠廣夠平均,不能有幾千個中環data 但只有幾十個旺角 data的情況
#####################################################################
而NN做回歸的數學描述非常簡單,就是:
價格=F(參數)
F 就是你的NN function了,我們終於說到點子上了,可以起行了那麼回歸的NN要怎麼設置呢?z) 跟普通deep learning一樣,都分training 及testing,這個大有學問,十分針對你想做回歸的類型而不同,普遍使用random抽取的型式居多
a) feature pre proccessing
為了加快訓練,所有參數(feature) 最好作pre processioning ,平常就是Standardization就夠了,保證你的feature range 是 [0,1] 或者 [-1, 1] 就可以,這樣做的原因可以參考一下deeplearning.ai 對此做法的簡介(簡單來說就是在gradient descant 前拉闊過窄的參數維度,那麼下降就會加快)
b) 架構
非常簡單,就是平常CNN 最後幾層的FC 拿出來就是了
input layer 數目是你參數的數目,output layer 是你要求回歸的維度數目
c) neurons 數目
跟傳統Deep learning 一樣,越多越好,最好兩層以上,就是訓練會慢一點d) cost function
一定是M.S.E ,效果非凡,個人練丹經驗,不除平均訓練會快一點
其他: Mean Absolute Error,這個太易進入到不好的local minimum中,應免則免
e) activation function
用過很多種
i) tanh, sigmoid :都是差不多,可以直接拿來用
ii) relu : 這個會令回歸出來的東西不太smooth,典型例子看看下面莫煩大神的教程圖片
關係擬合 (回歸) - PyTorch
relu 的問題就是圖片中部,回歸的function "起角"不夠smooth,而且非常容易在訓練當中死亡,所以就不要用了
iii) softplus : 這個不容易過飽和,效果也不錯。
以上各function 的output layer 都要設置成linear layer (y= mx+C那個),那才能令你的NN function output range 達至 (-infinite,infinite)
f ) overfitting
i)dropout: 不單在CNN 在regression 對overfitting 也是神器,代價是準確度只能下降到某個數字(如1%)就停了
ii) L1 L2 : 可以用,但會令function的non linear特性有所減低 ,最極端就像下圖中underfit那樣失去曲的特性
#########################################################################
準確度及難度
個人經驗,NN fit 出來的function特性跟Lagrangian interpolation有點像,下圖就是Lagrangian interpolation的例子
- data point 與data point 中間會出現上突/下突的情況 (圖片左右兩邊) ,這個就是為何data point 要多的原因,因為data point 越多越密,突起的情況就會被減輕,同時用dropout也是為了減輕突起的問題
- 不要幻想extrapolation,你覺得問香港地產經紀北京的樓價靠譜嗎?┬─┬ ノ( " - "ノ),後果就是左右兩邊的橙線( ?° ?? ?°)
除了這一些,準確度還是不錯的,我個人做的NN regression 誤差普遍在0.5%~2%之間,準確度與data point 密度有關,而同一項目我用gradient boosting (XGB) 做了幾天都做不了這麼準。但說到底都是deep learning,比起其他回歸的method只用幾~幾十分鍾,在NN底下你沒GPU 跟十多個小時的training time 是吃不消的
#########################################################################
懶人總結:
用NN做regression的前題:
data 分佈夠多夠廣
用NN 做regression的好處:
在data point 密的地方比其他method奇準
用NN 做regression的問題:
台上一分鐘,練丹十年功,多買幾張顯示卡為佳
--------------------------------------------------完----------------------------------------------------
因為最後一層沒activation 讓優化變的巨難無比。特徵不好 或者outlier會直接讓gradient爆表。產生這個的原因很容易理解 比如我要回歸人的歲數,怎麼告訴網路限定回歸值是0到130?
也有拿回歸來做分類的 比如高斯過程。我理解的是這邊的回歸問題特指那些直接使用模型的輸出,不將其看作屬於某一類概率的情況。
對於第一個問題:
有,直接做表格識別時直接將輸出設定為表格在圖片中的相對位置和相對大小,使用L2損失函數,效果是不太好的。但是由於配合了DOM,所以我只需使用識別出來的表格的中間點,效果還是不錯的。
第二個問題:
我從一個不同的角度來思考這個問題。
第一個可能的原因是兩個問題的難度不一樣。就說sin函數吧。分類問題可能就是對給定的輸入,取值大於等於0,小於0這樣,而回歸問題是輸出sin函數具體的值了。這兩個問題本身難度的不一致導致了你的認知發生了偏差。
在分類問題和回歸問題本身一致的情況下,個人感覺首先應該是樣本數量不足的原因,舉個例子,我們如果做分類的話,那麼對於輸出而言,0.5和1這個值相差似乎很大,但是意義卻是一致的。在訓練時,我們也會把所有屬於該類的標籤打成1,只要那些測試的樣本把相應類概率的輸出拉到0.5以上,準確率就會很好看。但是如果我們用相同的數據集做回歸,那麼就會面臨數據的不足。因為此時0.5和1的意義可能就是截然不同的了,在某些極端的情況下,甚至0.1都是很大的差距了。在這樣的情況下,我們需要很多的樣本來進行模型的學習。
第二點,我覺得是損失函數和評價指標的問題。對於分類問題,在損失函數上,我們有交叉熵,而在評價指標上,我們有準確率這個萬金油。即使是非平衡問題,我們也有ROC-AUC, Precision-Recall-F這樣的評價指標和加權等等方法來進行平衡。但是回歸問題呢,恐怕沒有一個統一的答案。對於目標檢測,比如RCNN,損失函數就是採用交叉熵(物體分類)和L2損失(物體位置)的加權和,評價指標為IOU。因此這種難度其實也是損失函數和評價指標設計的難度。我們不能像在分類問題一味的使用某一個函數,而是應該因地制宜。
總而言之,正如 @Chan Yu 所說,分類問題其實是回歸問題的一個特例。如果你把一個問題從分類問題劃歸為回歸問題,這一定程度上說明你在定製一個模型的代價函數和評價指標,使其更符合你的需求。在這種意義上,回歸問題是不是會比分類問題更加複雜,更加值得思考呢?
回歸和分類相輔相成,都是在數據的維度、特徵的提取等多重因素下,實現既定目標的過程。用神經網路孰優孰劣,仁者見仁,智者見智!
我在做的時候感覺用神經網路模型時,分類就是回歸的特殊境況,回歸就是分成n多類。望探討
曾經做過一個圖文匹配的演算法(很naive~),一開始的思路是對比圖片特徵與文本特徵,損失函數採用餘弦相似性,歐式距離等等,效果很差。後來簡單地融合了兩種特徵,然後做分類(二分類,匹配or不匹配),效果居然還不錯。
回歸(在實際應用中更多偏向於預測),分類(從字面意思就可知道用來歸類),不能一味地說誰比誰用神經網路更麻煩或者效果更優等結論,不能拋開數據(信息資料)的維度、特徵提取(選擇)等其他因素而斷然定義孰是孰非!
推薦閱讀:
※組合數學入門,求書籍推薦?
※深度學習會不會淘汰掉其他所有機器學習演算法?
※如何評價吳恩達-斯坦福-2017年秋最新機器學習視頻課程?
※人工智慧/機器學習領域,選愛丁堡還是劍橋?
TAG:機器學習 | 分類演算法 | 神經網路 | 線性回歸 | 深度學習DeepLearning |