吳恩達【深度學習工程師】專項課程包含以下五門課程:
1、神經網絡和深度學習;
2、改善深層神經網絡:超參數調試、正則化以及優化;
3、結構化機器學習項目;
4、卷積神經網絡;
5、序列模型。
今天介紹《結構化機器學習項目》系列第一講:機器學習政策(1)。
主要内容:
1、使用ML政策
2、評估名額
3、Train/Dev/Test資料集
4、改變評價标準
5、人類水準表現
1、使用ML政策
當我們一開始得到深度神經網絡模型時,我們可以從以下方面來對它進行優化:
- 收集更多的樣本資料
- 收集更加多樣化的訓練集
- 使用梯度下降訓練更長的時間
- 使用Adam算法替代梯度下降算法
- 嘗試更大更複雜的網絡
- 嘗試更小的網絡
- 使用dropout技術
- 添加L2正則化
- 網絡架構:激活函數,隐層神經元…
由于可供選擇的方法很多,使用一套快速且有效的政策來優化機器學習模型是非常重要的。
機器學習中有許多參數、超參數需要調試。通過每次隻調試一個參數,保持其它參數不變,而得到的模型某一性能改變是一種最常用的調參政策,我們稱之為正交化方法(Orthogonalization)。正交化在于每次調試一個參數隻會影響模型的某一個性能。
例如老式電視機旋鈕,每個旋鈕就對應一個功能,調整旋鈕會調整對應的功能,而不會影響其它功能。也就是說彼此旋鈕之間是互不影響的,是正交的。這種方法能夠讓我們更快更有效地進行機器學習模型的調試和優化。
對應到機器學習監督式學習模型中,可以大緻分成四個獨立的“功能”,每個“功能”對應一些可調節的唯一的旋鈕。四個“功能”如下:
- Fit training set well on cost function:優化訓練集可以通過使用更複雜NN,使用Adam等優化算法來實作;
- Fit dev set well on cost function:優化驗證集可以通過正則化,采用更多訓練樣本來實作;
- Fit test set well on cost function:優化測試集可以通過使用更多的驗證集樣本來實作;
- Performs well in real world:提升實際應用模型可以通過更換驗證集,使用新的cost function來實作。
總的來說,每一種“功能”對應不同的調節方法。而這些調節方法(旋鈕)隻會對應一個“功能”,是正交的。
early stopping在模型功能調試中并不推薦使用。因為early stopping在提升驗證集性能的同時降低了訓練集的性能。即同時影響兩個“功能”,不是正交的。
2、評估名額
建構、優化機器學習模型時,單值評價名額是非常必要的。
例如:有A、B兩個模型,它們的準确率(Precision)和召回率(Recall)分别如下:
如果隻看準确率的話,B模型更好。如果隻看召回率的話,A模型更好。
實際應用中,我們通常使用單值評價名額F1 Score來評價模型的好壞。
F1 Score綜合了準确率 P 和召回率 R 的大小,計算方法如下:
F1=2⋅P⋅RP+R
然後得到了A和B模型各自的F1 Score:
從F1 Score來看,A模型比B模型更好一些。
除了F1 Score之外,我們還可以使用平均值作為單值評價名額來對模型進行評估。
例如:A, B, C, D, E, F六個模型對不同國家樣本的錯誤率不同,計算其平均性能,然後選擇平均錯誤率最小的那個模型(即C模型)為最優模型。
有時候,要把所有的性能名額都綜合在一起,構成單值評價名額是比較困難的。
我們可以把某些名額作為優化名額(Optimizing metic),尋求最優化值;而某些名額作為滿意名額(Satisficing metic),隻要滿足門檻值就行了。
例如:在貓類識别的例子中,有A、B、C三個模型,各個模型的準确率和運作時間如下表中所示:
我們将準确率作為優化名額,将運作時間作為滿意名額。
給運作時間設定一個門檻值,在其滿足門檻值的情況下,選擇準确率最大的模型。例如:運作時間必須<100 ms,準确率要盡可能的高,是以滿足條件的 B 模型就是最優模型。
總的來說,性能名額是需要優化的,越優越好;而滿意名額隻要滿足設定的門檻值就可以了。
3、Train/dev/test 資料集
應該盡量保證Train/dev/test 資料集同分布。
當樣本數量很小(<10000)的時候,通常将Train、dev、test sets的比例設為60%、20%、20%或70%、0%、30%;
當樣本數量很大(>1000000)的時候,通常将相應的比例設為98%、1%、1%或者99%、0%、1%。
對于dev 資料集數量的設定,應該遵循的準則是通過dev sets能夠檢測不同算法或模型的差別,以便選擇出更好的模型。
對于test 資料集數量的設定,應該遵循的準則是通過test sets能夠反映出模型在實際中的表現。
4、改變評價标準
算法模型的評價标準有時候需要根據實際情況進行動态調整,目的是讓算法模型在實際應用中有更好的效果。
舉個貓類識别的例子。初始的評價标準是錯誤率,算法A錯誤率為3%,算法B錯誤率為5%。顯然,A更好一些。但是,實際使用時發現算法A會通過一些色情圖檔,但是B沒有出現這種情況。從使用者的角度來說,他們可能更傾向選擇B模型,雖然B的錯誤率高一些。這時候,我們就需要改變之前單純隻是使用錯誤率作為評價标準,而考慮新的情況進行改變。例如增加色情圖檔的權重,增加其代價。
原來的cost function:
J=1m∑i=1mL(y^(i),y(i))
更改評價标準後的cost function:
J=1w(i)∑i=1mw(i)L(y^(i),y(i))
w(i)={1,10,x(i) is non−pornx(i) is porn
概括來說,機器學習可分為兩個過程:
- 定義一個标準來評估分類器
- 怎樣優化這個标準
5、人類水準表現
機器學習模型的表現通常會跟人類水準表現作比較,如下:
圖中,橫坐标是訓練時間,縱坐标是準确性。
機器學習模型經過訓練會不斷接近人類水準甚至超過它。但是,超過人類水準之後,準确性會上升得比較緩慢,最終不斷接近理想的最優情況,我們稱之為bayes optimal error。理論上任何模型都不能超過它,bayes optimal error代表了最佳表現。
實際應用中,要看human-level error,training error和dev error的相對值。
例如貓類識别的例子中,如果human-level error為1%,training error為8%,dev error為10%。由于training error與human-level error相差7%,dev error與training error隻相差2%,是以目标是盡量在訓練過程中減小training error,即減小偏差bias。
如果圖檔很模糊,肉眼也看不太清,human-level error提高到7.5%。這時,由于training error與human-level error隻相差0.5%,dev error與training error隻相差2%,是以目标是盡量在訓練過程中減小dev error,即減小方差variance。
通常,我們把training error與human-level error之間的內插補點稱為bias,也稱作avoidable bias;把dev error與training error之間的內插補點稱為variance。根據bias和variance值的相對大小,可以知道算法模型是否發生了欠拟合或者過拟合。
提高機器學習模型性能主要要解決兩個問題:avoidable bias和variance。
解決avoidable bias的常用方法包括:
- 更複雜的模型
- 使用更好的優化器訓練更長時間:momentum, RMSprop, Adam
- 更改NN架構/超參數查找
解決variance的常用方法包括:
- 更多的樣本資料
- 正則化方法:L2, dropout, data augmentation
- 更改NN架構/超參數查找