back to index

【機器學習2021】機器學習模型的可解釋性 (Explainable ML) (上) – 為什麼類神經網路可以正確分辨寶可夢和數碼寶貝呢?


link |
00:01.000
好,我們現在要來講Explainable的Machine Learning
link |
00:05.000
到目前為止,我們已經訓練了很多很多的模型
link |
00:08.500
我們訓練過影像辨識的模型,給他一張圖片,他會給你答案
link |
00:13.500
我們並不滿足於此,接下來我們要機器給我們他得到答案的理由
link |
00:21.000
這個就是Explainable的Machine Learning
link |
00:25.000
開始介紹技術之前,我們需要講一下為什麼Explainable的Machine Learning是一個重要的議題
link |
00:34.500
我覺得一個本質上的原因是,就算今天機器可以得到正確的答案,也不代表他一定非常聰明
link |
00:43.000
舉一個例子,過去有一匹馬,他很聰明,所以大家叫他神馬漢斯
link |
00:49.000
這個神馬漢斯可以做什麼事情呢?他會做數學問題
link |
00:54.000
舉例來說,你問他根號9是多少,然後他就會開始計算,得到答案
link |
01:00.000
他怎麼告訴你他的答案呢?他會用他的馬蹄去墮地板
link |
01:05.000
所以如果答案是3,他就敲三下
link |
01:09.000
就停下來,代表他得到正確的答案,然後旁邊的人就會歡呼
link |
01:14.000
所以這個是神馬漢斯,然後一堆人在看他解數學問題
link |
01:19.000
後來有人就很懷疑說,為什麼漢斯可以解數學問題呢?
link |
01:24.000
他只是一匹馬,他為什麼能夠理解數學問題呢?
link |
01:27.000
後來有人發現說,只要沒有人圍觀的時候,漢斯就會答不出數學問題
link |
01:34.000
沒有人看他的時候,你問他一個數學的問題,他就會不斷地敲他的馬蹄,不知道什麼時候停下來
link |
01:42.000
所以他其實只是偵測到旁邊人類微妙的情感變化,知道他什麼時候要停下墮馬蹄
link |
01:50.000
他就可以用胡蘿蔔吃,他並不是真的學會解數學的問題
link |
01:56.000
而今天我們看到種種人工智慧的應用,有沒有可能跟神馬漢斯是一樣的狀況呢?
link |
02:05.000
而今天在很多真實的應用中,Explainable的Machine Learning,可解釋性的模型往往是必須的
link |
02:14.000
舉例來說,銀行今天可能會用機器學習的模型來判斷要不要貸款給某一個客戶
link |
02:22.000
但是根據法律的規定,銀行用機器學習的模型來做自動的判斷,他必須要給出一個理由
link |
02:30.000
所以這個時候我們不是只訓練機器學習的模型就好,我們還需要機器學習的模型是具有解釋力的
link |
02:38.000
或者是說機器學習未來也會被用在醫療診斷上,但醫療診斷人命關天的事情
link |
02:45.000
如果機器學習的模型只是一個黑箱,不會給出診斷的理由的話
link |
02:50.000
那我們又要怎麼相信他做出的是正確的判斷呢?
link |
02:55.000
今天也有人想把機器學習的模型用在法律上
link |
03:01.000
比如說幫助法官判案,幫助法官自動判案說一個犯人能不能夠被假釋
link |
03:07.000
但是我們怎麼知道機器學習的模型是公正的呢?
link |
03:11.000
我們怎麼知道他在做判斷的時候沒有種族歧視跟其他的問題呢?
link |
03:17.000
所以我們希望機器學習的模型不只得到答案,他還要給我們得到答案的理由
link |
03:24.000
再更進一步,今天自駕車未來可能會滿街砲
link |
03:29.000
當今天自駕車突然急煞的時候,甚至急煞導致車上的乘客受傷
link |
03:35.000
那這個自駕車到底有沒有問題呢?這也許取決於他急煞的理由
link |
03:41.000
如果他是看到有一個老太太在過馬路,所以急煞,那也許自駕車是對的
link |
03:48.000
但是假設他只是無緣無故就突然發狂要急煞,那這個模型就有問題了
link |
03:54.000
所以對自駕車他的種種的行為,種種的決策,我們希望知道決策背後的理由
link |
04:01.000
更進一步,也許機器學習的模型如果具有解釋力的話
link |
04:06.000
那未來我們可以憑藉著解釋的結果再去修正我們的模型
link |
04:12.000
今天在使用這些深度學習的技術的時候,往往狀況是這個樣子
link |
04:18.000
有某人說,這個就是你的機器學習的系統啊
link |
04:21.000
是啊,我就是把資料丟進去,裡面就是有很多矩陣的鑲塵
link |
04:26.000
接下來就會跑出我的結果
link |
04:29.000
啊如果結果不如預期的話,怎麼樣呢?
link |
04:32.000
怎麼樣呢?現在大家都知道,就幫我調一下參數對不對?
link |
04:36.000
改個learning rate對不對?調一下network的架構對不對?
link |
04:39.000
你更不知道自己在做什麼對不對?就調一下network的架構
link |
04:42.000
我就把這一堆數學,這一堆linear algebra再重新打亂一下
link |
04:48.000
看看結果會不會比較好
link |
04:50.000
那如果其他沒有做過deep learning的人,就會大吃一驚
link |
04:54.000
覺得哇,這樣怎麼可以呢?
link |
04:56.000
但實際上今天深度學習的模型,你往往要改進模型
link |
05:00.000
就是需要調一些hyperparameter
link |
05:03.000
但是我們期待也許未來,當我們知道
link |
05:07.000
deep learning的模型犯錯的時候,它是錯在什麼樣的地方?
link |
05:10.000
它為什麼犯錯?也許我們可以有更好的方法
link |
05:14.000
更有效率的方法來improve我的模型
link |
05:17.000
當然這個是未來的目標
link |
05:19.000
今天離用explainable的machine learning
link |
05:22.000
做到上述improve model的想法,還有很長的一段距離
link |
05:28.000
好,那講到這邊啊,有人可能會想說
link |
05:31.000
我們今天之所以這麼關注explainable machine learning的議題
link |
05:36.000
也許是因為deep的內部,它本身就是一個黑箱
link |
05:41.000
那我們能不能用其他的機器學習的模型呢?
link |
05:44.000
如果不要用深度學習的模型,改採用其他比較容易解釋的模型
link |
05:50.000
會不會就不需要研究explainable machine learning的呢?
link |
05:55.000
舉例來說,假設我們都採用linear的model
link |
05:59.000
linear的model,它的解釋的能力是比較強的
link |
06:03.000
我們很可以輕易的知道,根據一個linear model裡面的
link |
06:07.000
每一個feature的weight,知道linear的model在做什麼事
link |
06:11.000
所以你訓練完一個linear model以後
link |
06:13.000
你可以輕易的知道,它是怎麼得到它的結果的
link |
06:17.000
但是linear model的問題就是,它沒有非常的powerful
link |
06:23.000
我們其實在第一堂課就已經告訴你說
link |
06:25.000
linear的model有很巨大的限制
link |
06:27.000
所以我們才很快的進入了deep的model
link |
06:31.000
但是deep的model它的壞處就是,它不容易被解釋
link |
06:36.000
deep的network大家都知道,它就是一個黑盒子
link |
06:39.000
黑盒子裡面發生了什麼事情,我們很難知道
link |
06:43.000
雖然它比linear的model更好
link |
06:46.000
但是它的解釋的能力是遠比linear的model要差
link |
06:51.000
所以講到這邊,很多人就會得到一個結論
link |
06:54.000
你可能常常聽到這樣的想法
link |
06:56.000
我們就不應該用這種deep的model
link |
06:58.000
我們不該用這些比較powerful的model
link |
07:01.000
因為它們是黑盒子
link |
07:03.000
但是在我看來,這樣的想法其實就是血逐事履
link |
07:08.000
我們因為一個模型,它非常的powerful
link |
07:11.000
但是不容易被解釋,就揚棄它嗎
link |
07:15.000
我們不是應該是想辦法讓它具有可以解釋的能力嗎
link |
07:20.000
我聽過Yann LeCun講了一個故事
link |
07:23.000
這個是Yann LeCun講的
link |
07:25.000
這個故事,這個老梗,誰都聽過
link |
07:28.000
就有一個醉漢,他在路燈下面找鑰匙
link |
07:31.000
大家問他說,你的鑰匙掉在路燈下嗎
link |
07:34.000
他說不是,因為這邊有光
link |
07:36.000
所以我們堅持一定要用簡單
link |
07:39.000
但是比較容易被解釋的模型
link |
07:42.000
其實就好像是我們堅持一定要在路燈下面找鑰匙一樣
link |
07:47.000
我們堅持因為一個模型是比較interpretable的
link |
07:50.000
雖然它比較不好,但我們還是堅持要使用它
link |
07:53.000
就好像一定要在路燈下面找鑰匙一樣
link |
07:56.000
不知道說真實的模型,真實powerful的模型
link |
08:01.000
也許根本在路燈的範圍之外
link |
08:04.000
而我們現在要做的事情,就是改變路燈的範圍
link |
08:08.000
改變照明的方向
link |
08:10.000
看能不能夠讓這些比較powerful的模型
link |
08:13.000
可以被置於路燈之下
link |
08:16.000
比較interpretable,比較explainable
link |
08:19.000
其實interpretable跟explainable這兩個詞彙
link |
08:22.000
雖然在文獻上常常被互相使用
link |
08:25.000
但其實它們是有一點點差別的
link |
08:28.000
通常這個explainable指的是說
link |
08:31.000
有一個東西它本來是個黑箱
link |
08:34.000
我們想辦法賦予它解釋的能力叫做explainable
link |
08:38.000
那interpretable通常指的是
link |
08:40.000
一個東西它本來就不是黑箱
link |
08:44.000
它本來就不是黑箱
link |
08:46.000
我們本來就可以知道它的內容
link |
08:48.000
這個叫interpretable
link |
08:50.000
不過這兩者在文獻上也常常被混用
link |
08:54.000
所以我們這邊就不特別跟大家強調
link |
08:56.000
explainable跟interpretable的差異
link |
08:59.000
那講到既interpretable又powerful的模型
link |
09:04.000
也許有人會說
link |
09:06.000
那decision tree會不會就是一個好的選擇呢
link |
09:10.000
decision tree相較於linear的model
link |
09:13.000
它是更強大的模型
link |
09:15.000
而decision tree的另外一個好處
link |
09:17.000
相較於deep learning它非常的interpretable
link |
09:20.000
你看那個decision tree的structure
link |
09:23.000
你就可以知道說
link |
09:24.000
今天模型是憑藉著什麼樣的規則
link |
09:27.000
來做出最終的判斷
link |
09:30.000
那decision tree不是我們這門課會講的東西
link |
09:33.000
但是就算是你沒有學過decision tree
link |
09:35.000
你其實也不難想像decision tree它是在做什麼
link |
09:38.000
它做的事情就是你有很多的節點
link |
09:41.000
那每一個節點都會問一個問題
link |
09:43.000
讓你決定向左還是向右
link |
09:45.000
最終當你走到節點的末尾
link |
09:47.000
當你走到leaf node的時候
link |
09:49.000
就可以做出最終的決定
link |
09:51.000
因為在每一個節點都有一個問題
link |
09:53.000
你看那些問題以及答案
link |
09:55.000
你就可以知道現在整個模型
link |
09:57.000
憑藉著什麼樣的特徵
link |
09:59.000
是如何做出最終的決斷
link |
10:02.000
所以從這個角度看來
link |
10:04.000
decision tree它既強大又interpretable
link |
10:08.000
所以這堂課我們可以就上到這邊
link |
10:11.000
就是decision tree is all you need
link |
10:17.000
但是decision tree真的就是我們所需要的嗎
link |
10:22.000
你再仔細想一下
link |
10:24.000
decision tree也有可能是很複雜的
link |
10:27.000
舉例來說
link |
10:28.000
我看到在網路上找到有人問了一個問題
link |
10:32.000
他說他有一個這麼複雜的decision tree
link |
10:35.000
他完全看不懂這個decision tree在幹嘛
link |
10:37.000
有沒有人有什麼樣的
link |
10:39.000
explainable machine learning的方法
link |
10:41.000
可以把這個decision tree變得更簡單一點
link |
10:43.000
我看三四年過去了
link |
10:45.000
都沒有人回答這個問題
link |
10:47.000
有人看到的話也許可以幫忙回答一下
link |
10:49.000
但另外一方面
link |
10:51.000
你再仔細想想看
link |
10:53.000
你是怎麼實際使用decision tree這個技術的呢
link |
10:56.000
我知道很多同學都會說
link |
10:58.000
打cargo比賽的時候
link |
11:00.000
deep learning不是最好用的
link |
11:02.000
decision tree那個才是最好用的
link |
11:05.000
那才是cargo比賽的長勝軍
link |
11:07.000
但是你想想看
link |
11:09.000
當你在使用decision tree的技術的時候
link |
11:11.000
你是只用一顆decision tree嗎
link |
11:13.000
其實不是
link |
11:14.000
你真正用的技術叫做random forest對不對
link |
11:17.000
你真正用的技術其實是
link |
11:19.000
好多顆decision tree
link |
11:21.000
共同決定的結果
link |
11:23.000
一顆decision tree
link |
11:24.000
你可以憑藉著每一個節點的問題跟答案
link |
11:27.000
知道他是怎麼做出最終的判斷的
link |
11:30.000
但當你有一片森林
link |
11:32.000
當你有500顆decision tree的時候
link |
11:34.000
你就很難知道說這500顆decision tree合起來
link |
11:37.000
是怎麼做出判斷的
link |
11:39.000
所以decision tree也不是最終的答案
link |
11:43.000
並不是由decision tree
link |
11:45.000
我們就解決了explainable machine learning的問題
link |
11:50.000
好那在繼續深入講explainable machine learning的技術之前
link |
11:54.000
這邊還有一個問題就是
link |
11:56.000
explainable machine learning的目標是什麼
link |
11:59.000
在我們之前的每一個作業裡面
link |
12:01.000
我們都有一個leaderboard
link |
12:03.000
也就是我們有一個明確的目標
link |
12:05.000
要嘛是降低error rate
link |
12:07.000
要嘛是提升accuracy
link |
12:08.000
我們總是有一個明確的目標
link |
12:11.000
但是explainable的目標到底是什麼呢
link |
12:15.000
什麼才是最好的explanation的結果呢
link |
12:19.000
那explainable machine learning
link |
12:20.000
它的目標其實非常的不明確
link |
12:23.000
就是因為目標不明確
link |
12:24.000
你才發現說explainable machine learning的作業
link |
12:27.000
就沒有leaderboard了
link |
12:28.000
因為出不了leaderboard
link |
12:29.000
我們只能夠出選擇題
link |
12:31.000
讓大家增加一些知識
link |
12:33.000
我們只能夠做這樣子而已
link |
12:35.000
那到底explainable machine learning
link |
12:38.000
它的終極目標是什麼呢
link |
12:41.000
什麼才是最好的explanation
link |
12:45.000
那以下是我個人的看法
link |
12:47.000
並不代表它是對的
link |
12:48.000
你可能不認同
link |
12:49.000
那我也不會跟你爭辯
link |
12:50.000
那這個只是我個人的看法而已
link |
12:53.000
很多人對於explainable machine learning
link |
12:55.000
會有一個誤解
link |
12:56.000
他覺得一個好的explanation
link |
12:59.000
就是要告訴我們
link |
13:01.000
整個模型在做什麼事
link |
13:03.000
我們要了解模型的一切
link |
13:05.000
我們要知道它到底是
link |
13:07.000
我們要完全了解
link |
13:08.000
它是怎麼做出一個決斷
link |
13:11.000
但是你想想看
link |
13:12.000
這件事情真的是有必要的嗎
link |
13:16.000
我們今天說machine learning的model
link |
13:18.000
deep neural是一個黑盒子
link |
13:20.000
所以我們不能相信它
link |
13:23.000
但你想想看
link |
13:24.000
世界上有很多很多的黑盒子
link |
13:27.000
正在你的身邊
link |
13:29.000
人腦不是也是黑盒子嗎
link |
13:31.000
我們其實也並不完全知道
link |
13:33.000
人腦的運作原理
link |
13:36.000
但是我們可以相信
link |
13:38.000
另外一個人做出的決斷
link |
13:40.000
那人腦其實也是一個黑盒子
link |
13:42.000
你可以相信人腦做出的決斷
link |
13:44.000
為什麼deep neural是一個黑盒子
link |
13:46.000
你沒有辦法相信
link |
13:47.000
deep neural做出來的決斷
link |
13:49.000
為什麼你對deep neural
link |
13:51.000
會這麼恐懼呢
link |
13:53.000
那我覺得其實對人而言
link |
13:55.000
也許一個東西能不能讓我們放心
link |
13:58.000
能不能夠讓我們接受
link |
14:00.000
理由是非常重要的
link |
14:03.000
以下是一個跟machine learning
link |
14:05.000
完全無關的心理學實驗
link |
14:08.000
這個實驗是1970年代就做了
link |
14:10.000
這是Alan Denger
link |
14:11.000
一個哈佛大學教授做的
link |
14:13.000
這個實驗非常的有名
link |
14:14.000
這個實驗是這樣
link |
14:15.000
這個實驗是一個跟印表機有關的實驗
link |
14:18.000
在哈佛大學圖書館
link |
14:20.000
印表機會大排長龍
link |
14:22.000
很多人都排隊要印東西
link |
14:25.000
這個時候如果有一個人
link |
14:27.000
跟他前面的人說
link |
14:29.000
拜託請讓我先印
link |
14:31.000
我就印一頁而已
link |
14:33.000
那一般人會不會接受呢
link |
14:35.000
會不會讓他先印呢
link |
14:37.000
有60%的人會讓這個人先印
link |
14:40.000
所以感覺哈佛大學學生人都還蠻好的
link |
14:43.000
這個是接受程度是比我預期的要高
link |
14:46.000
你跟一個人說讓我先印
link |
14:47.000
有60%的人會拿一頁
link |
14:49.000
但這個時候
link |
14:50.000
你只要把剛才問話的方法稍微改一下
link |
14:54.000
你本來只說能不能讓我先印
link |
14:56.000
現在改成說能不能讓我先印
link |
14:59.000
因為我趕時間
link |
15:01.000
他是不是真的趕時間
link |
15:02.000
沒人知道
link |
15:03.000
但是當你說你有一個理由
link |
15:06.000
所以你要先印的時候
link |
15:08.000
這個時候接受的程度變成94%
link |
15:13.000
而神奇的事情是
link |
15:15.000
就算你的理由稍微改一下
link |
15:18.000
舉例來說
link |
15:19.000
有人說請讓我先印
link |
15:21.000
因為我需要先印
link |
15:23.000
光是這個樣子
link |
15:24.000
接受的程度也變成93%
link |
15:27.000
所以神奇的事情是
link |
15:29.000
人就是需要一個理由
link |
15:31.000
你為什麼要先印
link |
15:32.000
你只要講出一個理由
link |
15:33.000
就算你的理由是因為我需要先印
link |
15:35.000
大家也會接受
link |
15:37.000
所以會不會Explainable Machine Learning
link |
15:40.000
也是同樣的道理
link |
15:42.000
所以我們需要Explainable Machine Learning
link |
15:45.000
所以我覺得對什麼叫做好的Explanation
link |
15:49.000
好的Explanation就是
link |
15:51.000
人能接受的Explanation
link |
15:53.000
就是好的Explanation
link |
15:55.000
人就是需要一個理由
link |
15:57.000
讓我們覺得高興
link |
15:59.000
而到底是讓誰高興呢
link |
16:02.000
這個高興的人可能是你的客戶
link |
16:05.000
因為很多人就是聽到
link |
16:07.000
Deep Network是一個黑盒子
link |
16:08.000
他就不爽啊
link |
16:09.000
你告訴他說這個是可以被解釋的
link |
16:11.000
給他一個理由
link |
16:12.000
他就高興了
link |
16:13.000
他可能是你的老闆
link |
16:15.000
看了很多農場文
link |
16:17.000
他也覺得說
link |
16:18.000
Deep Network是黑盒子就是不好的
link |
16:19.000
告訴他說這個是可以解釋的
link |
16:21.000
他就高興了
link |
16:22.000
或者是你今天要說服的對象
link |
16:25.000
是你自己
link |
16:27.000
你自己覺得有一個黑盒子
link |
16:29.000
Deep Network是一個黑盒子
link |
16:30.000
你心裡過不去
link |
16:31.000
今天他可以給你一個
link |
16:32.000
做出決斷的理由
link |
16:33.000
你就高興了
link |
16:34.000
所以我覺得
link |
16:35.000
什麼叫做好的Explanation
link |
16:37.000
就是讓人高興的Explanation
link |
16:39.000
就是好的Explanation
link |
16:41.000
其實你等一下
link |
16:43.000
在各種研究的發展上會發現說
link |
16:45.000
我們在設計這些技術的時候
link |
16:48.000
確實跟我現在講的
link |
16:50.000
什麼叫好的Explanation
link |
16:51.000
就是讓人高興的Explanation
link |
16:53.000
這個想法
link |
16:54.000
這個技術的進展是蠻接近的
link |
16:56.000
link |
16:57.000
所以Explainable Machine Learning
link |
16:59.000
他的目標
link |
17:00.000
就像我剛才講的
link |
17:01.000
就是要給我們一個理由
link |
17:04.000
那Explainable Machine Learning
link |
17:06.000
又分成兩大類
link |
17:08.000
第一大類
link |
17:09.000
叫做Local的Explanation
link |
17:12.000
第二大類叫做Global的Explanation
link |
17:15.000
Local的Explanation是說
link |
17:17.000
假設我們有一個Image的Classifier
link |
17:19.000
我們給他一張圖片
link |
17:21.000
他判斷說他是一隻貓
link |
17:23.000
那我們要問的問題是
link |
17:25.000
為什麼
link |
17:26.000
或者機器要回答的問題是
link |
17:28.000
為什麼你覺得這張圖片是一隻貓
link |
17:32.000
根據某一張圖片來回答問題
link |
17:35.000
這個叫做Local Explanation
link |
17:40.000
還有另外一類叫Global Explanation
link |
17:43.000
Global Explanation意思是說
link |
17:45.000
現在還沒有給我們的Classifier
link |
17:47.000
任何圖片
link |
17:48.000
我們要問的是
link |
17:50.000
對一個Classifier而言
link |
17:52.000
什麼樣的圖片叫做貓
link |
17:55.000
我們並不是針對
link |
17:56.000
任何一張特定的圖片來進行分析
link |
17:58.000
我們是想要知道說
link |
18:00.000
當我們有一個Model
link |
18:02.000
他裡面有一堆參數的時候
link |
18:04.000
對參數而言
link |
18:05.000
什麼樣的東西叫做一隻貓
link |
18:08.000
所以Explainable的Machine Learning
link |
18:10.000
有兩大類
link |
18:12.000
我們先來看第一大類
link |
18:15.000
第一大類是
link |
18:16.000
為什麼你覺得一張圖片是一隻貓
link |
18:19.000
我們可以把一個圖片
link |
18:20.000
這個問題問得更具體一點
link |
18:22.000
給機器一張圖片
link |
18:23.000
他知道他是一隻貓的時候
link |
18:25.000
到底是這個圖片裡面的什麼東西
link |
18:29.000
讓模型覺得他是一隻貓
link |
18:32.000
是眼睛嗎
link |
18:33.000
是耳朵嗎
link |
18:34.000
還是貓的腳
link |
18:35.000
讓機器覺得他看到了一隻貓
link |
18:39.000
或是講得更General一點
link |
18:41.000
假設現在我們模型的輸入叫做X
link |
18:45.000
這個X可能是一張影像
link |
18:47.000
可能是一段文字
link |
18:50.000
而X可以拆成多個Component
link |
18:53.000
X1到X2
link |
18:56.000
如果對於影像而言
link |
18:57.000
可能每一個Component就是一個Pixel
link |
19:01.000
那對於文字而言
link |
19:02.000
可能每一個Component就是一個詞彙
link |
19:05.000
或者是一個Token
link |
19:07.000
那我們現在要問的問題就是
link |
19:09.000
這些Token裡面
link |
19:11.000
這些Component裡面
link |
19:13.000
如果對文字來說是Token
link |
19:15.000
對Image來說可能就是Pixel
link |
19:17.000
這些Component裡面
link |
19:18.000
哪一個對於機器現在做出最終的決斷
link |
19:23.000
是最重要的呢
link |
19:25.000
那怎麼知道一個Component的重要性呢
link |
19:28.000
那基本的原則是這個樣子
link |
19:30.000
就是我們把Component都拿出來
link |
19:33.000
然後把每一個Component做改造
link |
19:36.000
或者是刪除
link |
19:38.000
如果我們改造或刪除某一個Component以後
link |
19:42.000
今天Network的輸出有了巨大的變化
link |
19:44.000
那我們就知道說
link |
19:45.000
這個Component沒他不行
link |
19:47.000
他很重要
link |
19:48.000
如果某一個Component被刪掉以後
link |
19:50.000
現在Network的輸出有了巨大的變化
link |
19:52.000
就代表這個Component沒他不行
link |
19:54.000
那這個Component就是一個重要的Component
link |
19:58.000
講得更具體一點
link |
19:59.000
你想要知道今天一個影像裡面
link |
20:02.000
每一個區域的重要性的時候
link |
20:04.000
有一個非常簡單的方法
link |
20:06.000
像是這個樣子
link |
20:07.000
就給一張圖片
link |
20:08.000
然後丟到Network裡面
link |
20:10.000
他知道這是一隻國美狗
link |
20:12.000
接下來在這個圖片裡面不同的位置
link |
20:14.000
放上這個灰色的方塊
link |
20:17.000
當這個方塊放在不同的地方的時候
link |
20:20.000
今天你的Network會Open不同的結果
link |
20:24.000
那下面這個圖啊
link |
20:26.000
這些顏色代表今天Network輸出國美狗的機率
link |
20:32.000
那藍色代表國美狗的機率是高的
link |
20:35.000
藍色代表國美狗的機率是低的
link |
20:40.000
紅色代表國美狗的機率是高的
link |
20:43.000
而這邊的每一個位置
link |
20:45.000
代表了這個灰色方塊的位置
link |
20:48.000
也就是說
link |
20:49.000
當我們把灰色的方塊移到這邊
link |
20:52.000
移到這邊
link |
20:53.000
移到國美狗的臉上的時候
link |
20:55.000
今天你的Image Classifier
link |
20:57.000
就不覺得他看到一隻國美狗
link |
21:00.000
如果你把灰色的方塊放在國美狗的四周
link |
21:03.000
放在國美狗的四周
link |
21:05.000
這個時候機器就覺得
link |
21:06.000
他看到的仍然是國美狗
link |
21:09.000
所以資料說
link |
21:10.000
他不是看到這個球覺得他看到國美狗
link |
21:13.000
也不是看到地板
link |
21:14.000
也不是看到牆壁覺得看到國美狗
link |
21:16.000
而是真的看到這個狗的臉
link |
21:18.000
所以他覺得他看到了一隻狗
link |
21:21.000
那這邊也有一樣的例子
link |
21:23.000
把灰色的方塊在這個圖片上移動
link |
21:27.000
你會發現說
link |
21:28.000
灰色的方塊移到輪胎上的時候
link |
21:31.000
機器就不覺得他有看到輪胎了
link |
21:34.000
所以機器知道輪胎長什麼樣子
link |
21:36.000
他今天看到這個圖片
link |
21:38.000
知道答案是輪胎的時候
link |
21:39.000
並不是瞎蒙到的
link |
21:41.000
而是他知道說輪胎出現在這個位置
link |
21:44.000
或者是說
link |
21:46.000
這邊有一張圖片
link |
21:48.000
然後這個圖片裡面有兩個人
link |
21:50.000
還有一隻阿富汗獵犬
link |
21:52.000
但是機器到底是真的看到了阿富汗獵犬
link |
21:55.000
還是把人誤認為狗呢
link |
21:58.000
這個時候你就可以把這個灰色的方框
link |
22:00.000
在這個圖片上移動
link |
22:02.000
然後你發現這個灰色的方框
link |
22:04.000
放在這個人的臉上
link |
22:05.000
或放在這個人的臉上的時候
link |
22:07.000
機器仍然覺得
link |
22:09.000
他有看到阿富汗獵犬
link |
22:12.000
但是當你把灰色的方框放到這個位置
link |
22:14.000
放到這個位置的時候
link |
22:16.000
機器就覺得
link |
22:17.000
他沒有看到阿富汗獵犬了
link |
22:19.000
所以他是真的有看到阿富汗獵犬
link |
22:21.000
他知道這一隻就是阿富汗獵犬
link |
22:23.000
並不是把人誤認為阿富汗獵犬
link |
22:27.000
所以這個是最簡單的
link |
22:29.000
知道Component重要性的方法
link |
22:32.000
接下來還有一個更進階的方法
link |
22:34.000
是計算Gradient
link |
22:36.000
這個方法是這樣子的
link |
22:37.000
假設我們有一張圖片
link |
22:39.000
我們把它寫作X1到Xn
link |
22:42.000
這邊的每一個X代表了一個Pixel
link |
22:46.000
接下來呢
link |
22:47.000
我們去計算這張圖片的Loss
link |
22:50.000
我們這邊用小1來表示
link |
22:53.000
這個小1是什麼呢
link |
22:54.000
這個小1是把這張圖片丟到你的模型裡面
link |
22:58.000
這個模型輸出的結果
link |
23:00.000
跟正確答案的差距
link |
23:03.000
跟正確答案的Cross Entropy
link |
23:05.000
這個1越大
link |
23:06.000
就代表現在辨識的結果越差
link |
23:09.000
那接下來啊
link |
23:10.000
我們知道某一個Pixel
link |
23:12.000
對於影像辨識這個問題的重要性呢
link |
23:15.000
那你就把某一個Pixel的值
link |
23:18.000
做一個小小的變化
link |
23:20.000
把它加上一個DeltaX
link |
23:23.000
然後你接下來看一下
link |
23:24.000
你的Loss會有什麼樣的變化
link |
23:27.000
如果今天把某一個Pixel
link |
23:28.000
做小小的變化以後
link |
23:29.000
Loss就有巨大的變化
link |
23:31.000
代表說這個Pixel
link |
23:32.000
對影像辨識是重要的
link |
23:34.000
反之如果加了DeltaX
link |
23:36.000
這個Delta1趨近於0
link |
23:38.000
這個Loss完全沒有反應
link |
23:39.000
就代表說這個DeltaX
link |
23:41.000
這個位置這個Pixel
link |
23:43.000
對於影像辨識而言可能是不重要
link |
23:47.000
那我們可以用Delta1跟DeltaX的比值
link |
23:50.000
來代表這個Pixel Xn的重要性
link |
23:54.000
而事實上DeltaX分之Delta1
link |
23:56.000
這一項啊
link |
23:57.000
就是把Xn對你的Loss做偏微分
link |
24:01.000
如果你不知道偏微分是什麼的話
link |
24:02.000
也沒有關係
link |
24:03.000
反正就是DeltaX跟Delta1的比值
link |
24:06.000
就代表了這個Xn的重要性
link |
24:09.000
那這個比值越大
link |
24:10.000
就代表Xn越重要
link |
24:13.000
那你把每一個圖片裡面
link |
24:15.000
每一個Pixel它的這個比值都算出來
link |
24:18.000
你就得到一個圖呢
link |
24:20.000
叫做Saliency Map
link |
24:22.000
在我們的作業裡面
link |
24:23.000
你會有很多機會畫各式各樣的Saliency Map
link |
24:27.000
那下面這個圖啊
link |
24:29.000
上面這個是原始圖片啦
link |
24:30.000
下面這個黑色的
link |
24:32.000
然後有亮白色點的是Saliency Map
link |
24:35.000
那在這個Saliency Map上面呢
link |
24:37.000
越偏白色就代表這個比值越大
link |
24:42.000
也就是這個位置的Pixel是越重要
link |
24:46.000
舉例來說
link |
24:47.000
給機器看這個水牛的圖片
link |
24:49.000
它並不是看到草地覺得它看到牛
link |
24:51.000
也不是看到竹子覺得它看到牛
link |
24:53.000
而是真的知道牛在這個位置
link |
24:56.000
它覺得判斷這張圖片是什麼樣的類別
link |
24:59.000
對它而言最重要的
link |
25:00.000
是出現在這個位置的Pixel
link |
25:02.000
像是真的看到牛
link |
25:04.000
所以知道說
link |
25:05.000
所以才會Open牛這個答案
link |
25:07.000
我機器看到這個圖片
link |
25:08.000
說它看到一個猴子
link |
25:11.000
猴子在哪裡呢
link |
25:12.000
猴子在樹梢上面
link |
25:14.000
它並不是把葉子判斷成猴子
link |
25:16.000
它知道這個位置出現的東西
link |
25:18.000
就是它判斷正確答案的準則
link |
25:21.000
我給它這個圖片
link |
25:22.000
它知道說狗呢
link |
25:24.000
是出現在這個位置
link |
25:26.000
所以這個技術呢
link |
25:28.000
叫做Saliency Map
link |
25:30.000
那Saliency Map這個技術
link |
25:32.000
我們等一下來舉一個實際的應用
link |
25:35.000
這個應用是什麼呢
link |
25:36.000
這個應用跟寶可夢還有數碼寶貝有關啦
link |
25:39.000
不知道大家知不知道那個數碼寶貝是什麼
link |
25:42.000
左邊這個是寶可夢啦
link |
25:44.000
右邊這個呢叫做數碼寶貝
link |
25:47.000
知道數碼寶貝的同學可以舉手一下嗎
link |
25:50.000
好多好多
link |
25:51.000
手放下那我就不用解釋了
link |
25:53.000
不知道的同學反正就是另外一種動物就對了
link |
25:56.000
真的啊
link |
25:57.000
寶可夢是一種動物
link |
25:58.000
數碼寶貝是另外一種動物
link |
26:01.000
然後我在網路上呢
link |
26:02.000
看到有人說
link |
26:03.000
他訓練了一個數碼寶貝跟寶可夢的分類器
link |
26:08.000
正確率非常的高
link |
26:10.000
所以我決定自己也來做這個實驗
link |
26:12.000
看看為什麼可以得到這麼高的正確率
link |
26:16.000
那你可以在網路上呢
link |
26:17.000
找到寶可夢的圖庫
link |
26:19.000
也可以找到數碼寶貝的圖庫
link |
26:22.000
所以你有一堆寶可夢的圖
link |
26:24.000
有一堆數碼寶貝的圖
link |
26:26.000
那這個對大家來說一定都不成問題
link |
26:28.000
這個就是二元分類的問題而已
link |
26:31.000
對不對
link |
26:32.000
胡亂train一個classify就結束了
link |
26:35.000
就把作業3的code改一改
link |
26:37.000
把本來分成11類改成分成2類
link |
26:40.000
就結束了
link |
26:42.000
那接下來訓練完以後呢
link |
26:44.000
當然要用機器沒有看過的圖去測試他
link |
26:47.000
所以你不能夠把所有的寶可夢
link |
26:49.000
跟所有的數碼寶貝都拿去做訓練
link |
26:51.000
你要特別留一些寶可夢跟數碼寶貝
link |
26:53.000
是訓練的時候沒有看過的
link |
26:55.000
看看機器看到新的寶可夢跟數碼寶貝
link |
26:58.000
他能不能夠得到正確的結果
link |
27:01.000
這邊呢
link |
27:02.000
我們來看一下人類能不能夠
link |
27:04.000
正確的判斷寶可夢跟數碼寶貝
link |
27:07.000
我來問一下大家
link |
27:08.000
你覺得這一隻是寶可夢還是數碼寶貝呢
link |
27:12.000
覺得他是寶可夢的同學舉手一下
link |
27:15.000
手放下
link |
27:16.000
覺得他是數碼寶貝的同學舉手一下
link |
27:18.000
也有一些
link |
27:19.000
手放下
link |
27:20.000
老實說我難忘記了這樣子
link |
27:26.000
所以你可見這個寶可夢跟數碼寶貝
link |
27:29.000
是很難分辨的
link |
27:30.000
今天就算是人類
link |
27:32.000
你也很難判斷說一隻動物
link |
27:34.000
到底是寶可夢還是數碼寶貝
link |
27:37.000
機器的表現如何呢
link |
27:40.000
這邊就是隨便兜了一個模型
link |
27:42.000
也沒有幾層
link |
27:43.000
train下去
link |
27:44.000
link |
27:45.000
training accuracy
link |
27:46.000
就是8.9%
link |
27:48.000
這個非常的高
link |
27:49.000
但是不要高興的太早
link |
27:51.000
這個也許是overfitting而已
link |
27:53.000
也許machine只是把training的data
link |
27:55.000
記下來而已
link |
27:56.000
畢竟訓練資料沒幾張
link |
27:58.000
數碼寶貝寶可夢才個幾千張而已
link |
28:01.000
也許overfitting
link |
28:03.000
所以測試資料上
link |
28:04.000
沒看過的圖怎麼樣呢
link |
28:05.000
正確率就是8.4%
link |
28:07.000
這個不可思議
link |
28:09.000
偽哉機器學習
link |
28:11.000
這個人類都沒有辦法判斷
link |
28:13.000
寶可夢跟數碼寶貝的差異
link |
28:15.000
但機器可以
link |
28:16.000
還有就是8.4%的正確率
link |
28:21.000
好那接下來
link |
28:22.000
我就很好奇
link |
28:23.000
就想要知道說
link |
28:24.000
機器到底是憑藉著什麼樣的規則
link |
28:26.000
判斷寶可夢跟數碼寶貝的差異呢
link |
28:29.000
所以我決定來畫一下salient z-map
link |
28:33.000
這邊有幾隻動物
link |
28:34.000
牠們是什麼呢
link |
28:35.000
牠們是數碼寶貝
link |
28:38.000
這邊是數碼寶貝
link |
28:40.000
接下來呢
link |
28:41.000
我就在這些圖片上畫salient z-map
link |
28:44.000
讓機器來告訴我說
link |
28:46.000
為什麼牠覺得這幾張是數碼寶貝
link |
28:50.000
機器給我的答案是這個樣子
link |
28:52.000
這邊亮亮的點
link |
28:53.000
代表牠覺得比較重要
link |
28:56.000
有點怪怪的
link |
28:57.000
好像亮亮的點都分佈在四個角落
link |
29:00.000
不知道發生了什麼事
link |
29:02.000
接下來我來分析寶可夢
link |
29:05.000
這個情況更明顯
link |
29:06.000
你發現說機器覺得重要的點
link |
29:08.000
基本上都是避開寶可夢的本體
link |
29:11.000
都是在影像的背景上
link |
29:13.000
為什麼呢
link |
29:14.000
因為我後來發現
link |
29:15.000
寶可夢都是png檔
link |
29:16.000
數碼寶貝都是jpeg檔
link |
29:18.000
png檔讀進來以後
link |
29:19.000
背景都是黑的
link |
29:21.000
所以機器只要看背景
link |
29:22.000
就知道一張圖片是寶可夢還是數碼寶貝
link |
29:25.000
就結束了
link |
29:26.000
這個例子就是告訴我們說
link |
29:29.000
Explainable AI是一個很重要的技術
link |
29:33.000
那我剛才舉的例子
link |
29:34.000
可能你覺得有點荒謬
link |
29:35.000
也許在正常的應用中
link |
29:37.000
不會發生這種事情
link |
29:39.000
但真的不會發生嗎
link |
29:41.000
有一個真實的例子
link |
29:42.000
有一個Benchmark Open
link |
29:44.000
叫做PASCO VOC 2007
link |
29:46.000
裡面有各式各樣的物件
link |
29:49.000
機器要學習做影像的分類
link |
29:51.000
機器看到這張圖片
link |
29:53.000
它知道是碼的圖片
link |
29:55.000
但如果你畫saliency map的話
link |
29:57.000
你發現結果是這個樣子的
link |
30:00.000
機器覺得左下角對碼是最重要
link |
30:03.000
為什麼
link |
30:04.000
因為左下角有一串英文
link |
30:06.000
這個圖庫裡面碼的圖片
link |
30:07.000
很多都是來自於某一個網站
link |
30:09.000
左下角都一樣的英文
link |
30:11.000
所以機器看到左下角
link |
30:12.000
這一行英文就知道是碼
link |
30:13.000
它根本不需要學習碼是長什麼樣子
link |
30:16.000
所以今天在這個真實的應用中
link |
30:20.000
在Benchmark Open上
link |
30:21.000
類似的狀況也是會出現
link |
30:24.000
所以這告訴我們
link |
30:25.000
這種Explainable Machine Learning
link |
30:27.000
這個技術是很重要的
link |
30:30.000
link |
30:31.000
那有沒有什麼方法
link |
30:32.000
把Explainable的Machine Learning
link |
30:34.000
Saliency Map畫得更好呢
link |
30:36.000
第一個方法就是助教
link |
30:38.000
剛才也有提到的這個Smooth Grain
link |
30:41.000
什麼意思呢
link |
30:42.000
這張圖片是一隻凳林
link |
30:45.000
那你期待說
link |
30:47.000
你今天去做Saliency Map的時候
link |
30:49.000
機器會把它主要的精力
link |
30:51.000
集中在凳林身上
link |
30:53.000
但如果你用剛才我們講的方法
link |
30:55.000
直接畫Saliency Map的話
link |
30:57.000
你得到的結果可能是這個樣子
link |
30:59.000
確實今天在凳林附近
link |
31:02.000
有比較多亮的點
link |
31:04.000
但是在其他地方也有一些雜訊
link |
31:08.000
讓人看起來有點不舒服
link |
31:11.000
所以就有了Smooth Grain這個方法
link |
31:13.000
Smooth Grain會讓你的
link |
31:15.000
這個Saliency Map上面雜訊比較少
link |
31:18.000
如果在這個例子上
link |
31:19.000
你就會發現多數的亮點
link |
31:21.000
真的都集中在凳林身上
link |
31:24.000
那Smooth Grain這個方法是怎麼做呢
link |
31:26.000
非常簡單
link |
31:27.000
說穿了也不值錢
link |
31:28.000
就是你在你的圖片上面
link |
31:31.000
加上各種不同的雜訊
link |
31:33.000
那加不同的雜訊
link |
31:34.000
就是不同的圖片了
link |
31:35.000
每一張圖片上面
link |
31:36.000
都去計算Saliency Map
link |
31:39.000
那你有加100種雜訊
link |
31:41.000
就有100張Saliency Map
link |
31:42.000
平均起來就得到Smooth Grain的結果
link |
31:45.000
就結束了
link |
31:47.000
當然有人會問說
link |
31:49.000
你怎麼知道說這個Smooth Grain
link |
31:51.000
這樣子的結果
link |
31:52.000
一定就是比原來的結果好呢
link |
31:54.000
也許對機器來說
link |
31:55.000
它真的覺得這些草很重要
link |
31:57.000
它真的覺得這個天空很重要
link |
32:00.000
它真的覺得這個背景很重要
link |
32:02.000
也許是
link |
32:03.000
那就像我一開始說的
link |
32:04.000
Explainable Machine Learning
link |
32:05.000
最重要的目標
link |
32:07.000
就是要讓人看了覺得爽
link |
32:09.000
你畫了這個圖
link |
32:10.000
你的老闆就會覺得不爽
link |
32:11.000
他就會覺得說
link |
32:12.000
這個Model有點爛
link |
32:13.000
這個Model解釋性好像很低
link |
32:15.000
所以你就會把它畫成
link |
32:16.000
Smooth Grain這個樣子
link |
32:18.000
然後別人說
link |
32:19.000
你看這個Model
link |
32:20.000
他果然知道鄧林是最重要的
link |
32:22.000
所以這個Model不錯
link |
32:24.000
這個Explainable Machine Learning的方法
link |
32:26.000
也不錯
link |
32:28.000
但是呢
link |
32:29.000
其實光看Gradient
link |
32:31.000
並不完全能夠反映
link |
32:34.000
一個Component的重要性
link |
32:36.000
怎麼說呢
link |
32:37.000
這邊就舉一個例子給大家參考
link |
32:40.000
這個橫軸代表的是
link |
32:42.000
八項
link |
32:43.000
某一個生物鼻子的長度
link |
32:46.000
那縱軸代表說
link |
32:48.000
這個生物是大象的可能性
link |
32:50.000
我們都知道說
link |
32:51.000
大象的特徵就是長鼻子
link |
32:54.000
所以一個生物
link |
32:55.000
他的鼻子越來越長
link |
32:56.000
他就越有可能是大象
link |
32:59.000
但是當他的鼻子
link |
33:00.000
長到一個極限的時候
link |
33:02.000
再變更長一點
link |
33:03.000
他也不會變得更像大象
link |
33:05.000
鼻子很長的大象
link |
33:06.000
就只是鼻子特別長的大象
link |
33:09.000
所以當一個大象的鼻子
link |
33:11.000
變長的時候
link |
33:13.000
長到超出一個範圍的時候
link |
33:15.000
你也不會覺得
link |
33:16.000
他變得更像大象
link |
33:18.000
所以生物鼻子的長度
link |
33:21.000
跟他是大象的可能性
link |
33:23.000
他的關係
link |
33:24.000
也許一開始
link |
33:25.000
在長度比較短的時候
link |
33:27.000
隨著長度越來越長
link |
33:28.000
今天這個生物
link |
33:29.000
是大象的可能性越來越大
link |
33:31.000
但是當鼻子的長度
link |
33:32.000
長到一個程度以後
link |
33:33.000
居然是更長
link |
33:34.000
也不會變得更像大象
link |
33:36.000
這個時候
link |
33:37.000
如果你計算鼻子長度
link |
33:39.000
對是大象可能性的偏微分的話
link |
33:43.000
那你在這個地方
link |
33:45.000
得到的偏微分
link |
33:46.000
可能會趨近於零
link |
33:48.000
所以如果你光看Gradient
link |
33:50.000
光看Stellian Seamap
link |
33:51.000
你可能會得到一個結論是
link |
33:53.000
鼻子的長度
link |
33:54.000
對是不是大象
link |
33:56.000
這件事情是不重要的
link |
33:57.000
鼻子的長度
link |
33:58.000
不是判斷是否為大象的一個指標
link |
34:01.000
因為鼻子的長度的變化
link |
34:03.000
對是大象的可能性的變化
link |
34:05.000
是趨近於零的
link |
34:07.000
所以鼻子根本不是
link |
34:08.000
判斷是不是大象的重要的指標
link |
34:11.000
那事實上是這樣嗎
link |
34:12.000
事實上你知道
link |
34:13.000
不是這個樣子
link |
34:15.000
所以光看Gradient
link |
34:17.000
光看偏微分的結果
link |
34:19.000
可能沒有辦法完全告訴我們
link |
34:21.000
一個Component的重要性
link |
34:23.000
所以有其他的方法
link |
34:25.000
有一個方法
link |
34:26.000
叫做Integrated Gradient
link |
34:28.000
它的縮寫叫做IG
link |
34:31.000
那這邊我就不打算詳細講說
link |
34:33.000
IG是怎麼運作的
link |
34:34.000
我們就把文獻留在這邊
link |
34:36.000
那助教的程式裡面
link |
34:38.000
也有實作了IG
link |
34:39.000
那如果你有興趣
link |
34:40.000
你可以自己研究看看
link |
34:42.000
IG是怎麼運作的
link |
34:43.000
如果你沒有興趣
link |
34:44.000
反正你按個Enter
link |
34:45.000
就跑出那個IG的分析的結果
link |
34:49.000
好那剛才我們是看
link |
34:52.000
Network它是
link |
34:54.000
我們剛才是看一個輸入
link |
34:56.000
它的哪些部分是比較重要
link |
34:59.000
那接下來我們要問的
link |
35:00.000
下一個問題是
link |
35:01.000
當我們給Network
link |
35:02.000
開一個輸入的時候
link |
35:04.000
它到底是怎麼去處理
link |
35:07.000
這個輸入的呢
link |
35:08.000
它到底是怎麼對輸入做處理
link |
35:10.000
然後得到最終的答案的呢
link |
35:13.000
那有不同的方法
link |
35:15.000
第一個方法最直覺的
link |
35:16.000
就是人眼去看
link |
35:18.000
今天Network裡面
link |
35:19.000
到底發生了什麼事情
link |
35:22.000
在作業裡面
link |
35:23.000
是要你去看
link |
35:25.000
Earth裡面發生了什麼事情
link |
35:27.000
是跟文字有關的
link |
35:28.000
那上課舉的例子
link |
35:29.000
我們就舉語音的例子
link |
35:31.000
在作業2裡面
link |
35:33.000
你已經訓練了一個Network
link |
35:34.000
這個Network就是
link |
35:35.000
吃一小段聲音當作輸入
link |
35:37.000
判斷說這段聲音
link |
35:38.000
是屬於哪一個封領
link |
35:40.000
屬於哪一個KK音標
link |
35:43.000
然後呢
link |
35:44.000
假設你第一個Layer
link |
35:45.000
有100個Neural
link |
35:47.000
第二個Layer也有100個Neural
link |
35:48.000
那第一個Layer的輸出
link |
35:50.000
就可以看作是100維的向量
link |
35:52.000
第二個Layer的輸出
link |
35:53.000
也可以看作是100維的向量
link |
35:56.000
透過這些
link |
35:57.000
分析這些向量
link |
35:58.000
也許我們就可以知道
link |
35:59.000
一個Network裡面
link |
36:00.000
發生了什麼事
link |
36:02.000
但是100維的向量
link |
36:03.000
不容易看
link |
36:04.000
不容易觀察
link |
36:05.000
不容易分析
link |
36:06.000
所以怎麼辦呢
link |
36:07.000
你有很多方法
link |
36:08.000
可以把100維的向量
link |
36:10.000
把它降到2維
link |
36:12.000
那至於是什麼方法
link |
36:13.000
我們這邊就不細講
link |
36:14.000
總之這些方法
link |
36:15.000
有一籮筐可以使用
link |
36:17.000
把100維降到2維以後
link |
36:19.000
你就可以畫在圖上
link |
36:20.000
那你就可以細心的觀察它
link |
36:22.000
看看你可以觀察到什麼現象
link |
36:25.000
以下呢
link |
36:26.000
舉的是語音的例子
link |
36:28.000
那這個例子
link |
36:29.000
來自於一篇2012年的Paper
link |
36:32.000
你會發現Hinton
link |
36:33.000
這個深度學習之父
link |
36:35.000
也是這篇文章的作者
link |
36:38.000
這篇文章做的事情是什麼呢
link |
36:40.000
這篇文章
link |
36:41.000
其實老實說這篇文章
link |
36:42.000
做的就是你的作業2
link |
36:43.000
你知道嗎
link |
36:44.000
它跟你作業2用的Data
link |
36:45.000
是一模一樣的
link |
36:47.000
所以假設你穿越時空到10年前
link |
36:49.000
拿你作業2的結果給Hinton看
link |
36:51.000
他就嚇一跳這樣子
link |
36:52.000
你可以順便告訴他說
link |
36:53.000
這個只是我們15個作業的
link |
36:55.000
其中一個而已
link |
36:56.000
他就嚇一跳這樣子
link |
36:57.000
你還可以告訴他說
link |
36:58.000
這個我只勸了一個小時
link |
37:00.000
就勸完了
link |
37:01.000
那個時候要勸類似的東西
link |
37:02.000
大概要勸個一週以上吧
link |
37:04.000
Hinton就會嚇一跳
link |
37:05.000
我只能
link |
37:06.000
所以看到這些過去的文章
link |
37:08.000
我真的只能說
link |
37:09.000
這個大人時代變了
link |
37:11.000
以前Thread Network多麼麻煩
link |
37:13.000
現在真的是時代變了
link |
37:15.000
而且其實那個時候
link |
37:16.000
用的是Deep Belief Network
link |
37:19.000
Deep Belief Network
link |
37:20.000
是Deep Neural Network嗎
link |
37:22.000
不是這樣子
link |
37:23.000
那這個是什麼東西呢
link |
37:24.000
這個我們就不會講它
link |
37:26.000
因為現在已經沒有人
link |
37:27.000
在用這個東西了
link |
37:28.000
link |
37:29.000
但是他得到的結果
link |
37:31.000
還是蠻值得我們今天拿來看的
link |
37:33.000
其實你在作業2
link |
37:34.000
應該也可以觀察到
link |
37:35.000
類似的結果
link |
37:37.000
這邊做的事情是什麼呢
link |
37:38.000
這邊做的事情是
link |
37:39.000
首先我們把模型的Input
link |
37:42.000
就是Acoustic Feature
link |
37:44.000
也就是NFCC
link |
37:45.000
拿出來
link |
37:46.000
把它降到二維
link |
37:48.000
畫在二維的平面上
link |
37:50.000
在這個圖上
link |
37:52.000
每一個點
link |
37:53.000
代表一小段聲音訊號
link |
37:56.000
每一個顏色
link |
37:57.000
代表了某一個Speaker
link |
38:00.000
某一個講話的人
link |
38:02.000
那其實我們丟給這個Network的資料
link |
38:04.000
有很多句子是重複的
link |
38:06.000
就是有人說
link |
38:07.000
A說了How are you
link |
38:09.000
B也說了How are you
link |
38:10.000
C也說了How are you
link |
38:11.000
很多人說了一樣的句子
link |
38:13.000
但從這個圖上
link |
38:14.000
你看不出來
link |
38:15.000
從Acoustic Feature上
link |
38:17.000
你會發現說
link |
38:18.000
就算是不同的人
link |
38:19.000
念同樣的句子內容一樣
link |
38:22.000
但是我們從Acoustic Feature上
link |
38:24.000
看不出來
link |
38:25.000
同一個人
link |
38:26.000
他說的話
link |
38:27.000
就是比較相近
link |
38:28.000
就算是不同的人
link |
38:29.000
說同樣的句子
link |
38:31.000
你也沒有辦法看到
link |
38:33.000
他們被Align在一起
link |
38:35.000
所以從這個結果
link |
38:36.000
人們就會覺得
link |
38:37.000
哇 這個語音辨識太難了
link |
38:40.000
語音辨識不能做啊
link |
38:42.000
這個不同的人說
link |
38:43.000
這個不同的人說
link |
38:44.000
同樣的話
link |
38:45.000
看起來這個Feature差這麼多啊
link |
38:47.000
這個語音辨識
link |
38:48.000
怎麼是有可能
link |
38:49.000
有辦法做的問題呢
link |
38:50.000
但是
link |
38:51.000
當我們把Network
link |
38:52.000
拿出來看的時候
link |
38:53.000
結果就不一樣
link |
38:56.000
這個是第八層Network的輸出
link |
38:58.000
你會發現什麼呢
link |
39:00.000
你會發現
link |
39:01.000
這邊變成一條一條
link |
39:03.000
每一條
link |
39:04.000
沒有特定的顏色
link |
39:06.000
這邊每一條代表什麼呢
link |
39:08.000
每一條就代表
link |
39:10.000
同樣內容的某一個句子
link |
39:13.000
所以你會發現說
link |
39:14.000
不同人說同樣的內容
link |
39:17.000
在NFCC上看不出來
link |
39:19.000
但通過了八層的Network之後
link |
39:22.000
機器知道說這些話
link |
39:23.000
是同樣的內容
link |
39:25.000
雖然聲音訊號看起來不一樣
link |
39:26.000
是不同人講的
link |
39:27.000
但他們是同樣的內容
link |
39:29.000
所以它可以把
link |
39:30.000
同樣的內容
link |
39:31.000
不同人說的句子
link |
39:32.000
把它Align在一起
link |
39:34.000
所以最後
link |
39:35.000
你就可以得到
link |
39:36.000
精確的分類結果
link |
39:39.000
link |
39:40.000
那剛才講的是
link |
39:42.000
直接拿Neuron的輸出
link |
39:43.000
來進行分析
link |
39:45.000
你也可以分析
link |
39:46.000
這個Attention的Layer
link |
39:48.000
現在Sales
link |
39:49.000
Attention用的很廣嘛
link |
39:51.000
你也可以看Attention的結果
link |
39:53.000
來決定
link |
39:54.000
今天Network學到什麼事
link |
39:55.000
我們在作業裡面
link |
39:57.000
要求大家看了Burton的Attention
link |
40:00.000
但是當你使用Attention的時候
link |
40:02.000
還是有一些要注意的地方
link |
40:04.000
我們直覺覺得
link |
40:05.000
Attention應該非常具有解釋力
link |
40:07.000
從某一個詞彙
link |
40:08.000
Attend到另外一個詞彙
link |
40:09.000
那就代表說
link |
40:10.000
這兩個詞彙有關係啊等等
link |
40:12.000
那在作業裡面
link |
40:13.000
我們也挑了比較明顯
link |
40:15.000
可以看出關聯性的例子
link |
40:17.000
給大家來實作
link |
40:19.000
給大家來回答問題
link |
40:21.000
但是實際上
link |
40:22.000
你在文件上
link |
40:23.000
會找到這樣子的文件
link |
40:25.000
Attention is not explainable
link |
40:27.000
Attention並不是總是可以被解釋的
link |
40:31.000
當然也有人發文件說
link |
40:33.000
Attention is not explainable
link |
40:36.000
所以你知道這個
link |
40:37.000
這個研究進展得非常快
link |
40:40.000
很快搞不好又會有人說
link |
40:41.000
Attention is not explanation
link |
40:44.000
所以這個到底Attention
link |
40:46.000
能不能被解釋
link |
40:47.000
什麼狀況可以被解釋
link |
40:48.000
什麼狀況不能夠被解釋
link |
40:50.000
這個還是上代研究的問題
link |
40:54.000
那除了用人眼觀察以外
link |
40:56.000
還有另外一個技術叫做Probing
link |
40:59.000
Probing就是用探針的意思
link |
41:02.000
就是你用探針去插入這個Network
link |
41:05.000
然後看看說發生了什麼事
link |
41:08.000
舉例來說
link |
41:09.000
假設你想要知道
link |
41:10.000
BERT的某一個Layer
link |
41:12.000
到底學到了什麼東西
link |
41:14.000
除了用肉眼觀察以外
link |
41:16.000
不過肉眼觀察比較有極限嘛
link |
41:18.000
可能有很多你沒有觀察到的現象
link |
41:20.000
而且你也沒有辦法一次看過
link |
41:21.000
大批的資料
link |
41:22.000
所以怎麼辦呢
link |
41:24.000
你可以訓練一個探針
link |
41:26.000
你的探針其實就是分類器
link |
41:29.000
舉例來說
link |
41:30.000
你訓練一個分類器
link |
41:31.000
這個分類器是要根據一個Feature
link |
41:34.000
根據一個向量
link |
41:35.000
決定說現在這個詞彙
link |
41:36.000
它的POS tag
link |
41:38.000
也就是它的詞性是什麼
link |
41:40.000
你就把BERT的Embedded
link |
41:42.000
丟到POS的Classifier裡面去
link |
41:45.000
你就訓練一個POS的Classifier
link |
41:47.000
它要試圖根據這些Embedded
link |
41:49.000
決定說現在這些Embedded
link |
41:51.000
是來自於哪一個詞性的詞彙
link |
41:53.000
如果這個POS的Classifier
link |
41:55.000
它的正確率高
link |
41:56.000
就代表說
link |
41:57.000
這些Embedded裡面
link |
41:58.000
有很多詞性的資訊
link |
42:00.000
如果它正確率低
link |
42:01.000
就代表這些Embedded裡面
link |
42:03.000
沒有詞性的資訊
link |
42:05.000
或者是說
link |
42:06.000
你認一個NER
link |
42:08.000
Name Entity Recognizer的Classifier
link |
42:10.000
然後呢
link |
42:11.000
它看這些Feature
link |
42:12.000
決定說現在看到的詞彙
link |
42:15.000
屬於哪一個
link |
42:16.000
屬於人名還是地名
link |
42:18.000
還是不是任何專有名詞
link |
42:19.000
那你透過這個NER Classifier的正確率
link |
42:22.000
就可以知道
link |
42:23.000
這些Feature裡面
link |
42:24.000
有沒有地址
link |
42:26.000
有沒有人名的資訊等等
link |
42:28.000
但是使用這個技術的時候
link |
42:30.000
有一點你要小心
link |
42:31.000
什麼你要小心呢
link |
42:33.000
小心你使用的Classifier
link |
42:35.000
它的強度
link |
42:36.000
為什麼
link |
42:37.000
因為假設你今天發現
link |
42:39.000
你的Classifier
link |
42:40.000
正確率很低
link |
42:41.000
真的一定保證
link |
42:43.000
它的輸入的這些Feature
link |
42:45.000
也就是BERT的Embedded
link |
42:46.000
沒有我們要分類的資訊嗎
link |
42:49.000
不一定
link |
42:50.000
為什麼
link |
42:51.000
因為有可能就是
link |
42:52.000
你的Classifier Train爛了
link |
42:53.000
對不對
link |
42:54.000
我們大家都有很多Train
link |
42:55.000
雷霍的經驗
link |
42:56.000
你沒有辦法百分之百保證
link |
42:57.000
你Classifier Train出來一定是好的
link |
42:59.000
那搞不好你訓練完一個Classifier
link |
43:01.000
它的正確率很低
link |
43:02.000
不是因為這些Feature裡面
link |
43:04.000
沒有我們需要的資訊
link |
43:05.000
單純就是你Learning Rate沒有調好
link |
43:07.000
你什麼東西沒有調好
link |
43:09.000
所以Train不起來
link |
43:10.000
有沒有可能是這樣呢
link |
43:11.000
有可能是這個樣子
link |
43:13.000
所以用Probe Model的時候
link |
43:15.000
要小心
link |
43:16.000
不要太快下結論
link |
43:17.000
有時候你會得到一些結論
link |
43:19.000
只是因為你Classifier沒有Train好
link |
43:21.000
或Train的太好
link |
43:22.000
導致你Classifier的正確率
link |
43:24.000
沒有辦法當作評斷的依據
link |
43:27.000
link |
43:28.000
那我知道說
link |
43:29.000
很快要下課了
link |
43:30.000
時間真的是過得很快
link |
43:31.000
我們講完一個語音的
link |
43:33.000
特殊的Probing的例子
link |
43:35.000
我們就下課
link |
43:37.000
Probing不一定要是Classifier
link |
43:40.000
我這邊特別舉一個例子
link |
43:42.000
告訴你說
link |
43:43.000
Probing有種種的可能性
link |
43:46.000
舉例來說
link |
43:47.000
我們實驗室有做一個嘗試
link |
43:48.000
是訓練一個語音合成的模型
link |
43:52.000
一般語音合成的模型
link |
43:53.000
是吃一段文字
link |
43:55.000
產生對應的聲音訊號
link |
43:57.000
我們這邊語音合成的模型
link |
43:58.000
不是吃一段文字
link |
44:00.000
它是吃Neo Output的Embedding
link |
44:03.000
它是Neo Output的Embedding
link |
44:04.000
作為輸入
link |
44:05.000
然後試圖去輸出一段聲音訊號
link |
44:08.000
也就是說你在作業2
link |
44:10.000
你訓練了一個Classifier
link |
44:12.000
接下來訓練了一個Phoning的Classifier
link |
44:15.000
接下來我們就把你的Neo拿出來
link |
44:18.000
然後把某一個Layer的輸出
link |
44:20.000
丟到TTS的模型裡面
link |
44:23.000
然後我們訓練這個TTS的模型
link |
44:25.000
我們訓練的目標
link |
44:26.000
是希望TTS的模型
link |
44:28.000
可以去複現Neo的輸入
link |
44:31.000
就Neo的輸入
link |
44:32.000
是這段聲音訊號
link |
44:33.000
希望通過這些Layer以後
link |
44:35.000
產生的Embedding
link |
44:36.000
丟到TTS以後
link |
44:37.000
可以回復原來的聲音訊號
link |
44:41.000
這樣子的分析有什麼用呢
link |
44:42.000
你可能想說
link |
44:43.000
我們訓練這個TTS
link |
44:44.000
產生原來的聲音訊號
link |
44:45.000
那不就產生原來的聲音訊號
link |
44:47.000
一模一樣的聲音訊號
link |
44:48.000
就是輸入的那一個
link |
44:49.000
那有什麼樣的可看性呢
link |
44:51.000
那這邊有趣的地方是
link |
44:53.000
假設這個Neo做的事情
link |
44:55.000
就是把比如說語者的資訊去掉
link |
44:58.000
那對於這個TTS的模型而言
link |
45:00.000
這邊Layer2的輸出
link |
45:01.000
沒有任何語者的資訊
link |
45:03.000
那它無論怎麼努力
link |
45:04.000
都無法還原語者的特徵
link |
45:07.000
那雖然內容說的是Hi
link |
45:09.000
然後是一個男生的聲音
link |
45:11.000
你會發現說
link |
45:12.000
可能通過幾個Layer以後
link |
45:14.000
丟到TTS的模型
link |
45:15.000
它這個產生出來的聲音
link |
45:18.000
會變成也是Hi的內容
link |
45:20.000
但是你聽不出來是誰講的
link |
45:22.000
那這樣你就可以知道說
link |
45:24.000
這個Neo
link |
45:25.000
一個語音辨識的模型
link |
45:26.000
它在訓練的過程中
link |
45:28.000
真的學到
link |
45:29.000
學到去抹去語者的特徵
link |
45:32.000
只保留內容的部分
link |
45:34.000
只保留聲音訊號的內容
link |
45:36.000
好 以下是真實的例子
link |
45:38.000
講完這個例子
link |
45:39.000
我們就下課
link |
45:40.000
這個例子是這樣子的
link |
45:42.000
這邊有一個5層的
link |
45:44.000
Bidirectional的LSTM
link |
45:46.000
它是聲音訊號做輸入
link |
45:48.000
那輸出就是文字
link |
45:49.000
它是語音辨識的模型
link |
45:51.000
好 那現在我們給它
link |
45:52.000
一段聲音訊號做輸入
link |
45:59.000
是女生的聲音
link |
46:04.000
接下來再給它聽另外一個
link |
46:06.000
男生講不一樣的內容
link |
46:07.000
聽起來像是這樣子
link |
46:15.000
接下來我們把這些聲音訊號
link |
46:16.000
丟到這個Network裡面
link |
46:18.000
然後再把這個
link |
46:20.000
Network的Embedding
link |
46:21.000
用TTS的模型
link |
46:22.000
去還原回原的聲音訊號
link |
46:24.000
看看我們聽到什麼
link |
46:26.000
以下是過第一層LSTM的結果
link |
46:33.000
你會發現聲音訊號
link |
46:34.000
有一點失真
link |
46:36.000
但基本上跟原來是差不多的
link |
46:40.000
男生的聲音是這樣子
link |
46:49.000
跟原來都是差不多的
link |
46:50.000
但通過了5層的LSTM以後
link |
46:52.000
發生什麼事呢
link |
46:53.000
聲音訊號變成這個樣子
link |
47:14.000
本來一個句子是男生講
link |
47:16.000
一個句子是女生講
link |
47:17.000
通過5層的LSTM以後
link |
47:19.000
你就聽不出來是誰講
link |
47:21.000
他把兩個的聲音都變成是一樣的
link |
47:23.000
那你可能說
link |
47:24.000
這個不是10年前
link |
47:25.000
Hinton就已經知道了嗎
link |
47:27.000
透過Visualization
link |
47:28.000
然後這個研究
link |
47:29.000
有什麼厲害的地方呢
link |
47:31.000
他厲害的地方就是
link |
47:32.000
他曹知道嗎
link |
47:33.000
就是我們可以把聲音
link |
47:34.000
我們可以聽Network聽到的聲音
link |
47:37.000
我這邊再舉最後一個例子
link |
47:39.000
書的聲音訊號是有雜訊的
link |
47:41.000
有鋼琴的聲音
link |
47:52.000
我們的Network
link |
47:53.000
現在前面有幾層CNN
link |
47:55.000
後面有幾層
link |
47:56.000
Bidirectional的LSTM
link |
47:58.000
通過第一層CNN以後
link |
48:00.000
聲音訊號變成這樣
link |
48:02.000
好 你還是聽得到鋼琴的聲音
link |
48:04.000
好 最後
link |
48:05.000
在最後一層
link |
48:06.000
進入LSTM之前
link |
48:07.000
聲音訊號是這樣的
link |
48:18.000
你還是聽得到鋼琴的聲音
link |
48:20.000
但是通過第一層LSTM以後
link |
48:22.000
就不一樣了
link |
48:23.000
聽起來像是這樣
link |
48:24.000
然後最後一層
link |
48:25.000
進入LSTM之前
link |
48:26.000
你還是聽得到鋼琴的聲音
link |
48:42.000
你會發現說
link |
48:43.000
那個鋼琴的聲音
link |
48:44.000
就突然小很多
link |
48:45.000
所以知道說
link |
48:46.000
這個鋼琴的聲音
link |
48:47.000
這個雜訊
link |
48:48.000
聲音訊號之外的雜訊
link |
48:49.000
是在哪一層被濾掉的呢
link |
48:51.000
在第一層LSTM開始被濾掉
link |
48:53.000
前面CNN似乎沒有起到濾掉雜訊的作用
link |
48:57.000
那這個就是這個分析
link |
48:58.000
可以告訴我們的事情
link |
49:00.000
好 那我們到講到這邊
link |
49:02.000
正好告一個段落
link |
49:03.000
我們就趕快下課吧
link |
49:05.000
那大家有問題還可以留下來討論
link |
49:07.000
謝謝大家 謝謝