用模型不確定性理解模型

用模型不確定性理解模型

來自專欄論智7 人贊了文章

來源:taboola engineering

編譯:Bing

隨著深層神經網路功能越來越強大,它們的結構也越來越複雜。這些複雜結構也帶來了新的問題,即模型的可解釋性。

想創建穩定、不易受對抗樣本攻擊的模型,可解釋性是很重要的。另外,為新的研究領域設計模型也是一項富有挑戰的工作,如果能了解模型在做什麼,可以對這一過程有所幫助。

過去幾年,為了對模型的可解釋性加以研究,研究者們提出了多種方法,包括:

  • LIME:通過局部線性近似值計算解釋模型的預測
  • Activation Maximization:一種能了解那種輸入模式可以生成最大的模型回應的方法
  • 特徵可視化
  • 在低維解釋空間中嵌入一個DNN圖層
  • 從認知心理學中借鑒方法
  • 不確定性估計法——本文關注的重點

在我們開始研究如何用不確定性解決模型問題、解釋模型之前,首先讓我們了解一下為什麼不確定性如此重要。

你為什麼應該關注不確定性?

一個重要的例子就是高風險的應用,假設你正在創建一個模型,可以幫助醫生判斷病人的嚴重程度。在這種情況下,我們不應該僅僅關心模型的精確度,更要關注模型對其預測結果有多大程度的肯定。如果不確定性太高,醫生需要謹慎決策。

自動駕駛汽車是另外一個有趣的例子。如果模型不確定是否有行人在馬路上,我們可以利用這一信息讓車子減速,或者發出警報讓駕駛員手動操作。

不確定性還可以在缺乏數據樣本的情況下幫助我們。如果模型不是在與樣本相似的數據上訓練的,它可能無法輸出想要的結果。谷歌照片曾經將黑種人錯誤地認成了大猩猩,就是由於這個原因,種類單一的訓練集可能導致令人尷尬的結果。

不確定性的最大用途,也是本文的主要目的,就是為模型排除錯誤。首先,讓我們了解一下不確定性都有哪幾種不同類型。

不確定性的種類

不確定性和模型都有多個種類,每一種都有不同的用處。

模型不確定性,又稱認知不確定性(epistemic uncertainty):假設你有一個單一數據點,想知道哪種線性模型是最適合數據的。但是沒有數據的話,我們根本無法判斷,所以需要更多數據!

認知不確定性是由於模型的參數不確定。我們不知道模型的哪個權重能最好地表現數據,但是數據越多,不確定性越低。這種類型的不確定性在數據較少的高風險應用中很重要。

再比如,你想搭建一個模型,要在一系列動物圖片中預測哪種動物會吃掉你。假設你在訓練時給模型提供的都是獅子和長頸鹿的照片,現在模型看到了一張殭屍照片。由於之前它沒有見過殭屍,所以這裡的不確定性就非常高。如果在訓練時能提供足夠的殭屍照片,那麼模型的不確定性會隨之減少。

數據不確定性,也被稱為「任意不確定性」:能夠捕捉觀察中的雜訊。有時環境本身是隨機的,收集更多數據並不會使不確定性降低,因為雜訊來源於數據本身。

為了了解這一點,讓我們回顧剛才的動物園模型。我們的模型能認出含有獅子的圖像,它也許會判斷你會被吃掉。但如果獅子此時此刻並不餓呢?這就是來源於數據的不確定性。另一個案例是兩條看起來一模一樣的蛇,一條有毒而另一條無毒。

數據不確定性可以分為兩種類別:

  • 同方差性不確定:對所有輸入來說,不確定性都是相同的;
  • 異方差性不確定:不確定性根據不同的輸入有不同差別。例如,對於一個可以預測圖像中物體深度的模型,一面牆就比一條漸漸消失的線不確定性要高。

測量不確定性:顧名思義,當測量方法充滿噪音時,不確定性就會增加。在上述動物的案例中,如果某些圖片拍攝的質量不好,就會損害模型的置信度。

雜訊標籤:在監督式學習下,我們用標籤訓練模型。如果標籤太嘈雜,不確定性將會增加。

以上就是幾種不確定性的類型,在這一系列的後續文章中,我們會詳細解釋。現在,讓我們假設有一個黑箱模型,此時針對預測結果出現了不確定,我們應該如何用它為模型糾錯呢?

這裡我們以自己的模型為例,該模型是預測用戶點擊某個推薦內容的概率,我們稱為CTR(Click Through Rate)。

利用不確定性進行debug

模型的嵌入向量表現出了很多分類特徵,模型可能很難學習特殊值的泛化嵌入。一種常見的解決方法是用一種特殊的辭彙表之外(OOV)的嵌入。

每篇推薦文章都有一個廣告主(advertiser),所有珍貴的廣告主都有同樣的OOV嵌入,所以,從模型的角度,他們實際上是一個廣告主。這個OOV廣告主有很多不同的項目,每個都有不同的CTR。如果我們只有廣告主作為CTR的預測器,那我們應該會得到OOV的高度不確定性。

為了驗證模型的輸出符合OOV的高度不確定性,我們用一個驗證集,將所有廣告主的嵌入轉化為OOV。之後,我們開始觀察轉化前後,不確定性有什麼變化。如此前預測的那樣,不確定性在變化之後增加。模型應該能學習到,當給予了信息廣告主,它應該減少不確定性。

我們可以對不同特徵重複這一過程,看它們的不確定性如何改變。

我們甚至可以做得更加精細:一些廣告主在不同的項目之間的CTR不同,而其他的項目幾乎有相同的CTR。我們希望模型能對前者有較高的不確定性。一種有效的分析是觀察不確定性和CTR之間的相關性。如果呈負相關,那就意味著模型無法學習不確定性和每個廣告主之間的關係。這一工具讓我們了解了,如果在訓練過程中或模型結構中有某一部分出了錯,我們可以怎樣解決它。

我們還可以進行相似的分析,看看如果不確定性與特殊項目連接,是否會減少更多。另外,我們希望模型對輸出的結果更加確定,如果不確定,我們會儘力修復模型!

另一個例子是題目特徵:含有不常見詞語的標題通常具有高不確定性。這是由於模型不經常看到這類詞語。我們可以在含有相似題目的驗證集中對模型進行驗證,估計模型對這些標題的不確定性是多少。然後重新用這些標題訓練模型,看看不確定性是否會下降:

結語

在很多領域中,不確定性是很重要的問題,更重要的是根據不同應用確定不確定性的種類,然後據此解決模型的問題。這篇文章我們討論了如何利用不確定性對模型進行debug,在下一篇文章中,我們會講解如何用不同方法從模型中獲得不確定性的估值。


推薦閱讀:

阿里AI Labs王剛:谷歌一個模型解決所有問題是不現實的
玉石密碼一:天體模型
國外紙模型設計師博客及主要作品介紹
藍牙安全模型之配對

TAG:模型 | 機器學習 | 神經網路 |