1. 程式人生 > >吳恩達老師深度學習視訊課筆記:構建機器學習專案(機器學習策略)(1)

吳恩達老師深度學習視訊課筆記:構建機器學習專案(機器學習策略)(1)

        機器學習策略(machine learning strategy):分析機器學習問題的方法。

    正交化(orthogonalization):要讓一個監督機器學習系統很好的工作,一般要確保四件事情,如下圖:


        (1)、首先,你通常必須確保至少系統在訓練集上得到的結果不錯。所以訓練集上的表現必須通過某種評估達到能接受的程度,對於某些應用,這可能意味著達到人類水平的表現,但這也取決於你的應用。

        (2)、接著,你就希望系統在開發集(dev set)上也能有好的表現。

        (3)、接著,你希望系統在測試集(test set)上也有好的表現。

        (4)、最後,你希望系統在實際使用中表現令人滿意。

        如果你的演算法在成本函式(cost function)上不能很好地擬合訓練集,你可能可以訓練更大的網路或者選擇一個更好的優化演算法,比如Adam優化演算法等等。如果你的演算法不能很好地擬合開發集,可以增加一些正則項或者增大訓練集。如果你的演算法不能很好地擬合測試集,你可能增大開發集。因為如果系統在開發集上表現很好,但在測試集上表現較差,這可能意味著你在開發集上過擬合了,需要使用更大的開發集。如果在實際使用中表現較差,這意味著你需要回去改變開發集或成本函式。因為根據某個成本函式,系統在測試集上表現較好,在實際使用中表現較差,這意味著你的開發集分佈不正確或你的成本函式測量指標不對。

        當訓練神經網路時,我傾向於不用早期停止(when i train a neural network, i tend not to use early stopping),這個技巧還不錯,很多人都這麼幹。過早停止有點難以分析問題,對訓練集的擬合也不太好,也同時影響開發集的表現。

        單實數評估指標(single real number evaluation metric):它可以快速告訴你,新嘗試的手段比之前的手段好還是壞,如下圖:



        查準率(precision):例如,在你的分類器標記為貓的例子中,有多少真的是貓,例如有95%的查準率,意味著分類器說這圖有貓的時候,有95%的機會真是貓。

        查全率(recall):對於所有真貓的影象,你的分類器正確識別出的百分比,實際為貓的影象中,有多少被系統識別出來。

        事實證明,查準率和查全率之間往往需要折衷,兩個指標都要顧及到。用查準率和查全率來評估分類器是比較合理的。但如果僅有兩個評估指標,很難去快速地選擇出好的分類器。不推薦用兩個評估指標查準率和查全率來選擇一個分類器,需要找到一個新的評估指標,能夠結合查準率和查全率。在機器學習文獻中,結合查準率和查全率的標準方法是F1分數(F1 score),F1分數非正式地可以認為是查準率(P)和查全率(R)的平均值,正式地F1分數公式是:2/(1/P+1/R),在數學中,這個函式叫做the harmonic mean of precision P andrecall R。

        滿足和優化指標(satisficing as well as optimizing metrics):如下圖,一般地說,如果你要考慮N個指標,有時候選擇其中一個指標作為優化指標是合理的。所以你想盡量優化那個指標,然後剩下的N-1個指標都是滿足指標。意味著只要它們達到一定閾值,你就不在關心超過那個閾值之後的表現,但它們必須達到那個閾值。這些評估指標必須是在訓練集或開發集或測試集上評估或計算出來的。


        訓練集、開發集、測試集劃分:機器學習中的工作流程是:你嘗試很多想法,用訓練集訓練不同的模型,然後使用開發集來評估不同的想法,然後選擇一個。然後不斷迭代去改善開發集的效能。直到最後,你可以得到一個令你滿意的成本(cost),然後你再用測試集去評估。

        假如只有開發集和測試集的情況,如下圖,讓開發集和測試集來自同一分佈。設立開發集+單實數評估指標。將所有資料隨機洗牌放入開發集和測試集。


        開發集和測試集的大小:測試集的目的是完成系統開發後,測試集可以幫你評估最終系統的效能。方針(guideline)就是令你的測試集足夠大,能夠以高置信度評估系統整體效能,但它可能遠小於訓練集。把大量資料分到訓練集,然後少量資料分到開發集和測試集,如下圖:



        什麼時候應該改變開發集、測試集和指標:當你的評估指標無法正確衡量演算法之間的優劣排序時,你應該改變評估指標或者要改變開發集或測試集。其中一個修改評估指標的方法是加個權重項。如果在指標上表現很好,在當前開發集和測試集上表現很好,但你的實際應用程式表現不好,那麼就需要修改指標和開發測試集,改變你的開發測試集,讓你的資料更能反映實際需要處理的資料,如下圖:



        why human-level performance:如下圖:



        可避免的偏差:如下圖,根據人類對某個具體事物的表現,如識別貓,來決定是否需要減少偏差。假如人對貓的識別錯誤率



為1%,而訓練集的錯誤率為8%,開發集的錯誤率為10%,這時就需要減少偏差,比如訓練更大的神經網路或者跑久一點梯度下降,看看是否可以減少訓練誤差。假如人對貓的識別錯誤率為7.5%,而訓練集的錯誤率仍然為8%,開發集的錯誤率仍然為10%,此時你可能更希望減少學習演算法的方差,比如可以試試正則化,讓你的開發誤差更接近你的訓練誤差。取決於人類水平誤差有多少或者很接近貝葉斯誤差,來決定是側重於減少偏差還是減少方差。貝葉斯誤差和訓練集誤差的差值稱為可避免偏差,如下圖。根據人類水平誤差(human-level error),理解你對貝葉斯誤差的估計,你就可以在不同的場景中專注於不同的策略,使用避免偏差策略還是使用避免方差策略。


        Understanding human-level performance: 如下圖:



        Surpassing human-level performance:非自然感知問題(natural perception problems),如Online advertising、Product recommendations、Logistics(predicting transit time)、Loan approvals等,即不是計算機視覺或語音識別或自然語言處理問題,較容易超越人類水平。人們在自然感知問題中往往表現非常好。所以有可能,對計算機來說,在自然感知任務的表現要超越人類要更難一些。現在,即使在自然感知任務中,在某些情況下,計算機已經可以超越人類的水平了。如下圖:



        Improving your model performance:想要讓一個監督學習演算法達到實用基本上希望或假設你可以完成兩件事情:首先,你的演算法對訓練集的擬合很好,即做到低偏差;第二,在訓練集上做的很好,然後推廣到開發集和測試集也很好,即低方差。為了減少偏差,可使用的策略包括:訓練更大的模型、訓練時間更長一些;使用更好的優化演算法,比如momentum、RMSProp;使用更好的演算法,比如Adam;或者可以試試尋找更好的新神經網路架構,更好的超引數;改變啟用函式,改變層數或隱藏單元數;試用其它模型或其它模型架構,如迴圈神經網路和卷積神經網路。為了減少方差,可使用的策略包括:收集更多資料去訓練;嘗試正則化,包括L2正則化和Dropout,資料增強;嘗試不同的神經網路架構,超引數搜尋。如下圖: