back to index

【機器學習 2022】語音與影像上的神奇自督導式學習 (Self-supervised Learning) 模型


link |
00:00.000
好,那今天這堂課呢,是想跟大家分享
link |
00:05.000
怎麼把Self-Supervised Learning的技術用在語音跟影像上
link |
00:12.000
好,那在上課的錄影中啊,我們已經講過
link |
00:16.000
怎麼把Self-Supervised Learning用在文字上
link |
00:20.000
那這邊很快地幫大家做一下複習
link |
00:23.000
那我們說,在Self-Supervised Learning在文字上的應用上
link |
00:28.000
最知名的模型是什麼呢?
link |
00:30.000
最知名的模型就是無人不知、無人不曉的BERT
link |
00:35.000
那BERT是怎麼訓練出來的呢?
link |
00:38.000
BERT的訓練過程不需要有標注的文字
link |
00:42.000
你只需要收集到一大堆的沒有標注的文字資料
link |
00:47.000
你可以從網路上隨便排大堆文章
link |
00:50.000
就可以訓練出這個BERT的模型
link |
00:54.000
那BERT這個模型啊,具體而言它做的事情是
link |
00:57.000
給它一段文字,接下來呢
link |
01:00.000
它會輸出一串representation
link |
01:04.000
輸出一排vector
link |
01:06.000
那輸入的文字裡面的每一個token都有一個對應的vector
link |
01:12.000
那這些vector可以拿來做什麼用呢?
link |
01:15.000
那我們在上課的時候呢
link |
01:17.000
已經講過了四種使用BERT的方法
link |
01:20.000
那如果你忘記的話,你就去複習一下上課的錄影
link |
01:25.000
我把上課錄影的連結也貼在這邊
link |
01:28.000
舉例來說,假設你現在要做的事情是sentiment analysis
link |
01:34.000
sentiment analysis就是給機器一篇文章
link |
01:37.000
機器告訴你說這篇文章是正面的文章還是負面的文章
link |
01:43.000
它的內容是正面的還是負面的
link |
01:46.000
那一般要做這種任務
link |
01:48.000
你當然需要收集一下標注的資料
link |
01:51.000
你需要標注一些文章
link |
01:53.000
它的內容是正面的,標注一些文章
link |
01:55.000
它的內容是負面的
link |
01:57.000
接下來用這些資料來訓練一個model
link |
02:01.000
那如果你今天有BERT的話
link |
02:03.000
那你的sentiment analysis的model就可以很簡單
link |
02:08.000
你的model就是把BERT的輸出的這些向量當作輸入
link |
02:14.000
然後就輸出輸入的這段向量
link |
02:19.000
所對應的文字是正面的還是負面的
link |
02:22.000
那這些有標注的資料
link |
02:24.000
你有時候只需要拿它來訓練這個downstream的model
link |
02:30.000
也就是BERT以外的部分就好了
link |
02:32.000
那如果這個downstream的model很簡單的話
link |
02:35.000
舉例來說,在上課的例子裡面
link |
02:37.000
通常這個downstream的model它就只是一個linear的model
link |
02:41.000
它就只是一個向量而已
link |
02:43.000
那你就不需要用到太多的訓練資料
link |
02:46.000
當然今天通常你在用BERT的時候
link |
02:48.000
除了直接訓練這個downstream model以外
link |
02:51.000
有時候你也會用這些標注的資料來微調一下BERT
link |
02:56.000
讓它可以適應不同的任務
link |
02:58.000
那這個是簡短的複習一下
link |
03:01.000
怎麼把cell supervised learning用在文字上
link |
03:05.000
那今天的重點是
link |
03:07.000
怎麼把這些技術用在語音或用在影像上呢
link |
03:13.000
那我們先以語音為例子
link |
03:16.000
就大的框架上看起來
link |
03:18.000
其實把cell supervised learning用在語音上
link |
03:21.000
跟用在文字上
link |
03:23.000
它的大框架其實並沒有非常的不同
link |
03:27.000
我們可以有一個語音版的BERT
link |
03:30.000
這個語音版的BERT
link |
03:31.000
一樣是透過大量的沒有標注的聲音訊號所訓練出來的
link |
03:36.000
你就爬了一大堆的聲音訊號
link |
03:38.000
網路上隨便爬就有
link |
03:39.000
不需要任何文字的標注
link |
03:41.000
也不需要標注這些句子是誰講的
link |
03:43.000
反正就爬到一大堆聲音訊號
link |
03:45.000
然後訓練出一個語音版的BERT
link |
03:48.000
語音版的BERT做的事情是
link |
03:50.000
給他聽一段聲音訊號
link |
03:52.000
他會把這段聲音訊號變成一排向量
link |
03:57.000
所以他其實跟文字的BERT做的事情是一樣的
link |
04:00.000
文字的BERT給他一個句子
link |
04:02.000
他給你一排向量
link |
04:04.000
語音版的BERT聽一段聲音訊號
link |
04:07.000
他也給你一排向量
link |
04:10.000
接下來這排向量要怎麼被使用呢
link |
04:13.000
那假設你今天要做的是語音辨識
link |
04:17.000
把聲音訊號轉寫為文字
link |
04:20.000
那你需要收集少量的聲音訊號
link |
04:22.000
然後請工讀生幫你標一下
link |
04:25.000
這些聲音訊號對應的文字是什麼
link |
04:27.000
接下來你就可以訓練一個語音辨識的模型
link |
04:31.000
這個語音辨識的模型
link |
04:33.000
是把這個語音版的BERT
link |
04:35.000
他輸出的這些結果作為輸入
link |
04:38.000
然後產生語音辨識的結果
link |
04:41.000
這些少量的標註的資料
link |
04:43.000
只需要拿來訓練這個當訓的模型
link |
04:47.000
多數困難的任務
link |
04:49.000
由語音版的BERT來完成
link |
04:51.000
少量的標註資料
link |
04:53.000
只需要訓練這個當訓的模型
link |
04:56.000
吃語音版的BERT的輸出
link |
04:58.000
然後把語音版BERT的輸出
link |
05:01.000
變成語音辨識的結果
link |
05:04.000
那因為
link |
05:05.000
你知道如果今天你要訓練一個好的語音辨識的模型
link |
05:09.000
如果你沒有用Sales Supervisor的技術
link |
05:12.000
你直接想要訓練一個end-to-end的model
link |
05:15.000
往往會需要非常大量的有標註的資料
link |
05:20.000
你通常要個上萬個小時的聲音訊號
link |
05:23.000
加上這些聲音訊號所對應的標註
link |
05:26.000
你才有辦法訓練一個好的語音辨識系統
link |
05:30.000
但是今天再有這種語音版的BERT
link |
05:32.000
等一下我們會看到很多語音版的BERT的例子
link |
05:35.000
比如說Huber
link |
05:36.000
比如說Web2Vec等等
link |
05:38.000
其實有了這樣子語音版的BERT以後
link |
05:40.000
通常今天在做語音辨識的人
link |
05:45.000
很多人都想要再挑戰
link |
05:46.000
能不能做一些什麼10分鐘
link |
05:48.000
就只用10分鐘的資料
link |
05:50.000
就訓練語音辨識的模型
link |
05:52.000
所以今天在你沒有大量的標註資料的時候
link |
05:55.000
這種語音版的BERT
link |
05:57.000
其實確實可以給我們帶來很大的幫助
link |
06:00.000
當然你一樣可以用這一些有標註的資料
link |
06:03.000
去微調語音版的BERT
link |
06:05.000
讓他可以適應你想要解的任務
link |
06:08.000
但是其實在文件上我們發現
link |
06:10.000
微調語音版的BERT往往不是必要的
link |
06:15.000
往往固定住語音版的BERT
link |
06:17.000
只微調當訊的模型
link |
06:19.000
就可以得到不錯的結果了
link |
06:23.000
好 那就好像在文字上
link |
06:25.000
有一個東西叫做Glue
link |
06:27.000
我們上課的時候跟大家提過Glue
link |
06:29.000
說今天如果你要衡量
link |
06:31.000
像BERT這種Sales Supervised Model的好壞
link |
06:34.000
你不會只做一個自然語言處理的任務
link |
06:38.000
往往是解個9個自然語言處理的任務
link |
06:41.000
看看BERT是不是在9個任務上
link |
06:43.000
都可以有好的結果
link |
06:45.000
好 那在語音領域
link |
06:47.000
其實也有語音版的Glue
link |
06:50.000
這邊我們叫做SUPERB
link |
06:53.000
他是Speech Processing Universal Performance Benchmark的縮寫
link |
06:57.000
然後你可以在這邊找到SUPERB的官網
link |
07:01.000
然後可以學到更多相關的事情
link |
07:04.000
好 那在SUPERB裡面
link |
07:06.000
目前我們已經至少衡量了
link |
07:09.000
14個不同的跟語音相關的任務
link |
07:13.000
也就是說你有一個Sales Supervised Learning的Model
link |
07:16.000
用大量的沒有標註的聲音訊號訓練出來的
link |
07:20.000
現在不會只用在某一個任務上
link |
07:24.000
比如說不會只用在語音辨識上
link |
07:27.000
現在一個Sales Supervised Model
link |
07:29.000
我們會讓他來解這個投影片上的14個任務
link |
07:34.000
看看他可不可以在14個任務上面
link |
07:36.000
都有好的表現
link |
07:38.000
好 那這邊這14個任務
link |
07:40.000
其實囊括了非常多不同的面向
link |
07:42.000
包括有一些任務是跟
link |
07:45.000
了解聲音訊號的內容有關的
link |
07:48.000
比如說語音辨識
link |
07:50.000
就是跟了解聲音訊號內容有關
link |
07:53.000
或者是Keyword Spotting
link |
07:55.000
也跟聲音訊號內容有關
link |
07:57.000
Keyword Spotting就是你常常聽到的那個喚醒詞
link |
08:01.000
就是你今天說Hey Siri
link |
08:03.000
機器知道你有說Hey Siri
link |
08:05.000
然後它就被喚醒了
link |
08:06.000
這個就是Keyword Spotting的一個應用
link |
08:09.000
也有一些跟語者相關的任務
link |
08:12.000
包括語者辨識
link |
08:15.000
語者驗證
link |
08:17.000
還有Speaker Dialogization
link |
08:20.000
其實語者驗證跟語者辨識
link |
08:22.000
其實不是
link |
08:23.000
語者驗證跟語者辨識
link |
08:26.000
這些任務聽起來名字很像
link |
08:27.000
但他們其實不是同一個任務
link |
08:29.000
不過今天這不是語音的課
link |
08:31.000
我們就不講這些細節
link |
08:33.000
也有一些跟Paralinguistic有關的任務
link |
08:37.000
比如說情感辨識
link |
08:39.000
也有一些跟語意理解有關的任務
link |
08:43.000
我們能不能讓機器直接從聲音的訊號
link |
08:47.000
去理解它的內容呢
link |
08:49.000
舉例來說能不能直接做語音翻譯
link |
08:52.000
聽一段中文就直接輸出英文的文字呢
link |
08:56.000
這邊有一系列的任務
link |
08:58.000
是跟直接從聲音訊號的內容
link |
09:01.000
了解它的語意有關的
link |
09:04.000
那我們也做了一些
link |
09:06.000
跟聲音合成有關的任務
link |
09:08.000
比如說語音轉換
link |
09:10.000
語音增強
link |
09:12.000
語音分離等等
link |
09:14.000
總之這邊想要跟你表達的是說
link |
09:16.000
今天這種Sales Supervised的語音的模型
link |
09:20.000
跟文字一樣
link |
09:22.000
也可以用在非常多不同的任務上
link |
09:26.000
那如果你想知道更多
link |
09:28.000
這個語音的Sales Supervised Learning的模型
link |
09:32.000
怎麼被用在各種語音相關的任務上的話
link |
09:36.000
你可以參考這兩篇論文
link |
09:38.000
一篇是Superb
link |
09:40.000
一篇是Superb SG
link |
09:42.000
分別發表在去年的InterSpeech
link |
09:44.000
跟今年的ACL上面
link |
09:48.000
要怎麼把這些Sales Supervised Learning的模型
link |
09:51.000
用在大量的各式各樣
link |
09:53.000
非常不一樣的語音相關的任務上
link |
09:56.000
那就不是我們今天想要細講的
link |
09:58.000
那如果你有興趣的話
link |
10:00.000
你再參考一下文獻
link |
10:02.000
如果你想要知道這些Sales Supervised Learning的模型
link |
10:05.000
在這些任務上的表現如何
link |
10:08.000
那這個也不是我們今天會細講的內容
link |
10:10.000
那我過去其實有錄一個影片呢
link |
10:12.000
專門講這些Sales Supervised Learning的模型
link |
10:16.000
在Superb這個Benchmark上面
link |
10:18.000
有什麼樣的表現
link |
10:20.000
那你可以在這邊找到中文版的影片
link |
10:23.000
找到英文版的影片
link |
10:25.000
那總之結果非常的驚人
link |
10:27.000
這些結果讓我發現語音的Sales Supervised Learning
link |
10:31.000
真的是一個非常有潛力的研究方向
link |
10:34.000
這些Sales Supervised Model
link |
10:36.000
它幾乎可以說是十項全能
link |
10:39.000
在各式各樣不同的任務上
link |
10:41.000
連微調都不用就直接有好的結果
link |
10:44.000
那詳情如何
link |
10:45.000
那你再看我這邊附的這個影片連結
link |
10:49.000
那這個語音的Sales Supervised Learning
link |
10:52.000
其實是有一個Toolkit可以用的
link |
10:54.000
因為你要把這種Sales Supervised Model
link |
10:57.000
用在各式各樣不同的任務上
link |
11:00.000
怎麼用
link |
11:01.000
那其實沒有那麼容易
link |
11:03.000
那這邊呢有一個Toolkit
link |
11:05.000
這是語音處理實驗室的同學實作的
link |
11:08.000
那這個Toolkit呢
link |
11:10.000
可以幫助你把Sales Supervised Learning的模型
link |
11:13.000
用在各式各樣語音相關的任務上
link |
11:17.000
好那這邊是有關語音的部分
link |
11:20.000
那這一段是想要跟你強調說
link |
11:22.000
在語音處理上Sales Supervised Learning
link |
11:25.000
也是很猛的
link |
11:26.000
就跟文字上面Bird
link |
11:28.000
被用在各式各樣的任務上一樣
link |
11:30.000
在語音領域Sales Supervised Learning
link |
11:33.000
也用在各式各樣的任務上
link |
11:36.000
好那在影像上呢
link |
11:38.000
在影像上也不遑多讓
link |
11:40.000
你可以看一下以下這兩篇論文
link |
11:42.000
這兩篇論文呢
link |
11:44.000
把Sales Supervised Learning
link |
11:46.000
用在各式各樣影像的任務上
link |
11:49.000
包括比如說大家都知道的影像辨識
link |
11:52.000
還有這個Object Detection
link |
11:55.000
還有Semantic Segmentation
link |
11:58.000
還有Visual Navigation
link |
12:00.000
Visual Navigation就是說
link |
12:01.000
想像你一個機器人
link |
12:03.000
然後呢他要學習
link |
12:04.000
怎麼從房間的某一個位置
link |
12:06.000
走到另外一個位置
link |
12:07.000
他當然需要有這個理解
link |
12:09.000
房間物件擺設的能力
link |
12:12.000
那這個時候Sales Supervised Learning
link |
12:14.000
就可以幫上忙
link |
12:15.000
那你可以看以下這兩篇文章
link |
12:17.000
看看這個Sales Supervised Learning
link |
12:19.000
在影像上有哪些應用
link |
12:22.000
那Sales Supervised Learning
link |
12:23.000
在影像上的表現如何呢
link |
12:25.000
跟語音跟文字的結論也是很像的
link |
12:28.000
那我這邊呢
link |
12:30.000
特別從一篇Overview的文章
link |
12:33.000
找了一個圖片
link |
12:35.000
這個圖上面呢
link |
12:36.000
是摘要了近年來在影像上
link |
12:39.000
Sales Supervised Learning
link |
12:41.000
這些模型
link |
12:42.000
他的在不同任務上的
link |
12:45.000
效能表現如何
link |
12:47.000
那橫軸呢
link |
12:48.000
橫軸是各式各樣的模型
link |
12:51.000
那這麼多不同的模型
link |
12:52.000
有的今天會提到
link |
12:54.000
比如說Syncio、Moco
link |
12:56.000
還有這個Deep Cluster
link |
12:57.000
是今天會提到的
link |
12:58.000
那有的呢
link |
12:59.000
還有Boyo
link |
13:00.000
也會今天提到
link |
13:01.000
有的是今天不會提到的
link |
13:03.000
好那這些模型呢
link |
13:05.000
可以被用在各式各樣
link |
13:07.000
跟影像處理相關的任務上
link |
13:09.000
包括最標準的影像辨識
link |
13:12.000
還有物件偵測
link |
13:14.000
還有影像分割
link |
13:17.000
那這邊的每一個點
link |
13:19.000
不同的形狀就代表不同的任務
link |
13:21.000
那每一個點呢
link |
13:23.000
他的縱軸呢
link |
13:24.000
代表這個模型
link |
13:26.000
用在某一個任務上
link |
13:27.000
他的效能如何
link |
13:30.000
那你發現這邊
link |
13:31.000
有一條很有趣的虛線
link |
13:34.000
這條虛線是他上面標註的
link |
13:36.000
是Supervised Learning
link |
13:38.000
那你乍看這個圖
link |
13:40.000
你可能會覺得說
link |
13:41.000
多數的這些不同的模型
link |
13:45.000
在各種不同任務上的表現
link |
13:47.000
都遜於Supervised Learning
link |
13:50.000
這樣不是顯示
link |
13:51.000
Self-Supervised Learning
link |
13:52.000
其實沒有什麼厲害的嗎
link |
13:54.000
我跟你講
link |
13:55.000
這個Supervised Learning
link |
13:56.000
這一條線
link |
13:57.000
跟你想像的意思是不一樣
link |
13:59.000
這一條Supervised Learning的線
link |
14:01.000
是什麼意思呢
link |
14:02.000
他是說
link |
14:03.000
我們知道
link |
14:04.000
Self-Supervised Learning
link |
14:05.000
需要大量的
link |
14:06.000
沒有標註的資料來訓練
link |
14:08.000
對不對
link |
14:09.000
所以今天影像也是一樣
link |
14:11.000
你需要大量的
link |
14:12.000
沒有標註的影像
link |
14:15.000
一大堆的圖片
link |
14:16.000
但你沒有人去標註說
link |
14:17.000
這些圖片裡面有什麼東西
link |
14:19.000
有貓還是有狗
link |
14:20.000
還是有其他生物
link |
14:21.000
沒有任何標註
link |
14:22.000
大量的圖片
link |
14:23.000
讓機器自動去學
link |
14:25.000
然後自動去學完以後
link |
14:27.000
用少量的標註
link |
14:28.000
去在某個任務上進行微調
link |
14:30.000
得到的點
link |
14:31.000
就是這邊各個不同任務上的
link |
14:34.000
各種形狀
link |
14:35.000
各種顏色的點
link |
14:36.000
曲線這一條是
link |
14:38.000
假設那些沒有標註的影像
link |
14:41.000
其實是有標註的
link |
14:44.000
因為其實在
link |
14:45.000
這個影像的Community
link |
14:47.000
他們有非常大的
link |
14:49.000
有標註的資料庫
link |
14:50.000
比如說ImageNet
link |
14:52.000
假設這些影像
link |
14:54.000
這些本來在
link |
14:56.000
Self-Supervised Learning的
link |
14:57.000
Framework裡面
link |
14:58.000
是沒有標註的影像
link |
15:00.000
實際上是有標註的
link |
15:03.000
那結果如何
link |
15:04.000
是這一條曲線
link |
15:06.000
最神奇的事情是
link |
15:08.000
很多Self-Supervised Learning的Model
link |
15:11.000
它的結果
link |
15:12.000
還超過了
link |
15:13.000
Supervised Learning的曲線
link |
15:15.000
也就是說
link |
15:16.000
如果給你一個
link |
15:17.000
很大的影像的資料庫
link |
15:20.000
這些Self-Supervised Learning的方法
link |
15:22.000
會告訴你說
link |
15:23.000
你可以直接用
link |
15:24.000
這個沒有標註的資料
link |
15:25.000
就算是有人
link |
15:26.000
把這個沒有標註的資料
link |
15:27.000
通通都下了標註
link |
15:29.000
結果也不會比較好
link |
15:30.000
這些標註是多餘的
link |
15:32.000
不需要那些標註
link |
15:34.000
就可以得到更好的結果
link |
15:36.000
所以今天
link |
15:37.000
Self-Supervised Learning
link |
15:38.000
在某些任務上
link |
15:39.000
居然比這條曲線還要好
link |
15:40.000
其實是蠻驚人的一件事情
link |
15:43.000
好 那以上呢
link |
15:44.000
就是對
link |
15:45.000
Self-Supervised Learning
link |
15:46.000
在語音跟影像上的
link |
15:48.000
一些效能的吹捧
link |
15:50.000
告訴你說
link |
15:51.000
這些技術
link |
15:52.000
是非常有潛力的
link |
15:54.000
那接下來
link |
15:55.000
就要講說
link |
15:56.000
那在影像上
link |
15:58.000
在語音上
link |
15:59.000
我們要怎麼訓練
link |
16:01.000
這種Self-Supervised Learning的Model呢
link |
16:03.000
怎麼訓練語音版的BERT
link |
16:06.000
怎麼訓練影像版的BERT呢
link |
16:09.000
那我今天呢
link |
16:11.000
會跟大家介紹
link |
16:12.000
五大類的方法
link |
16:14.000
那第一類的方法
link |
16:15.000
叫做Generative的方法
link |
16:18.000
這一類的方法呢
link |
16:19.000
在文字上
link |
16:20.000
已經被用的很多了
link |
16:23.000
那你可以把這一類的方法
link |
16:24.000
想成
link |
16:25.000
就是把文字上
link |
16:26.000
已經非常成功的BERT系列
link |
16:29.000
跟GPT系列
link |
16:31.000
拿來語音上
link |
16:32.000
拿來影像上
link |
16:34.000
用用看
link |
16:35.000
看看結果會怎麼樣
link |
16:38.000
好 那如果我們把BERT
link |
16:41.000
用在語音上
link |
16:44.000
怎麼用呢
link |
16:45.000
我們知道文字上的BERT
link |
16:47.000
就是給一段文字
link |
16:48.000
把一些地方蓋起來
link |
16:50.000
然後呢
link |
16:51.000
叫機器做填空題
link |
16:53.000
那同樣的概念
link |
16:55.000
完全可以直接被用在語音上
link |
16:58.000
就是給你一段聲音訊號
link |
17:01.000
然後呢
link |
17:02.000
你就把聲音訊號的某些部分
link |
17:05.000
蓋起來
link |
17:07.000
這邊所謂的蓋起來的意思就是
link |
17:10.000
比如說把那段聲音訊號
link |
17:12.000
要蓋起來的部分
link |
17:13.000
通通把值呢
link |
17:14.000
替換為0
link |
17:15.000
就叫做蓋起來
link |
17:17.000
好 你把聲音訊號蓋起來以後
link |
17:19.000
接下來你要模型做的事情就是
link |
17:22.000
把這段聲音訊號
link |
17:24.000
包括有蓋起來的部分
link |
17:26.000
讀進去
link |
17:27.000
產生一排像量
link |
17:29.000
接下來呢
link |
17:30.000
要用這一排像量
link |
17:31.000
去還原被蓋起來的部分
link |
17:35.000
還原被蓋起來的部分
link |
17:37.000
那這個概念
link |
17:39.000
跟文字的BERT
link |
17:40.000
幾乎可以說是
link |
17:42.000
一模一樣的
link |
17:44.000
文字的BERT
link |
17:45.000
把文字蓋起來
link |
17:47.000
叫機器還原被蓋起來的部分
link |
17:49.000
語音的BERT
link |
17:50.000
那其實想法是完全一樣的
link |
17:53.000
把聲音訊號的某些部分蓋起來
link |
17:55.000
叫機器去把蓋起來的部分
link |
17:57.000
還原回來
link |
17:59.000
好 那在這種語音版的BERT裡面呢
link |
18:02.000
有一個很具代表性的模型
link |
18:04.000
叫做Mockingjay
link |
18:06.000
這個Mockingjay呢
link |
18:08.000
跟飢餓遊戲
link |
18:11.000
沒有半毛錢的關係
link |
18:13.000
Mockingjay的中文就是
link |
18:15.000
學蛇鳥
link |
18:16.000
就是你說一句話
link |
18:17.000
那隻鳥呢
link |
18:18.000
會跟你說一模一樣的話
link |
18:20.000
它是在飢餓遊戲裡面
link |
18:22.000
反抗軍的一個圖騰
link |
18:24.000
不過這邊呢
link |
18:25.000
把這個模型取做Mockingjay
link |
18:27.000
跟飢餓遊戲沒有半毛錢的關係
link |
18:29.000
就只是因為輸入一段聲音訊號
link |
18:31.000
它會輸出一樣的聲音訊號
link |
18:33.000
它是你說一句話
link |
18:35.000
它也會跟你說什麼
link |
18:36.000
你說什麼就跟著你說一樣的話
link |
18:38.000
所以把它叫做Mockingjay
link |
18:40.000
學蛇鳥
link |
18:41.000
好 那這個是把BERT的概念
link |
18:43.000
直接用在語音上
link |
18:46.000
但是語音跟文字
link |
18:48.000
畢竟是有一些不一樣的地方
link |
18:50.000
當我們今天直接把語音的概念
link |
18:52.000
套用在文字上
link |
18:54.000
還有什麼要注意的地方
link |
18:55.000
有什麼不一樣的地方嗎
link |
18:57.000
其實如果你去看Mockingjay
link |
18:58.000
最原始的那篇論文
link |
19:00.000
這個
link |
19:02.000
我們幾乎完全就是套用BERT的概念
link |
19:05.000
NEVO的架構
link |
19:06.000
跟BERT幾乎是一樣的
link |
19:08.000
連在BERT裡面
link |
19:09.000
什麼Masking的Strategy
link |
19:11.000
幾乎也都是
link |
19:13.000
照搬到Mockingjay上
link |
19:15.000
在BERT裡面
link |
19:16.000
我們會把15%的詞彙
link |
19:17.000
把它蓋住
link |
19:18.000
在Mockingjay裡面
link |
19:19.000
也是把15%的聲音訊號蓋住
link |
19:23.000
但是呢
link |
19:24.000
語音跟文字
link |
19:25.000
它還是有一些性質上的差異
link |
19:28.000
那還是需要針對語音的特性
link |
19:31.000
做一些設計
link |
19:33.000
舉例來說
link |
19:34.000
語音的一個特性就是
link |
19:36.000
聲音訊號
link |
19:38.000
聲音訊號其實可以把它表示成
link |
19:41.000
一排相量
link |
19:43.000
那至於這個相量是什麼
link |
19:46.000
就不是今天的重點
link |
19:48.000
總之你記得說
link |
19:49.000
聲音訊號
link |
19:50.000
可以看作是一排相量就對了
link |
19:53.000
那在作業2裡面
link |
19:54.000
大家應該也已經體驗過這件事
link |
19:56.000
在作業2裡面
link |
19:57.000
就是給你一排相量
link |
19:59.000
然後教你訓練一個模型
link |
20:01.000
去預測說
link |
20:02.000
這排相量裡面
link |
20:04.000
每一個相量
link |
20:05.000
對應到哪一個封領
link |
20:07.000
對應到哪一個因素
link |
20:08.000
總之聲音訊號
link |
20:09.000
就是一排相量
link |
20:11.000
但是聲音訊號
link |
20:13.000
這個相量和相量間
link |
20:15.000
相鄰的相量
link |
20:16.000
往往內容會非常接近
link |
20:20.000
所以今天
link |
20:21.000
假設你只是把
link |
20:23.000
某一個相量蓋起來
link |
20:25.000
其實機器學不到什麼東西
link |
20:27.000
因為對它來說
link |
20:28.000
相鄰的相量都非常接近
link |
20:30.000
把某一個相量蓋起來
link |
20:31.000
它只要用兩邊的相量
link |
20:33.000
再做個內插
link |
20:34.000
基本上就可以預測的
link |
20:35.000
八九不離十
link |
20:36.000
那你的Sales Supervise Model
link |
20:38.000
就只學到內插而已
link |
20:39.000
學不到什麼有用的東西
link |
20:42.000
所以在語音上
link |
20:43.000
假設你要用
link |
20:44.000
Masking這個技術
link |
20:45.000
那你要記得
link |
20:46.000
你要一次Mask
link |
20:48.000
一長串的Feature
link |
20:50.000
不要一次只Mask一個Feature
link |
20:52.000
那太容易被機器猜到了
link |
20:53.000
太容易被機器學到
link |
20:55.000
怎麼做還原
link |
20:58.000
怎麼把被Mask的地方還原回來
link |
21:00.000
所以你一次
link |
21:01.000
要Mask一長排的Feature
link |
21:04.000
那至於要多長排
link |
21:06.000
那這個就是一個參數
link |
21:07.000
你是需要調一下的
link |
21:09.000
那其實在文字上
link |
21:10.000
也有類似的概念
link |
21:11.000
因為後來有很多BERT的變形
link |
21:13.000
都是說你不要只Mask一個Token
link |
21:16.000
因為Mask一個Token
link |
21:17.000
往往非常容易
link |
21:18.000
被BERT的Model猜到
link |
21:20.000
Mask的是什麼
link |
21:21.000
所以要Mask
link |
21:22.000
也是要Mask一長串的Token
link |
21:25.000
比如說一次Mask一個片語
link |
21:27.000
這樣機器才能夠學到
link |
21:28.000
比較多東西
link |
21:29.000
那在語音上
link |
21:30.000
不要一次Mask一個相量
link |
21:33.000
要一次Mask一整排的相量
link |
21:36.000
這樣可以迫使機器
link |
21:38.000
去解比較困難的問題
link |
21:41.000
那另外一個
link |
21:43.000
跟文字不同的地方是
link |
21:45.000
在語音上
link |
21:47.000
你可以做一個不一樣的嘗試
link |
21:50.000
你可以不是在時間的方向上
link |
21:54.000
做Masking
link |
21:55.000
你可以試著一次Mask
link |
21:58.000
這些相量的某幾個Dimension
link |
22:03.000
比如說把這些聲音訊號
link |
22:06.000
所代表的相量
link |
22:07.000
比如說第三個Dimension
link |
22:09.000
到第五個Dimension
link |
22:10.000
直接Mask起來
link |
22:12.000
然後看看會發生什麼事情
link |
22:15.000
那我們在過去的經驗上發現說
link |
22:17.000
當我們今天的Masking
link |
22:19.000
不是時間上的Masking
link |
22:21.000
而是相量的Dimension上的Masking
link |
22:25.000
比如說把第七到第九個Dimension
link |
22:28.000
把它Mask起來
link |
22:29.000
這種Mask的方法
link |
22:30.000
會讓機器比較容易學到
link |
22:33.000
語者的資訊
link |
22:35.000
總之呢
link |
22:36.000
這一個投影片是想要告訴你說
link |
22:38.000
把Masking的技術
link |
22:40.000
把BERT的技術
link |
22:41.000
直接用在語音上
link |
22:44.000
還是跟影像上有一些不同的
link |
22:47.000
剛才講了BERT
link |
22:49.000
怎麼被用在這個語音上
link |
22:52.000
那GPT系列呢
link |
22:54.000
GPT系列能不能被用在語音上呢
link |
22:57.000
完全可以
link |
22:59.000
我們知道GPT系列做的事情
link |
23:01.000
就是給到文字
link |
23:02.000
去預測下一個Token
link |
23:05.000
下一個會出現的文字的Token是什麼
link |
23:08.000
在語音上
link |
23:09.000
你就做完全一模一樣的事情
link |
23:12.000
給一段聲音訊號
link |
23:14.000
機器要做的事情就是
link |
23:16.000
預測接下來
link |
23:18.000
會出現的聲音訊號
link |
23:20.000
長什麼樣子
link |
23:22.000
但是這邊
link |
23:23.000
語音跟影像
link |
23:24.000
一樣是有一個不一樣
link |
23:26.000
一樣有一些不同之處
link |
23:28.000
我們知道在
link |
23:30.000
影像上
link |
23:31.000
說錯了
link |
23:32.000
這個語音跟文字
link |
23:34.000
還是有一些不同之處
link |
23:36.000
我們知道在文字上
link |
23:38.000
GPT做的事情
link |
23:39.000
就是
link |
23:40.000
他會去預測
link |
23:42.000
下一個
link |
23:43.000
會出現的Token
link |
23:44.000
我們這邊用N等於1
link |
23:46.000
代表預測下一個
link |
23:48.000
會出現的Token
link |
23:49.000
但是在語音上
link |
23:51.000
如果你只預測
link |
23:53.000
你給機器一排像量
link |
23:54.000
你給你的模型一排像量
link |
23:56.000
叫他預測說
link |
23:57.000
接下來會出現的
link |
23:59.000
代表一段聲音訊號的像量
link |
24:01.000
長什麼樣子
link |
24:02.000
這個任務太簡單了
link |
24:04.000
我們剛才說
link |
24:05.000
相鄰的這些像量
link |
24:07.000
其實都長得很像
link |
24:08.000
所以如果你只叫機器
link |
24:10.000
給一段聲音訊號
link |
24:11.000
預測接下來會產生的訊號
link |
24:13.000
太簡單了
link |
24:14.000
他沒有辦法學到
link |
24:16.000
有用的資訊
link |
24:17.000
所以怎麼辦
link |
24:18.000
通常你不是叫他預測
link |
24:20.000
下一個像量
link |
24:21.000
你會叫他預測
link |
24:23.000
接下來
link |
24:24.000
某一段時間
link |
24:26.000
之後的像量
link |
24:27.000
比如說叫他預測
link |
24:29.000
接下來的
link |
24:30.000
第三個像量
link |
24:32.000
如果根據文獻的結果
link |
24:34.000
通常你這個N要設
link |
24:35.000
大於等於3
link |
24:36.000
才會有比較好的結果
link |
24:38.000
就是你要叫機器
link |
24:41.000
預測夠遠時間之後的像量
link |
24:45.000
這個問題才夠難
link |
24:46.000
可以讓機器
link |
24:47.000
學到一些有用的東西
link |
24:50.000
這個語音版的GPT
link |
24:52.000
一個具代表性的模型
link |
24:54.000
叫做APC
link |
24:55.000
他是Auto Regressive
link |
24:57.000
Predictive Coding的縮寫
link |
25:01.000
剛才都是舉語音的例子
link |
25:05.000
那在影像上
link |
25:06.000
同樣的Bird的概念
link |
25:09.000
同樣的GPT的概念
link |
25:11.000
能不能用在影像上
link |
25:13.000
完全是可以的
link |
25:14.000
這邊我們就不花時間
link |
25:16.000
再跟你反覆敘述
link |
25:17.000
你完全可以猜到的方法
link |
25:19.000
怎麼做
link |
25:20.000
你可以看一下
link |
25:21.000
影像版的GPT
link |
25:23.000
影像版GPT的那篇paper裡面
link |
25:25.000
雖然他叫做影像版的GPT
link |
25:27.000
但在paper裡面
link |
25:28.000
順便做了個影像版的Bird
link |
25:30.000
他是怎麼做的
link |
25:31.000
他說給你一張圖片
link |
25:32.000
我們知道圖片
link |
25:33.000
就是由Pixel所組成的
link |
25:36.000
把這些Pixel拉直
link |
25:38.000
變成一個長排
link |
25:40.000
這個就會變得跟一段文字
link |
25:42.000
或一段聲音訊號
link |
25:43.000
表示的方法很像
link |
25:45.000
接下來就看你想要訓練
link |
25:48.000
影像版的GPT
link |
25:50.000
給一段Pixel
link |
25:51.000
預測下一個Pixel
link |
25:52.000
還是想預測影像版的Bird
link |
25:54.000
把這串Pixel的
link |
25:55.000
其中一部分蓋起來
link |
25:57.000
叫機器去預測
link |
25:58.000
被蓋起來的部分
link |
25:59.000
接下來你就可以把這個模型
link |
26:02.000
用在下游的任務上
link |
26:04.000
比如說用在影像辨識上面
link |
26:07.000
所以影像上
link |
26:08.000
你完全可以套用Bird
link |
26:11.000
或者是GPT的概念
link |
26:14.000
這一套Generative的方法
link |
26:17.000
用在語音跟影像上
link |
26:20.000
有什麼樣的問題呢
link |
26:22.000
把這一套Generative的方法
link |
26:25.000
用在語音跟影像上
link |
26:27.000
相較於文字
link |
26:28.000
有一個比較大的問題是
link |
26:30.000
語音跟影像
link |
26:31.000
它包含了非常多的細節
link |
26:35.000
所以你要模型
link |
26:36.000
去把一段聲音訊號
link |
26:38.000
一段影像完整的還原出來
link |
26:41.000
往往是非常困難的
link |
26:43.000
相較於文字
link |
26:45.000
是用Token來表示的
link |
26:47.000
影像聲音裡面
link |
26:48.000
包含了更多的資訊
link |
26:50.000
要機器產生非常複雜的
link |
26:52.000
影像跟聲音訊號
link |
26:54.000
往往不是一件容易的事情
link |
26:57.000
所以人們就開始思考說
link |
27:00.000
就前面我們已經看到
link |
27:02.000
可以把用在文字上的方法
link |
27:04.000
GPT Bird
link |
27:06.000
直接套用在影像跟語音上
link |
27:09.000
但是用在影像跟語音上
link |
27:12.000
有沒有其他的解法
link |
27:15.000
舉例來說
link |
27:16.000
除了讓機器還原
link |
27:18.000
影像跟聲音訊號之外
link |
27:21.000
能不能讓機器去還原
link |
27:23.000
或者是預測一些別的東西
link |
27:25.000
同樣達到Sales Supervised Learning的效果呢
link |
27:29.000
以下就是我要講的第二大類
link |
27:31.000
Predictive Approach
link |
27:34.000
Predictive Approach
link |
27:36.000
就是讓機器去
link |
27:38.000
給他一張圖片
link |
27:39.000
或給他一些影像
link |
27:41.000
給他一張圖片
link |
27:42.000
或給他一段聲音訊號
link |
27:43.000
讓他去預測一些
link |
27:45.000
比較簡單的東西
link |
27:46.000
在前面第一大類的方法
link |
27:48.000
都是給你一段聲音
link |
27:50.000
給你一張圖片
link |
27:51.000
叫你去還原聲音的內容
link |
27:53.000
還原圖片的內容
link |
27:54.000
那要產生原來的聲音
link |
27:57.000
原來的圖片
link |
27:58.000
是很複雜的一件事
link |
27:59.000
那我們能不能不要讓機器
link |
28:01.000
做這麼複雜的事
link |
28:02.000
同時又有Sales Supervised Learning的效果呢
link |
28:06.000
那這邊舉一個例子
link |
28:08.000
這個例子呢
link |
28:09.000
在影像上是很常見的
link |
28:11.000
這個例子呢
link |
28:12.000
是叫機器去預測一張圖片
link |
28:15.000
有沒有被旋轉過
link |
28:18.000
什麼意思呢
link |
28:20.000
你給機器一張圖片
link |
28:22.000
你手上有一張圖片
link |
28:24.000
然後呢
link |
28:25.000
你把這張圖片呢
link |
28:27.000
做某一個角度的旋轉
link |
28:30.000
但是不讓機器知道
link |
28:32.000
這個是旋轉0度
link |
28:34.000
向右轉90度
link |
28:35.000
180度跟270度
link |
28:38.000
那機器要學的東西就是
link |
28:40.000
能不能夠根據一張圖片
link |
28:43.000
去判斷說他被旋轉了幾度
link |
28:46.000
給他這張圖片
link |
28:48.000
他能不能夠知道說
link |
28:49.000
這是一隻顛倒的貓
link |
28:51.000
所以相較於原來的圖片
link |
28:53.000
應該是被轉了180度呢
link |
28:57.000
讓機器去學說一張圖片
link |
29:00.000
有沒有被旋轉
link |
29:01.000
旋轉了幾度
link |
29:02.000
可以幫助他在接下來的下游任務
link |
29:06.000
做得更好
link |
29:07.000
那這個是在影像上
link |
29:08.000
一個比較早期的做法
link |
29:10.000
那我把論文呢
link |
29:11.000
列在這邊給大家參考
link |
29:13.000
那其實在影像上
link |
29:15.000
這一種製造簡單的任務
link |
29:18.000
讓機器去解
link |
29:20.000
藉此來學到一些東西的方法
link |
29:23.000
有各式各樣千變萬化
link |
29:26.000
那這個論文呢
link |
29:28.000
是數不勝數啦
link |
29:29.000
這邊就是再舉另外一個例子
link |
29:31.000
有另外一個例子呢
link |
29:32.000
叫做Context Prediction
link |
29:34.000
Context Prediction是什麼意思呢
link |
29:36.000
Context Prediction就是
link |
29:38.000
給一張比較大的圖片
link |
29:40.000
然後呢
link |
29:41.000
把比較大的圖片裡面的
link |
29:44.000
兩個小塊切出來
link |
29:47.000
然後問你說
link |
29:49.000
第二個小塊
link |
29:50.000
在第一個小塊的哪一個方向
link |
29:54.000
那你通常有八種選擇嘛
link |
29:57.000
就是左上右上
link |
29:59.000
左下右下跟上下左右
link |
30:01.000
總共八種選擇
link |
30:03.000
叫機器說
link |
30:04.000
給這兩個小塊的圖片
link |
30:06.000
問你說第二小塊
link |
30:08.000
是第一小塊
link |
30:09.000
在第一小塊的哪一個方向
link |
30:12.000
好那這邊呢
link |
30:13.000
就是一些例子啦
link |
30:14.000
機器要解的問題
link |
30:15.000
像是這個樣子
link |
30:16.000
你給他這張圖片
link |
30:19.000
跟這張圖片
link |
30:20.000
然後問他說
link |
30:21.000
右邊這個小塊
link |
30:23.000
到底在左邊這個小塊的
link |
30:25.000
哪一個方向呢
link |
30:27.000
那這個問題其實很容易猜啊
link |
30:29.000
這個是公車的車頭
link |
30:31.000
這個應該是後輪
link |
30:33.000
所以呢
link |
30:34.000
右邊這個小塊呢
link |
30:35.000
應該是左邊這個小塊的
link |
30:37.000
右下角就這樣
link |
30:39.000
或者是這是第二個問題
link |
30:41.000
這個圖片是鐵軌
link |
30:45.000
這個是這個火車
link |
30:47.000
這個是火車的上半部
link |
30:49.000
那右邊這個小塊
link |
30:51.000
在左邊這個小塊哪邊呢
link |
30:52.000
應該在上方就這樣
link |
30:54.000
好所以機器去學這個簡單的
link |
30:57.000
context prediction的任務
link |
30:59.000
去判斷兩塊image相對的位置
link |
31:01.000
可以幫助他在其他任務上
link |
31:04.000
做得更好
link |
31:05.000
那其實在聲音訊號上啊
link |
31:08.000
也可以做很類似的事情
link |
31:10.000
比如說有一篇文章做的事情
link |
31:12.000
就是給機器兩段聲音訊號
link |
31:15.000
從同一句話裡面切兩段出來
link |
31:17.000
機器要學的事情就是
link |
31:18.000
判斷這兩段聲音訊號
link |
31:21.000
他距離多寬
link |
31:23.000
他們的距離
link |
31:24.000
他們相距幾秒
link |
31:26.000
透過這個任務
link |
31:27.000
你可以讓機器
link |
31:28.000
在其他的任務上面
link |
31:30.000
做得更好
link |
31:32.000
好所以除了讓機器
link |
31:35.000
去還原聲音訊號
link |
31:37.000
還原影像之外
link |
31:38.000
你也可以設計一些
link |
31:40.000
小遊戲讓機器來玩
link |
31:42.000
設計一些簡單的任務
link |
31:44.000
讓機器來玩
link |
31:45.000
希望他透過
link |
31:46.000
學會這些簡單的任務
link |
31:48.000
就把之後
link |
31:49.000
叫他做複雜的任務
link |
31:51.000
可以做得更好
link |
31:52.000
但這邊會遇到的一個問題就是
link |
31:54.000
那到底什麼樣的小任務
link |
31:58.000
什麼樣的小遊戲
link |
32:00.000
可以激發機器的潛能
link |
32:02.000
讓他在其他任務上
link |
32:03.000
做得更好呢
link |
32:04.000
那這邊就沒有特別好的答案
link |
32:07.000
顯然你需要對於聲音訊號
link |
32:09.000
還有影像有一些
link |
32:10.000
domain knowledge
link |
32:11.000
對他們的特性
link |
32:12.000
有更深入的理解
link |
32:14.000
你才能夠設計出
link |
32:15.000
比較好的小遊戲
link |
32:17.000
給機器來玩
link |
32:19.000
但是也有一些
link |
32:20.000
比較general的方法
link |
32:22.000
也有一些比較general的方法
link |
32:24.000
讓機器不做生成
link |
32:28.000
也可以做cell supervised learning
link |
32:30.000
那這個比較general的方法是
link |
32:32.000
你把原來要生成複雜的東西
link |
32:36.000
簡化
link |
32:37.000
把它改成生成比較簡單的東西
link |
32:40.000
什麼意思呢
link |
32:42.000
我們用語音為例
link |
32:44.000
我們說聲音訊號
link |
32:46.000
可以被表示成一排向量
link |
32:50.000
這排向量呢
link |
32:51.000
我們叫做acoustic feature
link |
32:53.000
當然acoustic feature
link |
32:54.000
有很多不同的種類
link |
32:55.000
比如說NFCC
link |
32:57.000
比如說spectrogram等等
link |
33:00.000
好那我們要叫機器
link |
33:02.000
直接產生聲音訊號
link |
33:03.000
或直接產生這些向量
link |
33:05.000
都不是一件容易的事
link |
33:07.000
因為他們裡面
link |
33:08.000
包含了太多的細節
link |
33:09.000
所以怎麼辦呢
link |
33:10.000
我們把這些聲音訊號
link |
33:12.000
做一下clustering
link |
33:14.000
比如說你對這些向量呢
link |
33:17.000
跑一下k-means
link |
33:19.000
把他們做quantization
link |
33:21.000
把他們做離散化
link |
33:23.000
所以他們從本來
link |
33:24.000
很複雜的向量
link |
33:25.000
每一個向量就變成一個token
link |
33:28.000
那接下來你做的事情
link |
33:30.000
會變成你還是一樣
link |
33:32.000
要不對輸入做masking
link |
33:34.000
你還是一樣
link |
33:35.000
要把輸入mask起來
link |
33:36.000
但是接下來呢
link |
33:37.000
你要還原的對象
link |
33:39.000
不是原始的聲音訊號
link |
33:40.000
也不是acoustic feature
link |
33:42.000
而是acoustic feature
link |
33:43.000
做clustering以後的cluster ID
link |
33:47.000
那相較於產生聲音訊號
link |
33:49.000
或產生acoustic feature
link |
33:51.000
產生cluster ID
link |
33:52.000
cluster ID
link |
33:53.000
它就跟文字一樣嘛
link |
33:54.000
它就沒有其他的細節了
link |
33:56.000
它就是一個符號
link |
33:57.000
它就是一個ID
link |
33:58.000
要產生ID
link |
33:59.000
就比產生向量
link |
34:00.000
產生原來的聲音訊號
link |
34:01.000
更容易一點
link |
34:03.000
那像這樣子的概念
link |
34:05.000
在語音上
link |
34:07.000
有Huber就有做這件事情
link |
34:09.000
還有這個BassRQ
link |
34:11.000
也有做這件事情
link |
34:12.000
那Huber這邊用的是k-means
link |
34:14.000
那BassRQ還蠻神奇的
link |
34:16.000
它這邊是用一個random projection
link |
34:18.000
那其實也得到了不錯的結果
link |
34:20.000
那這樣看起來
link |
34:21.000
這個clustering的algorithm呢
link |
34:22.000
可能對performance沒有特別重要
link |
34:24.000
只要有cluster
link |
34:25.000
結果就好了
link |
34:27.000
那在影像上
link |
34:28.000
有一個很類似的做法
link |
34:29.000
叫做deep cluster
link |
34:31.000
它也是先把影像做clustering
link |
34:33.000
叫機器去預測
link |
34:35.000
去產生cluster的結果
link |
34:38.000
好 那這個是
link |
34:40.000
今天要跟大家分享的
link |
34:42.000
第二大類的做法
link |
34:44.000
那事實上這個Huber
link |
34:46.000
它還有用到
link |
34:47.000
我們等一下會講的
link |
34:48.000
那個boost trapping的方法
link |
34:50.000
才能夠得到好的performance
link |
34:51.000
就是原始的Huber
link |
34:53.000
如果只有predict這些token
link |
34:55.000
結果不會最好
link |
34:56.000
它還要做一個boost trapping的方法
link |
34:58.000
等一下還會提到
link |
34:59.000
它才會得到真正好的結果
link |
35:01.000
但有趣的地方是
link |
35:02.000
BassRQ沒有做boost trapping
link |
35:05.000
結果它結果就
link |
35:06.000
也已經很好了
link |
35:07.000
所以看起來
link |
35:08.000
這種預測clustering的方法
link |
35:10.000
就算不加boost trapping
link |
35:11.000
可能也是會有奇效的
link |
35:16.000
接下來呢
link |
35:17.000
我們進入第三個方法
link |
35:20.000
第三個方法是
link |
35:22.000
我們能不能夠讓機器
link |
35:24.000
在做self-supervised learning的時候
link |
35:27.000
就不產生任何東西呢
link |
35:30.000
有沒有辦法
link |
35:31.000
透過不產生任何東西的
link |
35:33.000
學習的方法
link |
35:34.000
就讓機器做self-supervised learning呢
link |
35:37.000
剛才在generative的方法
link |
35:40.000
或predictive的方法
link |
35:41.000
都是要讓機器去產生一些東西
link |
35:44.000
但是有沒有辦法
link |
35:45.000
在不產生東西的情況下
link |
35:47.000
就做self-supervised learning呢
link |
35:49.000
那這個就是
link |
35:50.000
contrastive learning
link |
35:52.000
要做的事情
link |
35:54.000
那contrastive learning的
link |
35:56.000
基本概念是這樣
link |
35:58.000
假設呢
link |
35:59.000
給你一張圖片
link |
36:01.000
你知道說
link |
36:02.000
這張圖片跟另外一張圖片
link |
36:04.000
它們都是同樣的類別
link |
36:07.000
裡面有同樣的物件
link |
36:09.000
它們都是貓
link |
36:10.000
那屬於同樣類別的
link |
36:12.000
這個圖片呢
link |
36:13.000
我們就說
link |
36:14.000
它是positive的example
link |
36:18.000
那接下來
link |
36:19.000
你把這對positive的example
link |
36:22.000
丟到你要訓練的
link |
36:24.000
self-supervised model裡面
link |
36:26.000
它們輸出的向量
link |
36:29.000
輸出的這個vector
link |
36:30.000
我們期待它越接近越好
link |
36:34.000
反之
link |
36:35.000
假設你有另外一張圖片
link |
36:37.000
這另外一張圖片
link |
36:38.000
它跟這一張圖片呢
link |
36:40.000
所屬的類別不一樣
link |
36:42.000
那這兩張圖片呢
link |
36:43.000
合起來
link |
36:44.000
就是一個negative的example pair
link |
36:47.000
我們希望negative的example之間
link |
36:50.000
它們通過這個encoder
link |
36:52.000
通過我們要訓練的
link |
36:53.000
這個self-supervised model
link |
36:55.000
這邊encoder指的就是
link |
36:56.000
我們要訓練的
link |
36:57.000
那個self-supervised model
link |
36:59.000
通過encoder以後
link |
37:00.000
它們產生的向量
link |
37:01.000
要越遠越好
link |
37:03.000
所以contrastive learning的概念就是
link |
37:05.000
我們沒有要機器去預測
link |
37:07.000
或產生任何東西
link |
37:09.000
而是找出一些positive的pair
link |
37:13.000
讓它們向量越近越好
link |
37:15.000
找出一些negative的pair
link |
37:17.000
讓它們的向量越遠越好
link |
37:19.000
那講到這邊
link |
37:20.000
你可能就會問的問題就是
link |
37:22.000
可是我們現在要做的是
link |
37:24.000
self-supervised learning呢
link |
37:26.000
我們沒有任何的label
link |
37:28.000
所以照理說我們並不知道
link |
37:30.000
哪些圖片是同樣類別
link |
37:33.000
哪些圖片是不同的類別
link |
37:38.000
所以怎麼辦呢
link |
37:39.000
這邊呢
link |
37:40.000
就有一個contrastive learning
link |
37:42.000
用在self-supervised learning
link |
37:45.000
框架下的做法
link |
37:46.000
那最知名的例子呢
link |
37:48.000
就是SynCLR
link |
37:50.000
SynCLR是怎麼做的呢
link |
37:52.000
SynCLR是說
link |
37:53.000
我們把我們database裡面的
link |
37:56.000
那些image都先做data augmentation
link |
38:00.000
那同一張圖片
link |
38:02.000
做完data augmentation以後
link |
38:04.000
因為data augmentation
link |
38:05.000
本身有隨機性
link |
38:07.000
那舉例來說
link |
38:08.000
data augmentation在
link |
38:09.000
原始的SynCLR paper裡面
link |
38:11.000
它會連續做三件事
link |
38:13.000
首先呢
link |
38:14.000
做一個random cropping
link |
38:15.000
就從原來大的圖片裡面
link |
38:17.000
隨便截一塊
link |
38:18.000
把它放大
link |
38:20.000
像這邊這個例子呢
link |
38:21.000
就是一個random cropping的例子
link |
38:23.000
把圖片呢
link |
38:24.000
截一小塊出來
link |
38:25.000
然後放大到跟原來的圖片一樣
link |
38:27.000
那另外一個呢
link |
38:28.000
是color的distortion
link |
38:31.000
你把這個圖片換一下顏色
link |
38:33.000
還有一個Gaussian blur
link |
38:35.000
就是加一些Gaussian的雜訊
link |
38:37.000
總之呢
link |
38:38.000
你對圖片做
link |
38:39.000
各式各樣不同的data augmentation
link |
38:42.000
那做完data augmentation以後
link |
38:44.000
同一張圖片
link |
38:46.000
augment出來的不同的圖片
link |
38:49.000
就是positive pair
link |
38:51.000
就同一張圖片
link |
38:52.000
它們做data augmentation以後
link |
38:54.000
會長得不一樣
link |
38:56.000
但因為它們是同一張圖片
link |
38:57.000
augment出來的
link |
38:59.000
所以它們還是同樣的類別
link |
39:01.000
如果是同一隻貓
link |
39:02.000
做augment以後
link |
39:03.000
雖然圖片不一樣
link |
39:04.000
但它們都是貓
link |
39:06.000
那你就希望
link |
39:07.000
你的self-supervised model
link |
39:09.000
看到這個positive pair
link |
39:11.000
產生出來的embedding
link |
39:12.000
越接近越好
link |
39:14.000
反之如果是
link |
39:15.000
另外一張圖片augment的結果
link |
39:17.000
那跟這隻貓
link |
39:18.000
就是negative的example
link |
39:20.000
那你要讓它們的embedding
link |
39:21.000
越遠越好
link |
39:23.000
那在這一整個方法裡面
link |
39:26.000
想當然爾怎麼做data augmentation
link |
39:30.000
會變成是這整個方法
link |
39:32.000
能不能夠成功的關鍵
link |
39:35.000
就是你的augmentation
link |
39:36.000
既不能太難
link |
39:38.000
也不能太簡單
link |
39:40.000
如果太簡單
link |
39:41.000
機器學不到東西
link |
39:42.000
如果太難
link |
39:43.000
比如說你把這隻貓
link |
39:44.000
做一個augmentation以後
link |
39:46.000
它看起來跟原來的貓
link |
39:47.000
完全不一樣
link |
39:48.000
變成長得像一隻狗
link |
39:50.000
那這種augmentation
link |
39:51.000
也是不行的
link |
39:52.000
那怎麼控制
link |
39:53.000
augmentation的難度
link |
39:55.000
變成是一個問題
link |
39:56.000
那你可以看一下
link |
39:57.000
原始的Sincere的paper
link |
39:59.000
它嘗試了各式各樣
link |
40:01.000
不同的augmentation的組合
link |
40:03.000
告訴你說
link |
40:04.000
augmentation是最好的
link |
40:06.000
那在文獻裡面
link |
40:08.000
基本上比較一致的發現
link |
40:11.000
就是這個random cropping
link |
40:13.000
看起來是最有效的augmentation
link |
40:16.000
你要試各種
link |
40:17.000
不同augmentation的組合
link |
40:18.000
通常random cropping
link |
40:20.000
是不可或缺的一個方法
link |
40:23.000
總之Sincere
link |
40:24.000
就是在沒有label的情況下
link |
40:27.000
強制用一些方法
link |
40:29.000
產生出了positive pair
link |
40:31.000
跟negative pair
link |
40:33.000
那其實在語音上
link |
40:34.000
也有語音版的Sincere
link |
40:36.000
概念跟我
link |
40:37.000
影像的Sincere
link |
40:38.000
其實是一樣的
link |
40:39.000
那我們就把文獻
link |
40:40.000
放在這邊
link |
40:41.000
就不再細講
link |
40:45.000
那除了Sincere以外
link |
40:49.000
Contrastive Learning
link |
40:50.000
還有另外一個變形
link |
40:51.000
叫做Mocha
link |
40:53.000
那Mocha要做的事情
link |
40:54.000
是什麼呢
link |
40:55.000
Mocha就是
link |
40:56.000
它相較於
link |
40:57.000
其實先有Mocha
link |
40:59.000
才有Sincere
link |
41:01.000
那Mocha相較於Sincere
link |
41:02.000
不一樣的地方是
link |
41:04.000
它多了一個Memory Bank
link |
41:06.000
還多了一個
link |
41:07.000
Momentum的Encoder
link |
41:09.000
那至於這些東西是什麼
link |
41:10.000
就留給大家自己去讀文獻
link |
41:13.000
然後後來Mocha
link |
41:14.000
吸收了Sincere的
link |
41:16.000
一些優點以後
link |
41:17.000
產生了Mocha V2
link |
41:19.000
然後把Mocha跟Mocha V2
link |
41:21.000
連結都放在這邊
link |
41:23.000
給大家參考
link |
41:24.000
那我們就不細講
link |
41:25.000
反正都是
link |
41:26.000
Contrastive Learning的方法
link |
41:28.000
他們概念
link |
41:29.000
基本上是差不多的
link |
41:30.000
只是增加了其他的
link |
41:32.000
訓練的小技巧
link |
41:34.000
讓訓練可以更容易成功
link |
41:38.000
好那如果是
link |
41:39.000
語音上的Contrastive Learning
link |
41:42.000
會是什麼樣子呢
link |
41:45.000
那剛才已經講了
link |
41:46.000
語音版的Sincere
link |
41:49.000
那其實在語音上
link |
41:50.000
還有另外一系列的
link |
41:52.000
Contrastive Learning的方法
link |
41:54.000
其中最知名的
link |
41:55.000
就是CPC跟Web2Vec系列
link |
41:59.000
那這邊呢
link |
42:00.000
我會很快的
link |
42:01.000
用流水帳的方式
link |
42:03.000
按照歷史的脈絡
link |
42:04.000
講一下這一系列的模型
link |
42:07.000
它的演進的過程
link |
42:08.000
那我不會細講
link |
42:09.000
它背後的原理
link |
42:10.000
等一下呢
link |
42:11.000
我會用另外一個觀點
link |
42:13.000
來告訴你說
link |
42:14.000
為什麼Web2Vec 2.0
link |
42:16.000
就是現在最新的版本
link |
42:18.000
是長現在這個樣子
link |
42:20.000
我會從另外一個觀點
link |
42:21.000
來解釋它
link |
42:22.000
那這邊我們就先從
link |
42:23.000
歷史上的脈絡
link |
42:24.000
流水帳的介紹說
link |
42:26.000
這個CPC啊
link |
42:27.000
Web2Vec啊
link |
42:28.000
它們是長什麼樣子
link |
42:30.000
link |
42:31.000
那CPC Web2Vec
link |
42:33.000
它們是長什麼樣子呢
link |
42:34.000
首先
link |
42:35.000
你有一大堆的聲音訊號
link |
42:37.000
把它們呢
link |
42:38.000
丟進一個encoder裡面
link |
42:41.000
產生一排representation
link |
42:44.000
那接下來呢
link |
42:46.000
你再把encoder的output
link |
42:48.000
再通過一個predictor
link |
42:51.000
產生新的output
link |
42:53.000
那這個predictor呢
link |
42:54.000
在CPC跟Web2Vec裡面
link |
42:56.000
用的那個
link |
42:58.000
neural架構不太一樣
link |
42:59.000
如果CPC的話
link |
43:00.000
這邊是用一個GRU
link |
43:02.000
如果Web2Vec的話呢
link |
43:03.000
用的是一個CNN
link |
43:06.000
那接下來
link |
43:07.000
什麼是positive example
link |
43:08.000
什麼是negative example呢
link |
43:10.000
這邊這個output的vector啊
link |
43:12.000
跟相鄰的位置
link |
43:15.000
encoder的輸出
link |
43:17.000
是positive example
link |
43:20.000
跟其他句子
link |
43:22.000
或者是不相鄰的位置
link |
43:23.000
encoder的輸出
link |
43:25.000
是negative example
link |
43:27.000
然後接下來呢
link |
43:28.000
你把predictor輸出的相量
link |
43:30.000
通過不同的linear transform以後
link |
43:34.000
想辦法讓它這邊的output
link |
43:36.000
跟講辦法
link |
43:37.000
讓它通過第一個transform以後
link |
43:39.000
跟下一個時間點
link |
43:41.000
encoder的輸出
link |
43:42.000
越接近越好
link |
43:43.000
通過第二個transform以後
link |
43:44.000
跟下兩個時間點
link |
43:46.000
encoder的輸出
link |
43:47.000
越接近越好
link |
43:48.000
同時呢
link |
43:49.000
要跟這個
link |
43:50.000
其他的negative example
link |
43:52.000
距離越遠越好
link |
43:54.000
然後這樣訓練完以後呢
link |
43:56.000
你可以直接拿encoder
link |
43:58.000
出來用在你的下游任務裡面
link |
44:01.000
你也可以把encoder
link |
44:03.000
跟predictor疊起來
link |
44:05.000
一起用在下游任務裡面
link |
44:07.000
那你可能會問說
link |
44:08.000
為什麼是設計成這個樣子呢
link |
44:10.000
你可以去看一下
link |
44:11.000
原始的CPC的文獻
link |
44:14.000
它有很複雜的說明
link |
44:15.000
它從InfoNC的角度告訴你說
link |
44:17.000
為什麼要進行這樣子的設計
link |
44:19.000
那等一下
link |
44:20.000
我會提供
link |
44:21.000
另外一個不同的講法
link |
44:23.000
link |
44:25.000
那後來
link |
44:26.000
Wave2Vec跟CPC他們的差別
link |
44:28.000
主要就是network架構的差別
link |
44:30.000
那後來還有了
link |
44:31.000
另外一個東西
link |
44:32.000
叫做VQ Wave2Vec
link |
44:34.000
VQ Wave2Vec
link |
44:35.000
做的事情就是
link |
44:36.000
encoder的輸出
link |
44:38.000
不是vector
link |
44:40.000
而是discrete的token
link |
44:43.000
而是discrete的東西
link |
44:45.000
那你可能會問說
link |
44:47.000
這個network裡面
link |
44:51.000
有discrete的東西
link |
44:52.000
要怎麼train呢
link |
44:54.000
還是有辦法train的
link |
44:55.000
我這邊附一個連結
link |
44:56.000
我們之前在上課錄影裡面
link |
44:58.000
其實是有講過
link |
44:59.000
如果network裡面
link |
45:00.000
有discrete的東西要怎麼辦
link |
45:02.000
比如說我們有講過
link |
45:04.000
VQ VAE
link |
45:05.000
就是network裡面
link |
45:06.000
有latent representation
link |
45:08.000
是用discrete的token來表示的
link |
45:10.000
那應該要怎麼處理
link |
45:11.000
所以network裡面
link |
45:12.000
有discrete的token
link |
45:13.000
還是有辦法train的
link |
45:16.000
好那
link |
45:17.000
VQ Wave2Vec
link |
45:19.000
把encoder的output
link |
45:21.000
變成discrete的東西
link |
45:23.000
有什麼樣的好處呢
link |
45:25.000
其實VQ Wave2Vec
link |
45:26.000
它本身並沒有
link |
45:28.000
一篇獨立的文章
link |
45:31.000
其實VQ Wave2Vec
link |
45:32.000
當初propose出來
link |
45:34.000
是為了一個很神奇的目的
link |
45:36.000
它想要在VQ Wave2Vec
link |
45:39.000
encoder後面
link |
45:40.000
直接train一個
link |
45:42.000
類似文字上的BERT model
link |
45:45.000
我這邊還是要強調一下
link |
45:46.000
它並不是直接把
link |
45:47.000
文字的BERT model
link |
45:48.000
拿來用了
link |
45:49.000
train了另外一個encoder
link |
45:51.000
這個encoder的架構
link |
45:52.000
跟文字的BERT
link |
45:53.000
是一模一樣的
link |
45:55.000
但我們知道說
link |
45:56.000
文字的BERT
link |
45:57.000
它就是要吃discrete的token
link |
45:59.000
所以VQ VAE
link |
46:01.000
產生出來的
link |
46:02.000
這些discrete的token
link |
46:03.000
剛好可以被當作
link |
46:06.000
這個BERT的輸入
link |
46:08.000
當作這個BERT架構的
link |
46:10.000
encoder的輸入
link |
46:12.000
那接下來的訓練方法
link |
46:13.000
就跟BERT一模一樣
link |
46:15.000
你先訓練好
link |
46:16.000
這個VQ Wave2Vec
link |
46:17.000
訓練完以後
link |
46:18.000
就把它固定住
link |
46:19.000
它負責把聲音訊號
link |
46:21.000
轉成這個discrete的token
link |
46:23.000
接下來
link |
46:24.000
你就把這些discrete的token
link |
46:25.000
當作像是文字的token一樣
link |
46:27.000
把一些地方蓋起來
link |
46:29.000
叫BERT去學習做填空題
link |
46:32.000
所以今天
link |
46:34.000
你把聲音訊號
link |
46:35.000
變成discrete的token以後
link |
46:37.000
你就可以直接
link |
46:39.000
把BERT的encoder
link |
46:40.000
套在discrete的token之後
link |
46:42.000
我想這是第一個好處
link |
46:44.000
就是你可以直接
link |
46:45.000
用一個BERT的encoder
link |
46:46.000
另外一個好處是
link |
46:48.000
把聲音訊號
link |
46:50.000
做discrete以後
link |
46:52.000
你通常可以把雜訊
link |
46:54.000
還有speaker的
link |
46:56.000
特徵把它去掉
link |
46:57.000
通常你做這種discrete的
link |
46:59.000
這種representation
link |
47:00.000
它的好處是
link |
47:01.000
比較你的模型
link |
47:02.000
比較容易可以抽出
link |
47:04.000
content跟聲音的
link |
47:05.000
內容有關的資訊
link |
47:08.000
link |
47:09.000
那我這邊就把
link |
47:10.000
VQ Wave2Vec
link |
47:11.000
加BERT的這個
link |
47:12.000
原始的論文
link |
47:13.000
放在這邊
link |
47:14.000
那當然有人會問說
link |
47:16.000
一定要用
link |
47:18.000
quantization嗎
link |
47:20.000
這個後面一定要
link |
47:23.000
接一個類似BERT的encoder
link |
47:25.000
產生這個discrete的token嗎
link |
47:27.000
那有一篇paper呢
link |
47:29.000
他就試了各式各樣
link |
47:31.000
不同的組合
link |
47:32.000
告訴你說
link |
47:33.000
這個VQ Wave2Vec加BERT
link |
47:35.000
是個好架構
link |
47:37.000
他試了其他的變形
link |
47:38.000
基本上都比VQ Wave2Vec
link |
47:40.000
加上BERT還要差
link |
47:42.000
看起來這個架構
link |
47:43.000
其實是可以給你
link |
47:44.000
一個不錯的結果的
link |
47:47.000
link |
47:47.000
那這個是VQ Wave2Vec
link |
47:49.000
加BERT
link |
47:50.000
接下來呢
link |
47:51.000
就有了
link |
47:52.000
Wave2Vec 2.0
link |
47:54.000
Wave2Vec 2.0跟前面
link |
47:56.000
VQ Wave2Vec
link |
47:57.000
加BERT的第一個不同是
link |
47:58.000
前面VQ Wave2Vec
link |
48:00.000
跟BERT
link |
48:01.000
它的這兩個模型
link |
48:02.000
是分開訓練的
link |
48:04.000
把VQ Wave2Vec
link |
48:05.000
訓練好以後
link |
48:06.000
後面再訓練一個
link |
48:07.000
像是BERT的encoder
link |
48:09.000
Wave2Vec 2.0
link |
48:10.000
它要做的事情是
link |
48:11.000
我們何不把encoder
link |
48:13.000
跟後面這個encoder
link |
48:15.000
前後兩個encoder
link |
48:16.000
一起訓練呢
link |
48:18.000
那一起訓練的話
link |
48:20.000
會遇到一個問題是
link |
48:21.000
中間有discrete的token
link |
48:23.000
雖然中間有discrete的token
link |
48:25.000
還是可以訓練的
link |
48:26.000
但是訓練起來
link |
48:27.000
可能比較困難
link |
48:28.000
所以我們不把discrete的token
link |
48:31.000
當作是後面
link |
48:33.000
第二個encoder的輸入
link |
48:35.000
所以前一個encoder
link |
48:36.000
改成輸出continuous的東西
link |
48:39.000
接給後端的第二個encoder
link |
48:43.000
然後接下來呢
link |
48:44.000
後端的第二個encoder
link |
48:46.000
一樣輸出一排向量
link |
48:48.000
接下來它輸出一排向量
link |
48:50.000
以後要幹什麼呢
link |
48:51.000
它接下來做一個contrastive learning
link |
48:53.000
它要用這個向量
link |
48:55.000
它接下來做的事情呢
link |
48:57.000
是把輸入的某些部分
link |
48:59.000
一樣做masking
link |
49:01.000
比如說把這個位置
link |
49:02.000
的這個向量呢
link |
49:03.000
把它mask起來
link |
49:05.000
然後接下來呢
link |
49:06.000
要用被mask起來
link |
49:08.000
那個位置輸出的
link |
49:10.000
這一個向量
link |
49:12.000
去預測同一個位置的token
link |
49:16.000
是哪一個
link |
49:18.000
那同時呢
link |
49:19.000
又希望說
link |
49:21.000
這一個向量
link |
49:23.000
產生其他token的likelihood
link |
49:27.000
越小越好
link |
49:29.000
好那如果你有看
link |
49:31.000
Wave2Vec的原始論文的話呢
link |
49:34.000
你可能會覺得
link |
49:35.000
有一個地方跟原始論文裡面
link |
49:37.000
講的有點不一致的地方是
link |
49:39.000
原始論文裡面
link |
49:40.000
實際上呢
link |
49:41.000
這邊的每一個discrete的token
link |
49:43.000
其實都還是用一個
link |
49:45.000
向量來表示的
link |
49:46.000
你可以想成說
link |
49:47.000
這些discrete的token呢
link |
49:48.000
其實都通過一個transform
link |
49:51.000
把它變成一個embedding
link |
49:53.000
然後你其實實際上
link |
49:54.000
做的事情是
link |
49:55.000
你希望這一個向量
link |
49:57.000
跟對應到3的embedding
link |
49:59.000
越接近越好
link |
50:00.000
跟對應到7號
link |
50:02.000
對應到9的embedding
link |
50:03.000
距離越遠越好
link |
50:05.000
但是跟3的embedding
link |
50:07.000
越近越好
link |
50:08.000
跟對應到7到9的embedding
link |
50:09.000
越遠越好
link |
50:10.000
這件事情其實等價於
link |
50:13.000
把這一個向量
link |
50:15.000
做一個linear transform
link |
50:17.000
把它當作是一個分類的問題
link |
50:19.000
然後希望3出現的機率
link |
50:21.000
越高越好
link |
50:22.000
7跟9出現的機率
link |
50:23.000
越低越好
link |
50:24.000
那這個其實是等價的
link |
50:26.000
只是說法上的不同而已
link |
50:28.000
好那這個Wave2Vec 2.0
link |
50:31.000
它的設計看起來
link |
50:32.000
非常的複雜
link |
50:33.000
我相信你聽到這邊
link |
50:34.000
應該就是一頭霧水啦
link |
50:36.000
或是如果你直接看
link |
50:37.000
Wave2Vec 2.0的paper
link |
50:39.000
你會覺得
link |
50:40.000
怎麼當初會這樣設計呢
link |
50:42.000
太神奇了
link |
50:43.000
為什麼是設計成這樣
link |
50:44.000
好複雜喔
link |
50:45.000
為什麼是要這樣
link |
50:46.000
那其實在原始的
link |
50:47.000
Wave2Vec 2.0裡面
link |
50:48.000
它也試圖回答了
link |
50:49.000
為什麼會需要這樣設計
link |
50:51.000
第一個問題就是
link |
50:53.000
我們可以把
link |
50:54.000
discrete的東西
link |
50:55.000
做為輸入嗎
link |
50:56.000
其實discrete的東西
link |
50:57.000
輸入給第二個encoder
link |
50:58.000
還是可以train的啊
link |
50:59.000
有network裡面
link |
51:00.000
discrete的東西
link |
51:01.000
還是可以train的
link |
51:02.000
為什麼不把discrete的東西
link |
51:03.000
丟給後面的encoder呢
link |
51:05.000
一個最直接的回答就是
link |
51:07.000
這樣performance會差
link |
51:08.000
它實驗裡面有試做
link |
51:11.000
ablation study
link |
51:12.000
有試過說
link |
51:13.000
如果這個後端的encoder
link |
51:15.000
第二個encoder
link |
51:16.000
不是吃continuous的東西
link |
51:18.000
而是吃discrete的東西
link |
51:20.000
performance就會掉一大截
link |
51:23.000
所以看起來
link |
51:24.000
吃continuous的東西
link |
51:25.000
是重要的
link |
51:26.000
那在論文裡面的解釋是說
link |
51:28.000
discrete的東西
link |
51:29.000
包含的資訊比較少
link |
51:31.000
所以希望用continuous的東西
link |
51:34.000
當作encoder的輸入
link |
51:36.000
那另外一個問題就是
link |
51:39.000
我們為什麼要predict
link |
51:41.000
的是quantized的東西呢
link |
51:43.000
為什麼我們不是做說
link |
51:45.000
我們希望這個vector
link |
51:46.000
跟這個vector距離近一點
link |
51:48.000
跟其他vector距離遠一點
link |
51:50.000
為什麼我們考慮的是
link |
51:52.000
用這個vector
link |
51:54.000
通過一個linear transform
link |
51:56.000
去產生3的機率變大
link |
51:57.000
3這個token的機率變大
link |
51:59.000
7跟9的token的機率變小呢
link |
52:01.000
那這個paper裡面也做了實驗
link |
52:04.000
告訴你說
link |
52:05.000
就是要去predict
link |
52:07.000
這一些discrete的token
link |
52:09.000
結果才會比較好
link |
52:10.000
不過這件事並沒有非常關鍵
link |
52:12.000
predict discrete的token
link |
52:13.000
跟predict continuous的vector
link |
52:15.000
performance差一點點而已
link |
52:17.000
但是後面第二階的這個encoder
link |
52:19.000
有沒有吃continuous的vector
link |
52:21.000
影響非常大
link |
52:22.000
給他吃discrete的東西
link |
52:23.000
結果是會差很多的
link |
52:26.000
那這邊還有另外一個問題就是
link |
52:28.000
既然你說
link |
52:30.000
你把這一個vector
link |
52:32.000
過一個transform
link |
52:33.000
把它當作一個分類的問題
link |
52:34.000
希望3的機率越大越好
link |
52:36.000
7跟9的機率越小越好
link |
52:38.000
那這不就是一個
link |
52:40.000
typical的分類問題嗎
link |
52:42.000
為什麼不把它直接當成一個
link |
52:44.000
一般的分類問題來看
link |
52:46.000
就告訴他說
link |
52:47.000
model要學的就是
link |
52:49.000
給這個vector
link |
52:50.000
然後他要去預測token3
link |
52:52.000
然後其他token
link |
52:53.000
都不要被預測出來呢
link |
52:56.000
我覺得一個可能的原因是
link |
52:58.000
當然這邊你要把它改成
link |
53:00.000
就是一個正常的分類問題
link |
53:01.000
我覺得也沒有什麼不行
link |
53:03.000
但是我覺得在實作上
link |
53:04.000
之所以沒把它變成一個
link |
53:05.000
正常的分類問題
link |
53:07.000
一個原因是
link |
53:08.000
語音所對應的token
link |
53:10.000
數量太大了
link |
53:12.000
當初Wave2Vec2.0
link |
53:14.000
他這邊產生的token的數量
link |
53:16.000
應該是10萬那個等級
link |
53:19.000
就是
link |
53:21.000
你想一般我們今天
link |
53:22.000
在trainbird的時候
link |
53:23.000
那你的token的數目
link |
53:25.000
link |
53:27.000
兩三萬那個樣子
link |
53:28.000
但是這語音比較複雜
link |
53:30.000
所以當時設定的時候
link |
53:31.000
這個token的數目是10萬
link |
53:33.000
那如果今天token的數目
link |
53:35.000
非常多
link |
53:36.000
你直接把它當作一個
link |
53:38.000
分類的問題
link |
53:40.000
那你的negative example
link |
53:41.000
會太多
link |
53:42.000
你在運算的時候
link |
53:43.000
這個運算量可能會太大
link |
53:45.000
那其實在早年
link |
53:46.000
在做這種language model的時候
link |
53:48.000
也會有人把language model
link |
53:50.000
在training的時候
link |
53:51.000
用類似contrastive learning來train
link |
53:53.000
就是只讓正確的答案的機率變高
link |
53:56.000
那錯誤的答案
link |
53:57.000
就只sample某幾個
link |
53:58.000
sample十個
link |
53:59.000
sample二十個
link |
54:00.000
讓它機率變低
link |
54:01.000
那因為過去呢
link |
54:02.000
運算資源比較不夠的時候
link |
54:04.000
那時候覺得language model的輸出
link |
54:06.000
如果你要輸出一個
link |
54:08.000
一萬個token的probability distribution
link |
54:10.000
那這個不太好做
link |
54:12.000
所以就只說
link |
54:13.000
叫做negative sampling
link |
54:14.000
只把部分negative的token的機率壓低
link |
54:17.000
那我猜有可能是因為
link |
54:19.000
這個encoder output的token的數目
link |
54:21.000
太多了
link |
54:22.000
所以不把它
link |
54:23.000
直接當一般的分類問題來做
link |
54:25.000
而是用contrastive的概念
link |
54:27.000
只讓positive的token
link |
54:30.000
產生的機率越大越好
link |
54:31.000
那negative的token
link |
54:33.000
就只選某幾個
link |
54:34.000
sample某幾個
link |
54:35.000
讓它的機率越低越好
link |
54:39.000
好 講到這邊
link |
54:40.000
不知道大家有沒有問題呢
link |
54:42.000
如果你聽得一頭霧水
link |
54:44.000
那個是正常的
link |
54:46.000
接下來呢
link |
54:47.000
我想換另外一個講法
link |
54:49.000
跟大家說明一下
link |
54:51.000
Web2Vec 2.0它的設計
link |
54:54.000
跟原始的BERT
link |
54:56.000
有什麼樣的關係
link |
54:58.000
好 那我們現在講了這麼多
link |
55:00.000
contrastive learning
link |
55:02.000
那講到這邊一個很自然的
link |
55:04.000
我覺得同學們會想問的問題是
link |
55:06.000
文字上能不能做contrastive learning呢
link |
55:11.000
看起來contrastive learning
link |
55:13.000
在影像上
link |
55:14.000
在語音上
link |
55:15.000
都有不錯的表現
link |
55:16.000
那文字上
link |
55:17.000
是不是也應該來做一個
link |
55:20.000
contrastive learning呢
link |
55:22.000
那如果你仔細想一想的話
link |
55:24.000
其實我們也可以把BERT
link |
55:28.000
視為是一種contrastive learning的方式
link |
55:32.000
你說怎麼說呢
link |
55:33.000
怎麼說BERT
link |
55:34.000
其實也可以看作是一種
link |
55:35.000
contrastive learning的方式呢
link |
55:37.000
你想想看
link |
55:38.000
我們原來BERT是怎麼訓練的
link |
55:42.000
好 我們大家都知道呢
link |
55:44.000
BERT是一個分類的問題
link |
55:47.000
BERT的reconstruction
link |
55:49.000
可以看作是在做分類這件事
link |
55:52.000
但是其實分類
link |
55:54.000
也可以看作類似contrastive learning
link |
55:59.000
怎麼說呢
link |
56:01.000
我們可以從另外一個角度
link |
56:03.000
來看BERT的reconstruction
link |
56:05.000
我們說BERT做的事情
link |
56:07.000
是給一個有mask的句子
link |
56:10.000
然後呢
link |
56:11.000
這個BERT的embedding
link |
56:13.000
通過一個linear transform
link |
56:15.000
可能在做soft mask
link |
56:17.000
希望度的機率越大越好
link |
56:20.000
其他詞彙的機率越小越好
link |
56:23.000
但這件事
link |
56:24.000
你可以從另外一個角度來看待它
link |
56:27.000
你可以說
link |
56:28.000
其實做分類這件事情
link |
56:31.000
就是BERT輸出一個embedding
link |
56:34.000
他希望這個embedding
link |
56:37.000
跟代表度的embedding
link |
56:40.000
距離越近越好
link |
56:42.000
跟其他的token的embedding
link |
56:46.000
距離越遠越好
link |
56:49.000
所以從這個角度來看
link |
56:51.000
其實BERT在做的事情
link |
56:53.000
也是要讓他輸出的embedding
link |
56:56.000
跟某些正確的答案
link |
56:58.000
正確的embedding
link |
56:59.000
positive pair越近越好
link |
57:02.000
跟negative pair越遠越好
link |
57:05.000
那這邊呢
link |
57:06.000
我想更詳細的說明一下
link |
57:08.000
classification跟contrastive
link |
57:11.000
之間的關係
link |
57:13.000
那classification
link |
57:14.000
大家一定一點都不陌生
link |
57:16.000
classification這件事情
link |
57:18.000
可以看作是
link |
57:19.000
假設這個項量
link |
57:21.000
是network的最後一層的output
link |
57:24.000
我們把這個項量呢
link |
57:25.000
通過一個linear transform
link |
57:27.000
把這個項量呢
link |
57:28.000
乘上一個矩陣
link |
57:31.000
你也可以說是把
link |
57:32.000
這個項量跟矩陣裡面的
link |
57:35.000
這個role呢
link |
57:37.000
去做搭product
link |
57:39.000
然後呢
link |
57:40.000
假設第二個類別是正確的
link |
57:43.000
那你就希望說
link |
57:44.000
這個項量跟這個項量
link |
57:46.000
做搭product以後呢
link |
57:48.000
這個它的值呢
link |
57:50.000
要越大越好
link |
57:52.000
而這個項量
link |
57:53.000
跟其他的項量
link |
57:54.000
做搭product以後呢
link |
57:56.000
它的值要越小越好
link |
57:58.000
那這個是分類的問題
link |
58:00.000
當然最後呢
link |
58:01.000
你可能還是會
link |
58:02.000
做一個softmax
link |
58:04.000
讓這邊的輸出
link |
58:05.000
變成一個機率
link |
58:07.000
好那contrastive learning呢
link |
58:10.000
你完全可以把這個分類
link |
58:12.000
想成是在做一種contrastive learning
link |
58:16.000
對於這個less layer的output來說
link |
58:20.000
正確的class
link |
58:21.000
所對應的那個role啊
link |
58:23.000
它就是positive example
link |
58:26.000
其他的class
link |
58:27.000
所對應的這個role呢
link |
58:29.000
就是negative example
link |
58:31.000
你希望這個vector
link |
58:33.000
跟藍色的這個role
link |
58:35.000
做搭product以後
link |
58:37.000
它的值越大越好
link |
58:39.000
它跟其他的role
link |
58:41.000
做搭product以後
link |
58:43.000
值呢越小越好
link |
58:45.000
那在分類裡面
link |
58:47.000
我們會希望
link |
58:48.000
除了正確的class以外
link |
58:50.000
其他class的分數
link |
58:51.000
都越小越好
link |
58:53.000
那在contrastive learning裡面呢
link |
58:56.000
我們的negative example
link |
58:59.000
是sample得到的
link |
59:01.000
所以我們可能不會
link |
59:02.000
窮舉碩的negative example
link |
59:04.000
我們只會sample
link |
59:06.000
部分的negative example
link |
59:09.000
那其實早年啊
link |
59:10.000
在做分類問題的時候
link |
59:12.000
假設你的這個類別非常多
link |
59:15.000
比如說過去呢
link |
59:16.000
如果你要做一個language model
link |
59:18.000
那這個language model呢
link |
59:20.000
它需要去預測
link |
59:21.000
接下來會出現哪一個詞彙
link |
59:23.000
那詞彙的數目
link |
59:24.000
可能很多
link |
59:25.000
一萬兩萬
link |
59:26.000
當然今天
link |
59:27.000
一萬兩萬個這個token
link |
59:29.000
對你來說不是問題
link |
59:30.000
但是過去
link |
59:31.000
比如說七八年前
link |
59:33.000
那個時候
link |
59:34.000
你說要train一個
link |
59:36.000
RNN based language model
link |
59:38.000
它的輸出有一萬個token
link |
59:40.000
算起來
link |
59:41.000
有時候蠻驚人的
link |
59:42.000
這個時候
link |
59:43.000
其實很多時候
link |
59:44.000
我們會採取
link |
59:45.000
類似contrastive learning的做法
link |
59:48.000
也就是說
link |
59:49.000
我們讓正確的詞彙
link |
59:51.000
它所對應的embedding
link |
59:53.000
跟network最後一層的輸出
link |
59:55.000
越接近越好
link |
59:57.000
那至於其他
link |
59:58.000
不是正確的詞彙呢
link |
01:00:00.000
我們只sample
link |
01:00:01.000
其中一部分
link |
01:00:02.000
我們只sample
link |
01:00:03.000
幾個不是正確的詞彙
link |
01:00:05.000
要讓它跟less layer
link |
01:00:07.000
最後一層的輸出
link |
01:00:09.000
距離越遠越好
link |
01:00:11.000
所以其實classification
link |
01:00:12.000
跟contrastive learning
link |
01:00:14.000
它們是有非常類似的地方
link |
01:00:19.000
好 那我們來看看
link |
01:00:21.000
假設你知道
link |
01:00:22.000
怎麼把BERT想成是
link |
01:00:24.000
contrastive learning
link |
01:00:26.000
那讓我們來看一下
link |
01:00:28.000
如果今天BERT
link |
01:00:29.000
用在語音上
link |
01:00:31.000
應該要怎麼用
link |
01:00:33.000
那如果BERT用在語音上
link |
01:00:35.000
一樣是給BERT
link |
01:00:37.000
有mask的語音
link |
01:00:39.000
然後你希望有mask的部分
link |
01:00:41.000
它跟被mask起來的
link |
01:00:43.000
這段聲音訊號
link |
01:00:45.000
越近越好
link |
01:00:47.000
那反之跟其他
link |
01:00:49.000
所有的聲音訊號
link |
01:00:51.000
距離都越遠越好
link |
01:00:53.000
但是我們的這個
link |
01:00:55.000
self-supervised model
link |
01:00:57.000
它的output是一個embedding
link |
01:00:59.000
是一個向量
link |
01:01:00.000
而這個聲音訊號
link |
01:01:02.000
它可能是遠比這個向量
link |
01:01:04.000
還要長的
link |
01:01:06.000
假設你今天考慮的是
link |
01:01:08.000
Waveform
link |
01:01:09.000
假設你直接考慮聲音訊號
link |
01:01:11.000
那這個聲音訊號裡面
link |
01:01:12.000
有非常多的information
link |
01:01:15.000
有非常多的sample point
link |
01:01:17.000
它跟這個embedding的向量
link |
01:01:20.000
可能長度的差距
link |
01:01:22.000
非常的大
link |
01:01:23.000
所以怎麼辦
link |
01:01:24.000
你要先把這一小段聲音訊號
link |
01:01:27.000
通過一個transform
link |
01:01:29.000
變成跟這邊的這個向量
link |
01:01:32.000
同樣dimension的向量
link |
01:01:34.000
然後你讓這個向量
link |
01:01:37.000
跟positive example的向量
link |
01:01:40.000
距離越近越好
link |
01:01:42.000
讓現在這個self-supervised model
link |
01:01:45.000
在這邊output的這個vector
link |
01:01:47.000
跟negative example
link |
01:01:48.000
它的距離越遠越好
link |
01:01:51.000
但是我們如果在語音上
link |
01:01:54.000
採取這個做法
link |
01:01:55.000
跟文字上的birth
link |
01:01:57.000
還是有很多不一樣的地方
link |
01:01:59.000
在文字上
link |
01:02:01.000
我們的negative example是有限的
link |
01:02:04.000
在birth裡面
link |
01:02:05.000
不是正確答案的token
link |
01:02:07.000
剩餘的token就是negative example
link |
01:02:10.000
但是negative example的數目
link |
01:02:12.000
它是可以窮舉的
link |
01:02:15.000
但是在語音上
link |
01:02:17.000
negative example的數目
link |
01:02:19.000
是沒辦法窮舉的
link |
01:02:21.000
只要不是這一段
link |
01:02:22.000
被mask起來的聲音訊號
link |
01:02:24.000
就是negative example
link |
01:02:26.000
聲音訊號千變萬化
link |
01:02:28.000
根本沒有辦法窮舉出
link |
01:02:31.000
所有的negative example
link |
01:02:33.000
所以我們不是讓這個
link |
01:02:37.000
我們不是把一段聲音訊號
link |
01:02:40.000
把它轉成任何的continuous embedding
link |
01:02:44.000
而是做這個quantization
link |
01:02:47.000
讓它output的東西是discrete
link |
01:02:51.000
雖然我這邊是把output的東西
link |
01:02:54.000
用ID來表示
link |
01:02:56.000
那你可以想像說
link |
01:02:57.000
其實這邊這個灰色的network
link |
01:03:00.000
它output的其實是
link |
01:03:02.000
這些ID所對應的embedding
link |
01:03:05.000
所以這些network output的
link |
01:03:07.000
還是embedding
link |
01:03:08.000
但這些embedding是discrete的
link |
01:03:11.000
它的數目是有限的
link |
01:03:15.000
然後呢
link |
01:03:16.000
我們讓這個self-supervised model
link |
01:03:19.000
它在這邊output的representation
link |
01:03:21.000
跟mask起來的這段聲音訊號
link |
01:03:25.000
所對應的embedding
link |
01:03:27.000
它的這個距離呢
link |
01:03:28.000
越近越好
link |
01:03:29.000
反之其他embedding
link |
01:03:31.000
距離就越遠越好
link |
01:03:34.000
好,那你仔細想想喔
link |
01:03:38.000
那你想想看喔
link |
01:03:39.000
左邊這個圖
link |
01:03:41.000
其實就是Wave2vec 2.0
link |
01:03:44.000
怎麼說呢
link |
01:03:46.000
把一段聲音訊號
link |
01:03:48.000
變成discrete的東西
link |
01:03:51.000
這個是Wave2vec 2.0的
link |
01:03:53.000
第一個encoder做的事情
link |
01:03:57.000
而Wave2vec 2.0的
link |
01:03:59.000
這整個model
link |
01:04:01.000
從聲音訊號到representation
link |
01:04:05.000
這整個模型
link |
01:04:07.000
就是這個東西
link |
01:04:09.000
所以如果你是第一次看到
link |
01:04:11.000
Wave2vec 2.0
link |
01:04:12.000
你可能會覺得這個設計呢
link |
01:04:14.000
非常的離奇
link |
01:04:16.000
不知道為什麼
link |
01:04:17.000
這是一個有道理的設計
link |
01:04:19.000
但是
link |
01:04:20.000
假設你把BERT想成是
link |
01:04:23.000
contrastive learning
link |
01:04:24.000
再想想看說
link |
01:04:26.000
你要怎麼把BERT的概念
link |
01:04:28.000
套用到語音上
link |
01:04:31.000
你會發現
link |
01:04:32.000
Wave2vec 2.0
link |
01:04:33.000
其實是一個非常類似BERT的設計
link |
01:04:41.000
好,那像這種contrastive learning的方法
link |
01:04:45.000
有一個很大的問題就是
link |
01:04:47.000
你需要去選negative example
link |
01:04:51.000
那選negative example
link |
01:04:53.000
為什麼是一件困難的事情呢
link |
01:04:55.000
因為你的negative example
link |
01:04:57.000
要有足夠的難度
link |
01:04:59.000
不能夠太難
link |
01:05:01.000
舉例來說
link |
01:05:02.000
假設你說
link |
01:05:03.000
貓的negative example
link |
01:05:04.000
是天空,是樹,是海
link |
01:05:06.000
跟貓太不像了
link |
01:05:08.000
對機器來說
link |
01:05:09.000
他可能看個顏色的差異就知道說
link |
01:05:11.000
他們不是一樣的東西
link |
01:05:13.000
那你的model
link |
01:05:15.000
在抽representation的時候
link |
01:05:17.000
可能只學到抽顏色的資訊
link |
01:05:19.000
反正用顏色的資訊
link |
01:05:20.000
就可以把這兩個圖片的representation
link |
01:05:22.000
推得很開了
link |
01:05:24.000
那所以你要有夠難的negative example
link |
01:05:27.000
比如說貓的negative example
link |
01:05:29.000
你可能選個狗啊
link |
01:05:30.000
老虎啊,豹啊
link |
01:05:31.000
至少也都是動物
link |
01:05:32.000
跟貓長得有點像
link |
01:05:33.000
都有兩個眼睛一個鼻子
link |
01:05:35.000
那機器呢
link |
01:05:36.000
如果要分辨貓跟老虎的差別
link |
01:05:38.000
那可能就要很用心的去觀察這個圖片
link |
01:05:41.000
知道說老虎是有斑紋的
link |
01:05:43.000
貓是沒有斑紋的
link |
01:05:44.000
抽出代表斑紋的representation
link |
01:05:47.000
但是你又不能抽太難的negative example
link |
01:05:51.000
其實當我們講到這個
link |
01:05:53.000
contrastive learning的時候
link |
01:05:54.000
其實同學們常常會想到的一個問題就是
link |
01:05:57.000
這個negative example
link |
01:05:59.000
我們在做thin CLR的時候
link |
01:06:01.000
如果今天是兩張都是貓的圖片呢
link |
01:06:05.000
如果兩張都是貓的圖片
link |
01:06:07.000
做data augmentation以後
link |
01:06:09.000
我們並不知道兩張都是貓啊
link |
01:06:10.000
你還是會把兩張不同的貓的圖片
link |
01:06:12.000
視為是negative example
link |
01:06:14.000
那這樣子不是把應該視為同類的東西
link |
01:06:18.000
它的embedding拉遠了嗎
link |
01:06:20.000
這確實是一個問題
link |
01:06:22.000
尤其是如果你今天
link |
01:06:24.000
刻意要選困難的negative example的時候
link |
01:06:27.000
剛才那個我們可能選到
link |
01:06:29.000
兩張不同的貓把它拉遠這個問題
link |
01:06:32.000
我可以跟你說
link |
01:06:33.000
假設negative example是隨機選擇的
link |
01:06:35.000
你選到兩張圖片
link |
01:06:37.000
正好都是貓的機率可能沒有很高
link |
01:06:39.000
但是假設你今天用某一個演算法
link |
01:06:41.000
刻意去挑negative example
link |
01:06:45.000
挑那些跟你原來的圖片
link |
01:06:47.000
很難分開的negative example
link |
01:06:50.000
你可能正好會挑到貓的圖片
link |
01:06:53.000
然後呢你再讓模型硬去學
link |
01:06:55.000
要把同樣都是貓的圖片
link |
01:06:57.000
把它硬是分開
link |
01:06:59.000
那這樣子不是讓機器學一個
link |
01:07:01.000
太過困難
link |
01:07:03.000
它根本不應該要解這麼困難的問題嗎
link |
01:07:06.000
你根本不應該讓不同的
link |
01:07:08.000
同樣都是貓的圖片
link |
01:07:09.000
有不同的representation
link |
01:07:10.000
所以選negative example
link |
01:07:12.000
變成是一個很大的學問
link |
01:07:15.000
你變成一個很tricky的問題
link |
01:07:17.000
你需要做很多trial and error
link |
01:07:19.000
才能夠選到好的negative example
link |
01:07:22.000
所以怎麼辦呢
link |
01:07:23.000
既然選negative example是一個問題
link |
01:07:26.000
有沒有什麼方法
link |
01:07:27.000
可以避開negative example的選擇呢
link |
01:07:31.000
那以下就是要講兩招
link |
01:07:33.000
這兩招可以避開negative example這件事
link |
01:07:37.000
第一招叫做boost trapping
link |
01:07:41.000
我第一次聽到這個方法的時候
link |
01:07:43.000
它真的是讓人覺得匪夷所思
link |
01:07:46.000
這個方法是這樣的
link |
01:07:49.000
丟掉negative example並不是一件容易的事
link |
01:07:52.000
為什麼丟掉negative example會有問題呢
link |
01:07:55.000
有人會說假設我們這麼不喜歡negative example
link |
01:07:58.000
我們為什麼訓練的時候不用positive example就好了呢
link |
01:08:02.000
我們為什麼訓練的時候不說
link |
01:08:04.000
兩張positive的pair我們就讓它的向量越近越好
link |
01:08:08.000
我們就只用這個objective來認我們的內臥
link |
01:08:12.000
就不要管negative example呢
link |
01:08:14.000
那是因為如果你用這個方法訓練
link |
01:08:16.000
最後會collapse
link |
01:08:18.000
什麼叫collapse
link |
01:08:19.000
最後你的model會學到
link |
01:08:21.000
不管看到什麼圖片
link |
01:08:23.000
都給它一模一樣的向量
link |
01:08:26.000
比如說不管看到什麼圖片
link |
01:08:28.000
我們都給它zero vector
link |
01:08:30.000
反正你在訓練的時候
link |
01:08:31.000
只有positive example
link |
01:08:32.000
訓練的時候你要機器做的事情就是
link |
01:08:34.000
看到兩張圖片他們的向量越近越好
link |
01:08:37.000
那你沒給機器negative example
link |
01:08:39.000
沒有告訴機器說
link |
01:08:40.000
有些向量是應該被分得越遠越好
link |
01:08:43.000
應該被拉開的
link |
01:08:44.000
那機器很自然學到的就是
link |
01:08:46.000
不管你給它什麼圖片
link |
01:08:48.000
直接輸入直接輸出zero vector
link |
01:08:51.000
那他們就很接近
link |
01:08:52.000
你就可以完成
link |
01:08:54.000
機器就完成了
link |
01:08:55.000
model就完成了
link |
01:08:56.000
你要它學到objective
link |
01:08:57.000
但這不是我們要的結果
link |
01:08:59.000
那怎麼辦呢
link |
01:09:01.000
有沒有辦法在只有positive example的情況下
link |
01:09:04.000
又避免collapse發生呢
link |
01:09:07.000
是有可能的
link |
01:09:08.000
這個做法是這樣
link |
01:09:10.000
你需要做兩件事
link |
01:09:12.000
第一件事情是
link |
01:09:13.000
你本來encoder會輸入兩張圖片
link |
01:09:20.000
但現在呢
link |
01:09:21.000
我們第一張圖片通過encoder得到向量
link |
01:09:25.000
第二張圖片通過encoder以後
link |
01:09:28.000
再通過另外一個predictor
link |
01:09:30.000
predictor是一個簡單的
link |
01:09:32.000
可能只有幾成的free forward network
link |
01:09:35.000
然後再產生向量
link |
01:09:37.000
所以今天呢
link |
01:09:38.000
這兩張圖片通過不同的network
link |
01:09:41.000
去產生向量
link |
01:09:43.000
不過他們只有部分不同而已
link |
01:09:44.000
他們大部分的參數還是一樣的
link |
01:09:47.000
只有小部分不同而已
link |
01:09:49.000
然後呢
link |
01:09:50.000
你訓練的目標一樣是讓
link |
01:09:52.000
這兩個向量越接近越好
link |
01:09:56.000
但是你在訓練的時候
link |
01:09:58.000
你只計算右邊這條路徑的gradient
link |
01:10:04.000
左邊是stop gradient的
link |
01:10:06.000
只計算右邊這條路徑的gradient
link |
01:10:09.000
然後計算完之後
link |
01:10:12.000
把右邊的encoder update以後的參數
link |
01:10:16.000
複製到左邊的encoder上
link |
01:10:19.000
讓他們的參數仍然保持是一樣的
link |
01:10:22.000
用這種方法訓練
link |
01:10:24.000
你就只需要positive example
link |
01:10:26.000
不需要negative example了
link |
01:10:29.000
我知道你聽了一定覺得一頭霧水
link |
01:10:31.000
想說這是什麼要素
link |
01:10:33.000
這個東西就是一個要素
link |
01:10:35.000
到目前為止我們並沒有看到
link |
01:10:37.000
非常非常好的解釋告訴我們說
link |
01:10:40.000
為什麼這樣訓練就不會collapse
link |
01:10:43.000
但是已經有大量的實驗說明說
link |
01:10:46.000
在有人就試了各式各樣不同的組合
link |
01:10:48.000
發現說反正你要不collapse
link |
01:10:51.000
需要兩個關鍵的東西
link |
01:10:53.000
第一個關鍵的東西是
link |
01:10:55.000
左右兩邊的network
link |
01:10:58.000
需要架構有點不同
link |
01:11:00.000
所以右邊一定要有這個predictor
link |
01:11:02.000
沒有這個predictor是不行的
link |
01:11:04.000
沒有這個predictor還是會collapse
link |
01:11:07.000
然後呢
link |
01:11:10.000
這一個stop gradient
link |
01:11:13.000
就是只train某一邊的encoder
link |
01:11:15.000
再複製過去
link |
01:11:17.000
這一個步驟也是很關鍵的
link |
01:11:19.000
如果沒有這個步驟
link |
01:11:21.000
也是訓練不起來的
link |
01:11:23.000
所以你要有一個predictor
link |
01:11:25.000
要有這個只train右邊
link |
01:11:27.000
再把右邊複製到左邊這樣的機制
link |
01:11:29.000
有這兩個機制
link |
01:11:31.000
就可以只用positive example
link |
01:11:33.000
不用negative example
link |
01:11:35.000
就把你的self supervised model訓練起來
link |
01:11:37.000
就是這麼神奇
link |
01:11:39.000
那如果你硬要解釋的話
link |
01:11:41.000
我們也可以說
link |
01:11:43.000
為什麼這樣子訓練就不會collapse呢
link |
01:11:45.000
因為你看左右兩邊的network
link |
01:11:48.000
首先他們有點不一樣
link |
01:11:50.000
所以本來我們訓練的目標
link |
01:11:53.000
是要讓這個vector跟這個vector
link |
01:11:56.000
越接近越好
link |
01:11:58.000
但是當我們去update這個encoder
link |
01:12:00.000
想要把這個vector跟它比較接近的時候
link |
01:12:03.000
接下來再把這個encoder的參數複製過來
link |
01:12:05.000
但是因為這個encoder
link |
01:12:07.000
它新的參數是會讓
link |
01:12:09.000
是會讓這個embedding
link |
01:12:11.000
通過representation以後
link |
01:12:13.000
跟這個vector越接近越好
link |
01:12:15.000
那你把它複製過來以後
link |
01:12:17.000
這個encoder要把這個vector
link |
01:12:19.000
越接近越好的方向是不一樣的
link |
01:12:21.000
所以呢
link |
01:12:23.000
這兩個encoder就沒有辦法達成共識
link |
01:12:25.000
他們沒有辦法一起作弊
link |
01:12:27.000
讓用很trivial的solution
link |
01:12:31.000
讓這兩個vector一樣
link |
01:12:33.000
不過這就只是一個解釋而已啦
link |
01:12:35.000
總之讓左右兩條路徑的
link |
01:12:37.000
network架構不同
link |
01:12:39.000
然後讓他們參數update的方式不同
link |
01:12:42.000
是一個關鍵的
link |
01:12:44.000
讓這個
link |
01:12:46.000
只用positive example狀況不會collapse的
link |
01:12:49.000
一個關鍵的技巧
link |
01:12:51.000
link |
01:12:53.000
那有另外一個觀點可以看待bootstrapping
link |
01:12:55.000
這件事情
link |
01:12:57.000
那我想在座各位同學
link |
01:12:59.000
很多人都知道knowledge distillation這個技術
link |
01:13:01.000
那這個技術是什麼呢
link |
01:13:03.000
這個技術是說
link |
01:13:05.000
假設你有一個比較大的teacher network
link |
01:13:07.000
就輸入一張image
link |
01:13:09.000
然後它輸出一個representation
link |
01:13:11.000
你有一個比較小的
link |
01:13:13.000
student network
link |
01:13:15.000
那你用這個student network
link |
01:13:17.000
去學teacher network的行為
link |
01:13:19.000
讓這個student network看到同一張圖片的時候
link |
01:13:21.000
它的輸出跟teacher network
link |
01:13:23.000
越近越好
link |
01:13:25.000
然後你就可以訓練出一個比較小的network
link |
01:13:27.000
而且它的performance
link |
01:13:29.000
跟大的teacher network是差不多的
link |
01:13:31.000
link |
01:13:33.000
這個是knowledge distillation的概念
link |
01:13:35.000
那其實bootstrapping
link |
01:13:37.000
也可以看作是一種
link |
01:13:39.000
knowledge distillation
link |
01:13:41.000
就是你有一個teacher的encoder
link |
01:13:43.000
這個teacher的encoder
link |
01:13:45.000
它參數是固定的
link |
01:13:47.000
輸入一張圖片
link |
01:13:49.000
它輸出一個embedded
link |
01:13:51.000
你有一個student的encoder
link |
01:13:53.000
這個student的encoder輸入
link |
01:13:55.000
同一張圖片的不同的augmentation
link |
01:13:57.000
然後呢
link |
01:13:59.000
這個student encoder的這邊的架構
link |
01:14:01.000
跟teacher encoder有一點不同
link |
01:14:03.000
它多了一個predictor
link |
01:14:05.000
輸出一個representation
link |
01:14:07.000
那你一樣希望
link |
01:14:09.000
這個student encoder通過predictor
link |
01:14:11.000
跟teacher的encoder
link |
01:14:13.000
越接近越好
link |
01:14:15.000
然後呢
link |
01:14:17.000
我們update student encoder
link |
01:14:19.000
一次之後
link |
01:14:21.000
我們就把student encoder的參數
link |
01:14:23.000
拿去複製
link |
01:14:25.000
給teacher encoder
link |
01:14:27.000
也就是每次student encoder
link |
01:14:29.000
它跟teacher的encoder
link |
01:14:31.000
學過一點東西以後
link |
01:14:33.000
學生馬上就
link |
01:14:35.000
變成老師
link |
01:14:37.000
然後這個新的老師
link |
01:14:39.000
就會再繼續去教學生
link |
01:14:41.000
那講到這邊
link |
01:14:43.000
當然很多人會有各式各樣的困惑
link |
01:14:45.000
舉例來說
link |
01:14:47.000
剛開始訓練的時候
link |
01:14:49.000
這個teacher encoder哪來呢
link |
01:14:51.000
難道用一個隨機的
link |
01:14:53.000
參數來作為teacher encoder的參數嗎
link |
01:14:55.000
一個隨機的encoder
link |
01:14:57.000
只會產生隨機的representation
link |
01:14:59.000
那他去訓練student
link |
01:15:01.000
可以得到好的結果嗎
link |
01:15:03.000
這個
link |
01:15:05.000
最早的這一類boosting的paper
link |
01:15:07.000
有一篇等一下下一個影片看到的
link |
01:15:09.000
叫做boyle
link |
01:15:11.000
他告訴你說
link |
01:15:13.000
隨機的teacher encoder
link |
01:15:15.000
也可以讓student學到東西
link |
01:15:17.000
就問你神奇不神奇
link |
01:15:19.000
好那
link |
01:15:21.000
我剛才說最早的boosting的方法呢
link |
01:15:23.000
有一篇叫boosting your own latent
link |
01:15:25.000
就是BYOL
link |
01:15:27.000
他就那篇我說他試了說
link |
01:15:29.000
就算teacher encoder是個隨機的encoder
link |
01:15:31.000
還是可以學到一點東西的那篇paper
link |
01:15:33.000
那在boyle裡面呢
link |
01:15:35.000
有一個特殊的設計
link |
01:15:37.000
是這樣的
link |
01:15:39.000
他不是直接把student encoder的參數
link |
01:15:41.000
複製給teacher encoder
link |
01:15:43.000
而是用一個漸進的方法
link |
01:15:45.000
去影響teacher encoder
link |
01:15:47.000
他是用moving average的方法
link |
01:15:49.000
去影響teacher encoder
link |
01:15:51.000
也就是說假設teacher encoder
link |
01:15:53.000
原來的參數是theta
link |
01:15:55.000
他是把theta
link |
01:15:57.000
跟student encoder的參數
link |
01:15:59.000
theta prime
link |
01:16:01.000
做linear interpolation以後
link |
01:16:03.000
更新為新的theta
link |
01:16:05.000
所以teacher encoder的參數
link |
01:16:07.000
不會馬上變得跟student一模一樣
link |
01:16:09.000
而是會變得比較接近student
link |
01:16:11.000
然後隨著訓練的iteration
link |
01:16:13.000
越來越多teacher跟student
link |
01:16:15.000
最後就會變得越來越一致
link |
01:16:17.000
好那
link |
01:16:19.000
有另外一個方法呢
link |
01:16:21.000
叫做simple science
link |
01:16:23.000
那個simple science
link |
01:16:25.000
告訴你說其實
link |
01:16:27.000
moving average不是必要的
link |
01:16:29.000
沒有這一步直接複製過去
link |
01:16:31.000
也可以得到差不多的結果
link |
01:16:33.000
就是這樣
link |
01:16:35.000
好那在這個BYOL
link |
01:16:37.000
跟這個simple science
link |
01:16:39.000
都是用在影像上
link |
01:16:41.000
在語音上也可以用類似的做法
link |
01:16:43.000
這個方法呢叫做data2vec
link |
01:16:45.000
data2vec最近是一個蠻知名的paper
link |
01:16:47.000
是這個meta做的
link |
01:16:49.000
那這篇paper知名的地方就是
link |
01:16:51.000
他們用同樣的learning algorithm
link |
01:16:53.000
apply在不只語音上
link |
01:16:55.000
也同時做在影像跟文字上
link |
01:16:57.000
發現同一套
link |
01:16:59.000
很類似這個BYOL的方法
link |
01:17:01.000
但他們用的跟BYOL還是有一些差異啦
link |
01:17:03.000
舉例來說
link |
01:17:05.000
他們會把teacher的
link |
01:17:07.000
不同layer
link |
01:17:09.000
的representation做平均
link |
01:17:11.000
讓student去學
link |
01:17:13.000
這個細節大家在自己去看論文
link |
01:17:15.000
總之data2vec是一個蠻general的方法
link |
01:17:17.000
它是在各種不同的modality
link |
01:17:19.000
影像文字語音上
link |
01:17:21.000
都有不錯的結果
link |
01:17:23.000
好這個是神秘的
link |
01:17:25.000
bootstrapping方法
link |
01:17:27.000
還有另外一個可以避開
link |
01:17:29.000
用next example的方法
link |
01:17:31.000
就是直接在用
link |
01:17:33.000
positive example之外
link |
01:17:35.000
加上regularization
link |
01:17:37.000
這一系列的方法呢
link |
01:17:39.000
有兩個代表的作品
link |
01:17:41.000
一個是BYOL twins一個是VIC reg
link |
01:17:43.000
那BYOL twins跟VIC reg
link |
01:17:45.000
其實是非常像的東西啦
link |
01:17:47.000
所以我們等一下就只講
link |
01:17:49.000
VIC reg就好
link |
01:17:51.000
VIC reg是variance
link |
01:17:53.000
invariance covariance
link |
01:17:55.000
regularization的縮寫
link |
01:17:57.000
那這個variance
link |
01:17:59.000
invariance跟covariance
link |
01:18:01.000
指的是什麼呢
link |
01:18:03.000
這邊的invariance指的就是
link |
01:18:05.000
用positive example來train
link |
01:18:07.000
就我們今天在train我們的
link |
01:18:09.000
Sales Supervised Model的時候
link |
01:18:11.000
我們只用positive example
link |
01:18:13.000
說positive example
link |
01:18:15.000
丟到encoder以後
link |
01:18:17.000
他們output的representation
link |
01:18:19.000
要越接近越好
link |
01:18:21.000
這個是invariance的部分
link |
01:18:23.000
如果只有invariance
link |
01:18:25.000
我們剛才有講過只有positive example
link |
01:18:27.000
會collapse encoder會學到
link |
01:18:29.000
總是output一樣的vector就好
link |
01:18:31.000
怎麼避免encoder
link |
01:18:33.000
output一樣的vector呢
link |
01:18:35.000
那你就強制做
link |
01:18:37.000
強制要求他不要做這件事就好啦
link |
01:18:39.000
加上一個額外的constraint
link |
01:18:41.000
叫做variance
link |
01:18:43.000
variance的意思就是說
link |
01:18:45.000
你給encoder一個batch的image
link |
01:18:47.000
給encoder比如說
link |
01:18:49.000
256張圖片
link |
01:18:51.000
那你得到256個vector
link |
01:18:53.000
接下來呢
link |
01:18:55.000
你要求輸出的這些vector
link |
01:18:57.000
他們的每一個dimension
link |
01:18:59.000
他們的variance
link |
01:19:01.000
要大於某一個threshold
link |
01:19:03.000
你在train的時候下一個額外的criterion
link |
01:19:05.000
說這一些數值
link |
01:19:07.000
同一個dimension的這些數值
link |
01:19:09.000
他的variance一定要夠大
link |
01:19:11.000
那這樣就可以避免
link |
01:19:13.000
encoder不管看到什麼樣的image
link |
01:19:15.000
都output一樣的vector
link |
01:19:17.000
因為今天如果你
link |
01:19:19.000
output一樣的vector
link |
01:19:21.000
variance會太小
link |
01:19:23.000
這樣不行
link |
01:19:25.000
你的variance一定要夠大
link |
01:19:27.000
然後呢
link |
01:19:29.000
這個VICreg還有第三個東西
link |
01:19:31.000
就是covariance
link |
01:19:33.000
covariance的意思是說
link |
01:19:35.000
我們把這個batch裡面的這個vector
link |
01:19:37.000
拿出來計算個covariance的matrix
link |
01:19:39.000
然後我們希望
link |
01:19:41.000
off-diagonal的地方呢
link |
01:19:43.000
他的值越接近0呢
link |
01:19:45.000
越好
link |
01:19:47.000
那這個covariance
link |
01:19:49.000
他達到的效果是
link |
01:19:51.000
假設你只有variance跟invariance
link |
01:19:53.000
那你可能認出來的representation
link |
01:19:55.000
就假設這個representation是二維
link |
01:19:57.000
你可能認出來representation
link |
01:19:59.000
長的是這個樣子
link |
01:20:01.000
他的variance不管是看
link |
01:20:03.000
x軸還是y軸
link |
01:20:05.000
都是夠大的
link |
01:20:07.000
但是整個latent space裡面
link |
01:20:09.000
還有很多空間沒有被用到
link |
01:20:11.000
所以如果加covariance的話呢
link |
01:20:13.000
應該可以讓他的散佈比較平均
link |
01:20:15.000
讓所有的dimension呢
link |
01:20:17.000
都充分的被利用到
link |
01:20:19.000
不會有redundant的dimension
link |
01:20:21.000
那這個VICreg啊
link |
01:20:23.000
invariance,variance
link |
01:20:25.000
加covariance看起來很簡單的一個概念
link |
01:20:27.000
他是work的
link |
01:20:29.000
他是work的
link |
01:20:31.000
那在原始的文章裡面會告訴你說
link |
01:20:33.000
最關鍵的就是一定要有variance
link |
01:20:35.000
其實沒有covariance也沒有關係
link |
01:20:37.000
沒有covariance還是訓練的起來
link |
01:20:39.000
只有invariance就是會collapse
link |
01:20:41.000
但加了variance以後
link |
01:20:43.000
就足夠讓他不會collapse了
link |
01:20:45.000
你就可以訓練出self-supervised model
link |
01:20:47.000
不用negative example
link |
01:20:49.000
好,那這個就是
link |
01:20:51.000
加上regularization的方式
link |
01:20:53.000
好,那其實在
link |
01:20:55.000
聲音訊號上
link |
01:20:57.000
其實也有類似的方法啦
link |
01:20:59.000
叫delores,那我們就不細講
link |
01:21:01.000
那其實跟這個影像上的方法是一樣的
link |
01:21:03.000
好,那這個就是
link |
01:21:05.000
今天的concluding remark
link |
01:21:07.000
就是今天的結論
link |
01:21:09.000
我們今天就是講了一系列
link |
01:21:11.000
影像跟語音上的方法
link |
01:21:13.000
包括從文字那邊
link |
01:21:15.000
直接借來的generative的方法
link |
01:21:17.000
然後因為generate
link |
01:21:19.000
語音跟文字比較困難
link |
01:21:21.000
所以有predictive的方法
link |
01:21:23.000
然後還有contrastive的方法
link |
01:21:25.000
那contrastive的方法
link |
01:21:27.000
要怎麼sample
link |
01:21:29.000
這個negative sample是困難的一件事
link |
01:21:31.000
所以有bootstrapping的方法
link |
01:21:33.000
跟regularization的方法
link |
01:21:35.000
好,那以上就是今天想
link |
01:21:37.000
跟大家介紹的模型
link |
01:21:39.000
其實Sales Supervise Learning
link |
01:21:41.000
用在語音跟影像上的模型
link |
01:21:43.000
還有非常非常的多
link |
01:21:45.000
今天這堂課並不是一個非常完整的介紹
link |
01:21:47.000
只是大概讓你看過說
link |
01:21:49.000
在語音跟影像上
link |
01:21:51.000
有哪些特別的
link |
01:21:53.000
Sales Supervise Learning的技術
link |
01:21:55.000
好,那就感謝今天大家來上課
link |
01:21:57.000
謝謝大家,謝謝