1. 爲什麼是ML策略
需求
建了一個模型,但是離目標還差點,需要改進該模型,有如下一些思路:
- 收集更多的數據
- 收集一些反例
- 用梯度下降訓練更長的時間
- 用Adam優化算法
- 嘗試更大的網絡
- 嘗試小點的網絡
- 嘗試dropout
- 添加
L2 正則項 - 網絡結構方面的優化
- 激活函數
- 隱藏層節點
- …
但是嘗試一個idea可能要花費幾個月的時間,因此選擇就成了一個問題。
定義
分析機器學習問題的方法,通過這些方法可以朝着最有希望的方向走
2. 正交化
兩個例子
- 對於電視機來說,有很多按鈕來控制畫面,比如說旋轉、拉伸、平移等,如果電視只有混合的按鈕,旋轉一個這樣的按鈕,會同時進行不同比例的旋轉、拉伸、平移操作,那麼就很難把只是偏移的畫面調整到一個合適的位置
- 對於車來說,油門、剎車和方向盤,如果只有混合的裝置,操作它會同時改變車速和方向,那麼很難控制車的行爲
- 所以需要把動作剝離開來,車速和方向單獨控制,就可以很容易控制車的行爲,稱之爲正交化
假設鏈
假設 | 如果不好採取的方法 |
---|---|
訓練集的成本函數( |
更大的網絡,Adam優化算法… |
驗證集的成本函數 | 正則化,增大訓練集… |
測試集的成本函數 | 可能過擬合,因此更大的驗證集 |
在真實環境中的表現 | 意味着驗證集分佈設置不正確,要麼成本函數測量的指標不對,因此改變驗證集或成本函數 |
- early stoping,早期停止會影響對訓練集的訓練、同時改善驗證集的表現,類似於一個混合按鈕,同時改變多個表現
3. 單一數字評估指標
只用一個評價指標來衡量模型的好壞。
Presicion & Recall
- Presicion:判斷是貓的圖片中真的是貓的比例
- Recall:實際是貓的圖片中被檢測出來的比例
這兩個指標需要權衡折中(trade-off),因爲這兩個指標是相對的,兩個極端:把所有圖片都判定爲貓,那麼Recall爲100%,但是Presicion很低;只選擇可能性最大那張圖片是貓,那麼Presicion就很可能是100%,但是Recall就很低。
這就導致了有的模型Presicion好Recall不好,有的模型Presicion不好Recall好,有兩個指標的時候就不好比較哪個模型比較好。所以單個指標有利於量化模型的好壞,快速挑選好的模型。
F1 score
綜合考慮Presicion和Recall的指標,是Presicion和Recall的調和平均數(harmonic mean)
- 計算公式
- 課後筆記裏Recall的公式錯誤
4. 滿足和優化指標
已知2個評價指標準確度和運行速度,如何綜合得到一個指標?
- 線性加權組合:cost = accuracy-0.5*running_time
- 把指標分爲2類:滿足指標(satisfing metric),只需要滿足一定的條件就可以,例如運行速度小於100ms;優化指標(optimistizing metric),需要優化的指標,越大越好,例如準確度,即挑選一個作爲優化指標,其他的作爲滿足指標,也就滿足了3中的只有一個指標來評價模型的原則。按照這類方法得到的指標如下:
maximize subject to accuracyrunningTime≤100ms
舉個例子
語音設備喚醒,比如說你好百度。
對於這種情況,我們更加關注準確度,也就是在要喚醒的時候能夠很大程度地喚醒設備。相對來說錯誤喚醒就不那麼重要了。所以我們的指標如下:
5. 訓練、開發、測試集的劃分
訓練、開發、測試集的概念
- 開發集(development set)有時也成爲保留交叉驗證集(hold out cross validation set,驗證集)。
有很多想法,用訓練集訓練不同的模型,再用開發集來評估不同的思路,然後選擇一個不斷迭代去改善開發集的性能,直到最後得到一個令人滿意的成本,最後再用測試集去評估。
確定了開發集和評價指標,就相當於確立了一個目標。訓練不同的模型去逼近這個目標。
訓練集用來訓練模型,開發集用來選擇模型種類結構和調試模型參數,測試集用來評估模型。
- 開發集和測試集劃分的原則:分佈要一致
舉個例子
有不同國家的貓的圖片,例如美國、英國、其他歐洲國家、南美、印度、中國、其他亞洲國家、澳大利亞,選擇前4個或者隨機選4個作爲開發集,剩下4個作爲測試集。
- 當然上面的做法不好,缺點就是開發集和測試集的分佈不一致,很容易導致調好的模型的測試集上表現不好。因此通常的做法是把8個國家的貓圖片混在一起,隨機選擇作爲開發集和測試集。
6. 開發集和測試集的大小
- 傳統機器學習中,樣本數據少,比如100條或者1000條或者10000條,有這樣的經驗劃分
train set | test set |
---|---|
70% | 30% |
train set | development set | test set |
---|---|---|
60% | 20% | 20% |
- 數據集變大了,如果有一百萬條樣本數據,那麼如下劃分
train set | development set | test set |
---|---|---|
98% | 1% | 1% |
深度學習算法需要很多的數據才能訓練完成,而對於測試集來說,只需要能夠得到足夠置信度的評價指標就可以了,所佔比例可以小於30%。對於開發集來說,需要足夠大,來評估不同模型。
7. 什麼時候該改變開發集/測試集和指標
對於貓圖片的分類問題,算法A的誤差爲3%,算法B的誤差爲5%,但是算法A誤分的圖片中有很多色情圖片(porn),而算法B中沒有。從開發集和評價指標的角度來說選擇算法A,但是從客戶應用的角度來說選擇算法B,這時候就需要改變指標。
- 如果模型算法的驗證集測試集的評價指標都不錯,但是應用的時候不好,就要考慮更換評價指標和驗證集、測試集
比如說貓圖片分類問題,如果我們用的圖片數據都是高質量的圖片,而用戶用的是低質量模糊奇怪的圖片,效果就不好,這種情況就需要更換驗證集和測試集。
8. 爲什麼是人的表現
和人比較的兩個原因:
- 機器學習領域的快速發展有了近似或者超過人的效果
- 機器學習在很多領域都可以替代人的作用,所以不可避免的要和人做比較
舉個例子
在算法模型數據的驅動下,效果越來越好,最終會超過人的表現,但是同時也有一個上限,叫做貝葉斯最優誤差(Bayes optimal error,Bayes error,best possible error),即理論上可能達到的最優誤差。
比如說在語音識別領域,有些音頻就是這麼嘈雜,以至於根本就不可能知道說的是什麼。
性能超過人的表現以後性能提升少的原因:
- 有些人的表現十分接近貝葉斯最優誤差,比如說十分擅長辨認圖像,聽聲音等
- 性能比人的表現差的時候,有很多工具可以提升,但是比人的表現好了以後,很多工具就不怎麼有效了
如果性能比人的表現要差,提升的工具有:
- 請專家標註數據,從而有更多的數據訓練模型
- 從人工誤差分析中,也就是把做錯的例子給專家看,找出分錯的原因,爲什麼人能做對,算法出錯
分析偏差和方差(bias/variance),偏差和方差在前面的視頻中有提到,分別指訓練集的性能和開發集的性能
- 如果你的算法性能比人的表現要好,以上3種工具就很難見效了。
9. 可避免偏差
對於貓圖片分類問題,有如下兩個模型:
A情況 | B情況 | |
---|---|---|
Human Performance | 1% | 7.5% |
Training error | 8% | 8% |
Dev error | 10% | 10% |
- 對於A來說,訓練集的誤差和人的表現相比測試集和開發集的表現來說差很多,因此偏差(bias)很大,即訓練集的誤差很大,所以更關注於減少偏差的策略,比如訓練一個更大的網絡
- 如果貓的圖片模糊辨識不清,就會出現B的情況,測試集和開發集的表現相比訓練集和人的表現來說差很多,因此方差(variance)很大,即測試集的誤差很大,所以更關注於減少方差的策略,比如正則化,更多的訓練數據等
在貓圖片分類的問題中,可以假設人的表現就是貝葉斯最優誤差。
可避免偏差(avoidable bias)的定義
貝葉斯最優誤差和訓練集誤差的差值稱爲可避免偏差。
10. 理解人的表現
人類水平表現(human-level performance)的定義
舉個例子
通過醫學圖片判斷骨折
假設如下:
人 | 誤差 |
---|---|
普通人 | 3% |
普通醫生 | 1% |
有經驗的醫生 | 0.7% |
專家團隊 | 0.5% |
這個例子中,0.5%就可以認爲是貝葉斯最優估計,而誤差一般達到1%就有應用的價值了。所以人類水平表現是一個目標,看你的應用需求。
11. 超過人的表現
舉個例子
A情況 | B情況 | |
---|---|---|
Team of humans | 0.5% | 0.5% |
One human | 1% | 1% |
Training error | 0.6% | 0.3% |
Dev error | 0.8% | 0.4% |
- 對於A情況,選擇專家團隊的誤差作爲人類水平表現,則可避免偏差爲0.1%,而方差爲0.25,因此選擇優化方差,比如正則化或者增加訓練數據
- 對於B 情況,超過了專家團隊的誤差,因此不能估計貝葉斯最優誤差是多少,所以不好判斷是優化偏差還是優化方差
機器學習好過人類的領域
- 網絡廣告,估計某個用戶點擊廣告的可能性
- 產品推薦,推薦電影或數據之類的任務
- 物流預測,預測從A到B開車的時間
- 借貸證明,預測某人會不會償還貸款
深度學習,比如說自然語言處理、計算機視覺等自然感知方面,因爲人類比較擅長這些,所以超越人類比較困難,但是也有好過人類表現的
1. 語音識別
2. 圖像識別
3. 醫學方面,比如ECG、癌症判斷、放射科等
12. 改善模型的性能
目標
- 訓練集和人類水平表現接近或者超過,即可避免偏差低
- 開發集和和測試集的誤差低,方差要低
正交化方法
- 對於偏差,可以訓練更大的網絡或者訓練更久
- 對於方差,可以使用正則化或者手機更多的訓練數據
如何減少可避免偏差和方差
- 改善可避免偏差,即人類水平和訓練集誤差
- 訓練更大的網絡
- 訓練更久,使用優化方法,比如動量momuntom,RMProp,Adam
- 改變神經網絡結構或者超參數
- 改善方差,即開發集測試集和訓練集之間的差別
- 更多的數據
- 正則化方法,L2、Dropout,數據增強
- 改變神經網絡結構或者超參數