從零開始構建機器學習模型(六)模型提公升

2021-08-28 05:46:26 字數 2293 閱讀 1400

我們以前文的mlp神經網路為例,通過三個方面進行模型的提公升:

一.輸入效果提公升

前文說到的輸入規範化等等是通用的一些提公升方案,而對於具體的情況又有不同的應用:

a)對於影象分類和識別問題,我們可以考慮對影象進行預處理

裁剪,翻轉,縮放,參考從零構建機器學習模型(一)資料預處理初階,主要作為提公升模型健壯性和泛化性的考慮;

畫素轉換,影象在rgb空間可能無法得到清晰的表達,此時我們可以考慮轉換色彩空間到hsi (hue、saturation、intensity) 和hsv (hue、saturation、value) 以及hls (hue、lightness、saturation) 等,例如在傳統的pklot檢測中,我們就可以在包括rgb空間在內的四個空間分別使用canny運算元進行邊緣提取再做後續分析,其實也就是資料擴充的思想。其中hsi和hsv顏色空間的差異在於亮度分量(i or v)的計算方式。hsi顏色空間適合傳統的影象處理函式,如卷積、均化、直方圖等,可以通過處理亮度值來實現這些操作,因為亮度i對r、g、b值的依賴程度是一樣的。hsv顏色空間適合處理色度和飽和度,因為它使得飽和度具有更大的動態取值範圍;

通過減去訓練集均值提公升模型表現,對這一點的具體原理我並不確定,我在某ai晶元公司面試被問過這一點的作用,我的回答是減去均值會將色彩的值從0~255轉至[-m,n]的區間,這樣在神經網路中訓練時可以加速收斂,這一點在反向傳播中可以比較清楚得看到,保證了梯度更新同時有正向加速和反向抑制。然而面試官似乎並不認可這個結論,尷尬 ̄□ ̄||

b)對於文字分類以及命名體識別問題,我們可以考慮對文字做embedding

通過全域性共現矩陣做矩陣分解,也就是我們常說的lsi演算法。這樣做的思路與pca演算法降噪相似。文字分類問題的最大難題在於文字雜訊,而共現矩陣在做奇異值分解後會形成降維的u,d,v三個矩陣,也就是降維陣u,縮放陣d以及重構陣v,在降維陣u中進行文字處理並移除低特徵值維度將有利於去處雜訊,提公升表達;

通過區域性共現矩陣做skip-gram或cbow,也就是前幾年火起來的word2vec的思路。這樣做的思路其實是想要通過s-g和cbow做semantic parsing,也就是讓神經網路自行對人類的語義學做數位化解釋;

通過傳統語義學對文字進行語義parsing並捕獲核心詞heading進行降維,這個思路目前不火,主要原因就是過分依賴語義研究和模板匹配了;

c)對於一般的問題,我們可以考慮做降維,例如pca,這個很簡單就不說了

二.模型效果提公升

常見的模型效果提公升有很多因模型而異的方案,這裡先介紹下最通用的三個:stacking, boosting和bagging,之後再具體模型分析時說明不同模型特定的優化。

a)stacking

stacking的思路在於通過模型的堆疊最大可能地利用不同模型的優勢進行效果提公升,繼續以神經網路為例,假設我們訓練好了乙個神經網路neta,然而這個neta並不能達到我們的要求,一般來說我們會考慮加深層數活著對模型引數修正如更改每層神經元個數,但是這種方案有太多玄學的東西。這時候我們就可以考慮將neta的輸出層抹除並將最後一層隱藏層作為輸入,在其上層stacking乙個svm,因為svm自帶規範化,而它的公升維操作又可以提供與神經網路加深層數等效的提公升效果,因此svm可以被視為乙個縮小了引數搜尋空間的神經網路,要比我們進行強行調參要容易得多,此時neta的從第一層到最後乙個隱層可以被視為特徵提取方案。這個思路最好的乙個例子就是rcnn。

當然上層不用svm也沒問題,gbdt,rbfn等等這些都是有效的,只要能利用起它們的優勢。

b)boosting

這一點我還在研究,因為理論上來說神經網路也是可以通過boosting的思路進行進一步優化,boosting的核心思路在於樣本權重的更新,也就是對樣本的額外動態加權。因此假如我們考慮將損失函式重寫為加權形式,則很容易用pipe-line的方案做boosting才對,不過最終效果沒有做出來。

c)bagging

這個思路就比較常見了,尤其是在randomforest中,通過bootstrap的方式抽樣並進行森林的投票,抗拒過擬合現象,不過這是從概率的角度解釋的,因為本質是組合概率嘛,但是實際上我們只能保證bagging模型在最壞情況下是優於最差模型的。

三.輸出效果提公升

這裡主要是一點思路,既分離輸出。

例如在多分類的情況下,我們常採用softmax作為輸出,然而softmax有個最常見的問題就是上下溢。對於數字型別的上下溢我們對輸出值預先除以某個自然對數次方就可以解決,但是對於由於類別過多引起的上下溢卻不能這樣做。此時我們可以考慮做hierarchical的思路,將類別做類似於b樹的多分類多層次模型,每次分類作為單獨的分類模型輸出結果,這樣可以解決類別過多引起的上下溢問題,當然也是某erp公司面試時候的問題咯。

從零開始機器學習 03

第二章3角函式 2 360度,弧度與角度 sin 對邊 斜邊,con 臨邊 斜邊,tan sin cos csc 1 sin sec 1 cos cot 1 tan sin 6 1 2 cos 3 sin 3 cos 6 根號3 2 三角函式的第一象限到第四象限,通過找到參考角獲得他的sin,cos...

react native系列 從零開始構建

從零開始構建第一步,當然是從hello world開始,第一課我們沒什麼 都不寫,只用生成的 來打包apk。為什麼一開始就要學會打包,因為如果連打包都不會,以後做好了也沒用。學會了打包,才能讓我們有動力繼續下去,現在網上到處也有資料,本文也是在查了資料之後進行的。因為安卓的apk都需要簽名,所以我們...

從零開始學習前端開發 3 CSS盒模型

css盒模型是css的基石,每個html標籤都可以看作是乙個盒模型。css盒模型是由內容 content 補白或填充 padding 邊框 border 外邊距 margin 四部分組成 1.內容 content 寬度 width 數值 單位 高度 height 數值 單位 eg box 2.補白或...