干货 | 深度学习的可解释性研究(一):让模型「说人话」
在這篇文章中:
- 可解釋性是什么?
- 我們為什么需要可解釋性?
- 有哪些可解釋性方法?
- 在建模之前的可解釋性方法
- 建立本身具備可解釋性的模型
- 在建模之后使用可解釋性性方法作出解釋
- 關于 BIGSCity
- 參考文獻
不以人類可以理解的方式給出的解釋都叫耍流氓,因此,我們要讓模型「說人話」。只要記住這三個字,你就差不多把握了可解釋性的精髓所在。
AI 科技評論按:本文為 BIGSCity 的知乎專欄內容,作者王小賤。北航智慧城市興趣組 BIGSCITY是隸屬于北京航空航天大學計算機學院的一個學術研究小組,小組致力于研究機器學習與數據挖掘在城市科學、社會科學等領域的交叉應用技術。AI 科技評論獲得 BIGSCity 授權轉載,敬請期待更多后續內容。
非常開心本文成為 BIGSCity 興趣組的第一篇投稿,《深度學習的可解釋性研究》系列預計包含 3-4 篇內容,用盡可能淺顯的語言帶領大家了解可解釋性的概念與方法以及關于深度學習可解釋性工作的研究成果,不定期更新內容(歡迎催更)。
可解釋性是什么?
廣義上的可解釋性指在我們需要了解或解決一件事情的時候,我們可以獲得我們所需要的足夠的可以理解的信息。比如我們在調試 bug 的時候,需要通過變量審查和日志信息定位到問題出在哪里。比如在科學研究中面臨一個新問題的研究時,我們需要查閱一些資料來了解這個新問題的基本概念和研究現狀,以獲得對研究方向的正確認識。反過來理解,如果在一些情境中我們無法得到相應的足夠的信息,那么這些事情對我們來說都是不可解釋的。比如劉慈欣的短篇《朝聞道》中霍金提出的「宇宙的目的是什么」這個問題一下子把無所不知的排險者卡住了,因為再高等的文明都沒辦法理解和掌握造物主創造宇宙時的全部信息,這些終極問題對我們來說永遠都是不可解釋的。
而具體到機器學習領域來說,以最用戶友好的決策樹模型為例,模型每作出一個決策都會通過一個決策序列來向我們展示模型的決策依據:比如男性&未婚&博士&禿頭的條件對應「不感興趣」這個決策,而且決策樹模型自帶的基于信息理論的篩選變量標準也有助于幫助我們理解在模型決策產生的過程中哪些變量起到了顯著的作用。所以在一定程度上,我們認為決策樹模型是一個具有比較好的可解釋性的模型,在以后的介紹中我們也會講到,以決策樹為代表的規則模型在可解釋性研究方面起到了非常關鍵的作用。再以用戶最不友好的多層神經網絡模型為例,模型產生決策的依據是什么呢?大概是以比如 1/(e^-(2*1/(e^(-(2*x+y))+1) + 3*1/(e^(-(8*x+5*y))+1))+1) 是否大于 0.5 為標準(這已經是最簡單的模型結構了),這一連串的非線性函數的疊加公式讓人難以直接理解神經網絡的「腦回路」,所以深度神經網絡習慣性被大家認為是黑箱模型。
17 年 ICML 的 Tutorial 中給出的一個關于可解釋性的定義是:
Interpretation is the process of giving explanations to Human.
總結一下就是「說人話」,「說人話」,「說人話」,不以人類可以理解的方式給出的解釋都叫耍流氓,記住這三個字,你就差不多把握了可解釋性的精髓所在。
我們為什么需要可解釋性?
廣義上來說我們對可解釋性的需求主要來源于對問題和任務了解得還不夠充分。具體到深度學習/機器學習領域,就像我們上文提到的多層神經網絡存在的問題,盡管高度的非線性賦予了多層神經網絡極高的模型表示能力,配合一些堪稱現代煉丹術的調參技術可以在很多問題上達到非常喜人的表現,大家如果經常關注 AI 的頭條新聞,那些機器學習和神經網絡不可思議的最新突破甚至經常會讓人產生 AI 馬上要取代人類的恐懼和幻覺。但正如近日貝葉斯網絡的創始人 Pearl 所指出的,「幾乎所有的深度學習突破性的本質上來說都只是些曲線擬合罷了」,他認為今天人工智能領域的技術水平只不過是上一代機器已有功能的增強版。雖然我們造出了準確度極高的機器,但最后只能得到一堆看上去毫無意義的模型參數和擬合度非常高的判定結果,但實際上模型本身也意味著知識,我們希望知道模型究竟從數據中學到了哪些知識(以人類可以理解的方式表達的)從而產生了最終的決策。從中是不是可以幫助我們發現一些潛在的關聯,比如我想基于深度學習模型開發一個幫助醫生判定病人風險的應用,除了最終的判定結果之外,我可能還需要了解模型產生這樣的判定是基于病人哪些因素的考慮。如果一個模型完全不可解釋,那么在很多領域的應用就會因為沒辦法給出更多可靠的信息而受到限制。這也是為什么在深度學習準確率這么高的情況下,仍然有一大部分人傾向于應用可解釋性高的傳統統計學模型的原因。
不可解釋同樣也意味著危險,事實上很多領域對深度學習模型應用的顧慮除了模型本身無法給出足夠的信息之外,也有或多或少關于安全性的考慮。比如,下面一個非常經典的關于對抗樣本的例子,對于一個 CNN 模型,在熊貓的圖片中添加了一些噪聲之后卻以 99.3% 的概率被判定為長臂猿。
在熊貓圖片中加入噪聲,模型以 99.3% 的概率將圖片識別為長臂猿
事實上其他一些可解釋性較好的模型面對的對抗樣本問題可能甚至比深度學習模型更多,但具備可解釋性的模型在面對這些問題的時候是可以對異常產生的原因進行追蹤和定位的,比如線性回歸模型中我們可以發現某個輸入參數過大/過小導致了最后判別失常。但深度學習模型很難說上面這兩幅圖到底是因為哪些區別導致了判定結果出現了如此大的偏差。盡管關于對抗樣本的研究最近也非常火熱,但依然缺乏具備可解釋性的關于這類問題的解釋。
當然很多學者對可解釋性的必要性也存有疑惑,在 NIPS 2017 會場上,曾進行了一場非常激烈火爆的主題為「可解釋性在機器學習中是否必要」的辯論,大家對可解釋性的呼聲還是非常高的。但人工智能三巨頭之一的 Yann LeCun 卻認為:人類大腦是非常有限的,我們沒有那么多腦容量去研究所有東西的可解釋性。有些東西是需要解釋的,比如法律,但大多數情況下,它們并沒有你想象中那么重要。比如世界上有那么多應用、網站,你每天用 Facebook、Google 的時候,你也沒想著要尋求它們背后的可解釋性。LeCun 也舉了一個例子:他多年前和一群經濟學家也做了一個模型來預測房價。第一個用的簡單的線性于猜測模型,經濟學家也能解釋清楚其中的原理;第二個用的是復雜的神經網絡,但效果比第一個好上不少。結果,這群經濟學家想要開公司做了。你說他們會選哪個?LeCun 表示,任何時候在這兩種里面選擇都會選效果好的。就像很多年里雖然我們不知道藥物里的成分但一直在用一樣。
但是不可否認的是,可解釋性始終是一個非常好的性質,如果我們能兼顧效率、準確度、說人話這三個方面,具備可解釋性模型將在很多應用場景中具有不可替代的優勢。
有哪些可解釋性方法?
我們之前也提到機器學習的目的是從數據中發現知識或解決問題,那么在這個過程中只要是能夠提供給我們關于數據或模型的可以理解的信息,有助于我們更充分地發現知識、理解和解決問題的方法,那么都可以歸類為可解釋性方法。如果按照可解釋性方法進行的過程進行劃分的話,大概可以劃分為三個大類:
1. 在建模之前的可解釋性方法
2. 建立本身具備可解釋性的模型
3. 在建模之后使用可解釋性方法對模型作出解釋
在建模之前的可解釋性方法
這一類方法其實主要涉及一些數據預處理或數據展示的方法。機器學習解決的是從數據中發現知識和規律的問題,如果我們對想要處理的數據特征所知甚少,指望對所要解決的問題本身有很好的理解是不現實的,在建模之前的可解釋性方法的關鍵在于幫助我們迅速而全面地了解數據分布的特征,從而幫助我們考慮在建模過程中可能面臨的問題并選擇一種最合理的模型來逼近問題所能達到的最優解。
數據可視化方法就是一類非常重要的建模前可解釋性方法。很多對數據挖掘稍微有些了解的人可能會認為數據可視化是數據挖掘工作的最后一步,大概就是通過設計一些好看又唬人的圖表或來展示你的分析挖掘成果。但大多數時候,我們在真正要研究一個數據問題之前,通過建立一系列方方面面的可視化方法來建立我們對數據的直觀理解是非常必須的,特別是當數據量非常大或者數據維度非常高的時候,比如一些時空高維數據,如果可以建立一些一些交互式的可視化方法將會極大地幫助我們從各個層次角度理解數據的分布,在這個方面我們實驗室也做過一些非常不錯的工作。
還有一類比較重要的方法是探索性質的數據分析,可以幫助我們更好地理解數據的分布情況。比如一種稱為 MMD-critic 方法中,可以幫助我們找到數據中一些具有代表性或者不具代表性的樣本。
使用 MMD-critic 從 Imagenet 數據集中學到的代表性樣本和非代表性樣本(以兩種狗為例)
建立本身具備可解釋性的模型
建立本身具備可解釋性的模型是我個人覺得是最關鍵的一類可解釋性方法,同樣也是一類要求和限定很高的方法,具備「說人話」能力的可解釋性模型大概可以分為以下幾種:
1. 基于規則的方法(Rule-based)
2. 基于單個特征的方法(Per-feature-based)
3. 基于實例的方法(Case-based)
4. 稀疏性方法(Sparsity)
5. 單調性方法(Monotonicity)
基于規則的方法比如我們提到的非常經典的決策樹模型。這類模型中任何的一個決策都可以對應到一個邏輯規則表示。但當規則表示過多或者原始的特征本身就不是特別好解釋的時候,基于規則的方法有時候也不太適用。
基于單個特征的方法主要是一些非常經典的線性模型,比如線性回歸、邏輯回歸、廣義線性回歸、廣義加性模型等,這類模型可以說是現在可解釋性最高的方法,可能學習機器學習或計算機相關專業的朋友會認為線性回歸是最基本最低級的模型,但如果大家學過計量經濟學,就會發現大半本書都在討論線性模型,包括經濟學及相關領域的論文其實大多數也都是使用線性回歸作為方法來進行研究。這種非常經典的模型全世界每秒都會被用到大概 800 多萬次。為什么大家這么青睞這個模型呢?除了模型的結構比較簡單之外,更重要的是線性回歸模型及其一些變種擁有非常 solid 的統計學基礎,統計學可以說是最看重可解釋性的一門學科了,上百年來無數數學家統計學家探討了在各種不同情況下的模型的參數估計、參數修正、假設檢驗、邊界條件等等問題,目的就是為了使得在各種不同情況下都能使模型具有有非常好的可解釋性,如果大家有時間有興趣的話,除了學習機器學習深度模型模型之外還可以盡量多了解一些統計學的知識,可能對一些問題會獲得完全不一樣的思考和理解。
基于實例的方法主要是通過一些代表性的樣本來解釋聚類/分類結果的方法。比如下圖所展示的貝葉斯實例模型(Bayesian Case Model,BCM),我們將樣本分成三個組團,可以分別找出每個組團中具有的代表性樣例和重要的子空間。比如對于下面第一類聚類來說,綠臉是具有代表性的樣本,而綠色、方塊是具有代表性的特征子空間。
使用 BCM 學到的分類及其對應的代表性樣本和代表性特征子空間
基于實例的方法的一些局限在于可能挑出來的樣本不具有代表性或者人們可能會有過度泛化的傾向。
基于稀疏性的方法主要是利用信息的稀疏性特質,將模型盡可能地簡化表示。比如如下圖的一種圖稀疏性的 LDA 方法,根據層次性的單詞信息形成了層次性的主題表達,這樣一些小的主題就可以被更泛化的主題所概括,從而可以使我們更容易理解特定主題所代表的含義。
Graph-based LDA 中的主題層次結構
基于單調性的方法:在很多機器學習問題中,有一些輸入和輸出之間存在正相關/負相關關系,如果在模型訓練中我們可以找出這種單調性的關系就可以讓模型具有更高的可解釋性。比如醫生對患特定疾病的概率的估計主要由一些跟該疾病相關聯的高風險因素決定,找出單調性關系就可以幫助我們識別這些高風險因素。
在建模之后使用可解釋性性方法作出解釋
建模后的可解釋性方法主要是針對具有黑箱性質的深度學習模型而言的,主要分為以下幾類的工作:
1. 隱層分析方法
2. 模擬/代理模型
3. 敏感性分析方法
這部分是我們接下來介紹和研究的重點,因此主要放在后續的文章中進行講解,在本篇中不作過多介紹。
除了對深度學習模型本身進行解釋的方法之外,也有一部分工作旨在建立本身具有可解釋性的深度學習模型,這和我們前面介紹通用的可解釋性模型有區別也有聯系,也放到以后的文章中進行介紹。
如果對本系列感興趣或有疑問,歡迎私信交流。
關于 BIGSCity
北航智慧城市興趣組 BIGSCITY 是隸屬于北京航空航天大學計算機學院的一個學術研究小組,小組致力于研究機器學習與數據挖掘在城市科學、社會科學等領域的交叉應用技術。BIGSCITY 的研究興趣包括:城市計算,時空數據挖掘,機器學習可解釋性,以及 AI 在交通、健康、金融等領域的應用等。本專欄將介紹 BIGSCITY 的一些研究成果,不定期更新與課題組研究相關的研究工作介紹,以及介紹與 BIGSCITY 相關的一切有趣的內容。
關于 BIGSCITY 的詳細情況參見研究組主頁:https://www.bigscity.com/
參考文獻
1. Google Brain, Interpretable Machine Learning: The fuss, the concrete and the questions.
2. Kim B, Koyejo O, Khanna R, et al. Examples are not enough, learn to criticize! Criticism for Interpretability[C]. neural information processing systems, 2016: 2280-2288.
3. Kim B, Rudin C, Shah J. The Bayesian Case Model: A Generative Approach for Case-Based Reasoning and Prototype Classification[J]. Computer Science, 2015, 3:1952-1960.
4. Doshi-Velez F, Wallace B C, Adams R. Graph-sparse LDA: a topic model with structured sparsity[J].
隨著深度神經網絡(DNN)變得越來越強大,它們的復雜性也會增加。這種復雜性帶來了新的挑戰,包括模型的可解釋性。
可解釋性對于構建更強大且能抵抗對抗攻擊的模型至關重要。此外,為一個新的,未經過深入研究的領域設計模型具有挑戰性,而能夠解釋模型正在做什么可以幫助我們完成這個過程。
模特可解釋性的重要性使研究人員開發出多種方法,并在去年的NIPS會議上專門討論了這個主題。這些方法包括:
- LIME:通過局部線性逼近解釋模型預測的方法(https://arxiv.org/abs/1602.04938)
- 激活最大化:了解哪種輸入模式產生最大的模型響應(https://pdfs.semanticscholar.org/65d9/94fb778a8d9e0f632659fb33a082949a50d3.pdf)
- 特征可視化:(https://distill.pub/2017/feature-visualization/)
- 將DNN層嵌入到低維可解釋的空間中:(http://www.interpretable-ml.org/nips2017workshop/papers/04.pdf)
- 采用認知心理學的方法:(https://deepmind.com/blog/cognitive-psychology/)
- 不確定性估計方法
在我們深入研究如何使用不確定性來調試和解釋模型之前,首先讓我們了解為什么不確定性很重要。
為什么要關心不確定性?
比較典型的例子是高風險應用。假設你正在建立一個模型,幫助醫生決定患者的首選治療方案。在這種情況下,我們不僅要關心模型的準確性,還要關注模型對預測的確定程度。如果不確定性太高,醫生應該將此考慮在內。
自駕車也是一個例子。當模型不確定道路上是否有行人時,我們可以使用此信息來減慢車速或觸發警報,以使駕駛員接手。
不確定性也可以幫助我們擺脫數據實例。如果模型沒有使用類似于手邊樣本的實例進行訓練,那么如果它能夠說“抱歉,我不知道”可能會更好。這可以避免谷歌在將非洲裔美國人誤認為大猩猩時這樣的尷尬錯誤。這種錯誤有時是由于訓練集不夠多樣化產生的。
最后一次使用不確定性(也是本文的目標),是從業者調試模型的工具。我們稍后會深入研究這個問題,但首先,讓我們談談不同類型的不確定性。
不確定性類型
有不同類型的不確定性和建模,每種都有用于不同的目的。
模型不確定性,AKA認知不確定性:假設有一個數據點,想知道哪種線性模型最能解釋您的數據。沒有好的方法可以在圖片中不同的線之間進行選擇 – 我們需要更多數據!
左側:沒有足夠的數據導致高度不確定性。右邊:給定更多數據不確定性降低
認知不確定性解釋模型參數的不確定性。我們不確定哪種模型權重最好地描述數據,但是給定更多數據我們的不確定性會降低。這種不確定性在高風險應用和處理小型稀疏數據時非常重要。
舉個例子,假設你想要建立一個能夠獲得動物圖片的模型,并預測該動物是否會嘗試吃掉你。假設你用獅子和長頸鹿的圖片訓練模型,現在它看到了一個僵尸。由于該模型沒有在僵尸圖片上進行過訓練,因此不確定性很高。這種不確定性就是模型的結果,如果給出僵尸圖片夠多,不確定性就會減少。
數據不確定性,或者說偶發不確定性捕獲觀察中固有的噪聲。有時世界本身就是隨機的。在這種情況下,獲取更多數據對我們沒有幫助,因為噪聲是數據固有的。
要理解這一點,讓我們繼續思考食肉動物模型。我們的模型可以識別圖像中有獅子,因此你可能會被吃掉。但是,如果獅子現在不餓了怎么辦?這種不確定性來自數據。另外,兩條看起來相同的蛇,但其中一條是可能有毒,另一條則沒有。
偶發不確定性分為兩種類型:
測量的不確定性:另一個不確定性來源是測量本身。當測量結果有噪聲時,不確定性會增加。在動物示例中,如果使用質量差的相機拍攝照片,則可能會損害模型的置信度;或者如果我們正逃離一只發狂的河馬,我們只能處理模糊的圖像。
有噪聲的標簽:通過監督學習,我們使用標簽來訓練模型。如果標簽有噪音,則不確定性會增加。
有各種方法來模擬每種不確定性。這些我以后會介紹。現在,讓我們假設我們有一個黑盒模型,它暴露了對預測的不確定性。我們如何使用它來調試模型?
讓我們思考Taboola中的一個模型,它被用于預測用戶點擊內容推薦的可能性,也稱為CTR(Click Through Rate)。
使用不確定性來調試模型
該模型具有許多由嵌入向量表示的分類特征。它可能難以學習稀有值的通用嵌入。解決此問題的常用方法是使用特殊的OOV(Out of Vocabulary)嵌入。
想想某個物品的廣告商。所有罕見的廣告商都共享相同的OOV嵌入,因此,從模型的角度來看,他們本質上就是一個廣告商。這個OOV廣告商有許多不同的商品,每個商品都有不同的CTR。如果我們僅使用廣告商作為CTR的預測,我們就會得到OOV的高不確定性。
為了驗證模型對OOV輸出的高不確定性,我們取一個驗證集,并轉換所有廣告商嵌入到OOV。接下來,我們檢查了轉換前后的不確定性。正如預期的那樣,不確定性增加了。該模型能夠了解到,如果給予信息豐富的廣告商,它應該減少不確定性。
我們可以針對不同的特征重復這一點,并尋找在被OOV嵌入替換時導致低不確定性的特征。這些特征要么是無信息性的,要么是我們將它們提供給模型的方式并不理想。
我們甚至可以繼續細分:某些廣告商在不同商品的CTR之間存在較高的可變性,而另一些則有大致相同的CTR。我們希望該模型對第一類廣告商具有更高的不確定性。因此,比較有用的分析是關注廣告商中不確定性和CTR變異性之間的相關性。如果相關性不是正的,則意味著模型未能了解與每個廣告商相關的不確定性。這個工具允許我們了解訓練過程或模型架構中是否出現問題,這表明我們應該進一步調試它。
我們可以執行類似的分析,看看與特定項目相關的不確定性是否會減少了更多的我們展示它的次數(即向更多用戶或更多地方顯示)。同樣,我們希望模型變得更加確定,如果不是 – 我們將進行調試!
另一個很酷的例子是標題特征:帶有罕見詞匯的獨特標題應該會帶來很高的模型不確定性。這是模型沒有從那個領域所有可能標題看到很多例子的結果。然后我們使用其中一種標題對模型進行再訓練,看看是否降低了整體的不確定性。然后我們將使用其中一個標題重新訓練模型,并查看整個組的不確定性是否已降低。我們可以看到發生了什么:
等一下……通過將模型暴露給某些標題,它能夠變得更好,對一些新標題更加確定。也許我們可以用它來某種方式鼓勵探索新的物品?是的,我們可以(我們后續會出)!
總結
以上是生活随笔為你收集整理的干货 | 深度学习的可解释性研究(一):让模型「说人话」的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python-接口开发入门
- 下一篇: 一键离线下载python安装包: