back to index

Explainable ML (5/8)


link |
00:00.000
好,那剛才呢,我們是用人想的一些人想的一些function來告訴機器說
link |
00:09.000
什麼樣的東西看起來像是一張正常的image
link |
00:14.000
那事實上我們現在可以做得更好,因為我們知道說現在有一些generated model
link |
00:20.000
我們可以訓練比如說image的generator
link |
00:24.000
你只要先事先收集好一大堆圖片,你就可以教機器怎麼去產生圖片
link |
00:31.000
我們可以訓練這個image的generator,那些image的generator他做的事情是
link |
00:36.000
給他看一個low dimensional的像量,給他看一個低維度的像量
link |
00:41.000
然後他就會把這個低維度的像量,通過這個image的generator以後
link |
00:46.000
變成一張圖片,那通常這個低維度的像量就是從某一個定好的
link |
00:51.000
事先定好的distribution裡面sample出來的
link |
00:54.000
比如說他這個Z可能是從一個Gaussian distribution
link |
00:58.000
或從一個Normal distribution裡面sample出來的
link |
01:01.000
那你把這個Z丟到image的generator裡面,他就會畫一張圖片出來
link |
01:06.000
那怎麼根據這些訓練的資料,訓練出這個image的generator呢?
link |
01:11.000
你可以用GAN或者是VAE的方法,那這堂課裡面我們還沒有講到GAN或者是VAE
link |
01:16.000
沒有關係,你就知道說反正有一些方法可以讓我們訓練出一個generator
link |
01:20.000
這個generator他吃一個random的像量,他輸出又是一張圖片
link |
01:26.000
那我這個generator可以想成就是一個function G
link |
01:30.000
那他的輸出的image X呢,他就是G
link |
01:34.000
輸入的這個low dimensional低維度的像量Z
link |
01:38.000
那怎麼把這個image的generator用來限制我們要機器畫出來的圖片呢?
link |
01:46.000
你可以這麼做,你把image的generator吃一個Z,他就會output一個image X
link |
01:51.000
你把這個image X丟到image的classifier裡面,他就會輸出一個Y
link |
01:56.000
原來如果我們想要知道對機器來說,某一個class I呢
link |
02:02.000
對機器來說某一個class I理想的圖片長什麼樣子的時候
link |
02:07.000
我們是去找一張image,這個image可以讓YI的值越大越好
link |
02:13.000
我們找一個image,他可以讓YI的值越來越好,這是我們原來的做法
link |
02:17.000
如果再加上一個generator以後,我們其實可以這麼做
link |
02:22.000
如果再加上一個generator以後,我們本來是要找一個最好的X
link |
02:26.000
現在我們變成不是找一個最好的X,而是找一個最好的Z
link |
02:31.000
我們希望找到某一個Z,這個Z呢,通過image的generator產生一張圖片
link |
02:37.000
再把這張圖片丟到image的classifier以後
link |
02:40.000
可以讓某一個類別的信心分數越大越好
link |
02:44.000
把Z丟到image的generator產生image,再把image丟到classifier以後
link |
02:49.000
會得到一個Y,然後我們希望能夠讓Y裡面的某一個class
link |
02:53.000
他的值越大越好
link |
02:55.000
那我們就可以,其實這個方法也是用過一些decent解的
link |
02:59.000
因為你可以想像說image的generator跟image的classifier都串在一起
link |
03:03.000
你可以把這個image的generator跟image的classifier串在一起
link |
03:06.000
就變成一個巨大的很深的聯網
link |
03:09.000
好,那你有這個很深的聯網以後呢
link |
03:12.000
這個Z就變成這個很深的聯網的input
link |
03:15.000
這個Y就是這個很深的聯網的輸出
link |
03:17.000
所以你可以用gradient descent的方法,或其實是gradient ascent的方法
link |
03:21.000
因為我們是到next賣這個東西,所以是gradient ascent
link |
03:23.000
你可以去調這個Z,讓你得到一個你理想中的Y
link |
03:28.000
然後呢,你再把這個得到的理想的Z呢
link |
03:32.000
這個最好的Z star呢,丟到generator裡面,畫出你的X star
link |
03:37.000
所以本來我們是直接找一個X star,它可以讓YI呢越大越好
link |
03:43.000
現在我們變成找一個Z star,它可以讓YI越大越好
link |
03:48.000
再把這個Z star丟到generator裡面產生一個image X star
link |
03:52.000
把Z star丟到generator裡面產生image X star
link |
03:55.000
那為什麼要這麼做呢?
link |
03:57.000
你可以想想看這個generator,其實就提供我們一個限制
link |
04:01.000
因為這個generator畫出來的,看起來
link |
04:04.000
這個generator畫出來的東西,看起來都像是正常的圖片
link |
04:09.000
如果我們今天讓機器自己去隨便找一個X
link |
04:12.000
它找出來的X star可能完全不像是我們人可以解釋的人看得懂的image
link |
04:18.000
但是因為這個generator,它產生出來的都是人看得懂的image
link |
04:23.000
看起來都像是一般我們會出現的image
link |
04:26.000
所以你現在把你的這個搜尋的範圍縮減在
link |
04:29.000
你只能夠找一個Z,你只能夠找一個Z
link |
04:32.000
你可以找各式各樣不同的Z,但是你只能找一個Z
link |
04:34.000
這個Z丟到generator,它一定會產生一張好的
link |
04:37.000
它通常會產生一張好的image
link |
04:39.000
你把你搜尋的範圍限制在找一個最好的Z
link |
04:42.000
你就可以確保說你現在找出來的image的X star
link |
04:45.000
看起來像是正常的image
link |
04:48.000
那用這樣的方法你可以得到什麼樣的結果呢?
link |
04:51.000
在文獻上我看到最好的結果大概可以做出來像這個樣子
link |
04:54.000
所以你叫機器,你問機器說
link |
04:57.000
你心裡的螞蟻長什麼樣子呢?
link |
04:59.000
那就畫一堆螞蟻出來
link |
05:01.000
你心裡的修道院長什麼樣子呢?
link |
05:04.000
就畫一堆修道院出來
link |
05:06.000
你心裡的火山長什麼樣子呢?
link |
05:08.000
就畫一堆火山出來
link |
05:10.000
那實際上要真的得到這麼好的結果
link |
05:13.000
還是要動一些手腳的
link |
05:15.000
實際上的方法我就把這個reference
link |
05:17.000
連在左下角給大家參考
link |
05:20.000
那這個就是有關global explanation的部分
link |
05:23.000
想問大家有問題要問嗎?
link |
05:26.000
可以這麼說
link |
05:34.000
生成一個圖片
link |
05:36.000
你可以解釋成說我們一個generator
link |
05:40.000
那本來generator你沒有辦法控制它生成的東西
link |
05:43.000
它就亂亂,它就隨機生成
link |
05:45.000
但是你現在要求generator生成一張圖片
link |
05:48.000
丟到那個pressure pipe以後
link |
05:50.000
pressure pipe覺得說那張圖片是個火山
link |
05:52.000
或者是個螞蟻等等
link |
05:54.000
你控制generator要生成什麼樣的類別的圖片
link |
06:07.000
你也可以這麼解釋
link |
06:09.000
但是這個image classifier
link |
06:11.000
它的discriminator是不一樣的
link |
06:13.000
discriminator它是判斷好或壞
link |
06:15.000
對不對
link |
06:16.000
然後這個image classifier
link |
06:17.000
它是判斷不同的類別
link |
06:19.000
而且這邊跟電腦還不一樣的地方是說
link |
06:21.000
這個image classifier是固定住的
link |
06:24.000
它並沒有跟著generator train
link |
06:26.000
它是被固定住的
link |
06:28.000
而這個generator其實也是固定住的
link |
06:31.000
這個generator不一定要用gain的方法train出來
link |
06:33.000
反正它就是
link |
06:34.000
商號不知道從哪裡來的一個
link |
06:36.000
可以產生圖片的generator
link |
06:37.000
不管它是用gain train出來的
link |
06:38.000
還是用VA train出來的
link |
06:39.000
都可以你把它固定住放在這邊
link |
06:41.000
因為image classifier是4.1序列好
link |
06:43.000
我們現在只是想要解釋它
link |
06:44.000
想要知道說
link |
06:45.000
它心裡看起來的某種圖片長什麼樣子
link |
06:47.000
想要解釋它
link |
06:48.000
所以它還是被固定下來的
link |
06:49.000
然後我們只會去調動這個Z
link |
06:51.000
其他地方都是不會改的
link |
06:54.000
這樣大家有問題要問嗎
link |
06:57.000
請說
link |
07:06.000
它可以產生所有的圖片
link |
07:07.000
但是我們本來沒有辦法控制
link |
07:09.000
它要產生什麼樣的圖片
link |
07:11.000
本來它就是
link |
07:12.000
你隨機就一個向量Z進去
link |
07:14.000
它可能產生貓可能產生狗
link |
07:15.000
可能產生任何的東西
link |
07:18.000
它可以產生各式各樣的圖片
link |
07:19.000
你沒辦法控制它
link |
07:20.000
但是我們現在加這個classifier
link |
07:22.000
就引導它說
link |
07:23.000
因為本來這個Z
link |
07:24.000
你sample不同的Z
link |
07:25.000
你就會產生不同的圖片
link |
07:27.000
有些Z代表狗
link |
07:28.000
有些Z代表貓
link |
07:29.000
但是我們並不知道
link |
07:30.000
哪些Z是狗哪些Z是貓
link |
07:32.000
但是加上這個classifier以後
link |
07:34.000
我們會去假設這個classifier
link |
07:35.000
那個YI你設計的是狗
link |
07:37.000
你現在只要說這個classifier
link |
07:38.000
心裡的狗長什麼樣子
link |
07:40.000
就是找一個Z
link |
07:41.000
這個Z丟到image generator裡頭
link |
07:43.000
它可以產生狗的圖片
link |
07:45.000
這樣有回答到你們的問題嗎
link |
07:50.000
其實你也可以用conditional gate
link |
07:51.000
但因為我們這邊
link |
07:52.000
今天的目標並不是說
link |
07:54.000
要訓練出一個generation
link |
07:56.000
那conditional gate
link |
07:57.000
其實在之後的錄影裡面是有的
link |
07:58.000
但是我們重點並不是要做generation
link |
08:01.000
而是希望透過generation
link |
08:04.000
給我們的content
link |
08:05.000
我們知道對機器來說
link |
08:07.000
會被它辨識成狗的圖片長怎麼樣
link |
08:09.000
或者變成貓的圖片長怎麼樣