深度學習筆記(3):1.3-1.7 建立你的目標(setting up your goal)

1.3 單一值評價指標(single number evaluation matric)

這一節主要是說對於結果我們希望有一個單一評價指標來決定在多個模型中選擇哪個,如下圖所示:

建立機器學習項目的過程本來就是一個憑藉經驗不斷更新迭代的過程。假設我們現在有兩種方案A和B,A的查準率爲95%,查全率爲90%,而B的查準率爲98%,查全率爲85%。什麼是查準率和查全率簡單說一下,查準率就是準確率,即預測爲貓的圖片中真正的貓圖片的概率,而查全率衡量的是圖片是否查完全,查全率爲預測正確的貓圖片佔全部貓圖片的比例。

查準率和查全率是一種trade-off關係,比如爲了提高查全率,我可以將所有的圖片都預測爲貓圖片,這樣查全率就是100%,因爲所有真正的貓圖片我都找到了,但是這樣做就會讓準確率很低。

面對圖中AB兩種方案,一個查全率高一些,一個查準率高一些,那麼這兩個方案我們到底該怎麼選呢?這時候,我們就需要一個單一評價指標,比如F1 score,F1 score是查準率和查全率的調和平均數。計算得A方案的F1 score更大,所以選擇一方案。

一般的機器學習項目我們都需要有開發集和單一評價指標。有了開發集,我們就可以計算對應的評價指標,然後再選取一個單一評價指標幫助我們快速地更新迭代產品。

再來看一個例子:

假設我們有一個貓app在全球幾個地方投入使用,預測誤差如上圖所示。首先我們可以同時運行好幾種方案,然後根據單一評價指標選擇最優方案。在這裏可以使用平均數,選取使全球多個地區平均誤差最小的方案。把平均數作爲單一評價指標,這裏應選擇C方案。

1.4 設定優化指標(satisficing and optimizing matrics)

有時考慮全部的指標,並提出一個單一值評價指標並不是一件容易的事。在已經有這樣指標的時候我們可以直接使用,比如F1 score,它的提出是有一定合理性的,但沒有確定的單一型指標時我們該怎麼辦呢?

還是貓學習器的例子。假設現在我們有三個方案,有兩個指標,一個是準確率,它可以是F1 score,也可能是基於其他標準確定的準確率,還有一個指標是運行時間。

面對這樣的兩個指標,在沒有單一指標時,我們可以直接將兩個指標組合,作一個加權平均,如上圖所示,即希望準確率越高越好,希望運行時間越低越好。但在真實情況下,這個組合未必合理,因爲也許大家會比較在意準確率,但是運行時間只要低於一個閾值即可,大家並不會關心運行時間到底會有多快。那這樣我們的目標就確定了,我們的優化目標就是準確率,但是有限制條件,那就是運行時間要低於一定閾值,這樣問題就變得簡單多了,也變得實際多了。在這裏,準確率是我們要optimizing的,而運行時間是需要satisficing的,所以這個指標稱爲satisficing and optimizing matrics。

一般有N個指標的情況下,我們只選取一個最重要的指標進行優化(optimizing),而其他指標作爲需要滿足(satisficing)的條件。

再舉一個例子,比如喚醒人工智能的語句,我們希望提高喚醒的準確率。這時我們的優化目標就是提高喚醒的準確率,但是假陽性(未說喚醒詞但人工智能自動打開)限制在一定條件下,比如24h內最多犯一次錯誤。

1.5 訓練集、開發集、測試集劃分(train/dev/test distributions)

上兩小節講完單一指標的重要性以及如何設定合理指標,接下來我們來講一下如何劃分訓練集、開發集和測試集。

這一節主要側重於如何劃分開發集和測試集。

假設我們要對貓分類器劃分開發集(dev/development set)和測試集(test set)。現在數據來自8個地方,如上圖所示。現在有一種想法是將前四個地方數據作爲開發集,而後四個地方數據作爲測試集,請問這樣劃分對嗎?顯然是不對的,因爲不同的地方數據分佈不一樣。

開發集用來檢驗訓練集擬合得到的模型,計算得到一些判斷指標,然後根據這些指標去選取最佳方案。這就好比打靶,開發集和指標的配合使我們的方案越來越接近靶心,而開發集和測試集分佈不同就相當於,在我們已經瞄中靶心時突然又換了一個靶,測試集效果當然不會好,因爲使勁的方向就錯了。

所以在本例中,要想使開發集和測試集分佈相同,可以將8個地方數據完全打亂,然後隨機從中抽取一部分作爲開發集,然後另一部分作爲測試集,即一定要保證開發集和測試集數據分佈相同。

接下來老師講了一個真實的故事來強調開發集和測試集數據分佈相同的重要性。

這個故事是這樣的,開發集是中等階層收入,需要訓練一個模型去判斷是否給該客戶提供貸款。團隊花費3個月作出了這個模型,不料經理希望用該模型去預測低收入羣體,那效果當然不會好啊,團隊相當於浪費了三個月的時間,就會很崩潰。所以在劃分開發集和測試集時,一定要遵循下圖中的原則:

首先是開發集和測試集分佈一定要相同,其次,測試集也要和真實世界數據分佈相同, 所以以後添加數據時,也一定要記得同時添加進開發集和測試集以保證其分佈相同。

這一小節主要講了開發集和測試集分佈一定要相同,還未講述訓練集劃分原則, 以及開發集和測試集劃分比例。詳見後續。

1.6 確定開發集和測試集的大小(size of dev and test sets)

隨着深度學習的流行和時代的改變,數據集劃分原則也發生了改變,如下圖所示:

以前,若只有訓練集和測試集,我們習慣將數據7-3分,若有訓練集、開發集和測試集,我們習慣將其6-2-2分。這樣分是因爲以前的數據不多,比如100、1000、10000我們都可以按這樣的比例劃分。但現在數據量級都是百萬級別的,這時開發集和測試集只取1%也能夠有10000個,作爲開發集和測試集來講足夠了,所以面對現在的數據量級,訓練集、開發集和測試集的劃分變爲98-1-1。

那麼開發集和測試集的大小該如何確定呢?

其實這跟二者的作用有關,二者的大小足夠大到能完成其作用即可。

開發集的作用就是評估不同方案,搭配指標選擇最優方案。所以開發集的大小要足夠大到能夠反映不同方案的差距,比如A方案和B方案指標僅差0.1%,所以這時開發集大小要能夠精確反映兩種方案在0.1%上的差距,若僅是大到能反映1%上的差距,那二者都是97%,也就無從比較優劣了。

測試集的大小安排也是同理,需要大到實現其作用。

測試集的大小要足夠大到能夠給你要做的項目的性能指標一定的置信度,也許10000或100000就夠了,也許遠小於舊的劃分標準30%。

對一些不需要置信度那麼高的系統,可能不需要測試集,只有訓練集和開發集,有些人會稱這時的開發集爲測試集,即這時候測試集乾的是開發集的工作,即訓練集擬合模型,通過測試集的表現去改進模型。老師非常不建議這樣做,因爲有了測試集,你就可以使用這組不帶偏差的數據來測量系統的性能。

最後總結一下現在流行的劃分開發集和測試集的方法,即把大量數據分到訓練集,少量數據分到開發集和測試集,特別是你有一個非常大的數據集時。以前的經驗法則其實是爲了保證開發集足夠大至達到目的,即幫你評估不同方案的好壞去選擇最優方案,而測試集的目的是評估最終的損失偏差,只要設置足夠大的測試集至能達到目的就可以,可能這個數據遠遠小於原數據集的30%。

1.7 何時改變開發集、測試集及評估指標(when to change dev/test sets and metrics)

前幾小節我們已經學會了如何劃分開發集和測試集,也知道了如何設定評估指標,而開發集和評估指標的設定相當於給了你的團隊一個指標去瞄準,但是在做項目過程中,有時你會意識到目標放錯了,這種情況下,你需要移動目標,接下來我們討論的就是這種情況。

還是貓的那個例子,如下圖所示:

假設現在有兩個方案,評估標準是錯誤率,A方案錯誤率爲3%,B爲5%。按照錯誤率這個評估標準,理應選擇A方案。但是A方案投入使用之後,發現A方案雖然能夠更好識別貓圖片提供給用戶,但是提供錯誤時經常會提供一些色情圖片,而B方案雖然錯誤率較高,但是不輸出色情圖片。從用戶滿意度來看,顯然B方案比A方案好很多,此時的評估指標已經不受用了。

那就需要改變評估指標,怎麼改呢?之前每一個樣本犯錯誤權重都是一樣的,現在我可以使輸出色情圖片的懲罰權重高一些,即若輸出圖片不是貓也不是色情圖片,其權重爲1,若輸出圖片是色情圖片,則懲罰權重爲10。通過這樣的改進再來計算誤差,如上圖所示,I爲示性函數,1/\sum_{i=1}^{m}w^{i}實現歸一化,保證error在0-1之間。

當然這樣做就要求我們對開發集和測試集進行標籤標註,即不僅對圖片是不是貓圖片進行標註,還要標註圖片是否是色情圖片,這樣才能夠計算改進後的error。

在移動目標這個過程中,其實我們使用的也是正交化步驟,如下圖所示:

當知道目標改變時,比如在上例中,接下來要做的就是分兩步走。首先設定一個正確的評估指標,這樣我們就有了目標,然後就是不斷逼近目標,根據開發集和評估指標選擇最優方案。

剛纔的例子只涉及到了評估指標的改變,我們也會遇到需要同時改變評估指標和數據集的例子,如下圖所示:

還是這個學習器,A算法錯誤率爲3%,B爲5%,所以我們自然選擇A方案,但是實際上B方案表現更好,這是爲什麼?因爲我們在測試算法性能時,開發集和測試集都是在網上找到的分辨率很高的貓圖片,而用戶上傳的圖片分辨率沒有高,可能圖片有的地方有些奇怪,或者是圖片模糊導致其實B方案更好,其實也可以理解,因爲訓練時我們使用的是高清圖片,但實際樣本中包含模糊圖片,這樣訓練出來的算法相當於有些過擬合了,這時誤差大一些的算法可能泛化效果更好。

面對這樣的情況,我們應該怎麼樣處理呢?這時我們的目標其實從很好識別貓圖片變爲提高用戶體驗,希望模型也能夠很好識別用戶上傳的模糊不清的貓圖片。所以我們需要改變評價指標,或者改變開發集和測試集,加入模糊貓圖片,使開發集和測試集分佈儘量和實際情況下數據分佈一致。

 

版權聲明:尊重博主原創文章,轉載請註明出處https://blog.csdn.net/kkkkkiko/article/details/81667399

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章