1. 程式人生 > >解釋機器學習模型的一些方法(三)——理解復雜的機器學習模型

解釋機器學習模型的一些方法(三)——理解復雜的機器學習模型

p s 結果 origin 得出 驗證 場景 這樣的 機器 發的

在這一部分中我們所要展現的技術,可以為非線性、非單調的響應函數生成解釋。我們可以把它們與前兩部分提到的技巧結合起來,增加所有種類模型的可解釋性。實踐者很可能需要使用下列增強解釋性技巧中的一種以上,為他們手中最復雜的模型生成令人滿意的解釋性描述。

代理模型

技術分享圖片

圖14. 為了解釋復雜神經網絡而使用代理模型的示意圖

代理模型是一種用於解釋復雜模型的簡單模型。最常見的建立方法是,對原始輸入和復雜模型給出的預測值建立簡單線性回歸或者決策樹模型。代理模型中所展示的系數、變量重要性、趨勢以及交互作用,是復雜模型內部機制的一種體現。不過,幾乎沒有理論依據能夠保證簡單的代理模型能夠以高精度表達出更復雜的模型。

代理模型適用於何種尺度的可解釋性?

一般而言,代理模型是全局性的。一個簡單模型的全局可解釋特性會用於解釋一個更復雜模型的全局特性。不過,我們也無法排除代理模型對復雜模型條件分布的局部擬合能力,例如先聚類,再用自變量擬合預測值、擬合預測值的分位點、判斷樣本點屬於哪一類等等,能夠體現局部解釋性。因為條件分布的一小段傾向於是線性的、單調的,或者至少有較好的模式,局部代理模型的預測精度往往比全局代理模型的表現更好。模型無關的局部可解釋性描述(我們會在下一小節介紹)是一種規範化的局部代理模型建模方法。當然,我們可以把全局代理模型和局部代理模型一起使用,來同時獲得全局和局部的解釋性。

代理模型能夠幫助我們解釋何種復雜程度的響應函數?

代理模型能夠有助於解釋任何復雜程度的機器學習模型,不過可能它們最有助於解釋非線性、非單調的模型。

代理模型如何幫我們提高對數據的理解?

代理模型可以針對復雜模型的內部機制向我們提供一些洞見,因此能提高我們對數據的理解。

代理模型如何讓模型更可信賴?

當代理模型的系數、變量重要性、趨勢效應和交叉效應都符合人類的領域知識,被建模的數據模式符合合理預期時,模型的可信度會得以提升。當數據中存在輕微的或者人為的擾動時,或者數據來自於我們感興趣領域的數據模擬,又或者數據隨著時間改變時,如果結合敏感性分析進行檢驗發現,對於模型的解釋是穩定的,並且貼合人類領域經驗,符合合理預期,那麽模型的可信度會得以提升。

模型無關的局部可解釋性描述(Local Interpretable Model-agnostic Explanation, LIME)

技術分享圖片

圖15. 對LIME流程的一個描述,其中使用了加權線性模型幫助我們解釋一個復雜的神經網絡是如何做出某個預測的

LIME是圍繞單個樣本建立局部代理模型的一種方法。它的主旨在於厘清對於特定的幾個樣本,分類器是如何工作的。LIME需要找到、模擬或者產生一組可解釋的樣本集。使用這組已經被詳細研究過的樣本,我們能夠解釋機器學習算法得到的分類器是如何對那些沒有被仔細研究過的樣本進行分類的。一個LIME的實現可以遵循如下流程:首先,使用模型對這組可解釋的數據集進行打分;其次,當模型對另外的數據進行分類時,使用解釋性數據集與另外的數據點的距離進行加權,以加權後的解釋性數據集作為自變量做L1正則化線性回歸。這個線性模型的參數可以用來解釋,另外的數據是如何被分類/預測的。

LIME方法一開始是針對圖像、文本分類任務提出的,當然它也適用於商業數據或者客戶數據的分析,比如對預測客戶群違約或者流失概率的百分位點進行解釋,或者對已知的成熟細分市場中的代表性客戶行為進行解釋,等等。LIME有多種實現,我最常見的兩個,一個是LIME的原作者的實現,一個是實現了很多機器學習解釋工具的eli5包。

LIME提供的可解釋性的尺度如何?

LIME是一種提供局部可解釋性的技術。

LIME能幫助我們解釋何種復雜程度的響應函數?

LIME有助於解釋各種復雜程度的機器學習模型,不過它可能最適合解釋非線性、非單調的模型。

LIME如何幫我們提高對模型的理解?

LIME提供了我們對重要變量的洞察力,厘清這些變量對特定重要樣本點的影響以及呈現出的線性趨勢。對極端復雜的響應函數更是如此。

LIME如何讓模型更加可信?

當LIME發現的重要變量及其對重要觀測點的影響貼合人類已有的領域知識,或者模型中體現的數據模式符合人類的預期時,我們對模型的信心會得到增強。結合下文將會提到的最大激發分析,當我們能明顯地看到,相似的數據被相似的內部機制處理,全然不同的數據被不同的內部機制處理,在對多個不同的樣本使用不同處理方式上,能夠保持一貫性。同時,在數據存在輕微擾動時,數據是由我們感興趣的場景模擬得出時,或者數據隨時間改變時,LIME可以被視為是敏感性分析的一種,幫助我們檢查模型是否依然能夠保持穩定,是否依然貼合人類的領域知識,以及數據模式是否依然符合預期。

最大激發分析

技術分享圖片

圖16. 不同輸入數據激發神經網絡中不同神經元的示意圖

在最大激發分析中,可以找到或者模擬出這樣的例子,它們總是會對特定的神經元、網絡層、濾波器(filter)、決策樹集成模型中的某棵樹進行大量激發。像第二部分所提到的單調性約束一樣,最大激發分析在實戰中,是一種很常見的與模型相關的解釋性分析技術。

對於特定的一組樣本或者一類相似的樣本,觀察它們能夠對響應函數的哪一部分進行最大程度的激發(對於神經元而言是激發強度最大,對於樹模型而言是殘差最低,二者都可以算最大激發),這種最大分析厘清了復雜模型的內部工作機制。同時,如果不同類型的樣本持續激發模型中相同的部分,那麽這種分析也可以發現交叉效應。

圖16描繪了一種比較理想化的情況:一個好的客戶和一個欺詐型客戶分別以高強度激發了兩組不同的神經元。紅圈表示兩類輸入數據所激發的強度排名前三的神經元。對於這兩類數據而言,最大激發的神經元不同,表示著對於不同類型的樣本,神經網絡的內部結構會以不同的方式對其進行處理。如果對很多不同子類型的好客戶和欺詐型客戶而言這種模式依然存在,那麽這就是一種很強烈的信號,意味著模型內部結構是穩定的、可靠的。

最大激發分析適用於哪種尺度的可解釋性?

最大激發分析在尺度上是局部性的,因為它刻畫了一個復雜響應函數的不同部分是如何處理特定的一個或者一組觀測樣本的。

最大激發分析能夠幫助我們解釋何種復雜程度的響應函數?

最大激發分析能夠解釋任意復雜的響應函數,不過它可能最適合於解釋非線性、非單調的模型。

最大激發分析如何讓我們更好的理解數據和模型?

最大激發函數通過像我們展示復雜模型的內部結構,提高我們對數據、模型的理解。

最大激發分析如何讓模型變的更加可信?

上文討論過的LIME有助於解釋在一個模型中對條件分布的局部進行建模並預測。最大激發分析可以強化我們對模型局部內在機制的信心。二者的組合可以為復雜的響應函數建立詳細的局部解釋,它們是很棒的搭配。使用最大激發分析,當我們能明顯地看到,相似的數據被相似的內部機制處理,全然不同的數據被不同的內部機制處理,對多個不同的樣本使用不同處理方式這一點保持一貫性,模型中發現的交互作用貼合人類已有的領域知識,或者符合人類的預期,甚至把最大激發分析當做一種敏感性分析來用,以上的種種都會讓我們對模型的信心得以提高。同時,在數據存在輕微擾動時,數據是由我們感興趣的場景模擬得出時,或者數據隨時間改變時,最大激發分析可以幫我們檢查模型對於樣本的處理是否依然保持穩定。

敏感性分析

技術分享圖片

圖17. 一個變量的分布隨著時間而改變的示意圖

敏感性分析考察的是這樣一種特性:給數據加上人為的擾動,或者加上模擬出的變化時,模型的行為以及預測結果是否仍然保持穩定。在傳統模型評估以外,對機器學習模型預測進行敏感性分析可能是最有力的機器學習模型驗證技術。微小地改變變量的輸入值,機器學習模型可能會給出全然不同的預測結論。在實戰中,因為自變量之間、因變量與自變量之間都存在相關性,有不少線性模型的驗證技巧是針對回歸系數的數值穩定性的。 對從線性建模技術轉向機器學習建模技術的人而言,少關註一些模型參數數值不穩定性的情況,多關心一些模型預測的不穩定性,這種做法可能還算是比較謹慎。

如果我們能針對有趣的情況或者已知的極端情況做一些數據模擬,敏感性分析也可以基於這些數據對模型的行為以及預測結果做一些驗證。在整篇文章中提及或者不曾提及的不少技巧,都可以用來進行敏感性分析。預測的分布、錯誤比率度量、圖標、解釋性技巧,這些方法都可以用來檢查模型在處理重要場景中的數據時表現如何,表現如何隨著時間變化,以及在數據包含人為損壞的時候模型是否還能保持穩定。

敏感性分析適用於什麽尺度的可解釋性?

敏感性分析可以是一種全局性的解釋技術。當使用單個的像代理模型這種全局性解釋技術時,使用敏感性分析可以保證,就算數據中存在輕微擾動或者有人為造成的數據缺失,代理模型中所存在的主要交叉效應依然穩定存在。

敏感性分析也可以是一種局部性的解釋技術。例如,當使用LIME這種局部性解釋技術時,它可以判斷在宏觀經濟承壓的條件下,為某個細分市場的客戶進行授信時,模型中使用的重要變量是否依然重要。

敏感性分析能夠幫我們解釋何種復雜程度的響應函數?

敏感性分析可以解釋任何復雜程度的響應函數。不過它可能最適合於解釋非線性的,或者表征高階變量交叉特征的響應函數。在這兩種情況下,對自變量輸入值的輕微改變都可能引起預測值的大幅變動。

敏感性分析如何幫助我們更好的理解模型?

敏感性分析通過向我們展現在重要的場景下,模型及其預測值傾向於如何表現,以及這種表現隨時間會如何變化。因此敏感性分析可以加強我們對模型的理解。

敏感性分析如何提高模型的可信可信度?

如果在數據輕微改變或者故意受損時,模型的表現以及預測輸出仍然能表現穩定,那麽穩定性分析就可以提高我們對模型的信任。除此以外,如果數據場景受到外來影響,或者數據模式隨時間發生變化時,模型仍然能夠符合人類的領域知識或者預期的話,模型的可信度也會上升。

變量重要性的度量

對於非線性、非單調的響應函數,為了量化衡量模型中自變量和因變量的關系,往往只能度量變量重要性這一種方法可以選。變量重要性度量難以說明自變量大概是往哪個方向影響因變量的。這種方法只能說明,一個自變量跟其他自變量相比,對模型影響的相對強弱。

變量重要性的全局度量

技術分享圖片

圖18. 在決策樹集成模型中,對變量重要性的描繪

在基於樹的模型中使用變量重要性度量是一種常見做法。如圖18所示,一種拍腦袋的變量重要性規則是,同時考慮樹模型中一個變量用於分叉的所在深度和出現的頻率:自變量所在分叉位置越高(譯者註:在越淺的層數出現),或者自變量在樹中出現的頻率越高,那麽它就越重要。對於單棵決策樹來說,每次這個自變量在某個節點成為最佳分叉使用的變量時,把對應的分支準則(Splitting Criterion)收益累加起來,就可以量化地判斷這個變量究竟有多重要。對於梯度提升樹的集成(譯者註:Gradient boosted tree ensemble, 往往也稱作GBDT)而言,可以先對單棵樹計算變量重要性,然後再做聚合加總;我們還有一種額外的度量,如果把單個自變量排除掉之後導致了模型精度的降低,那麽這個精度差異可以代表自變量在模型中有多重要(Shuffling,洗牌法可以視作考察排除一個/一部分變量的效應,因為其他變量並沒有被洗掉)。對於神經網絡而言,對我們感興趣的特定自變量的重要性度量,一般來說是它所對應的模型參數絕對值的加總。全局性的變量重要性度量技術往往因模型而異,實踐者們要特別註意,變量重要性的簡單度量可能會偏向於那些取值範圍較大,包含類別數目較多的那些變量。

去除某一自變量的分析法(Leave-One-Covariate-Out, LOCO)

技術分享圖片

圖19. LOCO方法的示意圖

最近某篇文章的預印版本給出一種局部性的、模型無關的、通過模型平均精度下降的方式來考察變量重要性的度量,稱為『去除某一自變量的分析法』(Leave-One-Covariate-Out),簡稱LOCO。最開始LOCO是用於回歸模型的,不過LOCO的大體思想是無關於模型的,而且可以有多重不同的實現。可以按照如下流程實現LOCO:對訓練集或驗證集中的每一行以及每一個變量(自變量)進行局部性的重要性評分。在此之外,每一個變量被設置為缺失值、零值、平均值或者其他值域中的值,來把它在預測時起到的效果消除掉。對預測精度有最大絕對影響的自變量就是對那一行預測時的最重要變量,同時,可以對每一行中所有變量對預測的影響大小進行排序。LOCO還能為每一個變量計算它們對整個數據集精度的平均影響,給出全局性的變量重要性度量,甚至還能給出這些全局變量重要性度量的置信區間。

變量重要性度量適用於哪種尺度的可解釋性?

一般來說變量重要性度量方法提供的解釋性是全局的;不過LOCO方法可以為數據集中的每一行或者新來的數據提供局部的變量重要性度量。

變量重要性度量能夠幫我們解釋何種復雜程度的響應函數?

變量重要性度量對於非線性、非單調的響應函數而言是最有效的;不過它們可以廣泛應用於各種機器學習習得的響應函數上。

變量重要性度量如何幫我們更好的理解模型?

變量重要性度量讓我們對模型中最具影響力的變量及其影響力順序有所了解,因而提高了我們對模型的理解。

變量重要性度量如何讓模型更加可信?

如果變量重要性度量的結果能夠貼合人類領域知識、符合人類預期,在數據存在輕微擾動或人為幹擾的情況下仍然保持穩定,在數據隨時間變化或者經由模擬得到時變動幅度可以接受的話,那麽它就能夠讓模型更加值得采信。

決策樹模型解釋器

技術分享圖片

圖20. 單棵決策樹中,對於某一樣本點的預測,以高亮的決策路徑顯示

幾種『平均樹』的解釋方法已經提出了幾年了,不過名為『決策樹模型解釋器』的簡單開源工具最近幾個月才開始流行起來。決策樹模型解釋器把決策樹、隨機森林給出的預測進行分解,表示成為全局平均值(bias)和各個自變量帶來的貢獻之和。決策樹模型解釋器是專門為決策樹設計的算法。圖20顯示了如何將決策樹中的決策路徑分解成為全局平均值以及各個自變量的貢獻。圖中給出了某個特定的樣本的決策路徑(決策樹模型不僅可以輸出模型中的平均值和自變量的貢獻值,也能輸出對於某個樣本而言的平均值以及自變量的貢獻值)eli5包中也有一個決策樹解釋器的實現。

決策樹解釋器適用於哪種尺度的模型可解釋性?

當決策樹解釋器給出在整棵決策樹或者整個隨機森林中各個自變量的平均貢獻時,它的解釋性就是全局的。當它用於解釋某些特定的預測時,它的解釋性就是局部的。

決策樹解釋器能夠解釋何種復雜程度的響應函數?

決策樹解釋器往往是用於解釋由決策樹、隨機森林模型構建的非線性、非單調響應函數的。

決策樹解釋器如何提高我們對於模型的理解?

對於決策樹以及隨機森林模型中的自變量,決策樹解釋器通過展示它們平均的貢獻,並對它們進行排序,來增進我們對模型的理解。

決策樹解釋器如何讓模型變得更加可信?

如果決策樹解釋器所展現的結果能夠貼合人類領域知識、符合人類預期,在數據存在輕微擾動或人為幹擾的情況下仍然保持穩定,在數據隨時間變化或者經由模擬得到時變動幅度可以接受的話,那麽它就能夠讓模型更加值得采信。

結語

在最近幾個月裏,當我的朋友和同事們聽說我要寫這篇文章後,他們用郵件、短信、推特、Slack提醒我這方面新工作的速度簡直是有增無減。現在,我很可能一天要看兩個新的算法庫、算法或者論文,我幾乎不可能跟上這樣一種節奏,把這些東西一股腦塞進這篇綜述性的文章中。實際上,這篇文檔總要有個盡頭,必須要在某個地方戛然而止。所以我們就在這裏停下吧!我相信,為了讓理解機器學習的可解釋性更上一層樓,這篇文章提供了有效的總結,把這些解釋性技巧從四個標準上進行分類:它們的尺度(局部性的,或者全局性的),它們所能解釋響應函數的復雜程度,它們的應用領域(跟特定模型相關,或者跟特定模型無關),以及它們如何能夠更易於理解、更容易受信任。同時,我相信,這篇文章涵蓋了主流類型的技巧,尤其是那些領域應用型的或者是商業應用型的技巧。如果我有更充裕的時間能夠無止盡的向本文添磚加瓦的話,我想要馬上給讀者展現的是兩個課題:一個課題是RuleFit(譯者註:基於規則的集成模型工具,RuleFit3是R語言中的一個包),另一個課題則是讓深度學習更具可解釋性的諸多工作,比如論文『學習深度k近鄰表達』即是其中之一。針對這兩個課題我自己當然是要深入鉆研下去的。

如此多的新進展紛至沓來,對於在這個課題(即機器學習可解釋性)上做研究的人而言,這是個令人激動的時代。我希望你們能夠在這篇文章中發現有用的信息。因為這個領域可以把機器學習和人工智能以更有效、更透明的方式傳達給用戶和客戶,我希望那些跟我處於統一領域的工作者們能夠像我一樣,受到這些具有光明未來的革命性技術的鼓舞。

解釋機器學習模型的一些方法(三)——理解復雜的機器學習模型