【deeplearning.ai】深度學習:結構化機器學習項目上

【deeplearning.ai】深度學習:結構化機器學習項目上

吳恩達老師DeepLearning.ai課程筆記
【吳恩達Deeplearning.ai筆記一】直觀解釋邏輯迴歸
【吳恩達deeplearning.ai筆記二】通俗講解神經網絡上
【吳恩達deeplearning.ai筆記二】通俗講解神經網絡下
深度網絡很差使?吳恩達老師帶你優化神經網絡(1)
【deeplearning.ai】深度學習:優化神經網絡(2)

構建好一個機器學習系統並得到一些初步結果時,後續每每還須要進行大量的改進,才能獲得最使人滿意的結果。如前面優化神經網絡中所述,改進的方法多種多樣,多是收集更多的數據,或者是進行正則化,或者是採用不一樣的優化算法。算法

想要找準改進的方向,使一個機器學習系統更快更有效地工做,須要學習一些在構建機器學習系統時經常使用到的策略。網絡

1正交化


構建機器學習系統的挑戰之一就是其中有不少能夠嘗試、更改的東西。例如,其中有不少的超參數須要進行訓練。把握好嘗試、更改的方向,認識到所作的每一步調整將帶來的影響,是十分關鍵的。機器學習

正交化(Orthogonalization)是確保修改一個系統中的某個算法指令或者組件時,不會產生或傳播反作用到系統種的其餘組件的一種系統設計屬性。ide

它使得驗證一個算法獨立於另外一個算法時變得更加容易,同時也能減小設計和開發的時間。函數

例如在學習駕駛一輛汽車時,主要是在學習轉向、加速、制動這三個基本的控制方法,這三種控制手段互不干擾,你只要經過不斷得訓練,熟練掌握它們就好。性能

而假如要你去學會駕駛一輛只帶一根操縱桿的汽車,操縱桿設計好了每操做一下就控制必定的轉角、必定的速度,這時學習成本就大了不少。所謂的正交化,就是這個道理。學習

當設計一個監督學習系統,需作到符合下面四個假設且它們是正交的:測試

  1. 創建的模型在訓練集上表現良好;
  2. 創建的模型在開發集(驗證集)上表現良好;
  3. 創建的模型在測試集上表現良好;
  4. 創建的模型在實際的應用中表現良好。

當作到正交化後,若是發現:優化

  1. 訓練集上表現不夠好--嘗試採用更深層次神經網絡或者換一種更好的優化算法;
  2. 開發集上表現不夠好--嘗試進行正則化處理或者加入更多訓練數據;
  3. 測試集上表現不夠好--嘗試採用更多的開發集進行測試驗證;
  4. 現實應用中表現不夠好--多是由於測試集沒有設置正確或者成本函數評估出錯。

面對遇到的各類問題,正交化可以幫助咱們更爲精準地定位及有效地解決問題。lua

2單一數字評估


構建機器學習系統時,經過設置一個單一數字評估指標(single-number evaluation metric),能夠更爲快速地判斷出在通過幾回調整後獲得的不一樣結果裏,哪一個的效果要好些。

對於一個分類器,評價分類器性能的指標通常是分類的準確率(Accuracy),也就是正確分類的樣本數和總樣本數之比,它也就能夠做爲一個單一數字估計指標。例如以前的貓分類器的幾個算法都是經過準確率做其性能好壞的標準。

對於二分類問題經常使用的評價指標是精確率(Precision)和召回率(Recall),將所關注的類做爲正類(Positive),其餘的類爲負類(Negative),分類器在數據集上預測正確或不正確,4種狀況出現的種數分別記爲:

  • TP(True Positive)——將正類預測爲正類數
  • FN(False Negative)——將正類預測爲負類數
  • FP(False Positive)——將負類預測爲正類數
  • TN(True Negative)——將負類預測爲負類數
    【deeplearning.ai】深度學習:結構化機器學習項目上
    而當遇到如下這種狀況很差判別時,就須要採用F1度量(F1 Score)來判斷兩個分類器的好壞。
    【deeplearning.ai】深度學習:結構化機器學習項目上
    F1度量定義爲:

F1度量值其實就是精準率和召回率的調和平均數(Harmonic Mean),它是一種基於其平均值改善的方法,比簡單地取平均值效果要好。

如此,算出上圖種A分類器的F1度量值爲92.4%,B分類器的爲91.0%,從未得知A分類器效果好些。這裏F1度量值就做爲了單一數字評估指標。

3知足、優化指標


【deeplearning.ai】深度學習:結構化機器學習項目上

然而有時,評判的標準不限於一個單一數字評估指標。好比上圖中的幾個貓分類器,想同時關心它們各自的識別準確率和運行時間,但若是把這兩個指標組合成一個單一數字評估指標就不夠好。

這時,就須要把一個指標設置爲優化指標(Optimizing Metric),另外的一些則做爲知足指標(Satisficing Metric)。

如上面所舉的例子中,準確率就是一個優化指標,由於想要分類器儘量作到正確分類,而運行時間就是一個知足指標,若是你想要分類器的運行時間很少於某個值,那你須要選擇的分類器就應該是以這個值爲界裏面準確率最高的那個,以此做出權衡。

除了採用這些標準來評判一個模型外,也要學會在必要時及時地調整一些評判指標,甚至是更換訓練數據。

例如兩個貓分類器A和B的識別偏差分別爲3%和5%,可是處於某種緣由,A識別器會把色情圖片誤識爲貓,引發用戶的不適,而B不會出現這種狀況,這時,識別偏差大一些的B反而是更好的分類器。能夠用如下公式來計算錯誤識別率:
【deeplearning.ai】深度學習:結構化機器學習項目上

還能夠設置一個 ω(i) ,當 x(i) 是色情圖片時, ω(i) 爲10,不然爲1,以此來區分色情圖片及其餘誤識別的圖片:
【deeplearning.ai】深度學習:結構化機器學習項目上
因此要根據實際狀況,正確肯定一個評判指標,確保這個評判指標最優。

4數據處理


構建機器學習系統時,對數據集的處理方法將影響你個整個構建過程當中的進度。經過前面已經知道,通常把收集到的現有數據分爲訓練集、開發集和測試集,其中開發集也稱爲交叉驗證集。

構建機器學習系統時,採用一些不一樣的方法,在訓練集上訓練出不一樣的模型,隨後使用開發集對模型的好壞進行評估,確信某個模型效果足夠好時再用測試集進行測試。

首先須要注意的是,開發集和測試集的來源應該是相同的,且必須從全部數據中隨機抽取,選擇的開發、測試集還要儘量和之後機器學習系統要面對的現實數據一致,這樣才能作到儘量不偏離目標。

其次須要注意每一個數據集大小的劃分。在早期的機器學習時代,對於你擁有的全部數據集,一般就是把其中的70%做爲訓練集,剩下的30%做爲測試集;或者要加入開發集的話,就把60%做爲訓練集,開發、測試集各取20%。

當得到的數據比較少的時候,這種劃分是合理的。但到了如今的機器學習時代,得到的數據數量通常都是成千上萬的,這時就不能按傳統的數據劃分法來劃分了。

假如得到了一百萬個數據樣本,將其中98%的數據都做爲訓練集,而只要將1%的也就是一萬個數據做爲開發集,1%的數據做爲測試集就足夠了。

因此要根據實際狀況,進行數據劃分,而不是死板地遵循着傳統。

測試集的大小應該設置得足夠提升系統總體性能得可信度,開發集的大小也要設置得足夠用於評估幾個不一樣的模型。

5比較人類表現水平


現在,設計和創建一個機器學習系統比之前變得更爲簡單高效,一些機器學習算法的在不少領域的表現已經能夠和人類一決高下了,例如由Google DeepMind開發的聲名全球AlphaGo。

然而,不少任務對於咱們人類來講,都可以幾近完美地完成,機器學習系統也在試圖達到甚至超越人類的表現水平。
【deeplearning.ai】深度學習:結構化機器學習項目上

上圖展現了隨着時間的推動機器學習和人的表現水平的變化,通常的,當機器學習超過人的表現水平後,它就進步地很緩慢了,其中有一個重要的緣由是人類的對於一些天然感知問題的表現水平幾近於貝葉斯偏差(Bayes Error)。

貝葉斯偏差被定義爲最優的可能偏差,換句話說,就是任何從 x 到精確度 y 的映射函數都不可能超過這個值。

當創建的機器學習模型的表現還沒達到人類的表現水平時,能夠經過各類手段來提高它。例如採用人工標記過的數據進行訓練,經過人工偏差分析瞭解爲何人可以正確識別,或者是進行方差、誤差分析。

在優化神經網絡中曾涉及過誤差和方差的概念,經過與人類在某件事情上的表現水平向比較,能夠清楚地代表一個機器學習模型對此的表現的好壞程度,由此做出判斷出後續應該進行減少誤差仍是減少方差。

【deeplearning.ai】深度學習:結構化機器學習項目上

訓練集的偏差和人類表現水平的偏差之間的差值稱爲可避免誤差(Avoidable Bias)。

例如上圖中的兩個場景下,將人的錯誤率和機器學習模型的錯誤率進行比較,看以看出在A場景下,學習算法的錯誤率和人的錯誤率的可避免誤差較大,這種狀況下後續的工做就是經過以前介紹過的方法來下降訓練集的錯誤率,以減少誤差。而在B場景下,學習算法和人的表現至關,偏可避免誤差只有0.5%,,後續的工做就應該轉向儘量地減少開發集和訓練集那部分2%的方差。

人類表現水平給出了一種貝葉斯偏差的估算方式,訓練針對某類事物的機器學習系統時,以該事物上人類表現水平做爲貝葉斯偏差,避免了訓練過程當中將訓練的錯誤率直接以0%爲目標進行優化。

因此在獲取到某項任務的人爲偏差數據時,就能夠將這些數據做爲貝葉斯偏差的代理,以此來分析學習算法的誤差及方差。

若是訓練集與人類表現水平之間的偏差差值大於訓練集與開發集之間的差值,日後就應該專一於下降誤差,反之,就應該專一於下降方差。
【deeplearning.ai】深度學習:結構化機器學習項目上

上圖中總結出了各類應對誤差及方差的方法。總之,可避免誤差小,便意味着模型的訓練過程作的比較好;可接受範圍內的方差意味着創建的模型在開發、測試集上的表現與在訓練集上是一樣好的。

此外,若是出現可避免偏差爲負值,也就是機器學習模型的表現超過人類表現水平(貝葉斯偏差的代理)狀況時,並不意味着你的模型的性能已經達到極點了,日後還想要提升其表現水平,就要另尋一些常規方法進行優化。

如今機器學習在不少領域已經作到這一點了,例如進行在線廣告業務、產品推銷、預測物流運輸時間、信用評估等等。

注:本文涉及的圖片及資料均整理翻譯自Andrew Ng的Deep Learning系列課程,版權歸其全部。翻譯整理水平有限,若有不妥的地方歡迎指出。
【deeplearning.ai】深度學習:結構化機器學習項目上

推薦閱讀:

馬爾科夫決策過程之Markov Processes(馬爾科夫過程)
【深度學習實戰】pytorch中如何處理RNN輸入變長序列padding
【機器學習基本理論】詳解最大後驗機率估計(MAP)的理解

歡迎關注公衆號學習交流~

【deeplearning.ai】深度學習:結構化機器學習項目上

相關文章
相關標籤/搜索