黑盒模型解析技術介紹(with LIME)
簡介
機器學習模型可解析性,一直是人工智慧行業發展的痛點,因為缺乏對複雜模型的可解析性,即使AI的正確率比人類頂尖水平還要高,也不能取代人類應用於醫療、駕駛等領域,如同阿喀琉斯之踵是不可能被掩蓋的缺點。
當然,模型可解析在學術界和工業界都要非常好和多的嘗試。對於簡單的LR模型,模型的權重在一定程度上可以表示特徵重要性,但考慮到目前各種特徵工程的奇技淫巧,高權重對應的特徵本身也不一定有人類可理解的解釋性。樹模型本身結構就是人類可理解的,無論是簡單的決策樹模型還是複雜的隨機森林或者GBDT,把樹結構的分裂特徵和分裂值畫出來一定程度上也可理解,只是樹的層級、數目增大後加上Boosting也不那麼好看。而目前最流行的神經網路模型內部“特徵表示”就更加複雜了,除了影象模型可以輸出每一層的啟用結構,大部分超參都是“實驗出真知”得到的,因此機器學習的建模和調參常被戲稱為21世紀的鍊金術。
近年又有多篇論文介紹模型可解析性的進展,而且是黑盒的模型可解析性,也就是說可解析性演算法適用於任何的機器學習模型結構,其中我比較關注的是LIME,因為論文中效果就很不錯。例如論文中的例子,通過構造醫生也可以理解的特徵,計算出sneeze、headache等特徵的重要性,就可以理解為什麼模型要輸出是否患有flu的預測結果。

而在影象方面,抽取一些區域性的畫素塊,還可以知道哪些畫素塊對不同預測結果的貢獻程度,下圖中模型對Guitar、Labrador都有預測值但啟用的圖片基本不同,從人類角度也大概可以理解模型的計算“原理”。

只從結果上看LIME實在強大,但從2016年釋出論文並且開原始碼後並沒有被廣泛應用,實際上無論是理論的特徵選擇以及工程的實現上都有很多的限制,本文就將從技術的角度來剖析LIME這種黑盒模型優化的實現原理。
LIME演算法介紹
首先LIME全稱是Local Interpretable Model-agnostic Explanations(模型無關的區域性可解析性演算法),論文地址是 ofollow,noindex"> https:// arxiv.org/pdf/1602.0493 8.pdf 。幾個關鍵詞需要理解一下,首先是Model-agnostic,也就是說這種解析演算法與模型本身無關,可用於樹模型、NN模型、結構化場景、NLP場景鄧恩。其次是Local Interpretable,我們理解機器學習訓練出來的模型代表的是整個資料集的“規律”,而這種演算法是針對區域性,也就是某個樣本級別,因此可以解析某個樣本的特徵重要性而不是用acc/auc等指標解析模型的整體指標,除此之外模型解析用的是人類可理解的特徵而不是模型訓練用到的複雜組合特徵。總結一下,LIME就是通過某種演算法可以計算出任意樣本的可解析特徵的重要性,從而達到模型可解析的效果。那麼“某種演算法”是怎麼做到的呢,先看下面的通俗介紹,然後看論文虛擬碼,再看程式碼實現介紹(本章節可反覆閱讀)。
首先,我們通過正常流程來訓練模型,模型(記作 )可以是LR、NN、Wide and deep、C4.5 Decision tree、Random forest、GBDT等任意模型,也就是前面Model-agnostic就是指這個模型。訓練結束後我們需要解析模型,先選擇一個待解析的樣本,樣本通過模型計算可以得到一個prediction(包含預測的label以及預測為1的probability),這時我們在這個樣本的附近選擇新的樣本並用模型計算出多個prediction,這樣樣本組合新的樣本集,然後使用新的可解析的特徵和prediction作為label來訓練新的簡單模型(例如LR),然後使用簡單模型的權重作為這些特徵的重要性作為輸出。用普通人都可以理解的話來說,就是選擇一個樣本以及樣本附近的點,然後訓練一個簡單模型來擬合,雖然簡單模型不能在完整資料集上有效,但至少在這個點附近都是有效的,這個簡單模型的特徵是人類可解析的,而訓練出的權重也可以表示特徵重要性。
然後,我們可以論文中更嚴謹的演算法描述。

公式中使用的符號要翻譯下,Classifier 表示要解釋的複雜模型,也就是Model-agnostic的模型(可以是DNN等),後面簡稱為複雜模型。 表示樣本點附近的樣本數,這些樣本在論文中稱為perturbed sample,例如我們要判斷為什麼模型認為“巨硬是個好公司”是個positive語句,那麼可以在這個樣本附近生成類似的樣本,如“巨硬是個公司”、“是個好公司”、“好公司巨硬”等樣本,從中發現“好”是一個重要性最大的特徵。然後 就是待解析的樣本,如前面例子中的“巨硬是個公司”。由於訓練複雜模型時不可能會對“巨硬是個公司”進行特徵變換,例如用word2vec生成向量特徵,這些向量即使知道特徵重要性也是無法解析的,因此我們用新的bag of words特徵來訓練後面的模型,這些新的可解析特徵就是
。第三行
是一個Similarity kernel,其實就是生成的這些樣本與原樣本的“距離”,對於文字的bag of words特徵就可以用cosine distance,圖片就可以是L2 distance,後面訓練簡單模型考慮與原樣本距離越近權重越大(也就是影響力越大)。
則表示需要解析的新的特徵個數,因為需要人看所以不建議設定太大。
演算法流程並不難理解,首先是遍歷N次生成N個新的樣本,這些樣本與待解析的樣本距離不遠,可以算出各自的具體作為權重,可以通過複雜模型算出probability作為label,並且加入到樣本集合中。然後使用Lasso演算法訓練一個簡單模型,從LIME開源的程式碼來看這個簡單模型就是用的嶺迴歸,就是加上正則的線性迴歸,那麼就可以輸出權重 裡。這裡需要強調的是,前面也提到一次權重,就是每個perturbed sample都會有一個與待解析樣本的“距離”,這個“距離”會作為樣本權重放到嶺迴歸的模型裡面訓練,而嶺迴歸模型返回的
可以叫做特徵權重,代表的是這些可解析特徵的特徵重要性。簡單模型訓練的樣本是perturbed sample,特徵是人類可理解的新特徵(如bag of words),label是複雜模型在這個樣本下的prediction,因此可以訓練一個簡單的嶺迴歸模型,其中每個特徵對應的權重就是LIME打印出來的“特徵重要性”了。

如果對LIME演算法還有疑惑,推薦閱讀這邊文章,對照LIME開源的Python程式碼進行學習 LIME:模型預測結果是否值得信任? - hero_fantao的專欄 - CSDN部落格 。
總結
最後總結一下,LIME是一個很好的模型無關的特徵解析演算法,原理也是很簡單,找待解析的樣本附近的找更多的樣本,訓練一個簡單的模型,通過簡單模型的權重來解析特徵重要性。但是這裡面有一個很重要的前提,就是簡單模型必須有“能力”來區分附近區域的正負樣本,論文中也提到了下圖中雖然簡單模型(線性嶺迴歸)不是全域性有效但區域性有效,當然他們也通過實驗證明目前的簡單模型是有效的,後期也會考慮使用表現能力更強的“簡單模型”。

除此之外,由於在訓練“複雜模型”時使用的時各種奇技淫巧組合的“複雜特徵”,在模型解析時還需要設計新的可解析特徵,對於影象、NLP還有結構化資料都有特別的處理,因此LIME還不適用於任意的模型解析,使用起來也有一定的複雜度。
通過本文的介紹,希望大家對LIME等黑盒模型解析技術有一定的瞭解,通過樸素的Local、Interpretable、Model-agnostic組合可以得到一個模型解析的框架,也希望大家思考通過拓展對於“可解析特徵”重要性的描述來實現更多有用的模型解析演算法。