back to index
【機器學習2021】機器學習模型的可解釋性 (Explainable ML) (下) –機器心中的貓長什麼樣子?

link |
好,那我們來上課啦。那我們接下來呢,要講Global的Explanation。
link |
那Global的Explanation是什麼意思呢?我們在前一堂課講的是Local的Explanation,也就是給機器一張照片,
link |
那它告訴我們說,看到這張圖片,它為什麼覺得裡面有一隻貓。
link |
而Global的Explanation並不是針對特定某一張照片來進行分析,而是把我們訓練好的那個模型拿出來,
link |
根據這個模型裡面的參數,去檢查說,對這個Network而言,到底一隻貓長什麼樣子?
link |
對一個Network而言,它心理想像的貓長什麼樣子?
link |
好,舉例來說,假設你今天Train好一個Convolutional的Neural Network,Train好在這邊,
link |
那你知道在Convolutional的Neural Network裡面呢,就是有很多的Filter,有很多的這個Convolutional Layer,
link |
Convolutional Layer裡面呢,有一堆的Filter,那你把一張圖片作為輸入,Convolutional Layer它的輸出是什麼呢?
link |
它的輸出是一個Feature Map,那每一個Filter都會給我們一個Matrix。
link |
那今天呢,假設我們有一張圖片,作為這個Convolutional Neural Network的輸入這張圖片,
link |
我們用一個大寫的X來表示,因為圖片呢,通常是一個矩陣,我們用大寫的X來表示這個圖片所構成的矩陣。
link |
而如果把這張圖片丟進去,你發現某一個Filter,比如說Filter1,
link |
它在它的Feature Map裡面呢,很多位置都有比較大的值,那意味著什麼?
link |
那可能就是意味著說,這個ImageX裡面有很多Filter1負責偵測的那些特徵,
link |
這個Image裡面呢,有很多的Pattern是Filter1負責偵測的,那Filter1看到這些Pattern,
link |
所以它在它的Feature Map上就Output比較大的值。
link |
好,但是現在啊,我們要做的是Global的Explanation,也就是我們還沒有這張圖片ImageX,
link |
我們沒有要針對任何一張特定的圖片做分析,但是我們現在想要知道說,
link |
對Filter1而言,它想要看的Pattern到底長什麼樣子?
link |
那怎麼做呢?我們就去製造出一張圖片,它不是我們的Database裡面任何一個特定的圖片,
link |
而是機器自己去找出來的,自己創造出來的。
link |
我們要創造一張圖片,這張圖片它包含有Filter1要Detect的Pattern,
link |
那藉由看這張圖片裡面的內容,我們就可以知道Filter1它負責Detect什麼樣的東西。
link |
那怎麼找這張圖片呢?我們假設Filter1的這個FeatureMap裡面的每一個Element叫做Aij,
link |
就是Filter1的那個FeatureMap是一個矩陣,那矩陣裡面每一個Element我們用Aij來表示。
link |
那我們現在要做的事情是找一張圖片X,這張圖片不是Database裡面的圖片,
link |
而是我們把這個X當作一個Unknown Variable,當作我們要訓練的那個參數。
link |
我們去找一張圖片,這張圖片丟到這個Filter以後,通過Convolutional Layer以後,
link |
輸出這個FeatureMap以後,Filter1對應的FeatureMap裡面的值,也就是Aij的值越大越好。
link |
所以我們要找一個X,讓Aij的總和,也就是Filter1的FeatureMap的Output,它的值越大越好。
link |
那我們找出來的這個X,我們就用X star來表示。
link |
它不是Database裡面任何一張特定的圖片,我們是把X當作Unknown的Variable,
link |
當作要Learn的參數,去找出這個X star,X star丟到這個已經Trained好的Network裡面,
link |
這個Network的Convolutional Layer,它輸出的這些Feature,它的值,它輸出的這個FeatureMap裡面的值,會越大越好。
link |
那怎麼解這個問題呢?你會用類似Gradient Descent的方法,
link |
只是因為我們現在是要去Maximize某一個東西,所以它不是Gradient Descent,它是Gradient Ascent,
link |
不過它的原理跟Gradient Descent是一模一樣的。
link |
好,那我找出這個X star以後,我們就可以去觀察這個X star,那看看X star有什麼樣的特徵,
link |
我們就可以知道說,X star它可以Maximize這個FeatureMap的Value,
link |
也就是這個Filter1,它在Detect什麼樣的Pattern。
link |
好,那這邊是一個實際操作的結果了,我們就用這個At least,
link |
At least是一個手寫數字辨識的Compass,用At leastTrain出一個Classifier,
link |
給它一張圖片,它會判斷說這張圖片裡面是1到9的哪一個數字。
link |
訓練好這個數字的Classifier以後呢,
link |
我們就把它的第二層的Convolutional Layer裡面的Filter拿出來,
link |
然後找出每一個Filter對應的X star,所以下面這邊每一張圖片就是一個X star,
link |
然後每一張圖片都對應到一個Filter。
link |
那所以你可以想像說這個第一張圖片就是Filter1它想要Detect的Pattern,
link |
第二張圖片就是Filter2想要Detect的Pattern,以此類推,那這邊是畫了12個Filter出來。
link |
好,那從這些Pattern裡面,我們可以發現什麼呢?
link |
我們可以發現說這個第二層的Convolution,它想要做的事情確實是去偵測一些基本的Pattern,
link |
你可以看說這個Filter它想偵測什麼Pattern?它想偵測橫線。
link |
這個Filter它想偵測什麼Pattern?它想偵測斜直線等等。
link |
這個Filter它想要偵測什麼Pattern?它想要偵測直線。
link |
每一個Filter都有它想要偵測的Pattern。
link |
那因為我們現在是在做手寫的數字辨識,那你知道數字就是由一堆筆畫所構成的,
link |
所以Convolution Layer裡面的每一個Filter它的工作就是去偵測某一個筆畫,這件事情是非常合理的。
link |
好,那接下來你可能就會去想說,那假設我們不是看某一個Filter,而是去看最終這個ImageClassifier的Output,那可不可以呢?
link |
如果我們今天是去看這個ImageClassifier,這個Digit Classifier的Output,我們想辦法去找一張圖片X,
link |
這個X可以讓某一個類別的分數越高越好,因為我們現在做的是這個數字辨識,
link |
所以這個Y總共就會有10個值,分別對應到0到9,那我們就選某一個數字出來,
link |
比如說你選數字1出來,然後你希望找一張圖片,這張圖片丟到這個Classifier以後,數字1的分數越高越好。
link |
那如果你用這個方法,你可以看到什麼樣的東西呢?你可以看到數字0到9嗎?
link |
你實際上做一下以後發現,沒有辦法,你看到的結果大概就像是這個樣子。
link |
就這張X,這張圖片,它可以讓這個ImageClassifier覺得看到數字0的分數最高,
link |
這張圖片可以讓你的Classifier覺得看到1的分數最高,2的分數最高,3的分數最高,以此類推。
link |
你會發現說你觀察到的其實就是一堆雜訊,你根本沒有辦法看到數字。
link |
那這個結果,假設我們還沒有教Adversarial Attack,你可能會覺得,嗯,好神奇,怎麼會這個樣子?
link |
機器看到一堆是雜訊的東西,它以為它看到數字嗎?怎麼會這麼愚蠢?
link |
但是因為我們已經教過Adversarial Attack了,所以想必你其實不會太震驚,
link |
因為我們在做Adversarial Attack的時候,我們就已經告訴你說在Image上面加上一些人眼根本看不到的奇奇怪怪的雜訊,
link |
那所以這邊也是一樣的道理,對機器來說,它不需要看到真的很像0那個數字的圖片,
link |
它才說它看到數字0,你給它一些亂七八糟的雜訊,它也說看到數字0,而且它的信心分數是非常高的。
link |
那所以其實如果你用這個方法,用這種找一個圖片讓Image的輸出對應到某一個類別的輸出越大越好這種方法,
link |
你想要用這個方法來看到這個機器心理想像的某一個object長什麼樣子,其實不一定有那麼容易。
link |
那像今天這個例子,今天這個手寫數字辨識的例子,你單純只是說我要找一張Image對應到某一個數字的信心分數越高越好,
link |
你單純只做這件事情,你找到的只會是一堆雜訊。
link |
怎麼辦呢?假設我們希望我們今天看到的是比較像是人想像的數字,應該要怎麼辦呢?
link |
你在解這個optimization的問題的時候,你要加上更多的限制。
link |
舉例來說,我們先對這個數字已經有一些想像,我們已經知道數字可能是長什麼樣子,
link |
我們可以把我們要的這個限制加到這個optimization的過程裡面。
link |
舉例來說,我們現在不是要找一個x讓yi的分數最大,而是要找一個x同時讓yi還有Rx的分數都越大越好。
link |
那這個Rx是什麼意思呢?這個Rx是要拿來衡量說這個x有多麼像是一個數字。
link |
舉例來說,今天數字就是由筆畫所構成的,所以一個數字它在整張圖片裡面,它有顏色的地方其實也沒那麼多。
link |
一個圖片很大嘛,那個筆畫就是幾畫而已嘛,所以在整張圖片裡面有顏色的地方沒有那麼多。
link |
所以我們可以把這件事情當作一個限制,硬是塞到我們找x的這個過程中,硬是塞到我們找x的這個最佳化optimization的過程中。
link |
那期望藉此我們找出來的x就會比較像是數字。
link |
那如果加上一些額外的限制以後,舉例來說,我們希望這個白色的點越少越好。
link |
在這個constraint,它的意思就是希望這個白色的點越少越好。
link |
假設我們加上一個限制,希望白色的點越少越好的話,那我們看到的結果會是這個樣子。
link |
那當然看起來還是不太像數字啦,不過你仔細觀察白色的點的話,還真有那麼一點樣子,比如說這個有點像是6,這個有點像是8。
link |
好,那如果你要真的得到非常像是數字的東西,或者是假設你想要像那個文獻上啊,你知道文獻上有很多人都會說,
link |
他用某種這個global explanation的方法,然後呢去反推一個image classifier,他心中的某種動物長什麼樣子。
link |
比如說你看下面這篇文獻,他告訴你說,他有一個image classifier,他用我們剛才提到的方法,
link |
他可以反推說,這個image classifier裡面心中的這個丹頂鶴長什麼樣子,或他心中的這個甲蟲長什麼樣子。
link |
你看這些圖片,這個真的都還蠻像丹頂鶴的,你完全可以看到說,有一隻鳥丹頂鶴,然後它有一隻腳插在水裡面,那這些圖片真的都可以看到甲蟲在圖片裡面。
link |
但是你要得到這樣子的圖片啊,其實沒有你想像的那麼容易,你如果仔細去看這個文獻的話,你就會發現說,嗯,要得到這些圖片,你必須要下非常多的constraint,
link |
你要根據你對影像的了解,就是一個object長什麼樣子的了解,下非常多的限制,再加上一大堆的hyperparameter tuning,
link |
你知道我們解optimization problem的時候,你也是需要調hyperparameter,比如說learning rate之類的,所以下一堆constraint,調一堆參數,你才可以得出這樣的結果。
link |
所以這樣的結果並不是隨隨便便就可以輕易地做出來的。
link |
像剛才講的那種global explanation的方法,如果你真的想要看到非常清晰的圖片的話,現在有一個招數是使用generator。
link |
你就訓練一個image的generator,你有一堆訓練資料,有一堆image,那你拿這個一堆image來訓練一個image的generator,比如說你可以用game啊,可以用vae啊等等。
link |
game我沒有教過了,vae我沒有教過,反正就是你可以有想辦法訓練出一個image的generator,image的generator輸入是一個low-dimensional的vector,
link |
是一個從Gaussian distribution裡面sample出來的低維度的向量叫做Z,丟到image generator以後,它輸出就是一張圖片X。
link |
那這個image的generator,我們用大G來表示,那輸出的圖片X,我們就可以寫成X等於大G of Z。
link |
那怎麼拿這個image generator來幫助我們反推一個image classifier裡面,它所想像的某一種類別,比如說某一隻貓,
link |
它心裡所想像的貓這個類別或狗這個類別長什麼樣子呢?那你就把image classifier,image generator跟image classifier接在一起。
link |
這個image generator輸入是一個Z,輸出是一張圖片,然後這個image classifier把這個圖片當作輸入,然後輸出分類的結果。
link |
那在剛才前幾頁投影片裡面,我們都是說,我們要找一個X,讓Y裡面的某一個dimension,讓某一個類別,它的信心分數越高越好。
link |
那我們說這個X叫做XR,那麼剛才看到說光這麼做,你往往做不出什麼特別厲害的結果。
link |
現在有了image generator以後,方法就不一樣了,我們現在不是去找X,而是去找一個Z。
link |
我們要找一個Z,這個Z通過image generator產生X,再把這個X丟到image classifier去產生Y以後,
link |
希望Y裡面對應的某一個類別,它的分數越大越好。我們找一個Z,Z產生X,X再產生Y以後,希望YI越大越好。
link |
那這個可以讓YI越大越好的Z,我們就叫它Z star。
link |
找出這個Z star以後,我們再把這個Z star丟到G裡面,丟到generator裡面,看看它產生出來的image X star長什麼樣子。
link |
那找出來的X star長什麼樣子呢?
link |
假設你今天想要產生比如說讓螞蟻的信心分數最高的image,產生出來的螞蟻的照片,
link |
哦,這個很厲害,長得是這個樣子,都看得出這個就是螞蟻,或者是要讓機器產生火山的照片,
link |
產生一堆照片,丟到classifier以後,火山的信心分數特別高的,那你確實可以找出一堆image,這些image一看就知道像是火山一樣。
link |
好,但講到這邊,你可能會覺得這整個想法聽起來有點強要,
link |
就是今天你找出來的圖片如果跟你想像的東西不一樣,今天找出來的螞蟻火山跟你想像的不一樣,
link |
你就說這個explanation的方法不好,你硬是要弄一些方法去找出來那個圖片跟人想像的是一樣的,你才會說這個explanation的方法是好的。
link |
也許今天對機器來說,它看到的圖片就是像是一些雜訊一樣,也許它心裡想像的某一個數字就是像是那些雜訊一樣,
link |
那我們卻不願意認同這個事實,而是硬要想一些方法讓機器產生出看起來比較像樣的圖片。
link |
今天explainable AI的技術往往就是有這個特性,我們其實沒有那麼在乎機器真正想的是什麼,其實我們也不知道機器真正想的是什麼。
link |
我們是希望有些方法解讀出來的東西是人看起來覺得很開心的,然後你就說機器想的應該就是這個樣子,然後你的老闆、你的客戶聽了就會覺得很開心。今天explainable AI往往會有這樣的傾向。
link |
我們今天就是跟大家介紹了explainable AI的兩個主流的技術,一個是local的explanation,一個是global的explanation。
link |
其實explainable的machine learning還有很多的技術,這邊再舉一個例子。
link |
舉例來說,你可以用一個比較簡單的模型,想辦法去模仿複雜的模型的行為。如果簡單的模型可以模仿複雜的模型的行為,你再去分析那個簡單的模型,也許我們就可以知道那個複雜的模型在做什麼。
link |
舉例來說,你有一個neural network,它是一個黑盒子,你丟一堆X進去,比如說丟一堆圖片進去,它會給我們分類的結果,但我們搞不清楚它決策的過程,因為neural network本身非常的複雜。
link |
那我們能不能拿一個比較簡單的模型出來,比較能夠分析的模型出來,拿一個interpretable的模型出來,比如說一個linear model,然後我們訓練這個linear model去模仿neural network的行為。
link |
neural network輸入X1到XN,它就輸出Y1到YN,那我們要求這個linear model輸入X1到XN,也要輸出跟這個黑盒子一模一樣的輸出,Y1到YN,我們要求這個linear model去模仿黑盒子的行為。
link |
如果linear model可以成功模仿黑盒子的行為,我們再去分析linear model做的事情,因為linear model比較容易分析,分析完以後,也許我們就可以知道這個黑盒子在做的事情。
link |
當然,這邊你可能會有非常非常多的問題,舉例來說,一個linear model有辦法去模仿一個黑盒子的行為嗎?我們開學第一堂課就說過說,有很多的問題是neural network才做得到,而linear model是做不到的。
link |
所以今天黑盒子可以做到的事情,linear model不一定能做到啊。沒錯,在這一系列的work裡面,有一個特別知名的叫做local interpretable model agnostic explanation,它的縮寫是lime。
link |
像這種方法,它也沒有說它要用linear model去模仿黑盒子全部的行為,它有特別開宗明義在名字裡面就告訴你說它是local interpretable,也就是它只讓linear model去模仿黑盒子在一小個區域內的行為。
link |
因為linear model能力有限,它不可能模仿整個neural network的行為,但也許讓它模仿一小個區域的行為,那我們就解讀那一小個區域裡面發生的事情。
link |
這個是一個非常經典的方法,叫做lime。如果你想要知道lime是什麼的話,你可以看以下的錄影,今天我們就不再細講。在作業裡面,我們也有有關lime的作業,這個部分就是留給大家自己去閱讀文獻,自己去感受lime是在做什麼。
link |
這個部分就是有關explainable machine learning的簡介。我們來看一下線上有沒有同學有問問題的。
link |
我是可以看到大家的問題的。有同學問說,如果在classifier上面多加一個都不是的選項,並把這個選項的可能性最小化,會不會好呢?
link |
我試著來解讀你的問題。你的問題是說,我們剛才churn了一個image的classifier,比如digit的classifier。如果我們在這個classifier上多加一個選項,這個選項是我們輸入的東西,它不是任何的digit,那我們今天得到的結果會不會好一點?
link |
我沒有做過類似的實驗。在實作上,如果我們今天是拿at least的話,可能會有點小問題,因為at least裡面並沒有任何圖片不是數字,我們所有的圖片都是數字。
link |
另外一方面,假設我們今天真的收集到一些不是數字的圖片,然後多加一個類別,有些東西就叫做它不是數字,然後我們要求說今天輸入一張圖片,同時要讓classifier覺得它像是數字,同時又要它覺得說不是數字的那個類別的機率越小越好,到底會發生什麼事情呢?
link |
我其實沒有試過,所以我一下子沒有非常好的答案,不過依照今天這個adversal attack這麼容易成功的狀況,我認為還是非常有可能可以找到一張image。
link |
它看起來不像是數字,但是network覺得它是數字,同時它不是數字的機率又非常小。但是我沒有試過,如果您有興趣的話,其實也可以自己試試看,看看結果會怎麼樣。
link |
所以我跟大家其實應該是有幾分鐘的delay。