怎么讓深度學習模型獲得更好的效果?這個是一直有人問我的問題,或者可以這么問?
我怎么提高正確率?或者為什么我的深度神經網絡效果這么差?我經常這樣回復“”我給不出確切的答案,但是我能給你一些建議“”
下面我將列一些我認為會對提升學習效果有效的一些建議。我將這些想法mark到下面,這些想法不僅僅對深度學習有用,而且對機器學習同樣有效。
提升學習算法性能的四個建議
1 通過數據
2 通過算法
3 通過微調算法
4 采用集成ensembles方式,
一 通過數據:
1)獲取更多的數據
2)發明更多的數據
3)重新調整你的數據
4)變換你的數據
5)特征選擇
獲取更多的數據
模型的質量取決於你訓練數據的質量。你需要最好的數據去解決你的問題,同時你也需要最多的數據。
深度學習和其他非線性技術的機器學習技術在數據越多時,效果越好。深度學習尤其是這樣。
在圖中可以看出,當數據量超過一定階段,普通的機器學習算法到了精度極限了,但是深度學習不是。
發明更多的數據
深度學習算法在數據量大時效果會更好,但是當我們沒辦法獲得大量的數據,我們可以發明更多的數據
一、如果你的數據是數字向量,依據已有的向量進行隨機修改
二、 如果你的數據是圖片,依據已有的圖像進行隨機修改 例如 尺度縮放、旋轉、平移
上述方法被稱為數據增廣
在caffe中的數據層,如下圖所示,中間那個鏡像和crop_size就對應圖像的兩種操作,是數據數據增廣的方式
相關鏈接:
重新調整你的數據
這是一個速贏的策略,這個策略在神經網絡中是這樣:
將數據調整到激活函數的邊界范圍內,如果是sigmoid激活函數,將數據調整到0-1之間,如果是tanh激活函數,將數據調整到-1,1之間。這個策略適用於輸入數據X和輸出數據Y,例如在神經網絡輸出層采用sigmoid激活函數進行二值預測,就可以歸一化輸出y到二值數據(0或者1)。如果是采用的softmax方式,即最終輸出的結果代表的是該輸出的概率,你同樣也可以對中間層進行歸一化。
三種歸一化的方式:一、歸一化到(0,1) ;二、歸一化到(-1,1);三、數據標准化,即平均值為0,方差為1
在caffe中,對數據進行讀取時,一般需要去均值操作,也就是計算數據的平均值,可以采用tools工具中的compute_image_mean.cpp,實際上這個操作就對應這個策略!
變換你的數據
除了上面的一些變換方法,還可以嘗試下面的做法:
將數據可視化進行觀察,對每一列數據(單個特征數據)進行觀察:
1 每一列的數據是否看着像偏態高斯,可以通過Box-Cox變換調整偏態
2 每一列的數據是否看着像指數分布,可以嘗試log變換
3 每一列的數據是否像被擊倒或者切掉,可以嘗試平方或者平方根
4 一些特征是不是可以進行離散化或者二值化,用來突出某些特征
基於你的直覺,可以嘗試下面的做法:
數據是不是可以通過投影的方式類似PCA進行預處理?
能否把多個屬性聚集成一個?
通過設置bool標志挖掘數據中潛在的信息
多抽查幾種不同的變化數據的方式
相關鏈接:
- How to Define Your Machine Learning Problem
- Discover Feature Engineering, How to Engineer Features and How to Get Good at It
- How To Prepare Your Data For Machine Learning in Python with Scikit-Learn
特征選擇
分為:
過濾方式:過濾特征選擇方法運用統計方法將一個分值分配給每個特征.這些特征按照分數排序,然后決定是被保留還是從數據集中刪除.這個方法通常是單變量且獨立的考慮每個特征,或者考慮其依賴變量.一些過濾方法包括Chi squared test(方卡檢驗),information gain(信息增益)和correlation coefficient scores(相關系數得分).
包裝方式:包裝方法考慮一族特征作為搜索問題,不同的組合被准備,檢驗並和其他組合比較. 我們使用一個預測模型評估特征的組合,然后根據模型精度給每個特征組合一個分數.
這個搜索過程可能有條不紊的例如best-fist搜索算法, 它可能隨機例如random hill-climbing 算法.或者它可能是啟發式的例如前向和后向傳遞增添和刪除特征的.一個例子就是遞歸特征消除算法.
嵌入方式:嵌入式算法在模型創建的時候,學習哪些特征對於模型精度的貢獻最大.最典型的嵌入式特征選擇方法是正則化方法.正則化方法也被稱為引入附加約束到預測算法(例如回歸算法)的優化,它偏向於較低復雜度的模型.正則規划算法的例子是Lasso,Elastic Net和Ridge Regression.
二 通過算法:
http://machinelearningmastery.com/improve-deep-learning-performance/