back to index

【機器學習 2022】如何有效的使用自督導式模型 - Data-Efficient & Parameter-Efficient Tuning (由姜成翰助教講授)


link |
00:00.000
在現場的同學,在線上的同學,大家好
link |
00:05.800
今天我們很高興請到江承翰同學
link |
00:10.200
來跟我們講Sales Supervised Learning
link |
00:13.000
最近幾年的進展
link |
00:14.500
在上課錄影裡面
link |
00:16.000
我們已經講過了Sales Supervised Learning的一些基本概念
link |
00:20.000
但那不是Sales Supervised Learning的全部
link |
00:23.200
承翰哥會來跟大家講一下
link |
00:25.200
這幾年來Sales Supervised Learning有什麼樣神奇的進展
link |
00:28.600
跟大家介紹一下承翰
link |
00:30.600
然後承翰之前在ML的課有講過Graph Neural Network
link |
00:35.000
他的兩個影片合起來大概有七萬人看過
link |
00:38.600
然後呢
link |
00:39.600
這個承翰哥今年秋天會在國際會議給一個類似的演講
link |
00:45.000
所以大家等於是搶先聽到他這個演講的中文的版本
link |
00:49.800
一般這種國際會議的課程其實是要收錢的啦
link |
00:52.600
等下你直接叫我們出去的時候記得叫五千塊的出去
link |
00:55.600
今天就是免費送給大家
link |
00:57.800
好,那我們就掌聲歡迎承翰,謝謝
link |
01:05.600
謝謝老師的介紹
link |
01:07.600
我是翔承翰
link |
01:08.600
然後今天很高興可以跟大家分享
link |
01:11.600
最近Future Names Model
link |
01:14.600
最近幾年的進展
link |
01:15.600
那我指的最近幾年大概會從2020、2021
link |
01:19.600
然後還有2022的一些比較有趣的發展跟大家介紹
link |
01:23.600
link |
01:24.600
我先宣導一下
link |
01:27.600
就是那個學校前幾天有提醒說
link |
01:30.600
在上課的時候要戴口罩啊
link |
01:32.600
反正教室應該還蠻空的
link |
01:34.600
所以大家都稍微清理一下
link |
01:36.600
然後這堂課就是講的是
link |
01:39.600
Self-Service的內容
link |
01:41.600
跟Names Model在NLP上面的應用
link |
01:43.600
那我會預設大家已經很熟悉什麼是Self-Intention
link |
01:47.600
等一下會出現一些相關的東西
link |
01:50.600
但是如果你不知道
link |
01:52.600
那也不會影響太多這樣
link |
01:54.600
然後另外還有一些有關的
link |
01:56.600
是2021年講過的Bird還有GBT-3
link |
02:00.600
然後還有2020年DHOP裡面講到的
link |
02:03.600
就是Bird相關的一些其他的Model
link |
02:06.600
那這也是有關的東西
link |
02:08.600
然後大家如果想要更深入的學習的話
link |
02:10.600
就可以看一下這邊的這些課程影片
link |
02:14.600
那大家可以把今天的那個課程當作輕鬆的科普嗎
link |
02:19.600
就是你就算真的是完全不知道這些東西也沒關係
link |
02:22.600
因為我會先簡單講一下這個
link |
02:25.600
接下來大概兩個小時的課程
link |
02:27.600
會需要的簡單的背景
link |
02:29.600
然後講完這些背景之後呢
link |
02:31.600
我們再來看說現在的普遍語言模式
link |
02:33.600
它有什麼樣的問題
link |
02:35.600
那這些問題呢
link |
02:36.600
可能會阻礙我們要把這些模式
link |
02:38.600
使用在現實生活中
link |
02:40.600
所以現在最近幾年
link |
02:42.600
我們就很努力的要解決這些問題
link |
02:44.600
那今天的課程主要會Focus在
link |
02:46.600
我們要怎麼去解決這些問題上面
link |
02:48.600
然後最後就給一個簡單的Closing Remarks
link |
02:51.600
好那我們就開始講一下
link |
02:53.600
Background Knowledge的最重要的
link |
02:55.600
就是Preferred Language Models
link |
02:57.600
什麼是Preferred Language Models呢
link |
02:59.600
那在介紹這個之前
link |
03:00.600
我想要先講一下什麼是Language Model
link |
03:02.600
因為我以前幾年前
link |
03:04.600
剛開始進入到這個領域的時候
link |
03:07.600
一直介紹Language Model
link |
03:08.600
其實完全不知道在幹嘛
link |
03:10.600
那所謂的Language Model呢
link |
03:12.600
它就是一個神經網路
link |
03:14.600
那這個Neural Network呢
link |
03:16.600
就是它會去Define一個句子
link |
03:19.600
它出現的機率有多大
link |
03:21.600
所以今天給它兩個句子
link |
03:23.600
左邊的句子叫做電腦聽聲音
link |
03:26.600
右邊的句子叫做電腦聽聲音
link |
03:28.600
如果你有學過DSG的話
link |
03:30.600
應該會知道這是什麼東西
link |
03:32.600
然後這個左邊的句子呢
link |
03:33.600
很明顯對人來說
link |
03:34.600
它的機率就比較大
link |
03:36.600
右邊的句子就是不知所云
link |
03:38.600
所以它應該是一個
link |
03:39.600
不太可能會出現的句子
link |
03:41.600
所以假設有一個Neural Language Model
link |
03:43.600
它訓練得好的話
link |
03:44.600
你把左邊的句子跟右邊的句子
link |
03:46.600
丟到這個Neural Language Model裡面
link |
03:48.600
那它應該會告訴你說
link |
03:49.600
左邊的句子它出現的機率
link |
03:51.600
會遠大於右邊出現的機率
link |
03:54.600
那這樣的一個Model
link |
03:56.600
它是怎麼被訓練的呢
link |
03:57.600
這個Model它訓練的方式
link |
03:59.600
其實就是給它一個不完整的句子
link |
04:02.600
請它去預測剩下的句子是什麼
link |
04:05.600
所以舉例而言
link |
04:06.600
假設有一個完整的句子
link |
04:08.600
它叫做今天天氣真好
link |
04:10.600
那我們就把它
link |
04:12.600
弄出一個不完整的版本
link |
04:13.600
假設我們把最後兩個字
link |
04:15.600
掛掉
link |
04:16.600
變成今天天氣
link |
04:18.600
那我們就把這個不完整的句子
link |
04:20.600
丟到一個Neural Language Model
link |
04:22.600
然後要這個Neural Language Model
link |
04:23.600
學會預測這個句子剩下的部分
link |
04:26.600
所以我們期待說
link |
04:27.600
給它今天天氣這四個字
link |
04:29.600
它要知道
link |
04:30.600
要預測說後面可能出現的字是
link |
04:32.600
真好
link |
04:33.600
所以就會形成一個
link |
04:34.600
今天天氣真好
link |
04:35.600
這樣的一個完整的句子
link |
04:37.600
那這個
link |
04:38.600
所謂的不完整的句子
link |
04:40.600
要怎麼構造
link |
04:41.600
其實有很多方式
link |
04:42.600
根據它構造的方式
link |
04:43.600
我們可以把
link |
04:44.600
Language Model的訓練
link |
04:46.600
大概分成兩種
link |
04:48.600
那第一種叫做
link |
04:49.600
Auto Regressive Language Model
link |
04:51.600
那Auto Regressive Language Model
link |
04:53.600
它要做的事情就是
link |
04:54.600
它要學會去完成後半段的句子
link |
04:57.600
給定前半段的句子
link |
04:59.600
要完成後半段的句子
link |
05:01.600
所以假設我今天給它一個句子
link |
05:03.600
那一樣是那個今天天氣真好
link |
05:05.600
那我給它第一個字的時候
link |
05:07.600
那我就希望它會學會
link |
05:08.600
經這個字後面
link |
05:09.600
它要去預測下一個字
link |
05:11.600
那它預測的方式呢
link |
05:12.600
其實它就是會去預測一個機率分布
link |
05:15.600
也就是給定第一個token
link |
05:17.600
或是第一個字
link |
05:18.600
然後出現第二個字的機率分布
link |
05:21.600
長什麼樣子
link |
05:22.600
那這個機率分布呢
link |
05:23.600
它是一個在
link |
05:24.600
智慧型
link |
05:25.600
也就是Vocabulary Set
link |
05:26.600
上面的一個離散的分布
link |
05:28.600
那這個離散的機率分布
link |
05:29.600
它上面的每個
link |
05:31.600
它的每一個entry就代表說
link |
05:33.600
出現某一個字的機率有多大
link |
05:36.600
那所以這個分布就告訴你說
link |
05:38.600
這個給定經這個字的時候
link |
05:40.600
那下一個字出現的機率分布
link |
05:42.600
會長這個樣子
link |
05:44.600
那我們就對這個機率分布
link |
05:45.600
做sampling
link |
05:46.600
然後我們就可能
link |
05:47.600
可能會sample出天這個字
link |
05:49.600
所以說model就會預測說
link |
05:51.600
今後面要接天
link |
05:52.600
那同樣的先給定今天
link |
05:53.600
然後它就要去預測說
link |
05:54.600
今天後面會接什麼字
link |
05:56.600
然後我們再做sample
link |
05:58.600
那個它預測是sample出來
link |
06:00.600
那反正你是做sampling嘛
link |
06:01.600
所以不一定是機率最大的
link |
06:03.600
會sample出來
link |
06:04.600
有可能是機率稍微比較小的
link |
06:05.600
它還是有可能被sample出來
link |
06:07.600
總而言之
link |
06:08.600
Auto-regressive language model
link |
06:10.600
做的事情就是sentence completion
link |
06:12.600
它就是要給定它的prefix
link |
06:14.600
然後學會去預測後面的句子
link |
06:17.600
是什麼東西
link |
06:19.600
那這個model呢
link |
06:20.600
它的architecture長什麼樣子呢
link |
06:22.600
那architecture其實有很多種
link |
06:24.600
你可以用RNN
link |
06:25.600
你也可以用transformer
link |
06:26.600
那因為我們今天要講
link |
06:27.600
transformer language model呢
link |
06:28.600
它主要都是用transformer來做的
link |
06:30.600
所以我們就來看一下
link |
06:32.600
這個transformer phase的
link |
06:35.600
Auto-regressive language model
link |
06:36.600
它是長什麼樣子
link |
06:38.600
那這個model呢
link |
06:42.600
它長的是這個樣子
link |
06:44.600
就是我們先給它一個句子
link |
06:46.600
這個句子是由很多很多
link |
06:48.600
不同的字所組成的
link |
06:49.600
那第一個token叫做BOS token
link |
06:51.600
它其實代表說
link |
06:52.600
句子正要開始了
link |
06:53.600
它是一個特殊的token
link |
06:54.600
那這些token呢
link |
06:55.600
就會經過embedding layer
link |
06:57.600
然後轉換成一個一個的向量
link |
06:59.600
所謂的embedding layer
link |
07:00.600
就是把離散的token
link |
07:02.600
轉換成連續的向量
link |
07:04.600
那這些向量呢
link |
07:06.600
就會被丟到
link |
07:07.600
一層又一層的transformer
link |
07:09.600
那每一層的transformer呢
link |
07:10.600
就會抽出每一個token
link |
07:12.600
對應出來的這個embedding
link |
07:15.600
然後經過好幾層
link |
07:16.600
到了最後一層
link |
07:17.600
它就會抽出最終的embedding
link |
07:19.600
所以這個token
link |
07:20.600
它的embedding
link |
07:21.600
就是代表這個token
link |
07:23.600
這個token的embedding
link |
07:24.600
就是代表這個token
link |
07:26.600
那當我們想要預測說
link |
07:27.600
器這個字
link |
07:28.600
後面會出現什麼樣的字呢
link |
07:30.600
那我們就是拿
link |
07:31.600
我們對應的這個token的embedding
link |
07:34.600
然後讓它過一個language model cap
link |
07:36.600
language model cap
link |
07:37.600
它其實就是一個linear layer
link |
07:39.600
然後linear layer
link |
07:40.600
之後拋不出來的就是
link |
07:42.600
給定前面五個token
link |
07:44.600
然後前面四個
link |
07:45.600
0到4這五個token
link |
07:46.600
然後下一個token
link |
07:47.600
它可能會出現的機率分布
link |
07:50.600
好那language model的訓練呢
link |
07:52.600
它其實就是一種
link |
07:53.600
self-supervised learning
link |
07:55.600
什麼是self-supervised learning呢
link |
07:57.600
self-supervised learning
link |
07:58.600
它是最近幾年
link |
07:59.600
竄出來的一個名詞
link |
08:01.600
它沒有一個明確的定義
link |
08:03.600
那大概的講法就是
link |
08:05.600
你要去預測句子的某一個部分
link |
08:07.600
你要去預測input的某一個部分
link |
08:09.600
給定其他的部分
link |
08:11.600
所以在這個
link |
08:12.600
autoregressive language model裡面
link |
08:14.600
這個我們做的事情
link |
08:16.600
就是我們給定句子的前半部
link |
08:18.600
請它預測後半部
link |
08:20.600
那還有另外一種的language model
link |
08:22.600
那這種language model
link |
08:24.600
叫做NASC language model
link |
08:26.600
那NASC language model
link |
08:28.600
就是給定一個
link |
08:30.600
有某些部分被遮住的句子
link |
08:32.600
舉例而言
link |
08:33.600
今天這個今天天氣真好
link |
08:34.600
我們把第四個字遮住
link |
08:36.600
然後丟到NASC language model
link |
08:38.600
MLM裡面
link |
08:39.600
那我希望它可以預測說
link |
08:41.600
給定這幾個字
link |
08:43.600
請它預測說
link |
08:44.600
這個被NASC掉的字
link |
08:46.600
可能是什麼字
link |
08:47.600
那這其實就是客漏字
link |
08:48.600
或是填空啊
link |
08:49.600
所以這樣的訓練方法
link |
08:50.600
其實也是一種
link |
08:51.600
self-supervised learning
link |
08:53.600
那它做的事情就是
link |
08:56.600
這個不完整的input
link |
08:58.600
這個是input某一部分
link |
09:00.600
然後它要去預測
link |
09:01.600
input剩下這個部分是什麼
link |
09:03.600
那這個
link |
09:05.600
其實pre-trained language model
link |
09:07.600
就是用大量的cover
link |
09:10.600
訓練的language model
link |
09:11.600
就是叫做pre-trained language model
link |
09:13.600
那為什麼它會叫做pre-training
link |
09:16.600
這個pre-trained的預訓練
link |
09:17.600
這個pre是什麼意思呢
link |
09:19.600
這個我們等下會
link |
09:21.600
比較可以理解
link |
09:22.600
就是等下它就是叫
link |
09:23.600
pre-trained language model
link |
09:24.600
那這個pre-trained language model
link |
09:26.600
可以依照它訓練的方式
link |
09:28.600
大概分成autoregressive的
link |
09:30.600
pre-trained language model
link |
09:31.600
像是GVT系列的
link |
09:32.600
然後就是GVT、GVT2
link |
09:34.600
然後GVT3
link |
09:36.600
或者是像是用
link |
09:37.600
next language model訓練的
link |
09:39.600
那像是BERT、Roberta
link |
09:41.600
還有Elbert
link |
09:42.600
它們都是用這個MLM來訓練的
link |
09:44.600
那這些預訓練的語言模型呢
link |
09:48.600
它有什麼好處
link |
09:49.600
那我們相信說呢
link |
09:50.600
當我們給一個句子
link |
09:52.600
然後把它丟到pre-trained language model裡面
link |
09:54.600
這個language model啊
link |
09:55.600
就會抽出很多的hidden representation
link |
09:57.600
那所謂的hidden representation呢
link |
09:59.600
就是模型裡面產生出來的那些output
link |
10:04.600
就是可能是transformer layer的output
link |
10:07.600
可能是self-attention的output
link |
10:08.600
可能是embedding layer的output
link |
10:10.600
那我們相信呢
link |
10:11.600
有很多很多的linguistic knowledge
link |
10:13.600
或是其他的knowledge
link |
10:15.600
它是藏在這些hidden representation裡面
link |
10:18.600
那當我們利用這個
link |
10:20.600
pre-trained過的language model
link |
10:21.600
還有pre-trained出來的hidden representation
link |
10:24.600
然後使用在function任務上面的時候
link |
10:27.600
我們相信function任務可以表現得很好
link |
10:31.600
好,所以說
link |
10:32.600
這個我們把pre-trained的模型
link |
10:35.600
使用在function任務上面
link |
10:37.600
這個就是一個
link |
10:38.600
這就是微調
link |
10:39.600
那舉例而言
link |
10:40.600
假設我們今天有一個任務
link |
10:42.600
它是一個sentiment analysis
link |
10:44.600
電影的review
link |
10:46.600
然後我們要去分類說
link |
10:48.600
這個某一筆的review
link |
10:49.600
它到底是正面的review
link |
10:51.600
還是負面的review
link |
10:52.600
那我們可以做的事情
link |
10:53.600
就是我們可以利用一個
link |
10:54.600
pre-trained的language model
link |
10:56.600
然後把它當成一個classifier
link |
10:59.600
然後這個classifier
link |
11:00.600
它的目的就是
link |
11:02.600
給定一個review
link |
11:03.600
去分類說
link |
11:04.600
它是正面的review
link |
11:05.600
還是負面的review
link |
11:07.600
那這個具體而言
link |
11:08.600
我們到底要怎麼用一個
link |
11:09.600
pre-trained的language model
link |
11:11.600
來做到這件事情呢
link |
11:12.600
那我們其實做的事情是這樣子的
link |
11:15.600
我們原本有一個
link |
11:17.600
pre-trained好的language model
link |
11:18.600
它長這個樣子
link |
11:19.600
所以你丟進去一個
link |
11:20.600
Movie Review的時候
link |
11:21.600
它會抽出很多不同類型的review
link |
11:23.600
然後最後
link |
11:24.600
它原本有一個language model head
link |
11:26.600
那當我們要做
link |
11:27.600
這個fine-tune的時候
link |
11:28.600
我們就會把這個
link |
11:30.600
language model head丟掉
link |
11:31.600
因為我們在
link |
11:32.600
那個fine-tune的時候
link |
11:33.600
我們是不需要做
link |
11:34.600
language model head
link |
11:35.600
那我們要做的事情是
link |
11:37.600
我們要對句子做分類
link |
11:38.600
所以我們就再
link |
11:40.600
這個
link |
11:41.600
我們就再多加一個classifier
link |
11:43.600
那這個classifier的功能是
link |
11:45.600
它去吃這個句子的
link |
11:48.600
最後的embedding
link |
11:50.600
然後output出這個句子
link |
11:51.600
有可能是後面還是正面
link |
11:54.600
這個就是fine-tune
link |
11:55.600
要做的事情
link |
11:56.600
那fine-tune最重要的東西就是
link |
11:58.600
這邊的embedding layer
link |
11:59.600
transform layer
link |
12:00.600
它的參數
link |
12:01.600
都是從pre-trained model
link |
12:03.600
直接拿過來的
link |
12:05.600
然後在fine-tune的時候
link |
12:06.600
我們就是基於這些
link |
12:07.600
pre-trained過的位
link |
12:08.600
然後fine-tune整個model
link |
12:10.600
也就是
link |
12:11.600
即使就是
link |
12:12.600
這些東西雖然它是從
link |
12:13.600
pre-trained language model
link |
12:15.600
initialized來的
link |
12:16.600
但是它在fine-tune的時候
link |
12:17.600
它還是會被訓練到
link |
12:18.600
所以會跟著classifier
link |
12:19.600
一直被訓練
link |
12:21.600
那這樣子的一個方法呢
link |
12:23.600
其實可以在
link |
12:24.600
很多不同的task上面
link |
12:25.600
取得非常好的表現
link |
12:27.600
那這邊將這個表格呢
link |
12:29.600
給大家看的是Bird
link |
12:30.600
在2018年剛開始出來的時候
link |
12:32.600
它的performance
link |
12:34.600
那其他的
link |
12:35.600
這邊是沒有用pre-trained的
link |
12:37.600
然後
link |
12:38.600
這下面四個是有用
link |
12:39.600
pre-trained language model的
link |
12:40.600
那反正總而言之就是Bird
link |
12:42.600
它可以遠遠超過
link |
12:43.600
其他的performance
link |
12:45.600
而且這個margin還不小
link |
12:47.600
那總而言之呢
link |
12:49.600
在這些benchmark dataset上面
link |
12:52.600
pre-trained language model
link |
12:53.600
它們的表現是非常好的
link |
12:55.600
那它也可以應用在
link |
12:56.600
很多不同的scenario
link |
12:58.600
在很多不同的領域上面
link |
12:59.600
舉例而言
link |
13:00.600
我隨便找了一下
link |
13:01.600
2019年ACL
link |
13:02.600
就是某一個
link |
13:03.600
自然語言處理的conference
link |
13:05.600
然後當年Bird剛出來之後
link |
13:07.600
出現了多少種Bird的應用
link |
13:10.600
那舉例而言這個就是
link |
13:12.600
這個推文分析
link |
13:14.600
然後它也可以被用在
link |
13:15.600
pronoun resolution上面
link |
13:17.600
它也可以用在
link |
13:18.600
conversation resolution
link |
13:20.600
conversation上面
link |
13:21.600
就是有點類似語力解答
link |
13:23.600
然後它也可以用在
link |
13:24.600
dementization
link |
13:25.600
這種就是很
link |
13:26.600
link |
13:27.600
很傳統的
link |
13:28.600
自然語言處理的test
link |
13:30.600
然後或者是
link |
13:31.600
grammatical error correction
link |
13:32.600
這也是很傳統的NLP的test
link |
13:34.600
或者它也可以做
link |
13:35.600
clinical relation extraction
link |
13:37.600
所以它也可以用在
link |
13:38.600
各方面的relation extraction
link |
13:40.600
總而言之
link |
13:41.600
這個model實在是太強了
link |
13:42.600
所以它可以用在
link |
13:43.600
很多不同的地方
link |
13:44.600
那聽起來好像
link |
13:45.600
故事就已經很圓滿了
link |
13:47.600
既然這個model這麼厲害
link |
13:48.600
那它可以用在
link |
13:50.600
各種不同的地方
link |
13:51.600
就是可以看
link |
13:52.600
這個這張圖
link |
13:53.600
這個圖呢
link |
13:54.600
就是
link |
13:55.600
link |
13:56.600
畫的是
link |
13:57.600
這個橫軸是時間
link |
13:58.600
然後縱軸是publication的數量
link |
14:00.600
然後是什麼樣的publication呢
link |
14:01.600
是這個文章裡面
link |
14:03.600
跟language model有關的
link |
14:05.600
然後可以發現
link |
14:06.600
在2018年
link |
14:07.600
這個跟language model有關的paper
link |
14:09.600
就暴增了
link |
14:11.600
好那
link |
14:12.600
大概就是因為
link |
14:13.600
這個recurrent language model
link |
14:14.600
出來之後
link |
14:15.600
它實在是太厲害了
link |
14:16.600
那如果這麼厲害的話
link |
14:18.600
難道就沒有東西可以做了嗎
link |
14:20.600
那其實
link |
14:21.600
其實不是這樣子啦
link |
14:22.600
就是
link |
14:23.600
recurrent language model
link |
14:24.600
它即使在很多的benchmark
link |
14:26.600
data set上面取得了
link |
14:28.600
非常好的成就
link |
14:30.600
link |
14:32.600
這也不代表它可以
link |
14:33.600
很成功的
link |
14:34.600
被應用在現實生活中
link |
14:36.600
那我們想要把
link |
14:37.600
這個recurrent language model
link |
14:38.600
應用在現實生活中
link |
14:39.600
是什麼意思呢
link |
14:40.600
就可能今天你有一家
link |
14:41.600
你開了一家公司
link |
14:42.600
然後你想要
link |
14:43.600
你的客戶告訴你說
link |
14:44.600
他有一些小小的data
link |
14:46.600
然後他想要請你用
link |
14:47.600
recurrent language model
link |
14:48.600
然後幫他
link |
14:49.600
做什麼test classification
link |
14:51.600
之類的任務
link |
14:52.600
那你就會發現說
link |
14:53.600
link |
14:54.600
這個recurrent language model
link |
14:55.600
好像不太能用耶
link |
14:56.600
那為什麼不太能用呢
link |
14:57.600
我們來看一下
link |
14:58.600
recurrent language model
link |
14:59.600
要用在現實生活中
link |
15:00.600
會有哪些問題
link |
15:02.600
好所以我們接下來
link |
15:03.600
就看一下這些問題啦
link |
15:04.600
那第一個問題就是
link |
15:05.600
這個data scarcity
link |
15:07.600
就是你在downstream任務裡面
link |
15:09.600
你的
link |
15:10.600
有label的training data
link |
15:11.600
其實不會這麼多
link |
15:13.600
剛剛我們看到那個Bert
link |
15:14.600
他打榜的那個performance啊
link |
15:17.600
這幾個是
link |
15:19.600
八個不同的任務
link |
15:20.600
然後下面對應的是
link |
15:21.600
他每個test
link |
15:22.600
所使用的這個label data
link |
15:25.600
所以你看他的數量級啊
link |
15:26.600
最少都有幾千筆的資料
link |
15:28.600
可是在現實生活中呢
link |
15:29.600
你有興趣的任務
link |
15:30.600
你想要一次收集到
link |
15:32.600
幾千筆的訓練資料
link |
15:34.600
可能是可以
link |
15:35.600
可是他要花很多的資源
link |
15:36.600
很多的金錢
link |
15:37.600
很多的時間
link |
15:38.600
很多的人
link |
15:39.600
那這個就是有點
link |
15:40.600
不太切實際的一個
link |
15:42.600
做法
link |
15:43.600
那另外一個問題呢
link |
15:45.600
就是recurrent language model
link |
15:46.600
他實在是太大了
link |
15:47.600
而且呢
link |
15:48.600
他還越來越大
link |
15:50.600
我記得2018年
link |
15:51.600
Bert剛出來的時候
link |
15:52.600
然後大家都說
link |
15:53.600
啊他很強嘛
link |
15:54.600
是因為用了recurrent language model
link |
15:55.600
他應該做得比較順利
link |
15:56.600
而且呢
link |
15:57.600
因為Bert他其實非常非常大
link |
15:59.600
這個Bert的參數呢
link |
16:00.600
小的也有110個
link |
16:02.600
Million的parameter
link |
16:04.600
那大的那一個呢
link |
16:05.600
有340Million的parameter
link |
16:07.600
那當時大家都覺得
link |
16:08.600
哇這也太扯了吧
link |
16:09.600
怎麼會有這麼大的model
link |
16:10.600
啊這麼大的model
link |
16:11.600
他表現當然很好啊
link |
16:12.600
然後結果沒想到呢
link |
16:13.600
過了幾年之後
link |
16:14.600
GVT2出來了
link |
16:16.600
GVT2出來之後
link |
16:17.600
T5又出來了
link |
16:18.600
T5的數量級
link |
16:19.600
就是這個Bert的好幾倍喔
link |
16:21.600
然後2020年的時候
link |
16:23.600
GVT3出來
link |
16:24.600
然後GVT3的parameter
link |
16:25.600
有多少呢
link |
16:26.600
他有175Million的parameter
link |
16:28.600
所以在現在的paper
link |
16:29.600
你就會看到
link |
16:30.600
有人就說
link |
16:31.600
我們用的parameter
link |
16:32.600
其實非常的少
link |
16:33.600
我們只是用了一個Bert Lodge
link |
16:34.600
Bert Lodge的parameter
link |
16:35.600
有340Million的parameter
link |
16:37.600
那但是我們相比於GVT3
link |
16:39.600
其實已經少很多了
link |
16:41.600
就這只能說
link |
16:42.600
時代的演進實在是太快了
link |
16:44.600
不過就算是Bert Lodge
link |
16:46.600
他還是很大
link |
16:47.600
所以他還是很不切實際
link |
16:49.600
好那
link |
16:50.600
一個model太大了
link |
16:52.600
所以不切實際
link |
16:53.600
為什麼呢
link |
16:54.600
舉例而言啊
link |
16:55.600
我們在標準的finding
link |
16:57.600
就是我們剛才講的
link |
16:58.600
那種finding的方式
link |
16:59.600
假設我今天
link |
17:00.600
要把Bert這個語言模式
link |
17:02.600
用在第一個test A上面的話
link |
17:04.600
那我就要fine-tune一個model
link |
17:06.600
在test A上面
link |
17:08.600
那這個fine-tune的model呢
link |
17:09.600
因為我是整個model
link |
17:10.600
一起fine-tune
link |
17:11.600
所以他每個參數
link |
17:12.600
都跟原本的Bert是不一樣的
link |
17:14.600
我fine-tune在test A
link |
17:15.600
我就需要一個
link |
17:16.600
一樣大的model
link |
17:17.600
同時我fine-tune在test B上面
link |
17:19.600
我也需要一個
link |
17:20.600
一樣大的model
link |
17:21.600
test C跟test D
link |
17:23.600
我也不用要做這件事情
link |
17:25.600
那這樣會有什麼問題呢
link |
17:27.600
假設我今天
link |
17:28.600
device的儲存空間
link |
17:30.600
沒有很大
link |
17:31.600
那你四個test
link |
17:33.600
要四倍的參數量
link |
17:34.600
N個test要N倍的參數量
link |
17:36.600
那這實在是太浪費空間了
link |
17:38.600
那另外一個問題是
link |
17:40.600
當你的preparation model
link |
17:41.600
很大的時候
link |
17:42.600
舉例而言
link |
17:43.600
GT3啊
link |
17:44.600
他有96層
link |
17:45.600
那96層的model
link |
17:46.600
當然他這個
link |
17:47.600
佔的空間會很多嘛
link |
17:49.600
而且你要把一個input
link |
17:51.600
在input的時候
link |
17:52.600
通過96層的model
link |
17:53.600
他也是需要花
link |
17:54.600
非常非常多的時間的
link |
17:56.600
那這麼沒有效率的事情
link |
17:59.600
我們要把它應用
link |
18:00.600
在現實生活中
link |
18:01.600
其實是不太可能的
link |
18:03.600
所以我們就要來看說
link |
18:05.600
這些問題
link |
18:06.600
我們要怎麼來解決
link |
18:08.600
首先我們要來看的是
link |
18:11.600
我們的label data
link |
18:12.600
太少的話
link |
18:13.600
我們要怎麼解決
link |
18:14.600
到這邊有問題嗎
link |
18:17.600
沒有的話我就繼續講
link |
18:19.600
那我們來看第一個問題
link |
18:20.600
第一個問題是
link |
18:21.600
label data scarcity
link |
18:23.600
也就是當我們的training data
link |
18:25.600
他的label
link |
18:26.600
就是training
link |
18:27.600
label的training data
link |
18:28.600
不夠多的話
link |
18:29.600
那我們要怎麼樣
link |
18:30.600
在有限的data
link |
18:31.600
或甚至是沒有data的狀況下
link |
18:33.600
把它應用在
link |
18:34.600
training task上面
link |
18:37.600
那我們現在來講一個
link |
18:39.600
有趣的方法
link |
18:40.600
這個方法叫做prong tuning
link |
18:42.600
那我們先來看一下
link |
18:43.600
假設有一個test
link |
18:44.600
他叫做natural language inference
link |
18:46.600
那natural language inference
link |
18:47.600
他做的事情就是
link |
18:49.600
給你兩個句子
link |
18:50.600
然後一個句子叫做
link |
18:52.600
premise 前提
link |
18:53.600
另外一個句子叫做hypothesis
link |
18:55.600
這個假設
link |
18:56.600
那我們要問的就是
link |
18:57.600
premise跟hypothesis的關係
link |
18:59.600
到底是hypothesis
link |
19:01.600
intel這個前提
link |
19:03.600
還是hypothesis跟premise
link |
19:05.600
是contradiction
link |
19:06.600
或者他們兩個
link |
19:07.600
其實是沒有什麼任何關係的
link |
19:09.600
那其實我們在
link |
19:10.600
傳統的這個
link |
19:12.600
傳統的finding
link |
19:13.600
我們做訊息就是這樣子
link |
19:14.600
就是我們丟了一堆data
link |
19:15.600
給這個model看
link |
19:17.600
然後我會給他看說
link |
19:18.600
兩個句子
link |
19:20.600
然後用一個
link |
19:21.600
special token分開來
link |
19:22.600
答案是neutral
link |
19:23.600
這兩個句子
link |
19:24.600
你把它丟進去
link |
19:25.600
然後答案應該是contradiction
link |
19:26.600
這兩個句子丟進去
link |
19:27.600
答案應該是intelment
link |
19:29.600
然後最後我要問他說
link |
19:30.600
假設有一個句子說
link |
19:31.600
Mary likes pie
link |
19:32.600
然後另外一個句子說
link |
19:33.600
Mary hates pie
link |
19:35.600
然後我們要問他說
link |
19:36.600
那這個應該要是什麼
link |
19:37.600
那我們就期待說
link |
19:38.600
model可以從這一堆data裡面
link |
19:40.600
找出一個共通的pattern
link |
19:42.600
也就是說他要學會說
link |
19:44.600
當我看到兩個句子的時候
link |
19:45.600
我要去想想看
link |
19:46.600
他們兩個的關係
link |
19:47.600
到底是intelment
link |
19:48.600
contradiction
link |
19:49.600
還是neutral
link |
19:50.600
然後最後
link |
19:51.600
他就可以正確的判斷出答案
link |
19:53.600
但是當我們今天的
link |
19:54.600
label data
link |
19:55.600
很少很少的時候
link |
19:57.600
我們只有給他幾筆資料
link |
19:58.600
那模型他真的有辦法
link |
20:00.600
判斷出一個正確的pattern嗎
link |
20:03.600
那可能是沒有辦法的
link |
20:05.600
那我們想想看
link |
20:06.600
我們要叫人來做
link |
20:07.600
natural language inference
link |
20:08.600
會怎麼做
link |
20:09.600
我們可能會跟他說
link |
20:12.600
舉例有一個
link |
20:13.600
剛才的例子
link |
20:14.600
我們可能會說
link |
20:15.600
the spring break is constant
link |
20:16.600
然後後面接說
link |
20:17.600
is it true that
link |
20:18.600
the spring break was over
link |
20:20.600
那這兩個句子
link |
20:21.600
我如果多加了一個
link |
20:22.600
is it true that
link |
20:23.600
你就會知道說
link |
20:24.600
我想要判斷的是
link |
20:25.600
前面這個句子
link |
20:26.600
跟後面的句子
link |
20:27.600
有沒有這個
link |
20:28.600
intelment
link |
20:29.600
contradiction
link |
20:30.600
或是neutral的關係
link |
20:31.600
所以當我給你的
link |
20:32.600
true data
link |
20:33.600
非常非常少
link |
20:34.600
我也可以判斷說
link |
20:35.600
我們現在要做的事情
link |
20:36.600
就是我們要判斷
link |
20:37.600
兩個句子之間的關係
link |
20:39.600
所以當我看到
link |
20:40.600
testing data的時候
link |
20:41.600
我就會知道
link |
20:42.600
Mary likes pie
link |
20:43.600
is it true that
link |
20:44.600
Mary hates pie
link |
20:45.600
那當然答案應該就是
link |
20:47.600
答案應該就是no
link |
20:48.600
link |
20:50.600
好 答案是no
link |
20:52.600
好 那這個東西
link |
20:53.600
其實就是promptuning的
link |
20:54.600
核心概念
link |
20:55.600
就是我們要設計一些
link |
20:57.600
東西讓model知道
link |
20:59.600
我們在做什麼
link |
21:01.600
好 那
link |
21:02.600
當我們把這些
link |
21:03.600
data point
link |
21:04.600
就是data set裡面的
link |
21:05.600
這些data
link |
21:06.600
轉換成
link |
21:07.600
自然語言的prompt
link |
21:09.600
所謂的prompt就是
link |
21:10.600
剛才我們看到那個形式
link |
21:11.600
那model可能就會比較知道
link |
21:12.600
他要做什麼事情了
link |
21:15.600
link |
21:16.600
到底什麼是prompt呢
link |
21:17.600
這個prompt
link |
21:18.600
我覺得中文翻譯
link |
21:19.600
有點難翻
link |
21:20.600
這個
link |
21:21.600
我在劍橋百科上去
link |
21:22.600
劍橋字典上查到的
link |
21:24.600
中文翻譯是
link |
21:25.600
提示符
link |
21:26.600
提詞或提範
link |
21:27.600
所以簡單而言
link |
21:28.600
我們就是要用
link |
21:29.600
一個natural language
link |
21:30.600
去提示
link |
21:31.600
這個language model
link |
21:32.600
他現在要做什麼
link |
21:33.600
他要回答什麼東西
link |
21:35.600
好 那
link |
21:36.600
我們在promptuning裡面
link |
21:37.600
我們會需要三個東西
link |
21:39.600
假設給我這樣的一個
link |
21:40.600
這個
link |
21:41.600
natural language inference
link |
21:42.600
data set
link |
21:43.600
那每一筆data
link |
21:44.600
他就是由
link |
21:45.600
premise hypothesis
link |
21:46.600
還有他對應的
link |
21:47.600
label所組成
link |
21:48.600
那label可能的取之
link |
21:49.600
就是012
link |
21:50.600
分別對應到
link |
21:51.600
intelment
link |
21:52.600
neutral
link |
21:53.600
跟contradiction
link |
21:54.600
link |
21:55.600
那我們需要三個東西
link |
21:56.600
第一個東西
link |
21:57.600
你需要一個prompt template
link |
21:58.600
這個等一下我們會詳細講
link |
21:59.600
第二個
link |
22:00.600
你當然需要一個
link |
22:01.600
natural language model
link |
22:02.600
那第三個
link |
22:03.600
我們會需要一個verbalizer
link |
22:04.600
那什麼是verbalizer
link |
22:05.600
我們等一下會詳細講
link |
22:06.600
link |
22:07.600
那第一個
link |
22:08.600
什麼是prompt template呢
link |
22:09.600
prompt template
link |
22:10.600
他的作用
link |
22:11.600
就是我們要把
link |
22:12.600
data point
link |
22:13.600
轉成natural language prompt
link |
22:14.600
的一個template
link |
22:15.600
所以舉例而言
link |
22:16.600
在我們那個例子裡面
link |
22:18.600
我們就是要把
link |
22:19.600
premise跟hypothesis
link |
22:20.600
用某一種
link |
22:21.600
自然語言的方式
link |
22:22.600
結合起來
link |
22:23.600
那我們就設計了
link |
22:24.600
一個template
link |
22:25.600
這個template告訴我們說
link |
22:26.600
對於trend data的
link |
22:27.600
每一筆資料
link |
22:28.600
我們就要把
link |
22:29.600
premise跟hypothesis
link |
22:30.600
中間接起來
link |
22:31.600
然後中間
link |
22:32.600
要怎麼接呢
link |
22:33.600
中間要打一個問號
link |
22:34.600
然後放一個mask
link |
22:35.600
那這個mask
link |
22:36.600
要幹嘛
link |
22:37.600
這個mask的功能
link |
22:38.600
就是
link |
22:39.600
這個
link |
22:40.600
我們要讓
link |
22:41.600
prefix language model
link |
22:42.600
去填說這個mask
link |
22:43.600
應該要填入什麼字
link |
22:44.600
所以我們才會需要
link |
22:45.600
一個prefix language model
link |
22:48.600
所以第二個
link |
22:49.600
我們就可以把
link |
22:50.600
trend data的每一筆資料
link |
22:51.600
轉換成
link |
22:52.600
這樣子的一個
link |
22:53.600
natural language prompt
link |
22:54.600
然後讓模型
link |
22:55.600
去預測說
link |
22:56.600
mask的地方
link |
22:57.600
應該要填入什麼字
link |
22:59.600
那我們剛剛也講過了
link |
23:00.600
這個prefix language model
link |
23:01.600
它的output
link |
23:02.600
其實是一個
link |
23:03.600
probability distribution
link |
23:05.600
那probability distribution
link |
23:06.600
是over整個
link |
23:08.600
vocabulary set
link |
23:09.600
整個vocabulary set
link |
23:10.600
會有很多個
link |
23:11.600
不同的字嘛
link |
23:12.600
舉例而言
link |
23:13.600
它總共
link |
23:14.600
應該是三零五二二
link |
23:15.600
就是三萬多個
link |
23:16.600
可是我們真正要
link |
23:18.600
在意的只是
link |
23:19.600
他們的關係
link |
23:20.600
到底是intelment
link |
23:21.600
competition
link |
23:22.600
還是neutral
link |
23:23.600
所以我們需要
link |
23:24.600
有某一種方法
link |
23:25.600
可以把intelment
link |
23:26.600
neutral跟competition
link |
23:27.600
轉換成
link |
23:28.600
vocabulary set
link |
23:29.600
裡面的
link |
23:30.600
某些特定的單詞
link |
23:31.600
那verbalizer
link |
23:32.600
他做的事情
link |
23:33.600
就是他要去
link |
23:34.600
轉換
link |
23:35.600
這個label
link |
23:36.600
跟vocabulary set
link |
23:37.600
之間的關係
link |
23:38.600
也就是他是一個making
link |
23:39.600
他把這個
link |
23:40.600
label set
link |
23:41.600
裡面的
link |
23:42.600
每個label
link |
23:43.600
去map到
link |
23:44.600
這個
link |
23:45.600
vocabulary set
link |
23:46.600
某一個
link |
23:47.600
特定的
link |
23:48.600
單字
link |
23:49.600
那我們現在就定義說
link |
23:50.600
我們的intelment
link |
23:51.600
他就對應到
link |
23:52.600
這個
link |
23:53.600
vocabulary裡面的yes
link |
23:54.600
neutral
link |
23:55.600
就對應到
link |
23:56.600
vocabulary裡面的maybe
link |
23:57.600
competition
link |
23:58.600
這個關係
link |
23:59.600
就對應到
link |
24:00.600
vocabulary的no
link |
24:01.600
所以我們就知道說
link |
24:02.600
當model
link |
24:03.600
他predict出來的
link |
24:04.600
這個probability distribution
link |
24:05.600
我們就是要找
link |
24:06.600
yes
link |
24:07.600
maybe
link |
24:08.600
跟no
link |
24:09.600
這三個字
link |
24:10.600
然後我們就可以
link |
24:11.600
找到最終的
link |
24:12.600
probability distribution
link |
24:13.600
那這個就是
link |
24:14.600
model看到
link |
24:15.600
very likes pie
link |
24:16.600
逗點
link |
24:17.600
他的問號
link |
24:18.600
next
link |
24:19.600
very hates pie
link |
24:20.600
他覺得答案是
link |
24:22.600
他覺得答案是
link |
24:23.600
他覺得答案是什麼
link |
24:24.600
他覺得答案是competition
link |
24:25.600
link |
24:26.600
答案是2
link |
24:27.600
所以
link |
24:28.600
link |
24:29.600
這個就是promptuning
link |
24:30.600
主要的架構
link |
24:31.600
那在promptuning的時候呢
link |
24:32.600
我們使用了
link |
24:33.600
再講一次
link |
24:34.600
就是我們需要一個
link |
24:35.600
prompt template
link |
24:36.600
那我們需要一個
link |
24:37.600
continuous model
link |
24:38.600
然後我們需要一個verbalizer
link |
24:39.600
把這個vocabulary
link |
24:40.600
變成我們的label
link |
24:41.600
那在promptuning的時候呢
link |
24:42.600
我們就整個model
link |
24:43.600
一起tune
link |
24:44.600
那這邊可以注意到
link |
24:45.600
一件事情
link |
24:46.600
就是
link |
24:47.600
這個prompt tuning
link |
24:48.600
跟standard
link |
24:49.600
prompt tuning
link |
24:50.600
有什麼樣的差別呢
link |
24:51.600
右邊的是standard
link |
24:52.600
prompt tuning
link |
24:53.600
那假設我們要
link |
24:54.600
set在這個
link |
24:55.600
這個
link |
24:56.600
natural language
link |
24:57.600
inverse
link |
24:58.600
這個data set上面
link |
24:59.600
那我們的inverse
link |
25:00.600
format
link |
25:01.600
會是這個樣子
link |
25:02.600
就是我們就用一個
link |
25:03.600
scp
link |
25:04.600
他是一個spatial token
link |
25:05.600
然後把premise
link |
25:06.600
跟hypothesis分開
link |
25:07.600
那在prompt tuning裡面呢
link |
25:08.600
我們會用一個
link |
25:09.600
prompting template
link |
25:10.600
然後
link |
25:11.600
把他丟到模型裡面
link |
25:12.600
那這個模型
link |
25:13.600
其實也不太一樣
link |
25:14.600
這個
link |
25:15.600
在standard fine tuning的時候
link |
25:16.600
我們會把原本的
link |
25:17.600
language model
link |
25:18.600
的這個lm hat
link |
25:19.600
直接丟掉
link |
25:20.600
然後重新initialize
link |
25:21.600
一個classifier
link |
25:22.600
然後
link |
25:23.600
fine tuning這個model
link |
25:24.600
可是在prompt tuning的時候
link |
25:25.600
我們就是要
link |
25:26.600
利用language model
link |
25:27.600
然後
link |
25:28.600
他原本language model的努力
link |
25:30.600
所以我們會保留
link |
25:31.600
這個language model hat
link |
25:32.600
然後我們
link |
25:33.600
不會再另外加一個classifier
link |
25:34.600
但同時
link |
25:35.600
他也是整個model的
link |
25:36.600
要tune
link |
25:37.600
link |
25:39.600
那prompt tuning呢
link |
25:40.600
他會有
link |
25:41.600
比較好的performance
link |
25:42.600
這個相比standard fine tuning
link |
25:44.600
那這張圖呢
link |
25:45.600
是給大家看的是
link |
25:46.600
standard fine tuning
link |
25:47.600
跟prompt tuning
link |
25:48.600
這兩種不同的
link |
25:49.600
fine tuning方式
link |
25:50.600
在某一個test上面
link |
25:51.600
當你的training data
link |
25:53.600
這個數量不一樣多的時候
link |
25:54.600
他的accuracy
link |
25:55.600
可以達到多少
link |
25:56.600
紫色這條線
link |
25:57.600
是standard fine tuning
link |
25:59.600
然後
link |
26:00.600
這個金色的這條線
link |
26:01.600
是prompt tuning
link |
26:02.600
那我們就可以看到說
link |
26:03.600
當這個training data
link |
26:04.600
非常非常少的時候
link |
26:05.600
prompt tuning的performance
link |
26:06.600
會明顯高於
link |
26:08.600
standard fine tuning
link |
26:09.600
那當這個data
link |
26:10.600
越來越多的時候
link |
26:11.600
他們兩個performance
link |
26:12.600
就會越來越接近
link |
26:13.600
所以這個prompt tuning
link |
26:14.600
在data scarcity的時候
link |
26:16.600
他可以有很好的表現
link |
26:18.600
那這是為什麼呢
link |
26:19.600
當然第一個就是因為
link |
26:20.600
我們在設計這個prompt
link |
26:22.600
template的時候
link |
26:23.600
我們保留了
link |
26:24.600
我們把它
link |
26:25.600
就是我們incorporate
link |
26:26.600
一些human knowledge
link |
26:27.600
因為那個prompt template
link |
26:29.600
就代表說
link |
26:30.600
我們認為這個test
link |
26:31.600
應該是怎麼去做的
link |
26:33.600
那我們就覺得
link |
26:34.600
用這樣的方法
link |
26:35.600
應該也比較容易做
link |
26:36.600
那另外一個就是
link |
26:37.600
我們沒有新增
link |
26:39.600
任何的parameter
link |
26:40.600
就像上面兩圖顯示的
link |
26:42.600
standard fine tuning
link |
26:43.600
他多了一個classifier
link |
26:44.600
那當你的這個
link |
26:46.600
level data很少的時候
link |
26:47.600
假設你只有
link |
26:48.600
幾百筆的level data
link |
26:50.600
那一個classifier的head
link |
26:51.600
他的參數量
link |
26:52.600
大概會是
link |
26:53.600
7,6,8乘以2
link |
26:55.600
乘以3之類的
link |
26:56.600
所以他會遠大於
link |
26:57.600
你的這個
link |
26:58.600
這個level data的數量
link |
27:00.600
所以他就很難
link |
27:01.600
會進入起來
link |
27:02.600
可是因為我們在
link |
27:03.600
prompt tuning的時候
link |
27:05.600
我們是用原本的
link |
27:06.600
language model
link |
27:07.600
所以其實對model來說
link |
27:08.600
他做的事情
link |
27:09.600
跟preparing
link |
27:10.600
是沒有什麼差的
link |
27:11.600
所以prompt tuning
link |
27:12.600
可以保留原本的知識
link |
27:15.600
然後他也不會需要
link |
27:17.600
模型去學一些
link |
27:18.600
其他的東西
link |
27:20.600
link |
27:21.600
所以這個是prompt tuning
link |
27:22.600
那我們來看一下
link |
27:23.600
prompt tuning這樣的東西
link |
27:24.600
要怎麼樣應用在
link |
27:27.600
更極端的這個
link |
27:30.600
level data scarcity
link |
27:32.600
因為你看這邊
link |
27:33.600
這邊的level data scarcity
link |
27:34.600
其實也是
link |
27:35.600
就是幾千筆以下
link |
27:36.600
那幾千筆
link |
27:37.600
如果更少的話
link |
27:38.600
如果更少的話
link |
27:39.600
要怎麼做
link |
27:40.600
那prompt tuning
link |
27:41.600
單單prompt tuning
link |
27:42.600
可能就不夠
link |
27:43.600
那我們就來看一下
link |
27:44.600
prompt tuning
link |
27:45.600
要怎麼做一些
link |
27:47.600
調整或是改善
link |
27:49.600
然後來
link |
27:50.600
這個
link |
27:51.600
來overcome
link |
27:52.600
更嚴峻的level data scarcity
link |
27:56.600
link |
27:57.600
那我們第一個看到的scenario
link |
27:58.600
是fusion learning
link |
27:59.600
那fusion learning
link |
28:00.600
其實他是一個
link |
28:01.600
沒有很明確定義的詞
link |
28:03.600
fusion
link |
28:04.600
你到底多少叫fusion
link |
28:05.600
其實沒有很明確定義
link |
28:07.600
那我這邊講的fusion
link |
28:08.600
是假設我們的training data
link |
28:10.600
只有十幾筆
link |
28:11.600
level的training data
link |
28:12.600
只有十幾筆
link |
28:13.600
那只有十幾筆
link |
28:15.600
你要做prompt tuning
link |
28:16.600
可能也是
link |
28:17.600
當然是做得起來
link |
28:18.600
但是我們希望
link |
28:19.600
他可以做得更好
link |
28:20.600
link |
28:21.600
這個
link |
28:22.600
其實GPT-3
link |
28:23.600
他也可以做fusion learning
link |
28:24.600
link |
28:25.600
所以
link |
28:26.600
好像解決問題了
link |
28:27.600
但其實沒有解決
link |
28:28.600
因為GPT-3
link |
28:29.600
其實已經有一個prompt
link |
28:31.600
他也不是免費的
link |
28:32.600
而且
link |
28:33.600
你就算要去註冊
link |
28:34.600
好像也要註冊蠻久
link |
28:35.600
才拿到那個API的
link |
28:36.600
所以
link |
28:37.600
我預設一般人
link |
28:38.600
可能不會想要用GPT-3
link |
28:40.600
那我們就希望
link |
28:41.600
我們可以用稍微小一點的model
link |
28:43.600
然後呢
link |
28:44.600
也達到
link |
28:45.600
跟GPT-3一樣
link |
28:46.600
或是比GPT-3還要好
link |
28:48.600
almost
link |
28:49.600
link |
28:50.600
有一個
link |
28:51.600
很有名的work
link |
28:52.600
叫做lmbf
link |
28:53.600
他要做的事情就是
link |
28:55.600
我們可不可以
link |
28:56.600
用小一點的model
link |
28:58.600
然後讓他可以
link |
28:59.600
這個
link |
29:00.600
在fusion learning上面
link |
29:02.600
表現的好
link |
29:03.600
那這個
link |
29:04.600
lmbf的全名是
link |
29:05.600
better fusion fine tuning
link |
29:07.600
than with models
link |
29:08.600
然後
link |
29:09.600
這個
link |
29:10.600
這句話是作者自己寫的
link |
29:11.600
alternatively than with models
link |
29:12.600
best framework ever
link |
29:13.600
這是作者自己寫的
link |
29:15.600
link |
29:16.600
lmbf的這個方法呢
link |
29:17.600
他的核心的概念就是
link |
29:19.600
他也要prompt tuning
link |
29:21.600
但是呢
link |
29:22.600
他除了prompt tuning之外
link |
29:24.600
他另外加了一個
link |
29:25.600
叫做demonstration的東西
link |
29:26.600
那什麼是demonstration呢
link |
29:28.600
link |
29:29.600
等一下看就知道了
link |
29:30.600
那prompt tuning就是
link |
29:31.600
我們要有一個prompt template
link |
29:33.600
所以
link |
29:34.600
這個例子是
link |
29:35.600
目的語錄的例子
link |
29:36.600
那原本的input
link |
29:37.600
應該是no reason to watch
link |
29:38.600
那如果你看到一個目的語錄
link |
29:39.600
是no reason to watch的話
link |
29:41.600
就是
link |
29:42.600
他應該就是一個負面的語錄嘛
link |
29:43.600
所以他加的template是
link |
29:44.600
it was best
link |
29:46.600
然後
link |
29:47.600
這個language model呢
link |
29:48.600
他就要學會
link |
29:49.600
在這個best裡面
link |
29:50.600
predict說
link |
29:51.600
他可能是great
link |
29:52.600
或是terrible
link |
29:53.600
那great這個單字
link |
29:54.600
就對應到
link |
29:55.600
positive review
link |
29:56.600
terrible這個單字
link |
29:57.600
他就對應到
link |
29:58.600
negative review
link |
30:01.600
那這個部分
link |
30:02.600
就是prompt tuning的部分
link |
30:04.600
那他又另外加了一個
link |
30:05.600
叫做demonstration的東西
link |
30:07.600
什麼是demonstration呢
link |
30:08.600
demonstration就是
link |
30:09.600
我要讓model知道
link |
30:10.600
當他看到這樣的東西
link |
30:12.600
他要怎麼做
link |
30:13.600
所以
link |
30:14.600
他在原本的input後面
link |
30:15.600
就加了兩個demonstration
link |
30:17.600
那這兩個demonstration
link |
30:18.600
長的是這樣
link |
30:19.600
他有給他一筆正面的review
link |
30:21.600
叫做perform right
link |
30:22.600
然後it was great
link |
30:23.600
然後一筆負面的review
link |
30:24.600
the grammar disclosed nothing
link |
30:26.600
it was terrible
link |
30:27.600
所以model就會知道說
link |
30:28.600
當我看到一個
link |
30:29.600
正面的review的時候
link |
30:30.600
後面的it was small
link |
30:32.600
他要怎麼做
link |
30:33.600
那當我看到一個
link |
30:34.600
負面的review的時候
link |
30:35.600
他it was blah blah blah
link |
30:36.600
他要怎麼做
link |
30:37.600
terrible
link |
30:38.600
那這樣的形式
link |
30:40.600
就可以更加幫助
link |
30:42.600
這個language model
link |
30:43.600
在future learning上面的表現
link |
30:45.600
那我要講一個
link |
30:47.600
他說的這個
link |
30:48.600
smaller pretending model
link |
30:50.600
這個smaller呢
link |
30:51.600
是Roberta Lodge
link |
30:52.600
Roberta Lodge有340M的power
link |
30:54.600
所以他
link |
30:55.600
當然跟QT3比是很小
link |
30:57.600
只是還是很大
link |
30:58.600
好那我們來看
link |
31:00.600
那我們先來看一下performance
link |
31:02.600
那performance呢
link |
31:03.600
這個
link |
31:04.600
框起來
link |
31:05.600
我們看這個
link |
31:06.600
框起來的幾個部分就好了
link |
31:07.600
那他用的future是
link |
31:09.600
只有16-bit training data
link |
31:11.600
那只有16-bit training data
link |
31:13.600
假設你直接用standard fine-tuning
link |
31:15.600
就是我們剛才講的那個
link |
31:17.600
加一個classifier
link |
31:19.600
然後直接fine-tuning這個model
link |
31:21.600
他的performance是
link |
31:23.600
這個樣子
link |
31:24.600
這一行
link |
31:25.600
那假設我們用promptuning
link |
31:27.600
只有用promptuning
link |
31:28.600
沒有加demonstration的話
link |
31:29.600
他會是這一行
link |
31:31.600
或是這一行
link |
31:32.600
那這兩行的差別
link |
31:33.600
只是差在說
link |
31:34.600
這個prompt是automatic
link |
31:36.600
找出來的
link |
31:37.600
還是我們人去define的
link |
31:38.600
link |
31:39.600
paper裡面有講一下
link |
31:41.600
他怎麼去找出這個template
link |
31:44.600
那大家有興趣的話可以看一下
link |
31:45.600
我有把那個reference貼在這裡
link |
31:47.600
link |
31:48.600
光是加這個prompt
link |
31:50.600
光是使用promptuning就可以比
link |
31:52.600
標準的fine-tuning
link |
31:53.600
往上非常非常多
link |
31:55.600
但是如果你加了demonstration的話
link |
31:57.600
在大部分的狀況
link |
31:58.600
他還可以往
link |
31:59.600
把這個performance再往上推一點點
link |
32:01.600
那雖然說呢
link |
32:02.600
這個跟standard fine-tuning
link |
32:04.600
也就是用整個standard fine-tuning
link |
32:06.600
然後用整個training set比起來
link |
32:08.600
他的performance還是差了一大截
link |
32:10.600
如果比起
link |
32:11.600
你用standard fine-tuning
link |
32:12.600
然後
link |
32:13.600
用很小很小的data set
link |
32:14.600
performance來說的話
link |
32:16.600
那這個
link |
32:17.600
他們所提出的OMBM
link |
32:18.600
其實是非常非常厲害的
link |
32:21.600
link |
32:22.600
那這個就是
link |
32:23.600
future learning的時候
link |
32:24.600
我們可以用promptuning
link |
32:25.600
再加上demonstration
link |
32:27.600
來幫助performance
link |
32:29.600
那下一個我們要講的scenario是
link |
32:31.600
semi-supervised learning
link |
32:33.600
那semi-supervised learning呢
link |
32:34.600
他其實指的是說
link |
32:36.600
我們有一些training data
link |
32:39.600
然後這些training data
link |
32:40.600
這個包含了
link |
32:42.600
少量的label data
link |
32:44.600
還有大量的label data
link |
32:46.600
那我們現在要
link |
32:47.600
做的事情就是
link |
32:48.600
我們想要
link |
32:49.600
運用這些label data
link |
32:51.600
然後
link |
32:53.600
然後把它翻譯在
link |
32:54.600
當初的任務上面
link |
32:56.600
那這個
link |
32:57.600
semi-supervised learning
link |
32:58.600
很標準的一種做法
link |
32:59.600
就是self-training
link |
33:00.600
self-training就是說
link |
33:01.600
我們就想按把去
link |
33:03.600
label這些label data
link |
33:04.600
然後把它當作
link |
33:05.600
把他們得到的sudo label
link |
33:07.600
然後拿來train
link |
33:08.600
整個model
link |
33:10.600
那其實
link |
33:11.600
我們等一下要講的
link |
33:12.600
這個方法也是這樣
link |
33:13.600
只是我們來看一下
link |
33:14.600
我們要怎麼利用
link |
33:15.600
這個promptuning
link |
33:16.600
這個language model
link |
33:17.600
做到這件事情
link |
33:18.600
那我們現在要講的
link |
33:19.600
這個方法呢
link |
33:20.600
他是在
link |
33:21.600
2021年的時候提出來的
link |
33:22.600
那這篇paper的標題
link |
33:23.600
我們特別講一下
link |
33:24.600
他叫做
link |
33:25.600
It's not just size but measures
link |
33:27.600
Small language models
link |
33:28.600
are also future learners
link |
33:29.600
我先澄清一下
link |
33:31.600
這邊的future
link |
33:32.600
跟我們剛才講的future
link |
33:33.600
是不一樣的
link |
33:34.600
因為future這個詞
link |
33:35.600
是沒有明確的定義
link |
33:36.600
所以他這邊的future
link |
33:37.600
其實是semi-supervised
link |
33:38.600
那為什麼要特別
link |
33:39.600
講一下這個標題呢
link |
33:40.600
因為其實GVD-3
link |
33:41.600
在2015年提出來的時候
link |
33:42.600
他的標題是叫做
link |
33:43.600
Language models are future learners
link |
33:45.600
然後所以這邊
link |
33:46.600
有一點是在
link |
33:47.600
就是不能說打臉
link |
33:49.600
可是他就要說
link |
33:50.600
就算我沒有GVD-3那麼大
link |
33:51.600
我還是可以
link |
33:52.600
我還是可以
link |
33:53.600
有那麼好的performance
link |
33:54.600
然後這邊算是一個
link |
33:56.600
就是
link |
33:58.600
很前衛的我當時
link |
34:00.600
那我們來看一下
link |
34:01.600
他是怎麼做的
link |
34:02.600
他就是使用了promptuning
link |
34:03.600
然後再加上
link |
34:04.600
self-leveling的技巧
link |
34:06.600
然後來做semi-supervised learning
link |
34:08.600
那他提出的方法
link |
34:09.600
叫做Pattern Exploitative Training
link |
34:11.600
那他分為三個步驟
link |
34:13.600
第一個步驟呢
link |
34:14.600
他就是設計了
link |
34:15.600
好多種不同的prompt
link |
34:16.600
還有不同的verbalizer
link |
34:18.600
那用這些不同的prompt
link |
34:19.600
不同的verbalizer
link |
34:20.600
來fine-tune
link |
34:21.600
同一個
link |
34:23.600
來fine-tune原本我們只有
link |
34:25.600
我們原本
link |
34:27.600
我再重複講一次
link |
34:28.600
我們做的事情就是
link |
34:29.600
我們用不同的verbalizer
link |
34:31.600
然後還有不同的prompt
link |
34:32.600
然後來fine-tune
link |
34:33.600
我們原本的那一堆
link |
34:35.600
label跟data
link |
34:36.600
然後每一種
link |
34:37.600
不同的verbalizer
link |
34:38.600
跟prompt的組合
link |
34:39.600
我們就可以fine-tune出
link |
34:40.600
一個經過promptuning的model
link |
34:43.600
然後不同的verbalizer
link |
34:47.600
還有prompt的組合
link |
34:48.600
我們就可以fine-tune出
link |
34:49.600
不同的prompt的model
link |
34:51.600
那這四個兩個其實
link |
34:52.600
差得很小
link |
34:53.600
這個只是在pre-match前面
link |
34:54.600
多加了一個
link |
34:55.600
portraition mark而已
link |
34:57.600
這樣就已經是可以
link |
34:58.600
當作不同的pattern
link |
35:02.600
所以我們有很多
link |
35:03.600
不同的pattern
link |
35:04.600
很多不同的verbalizer
link |
35:06.600
我們訓練出很多不同的
link |
35:08.600
prompt-tuned model之後呢
link |
35:10.600
我們要怎麼做呢
link |
35:11.600
我們就用這些prompt-tuned
link |
35:13.600
我們就用這些model
link |
35:14.600
然後請他們去label
link |
35:18.600
這些unlabeled dataset
link |
35:20.600
所以對於這個unlabeled dataset
link |
35:23.600
每一筆資料
link |
35:24.600
我就用很多不同的prompt-tuned
link |
35:27.600
你得到的model來做prediction
link |
35:30.600
那這個prediction
link |
35:31.600
他可能對於某一筆
link |
35:32.600
他會跟我說
link |
35:33.600
對於某一筆資料
link |
35:34.600
這個model會告訴我說
link |
35:35.600
他的prediction長這個樣子
link |
35:37.600
那同一筆資料
link |
35:38.600
對於另外一個model
link |
35:39.600
他會告訴我說
link |
35:40.600
他的prediction長這個樣子
link |
35:42.600
那我們就把這兩個prediction
link |
35:43.600
結合起來
link |
35:44.600
應該說這不同的model
link |
35:46.600
全部結合起來
link |
35:47.600
那要怎麼結合
link |
35:48.600
有不同的方式
link |
35:49.600
你可以單純的把它加起來就好
link |
35:51.600
那加起來呢
link |
35:52.600
就代表這一筆unlabeled data
link |
35:54.600
他的sudo label
link |
35:56.600
那最後一個步驟呢
link |
35:57.600
就是我們用standard fine-tuning
link |
35:59.600
然後fine-tune在所有的dataset
link |
36:01.600
就是包含這個
link |
36:03.600
包含labeled data
link |
36:05.600
還有unlabeled data
link |
36:06.600
那labeled data
link |
36:07.600
我們當然就是用原本的label
link |
36:09.600
那labeled data
link |
36:10.600
我們用的是sub-label
link |
36:13.600
也就是我們剛剛在上一個步驟
link |
36:14.600
得到的這個東西
link |
36:15.600
然後最後我們用standard fine-tuning
link |
36:17.600
也就是我們把這個
link |
36:18.600
refinement model tag拿掉
link |
36:19.600
然後用classify
link |
36:20.600
然後直接fine-tune
link |
36:21.600
那這個就是PTT他做的事情
link |
36:24.600
那他的performance
link |
36:25.600
也是可以非常非常好
link |
36:27.600
而且他這個有一個特別的事情
link |
36:29.600
就是這個方法
link |
36:30.600
就算你沒有原本的finding data
link |
36:34.600
還是可以做的
link |
36:35.600
因為refinement model
link |
36:37.600
他本來就應該有
link |
36:38.600
這個nest infilling的能力
link |
36:40.600
所以即使他沒有
link |
36:41.600
做fine-tuning得到這樣的model
link |
36:43.600
你給他這樣子的形式
link |
36:46.600
他也應該要有辦法
link |
36:47.600
去predict出
link |
36:48.600
這個應該要填什麼東西
link |
36:50.600
所以即使你沒有這個步驟
link |
36:51.600
他還是可以
link |
36:52.600
做到PTT的訓練
link |
36:56.600
好那這個是
link |
36:57.600
Semi-supervised learning的應用
link |
37:00.600
那最後我們來看
link |
37:01.600
Zero-threaded learning
link |
37:02.600
那Zero-threaded learning
link |
37:03.600
就是我們沒有任何的訓練data
link |
37:07.600
那我們可能連Level data都沒有
link |
37:10.600
那在這樣的狀況下
link |
37:11.600
我們可能就只能期待說
link |
37:13.600
你的model
link |
37:14.600
他可以做Zero-threaded inference
link |
37:17.600
那什麼樣的model
link |
37:18.600
可以做Zero-threaded inference呢
link |
37:20.600
好,GP3可以
link |
37:22.600
那GP3可以
link |
37:23.600
他其實告訴我們一件事情
link |
37:25.600
就是你的model只要夠大
link |
37:26.600
然後他存在夠多的Level data
link |
37:28.600
他存在夠多的data上面
link |
37:30.600
那他就可以做到
link |
37:31.600
這個Zero-threaded learning
link |
37:33.600
那什麼是Zero-threaded learning
link |
37:34.600
就是你只要跟他說
link |
37:35.600
我現在要做的是翻譯
link |
37:36.600
然後丟給他一個英文字
link |
37:38.600
然後因為你已經跟他說
link |
37:39.600
你要翻成法文
link |
37:40.600
所以他就會自動翻出法文
link |
37:42.600
那這個Zero-threaded performance
link |
37:46.600
在GP3裡面也是隨著
link |
37:48.600
這個model的參數越來越大
link |
37:50.600
然後他就會有越來越好的表現
link |
37:52.600
那其實他的表現
link |
37:53.600
也沒有到特別特別的好
link |
37:54.600
但只是已經比Random還要好
link |
37:57.600
但是還是有很大的increment空間
link |
37:59.600
那大家就會好奇說
link |
38:01.600
這個GP3到底為什麼可以做到
link |
38:03.600
Zero-threaded inference呢
link |
38:07.600
那其實有一個假設是這樣子
link |
38:09.600
有一個假設是說
link |
38:10.600
因為Threading data裡面
link |
38:11.600
其實很像在pre-threading的時候
link |
38:14.600
這個Threading data的長相
link |
38:15.600
很像是一個Multi-task learning的環境
link |
38:18.600
所以這個pre-threading data裡面
link |
38:20.600
有各種不同類型的task
link |
38:22.600
所以會讓他學到
link |
38:23.600
Multi-task learning的能力
link |
38:24.600
那因為有Multi-task learning的能力
link |
38:26.600
然後讓他產生了
link |
38:27.600
Zero-threaded inference的能力
link |
38:29.600
那pre-threading data裡面
link |
38:31.600
真的有這麼多Multi-task的任務嗎
link |
38:34.600
那我們就來看一下
link |
38:36.600
這個是我在隨便網站上面抓出來的
link |
38:39.600
在網站上面的FAQ
link |
38:41.600
你可能就會看到有一個question
link |
38:42.600
然後後面有一個斷詞
link |
38:44.600
然後answer的斷詞
link |
38:45.600
那假設今天去GP3
link |
38:47.600
在訓練的時候
link |
38:48.600
他就會看到說
link |
38:49.600
當我看到Q冒號
link |
38:50.600
然後接著A的時候
link |
38:51.600
我就要去回答前面這個問題
link |
38:53.600
那同樣的
link |
38:54.600
我們在pre-threading的時候
link |
38:55.600
他也可能會隱約的
link |
38:56.600
學到怎麼做Saturation
link |
38:58.600
舉例而言呢 在那個Paper的網站
link |
39:01.600
你就會看到說
link |
39:02.600
有一篇Paper的標題是這樣子
link |
39:03.600
然後他的Abstract
link |
39:04.600
Abstract大概就是
link |
39:05.600
整篇Paper在做什麼
link |
39:06.600
然後在Abstract下面
link |
39:07.600
他還有一個欄位叫做
link |
39:09.600
One-sentence summarization
link |
39:11.600
所以他就告訴你說
link |
39:12.600
Abstract這麼多東西
link |
39:13.600
他的一句話
link |
39:14.600
一言以蔽之就是這個
link |
39:15.600
所以Conrad就會學到說
link |
39:16.600
當我看到前面一段話
link |
39:17.600
當我看到Saturation冒號
link |
39:19.600
我就要去回答說
link |
39:20.600
他的summarize的用語應該是
link |
39:23.600
所以其實他有很多不同的例子
link |
39:25.600
那就顯示說呢
link |
39:26.600
在pre-threading其實可能
link |
39:28.600
很多這樣子的Multitask的訊號
link |
39:31.600
讓model在學習的時候
link |
39:33.600
他可以在pre-threading的時候
link |
39:35.600
學到Multitask的能力
link |
39:37.600
然後得到Zero-shot inference的能力
link |
39:41.600
那與其讓model
link |
39:43.600
inclusive的學到Multitask的能力
link |
39:46.600
那我們不如讓他
link |
39:47.600
exquisite的去學這個能力
link |
39:49.600
那所以有人就做了這樣的實驗
link |
39:52.600
他就把一個T5
link |
39:53.600
T5是某一個pre-threading model
link |
39:55.600
那他就把T5 fine-tune
link |
39:57.600
用Multitask learning的方式
link |
39:59.600
fine-tune
link |
40:00.600
然後他要測試看看
link |
40:01.600
fine-tune之後這個model
link |
40:03.600
有沒有辦法做Zero-shot
link |
40:05.600
generalization
link |
40:06.600
那他做的形式
link |
40:07.600
也跟我們前面講的是一樣的
link |
40:09.600
他就是用Promptuning
link |
40:10.600
他就把很多不同的Task
link |
40:12.600
轉換成Prompt形式
link |
40:13.600
然後給他看很多很多不同的Prompt
link |
40:15.600
所以同樣是MUI的Dataset
link |
40:17.600
他可能會有很多不同種的Prompt
link |
40:19.600
然後把他轉換成
link |
40:20.600
就是Natural Learning Prompt
link |
40:23.600
然後丟下去到這邊直接train
link |
40:26.600
那train的這個任務呢
link |
40:28.600
有很多不同種
link |
40:29.600
那假設說他的pre-train的任務
link |
40:32.600
他fine-tune的任務
link |
40:33.600
有包含了Question answering
link |
40:35.600
然後你期待他有
link |
40:37.600
Zero-shot的Question answering的能力
link |
40:39.600
好像很合理吧
link |
40:40.600
所以他們在分類這個任務的時候
link |
40:42.600
他們就把任務分成兩類
link |
40:44.600
其中一類呢
link |
40:45.600
是黃色這個部分
link |
40:46.600
他只會在fine-tuning的時候
link |
40:47.600
看過這些類型的任務
link |
40:49.600
那另外一些類型的任務
link |
40:51.600
他在fine-tuning完全不會看過
link |
40:53.600
他只有在Zero-shot testing的時候
link |
40:55.600
他會看到
link |
40:56.600
那大概分成這樣子
link |
40:58.600
那他就發現說呢
link |
41:00.600
經過這個prompt tuning的fine-tuning之後
link |
41:03.600
這個model就可以有Zero-shot的能力
link |
41:07.600
那這個結果呢
link |
41:08.600
要怎麼看呢
link |
41:09.600
這個結果是很多不同的test
link |
41:11.600
然後前面這幾個
link |
41:13.600
只有一個點的
link |
41:14.600
是GP13的performance
link |
41:16.600
然後這個
link |
41:18.600
他下面有寫performance的那個
link |
41:20.600
每個點對應到的model才是多少
link |
41:22.600
然後我們看綠色的點就好
link |
41:24.600
綠色的點就是他提出來的方法
link |
41:25.600
他提出來的方法就是
link |
41:26.600
我們先用一個tool
link |
41:27.600
然後fine-tune在各種不同的任務上面
link |
41:29.600
然後在Zero-shot inference到
link |
41:31.600
我們想要做的任務上面
link |
41:33.600
那他發現說呢
link |
41:35.600
只要經過這個multi-test的prompt tuning
link |
41:38.600
那他就可以
link |
41:40.600
比GP13還要好
link |
41:43.600
也不能說每次都比較好
link |
41:45.600
但是很多時候可以比較好
link |
41:47.600
那而且呢
link |
41:48.600
他這個model只有
link |
41:50.600
只有GP的一個prompt
link |
41:52.600
所以他就證明了說呢
link |
41:54.600
就是multi-test的學習
link |
41:56.600
是可以讓model有
link |
41:58.600
這個Zero-shot inference的能力的
link |
42:00.600
那即使你的model的prompt
link |
42:02.600
沒有像GP13那麼多
link |
42:04.600
你還是可以做到的
link |
42:06.600
好 那summary一下
link |
42:08.600
我們這邊解決的問題
link |
42:10.600
那這邊解決的問題就是
link |
42:12.600
我們想要去解決說
link |
42:14.600
當我們的level data太小的時候
link |
42:16.600
要怎麼用一些特殊的方法
link |
42:18.600
那這個特殊的方法
link |
42:20.600
最重要的是我們需要把
link |
42:22.600
這個data set轉換成prompt的形式
link |
42:24.600
那轉換成prompt的形式之後呢
link |
42:26.600
我們可能還要試不同的狀況
link |
42:28.600
增加一些scenario specific的設計
link |
42:30.600
比如我們剛才說PTT
link |
42:32.600
他就要去想說
link |
42:34.600
你要怎麼去利用這個prompt tuning
link |
42:36.600
所得到的model去lego這些data
link |
42:38.600
那在這個Zero-shot裡面
link |
42:40.600
你就要想說
link |
42:42.600
要怎麼利用prompt tuning
link |
42:44.600
來讓你的model產生Zero-shot inverse的能力
link |
42:46.600
對 那大概是這個樣子
link |
42:48.600
所以這邊就講完
link |
42:50.600
這個data execution prompt tuning
link |
42:52.600
部分 那我們就在這邊
link |
42:54.600
休息十幾分鐘
link |
42:56.600
好 其實你
link |
42:58.600
隨便都可以
link |
43:00.600
那我們就休息十五分鐘
link |
43:02.600
link |
43:04.600
那我們剛才已經看完那個
link |
43:06.600
當你的level data很少的時候
link |
43:08.600
那要怎麼用prompt tuning的方式
link |
43:10.600
來解決
link |
43:12.600
那接下來我們來看的是
link |
43:14.600
當你的dependency model太大的時候
link |
43:16.600
那你要怎麼樣
link |
43:18.600
link |
43:20.600
要怎麼讓他小一點
link |
43:22.600
link |
43:24.600
這個我們剛才有講過dependency model太大
link |
43:26.600
會有的問題就是 第一個就是
link |
43:28.600
當你有不同test的時候
link |
43:30.600
每fine-tune在一個test上面
link |
43:32.600
就會創造出一個超多大的model
link |
43:34.600
所以這樣很浪費空間
link |
43:36.600
那model太大
link |
43:38.600
這個
link |
43:40.600
要跑那麼多層也很花時間
link |
43:42.600
那我們就要想看說有沒有
link |
43:44.600
什麼方法可以解決這個問題
link |
43:46.600
那model太大
link |
43:48.600
最簡單的解決方法就是想辦法讓他小一點
link |
43:50.600
那如果我們直接
link |
43:52.600
讓他小一點 我們如果直接弄一個
link |
43:54.600
比較小的dependency model的話
link |
43:56.600
這其實是會有一些問題
link |
43:58.600
就是 因為如果你直接用
link |
44:00.600
一個小的model來tune的時候
link |
44:02.600
他的performance 即使你是用
link |
44:04.600
同樣的conference 同樣的時間來訓練
link |
44:06.600
他的表現還是
link |
44:08.600
會跟大的model差很大一截
link |
44:10.600
所以用小的dependency model
link |
44:12.600
來做pre-training
link |
44:14.600
是比較不可行的
link |
44:16.600
那比較可行的方式應該是我們想辦法
link |
44:18.600
降低我們在fine-tune的時候
link |
44:20.600
所需要用的參數量
link |
44:22.600
那這個就有
link |
44:24.600
很多不同的方式啊 就是像是
link |
44:26.600
就是這個
link |
44:28.600
distillation
link |
44:30.600
如果你是用distillation的話 你可以把一個
link |
44:32.600
有110M參數的birthdays
link |
44:34.600
他的參數量縮小到
link |
44:36.600
只有60M
link |
44:38.600
然後或者是你也可以用
link |
44:40.600
distillation 你可以用pruning的方式
link |
44:42.600
把一個大的modelprune到
link |
44:44.600
70%的sparsity
link |
44:46.600
那這兩個做法呢 就是他不只可以
link |
44:48.600
讓參數量變小 他也可以讓model
link |
44:50.600
event值變快
link |
44:52.600
那下面這個pruning啊
link |
44:54.600
雖然說他沒有
link |
44:56.600
他這個
link |
44:58.600
他model的結構還是一樣大
link |
45:00.600
不過因為他sparsity比較高
link |
45:02.600
所以他需要儲存的空間
link |
45:04.600
比較小一點
link |
45:06.600
那另外呢 有一個有趣的方法
link |
45:08.600
就是你可以讓consumer的參數
link |
45:10.600
直接share 那原本的birth呢
link |
45:12.600
他這12層的
link |
45:14.600
他12層的參數
link |
45:16.600
是不一樣的參數
link |
45:18.600
那在albert
link |
45:20.600
albert裡面呢
link |
45:22.600
他的這個12層的參數是
link |
45:24.600
shared 也就是他每一層的參數
link |
45:26.600
是一樣的 所以這個
link |
45:28.600
這個第一層的output出來的東西
link |
45:30.600
會丟到一樣的
link |
45:32.600
參數的第二層 然後一樣的參數
link |
45:34.600
的第三層 然後丟12層
link |
45:36.600
所以他的parameter就是原本的birth
link |
45:38.600
大概12.1
link |
45:40.600
那這些方法其實就是
link |
45:42.600
不是NLP的model
link |
45:44.600
也會這樣做
link |
45:46.600
那我今天想要比較
link |
45:48.600
focus的是
link |
45:50.600
NLP model特殊的
link |
45:52.600
一些做法 或是一開始是NLP model
link |
45:54.600
提出來 或是NLP model量身定做的方法
link |
45:56.600
那這個方法呢
link |
45:58.600
這一套的方法叫做parameter
link |
46:00.600
definition fine tuning
link |
46:02.600
也就是我希望在fine tuning的時候
link |
46:04.600
我可以用少一點的parameter
link |
46:06.600
那這個方法呢
link |
46:08.600
他的想法是這樣子的
link |
46:10.600
我們有沒有辦法在fine tuning的時候
link |
46:12.600
對於每一個test
link |
46:14.600
他所需要的參數就是
link |
46:16.600
原本的一樣的birth的參數
link |
46:18.600
再加上test A
link |
46:20.600
他專屬的一小小部分的參數
link |
46:22.600
那對於test B也是
link |
46:24.600
他的參數就是由原本的birth
link |
46:26.600
model的參數再加上
link |
46:28.600
test D他所專屬的參數
link |
46:30.600
來代表
link |
46:32.600
那如果每個任務都可以做到這件事情的話
link |
46:34.600
那假設我們要把這四個任務的
link |
46:36.600
function model同時放在
link |
46:38.600
某一個device上面
link |
46:40.600
那我們就只需要一個
link |
46:42.600
共用的birth的參數
link |
46:44.600
再加上每個任務他專屬的
link |
46:46.600
這個parameter
link |
46:48.600
這樣就可以
link |
46:50.600
大大的減低我們所需要的空間
link |
46:52.600
那這件事情
link |
46:54.600
要怎麼做呢
link |
46:56.600
那我們要講
link |
46:58.600
parameter edition fine tuning之前
link |
47:00.600
我們先來看一下standard fine tuning
link |
47:02.600
到底怎麼做
link |
47:04.600
那我所指的standard fine tuning就是我們剛才看到
link |
47:06.600
最前面說整個model一起fine tuning
link |
47:08.600
的那種方式
link |
47:10.600
那其實standard fine tuning他做的事情
link |
47:12.600
就是我們要去改變
link |
47:14.600
原本preferred language model
link |
47:16.600
他所產生的hidden representation
link |
47:18.600
那這個圖
link |
47:20.600
已經看過很多次了
link |
47:22.600
這個hidden representation指的就是
link |
47:24.600
這個model裡面
link |
47:26.600
他在中間或是在最後一層
link |
47:28.600
產生出來的這些項量
link |
47:30.600
那這些項量呢
link |
47:32.600
我們希望這個fine tuning
link |
47:34.600
他可以基於原本
link |
47:36.600
preferred language所產生的這些項量
link |
47:38.600
然後經過一些的微調
link |
47:40.600
微調這個裡面的每個參數
link |
47:42.600
使得他產生出另外一組新的
link |
47:44.600
這個hidden representation
link |
47:46.600
叫做h-prompt
link |
47:48.600
那這個hidden representation h-prompt呢
link |
47:50.600
他可以被function的classifier
link |
47:52.600
很好的利用
link |
47:54.600
這個就是standard fine tuning要做的事情
link |
47:56.600
所以standard fine tuning他做的事情呢
link |
47:58.600
他其實就是改變
link |
48:00.600
preferring完之後
link |
48:02.600
我們所得到的hidden representation
link |
48:04.600
這個h
link |
48:06.600
然後我們要把它變成h-prompt
link |
48:08.600
這個h-prompt跟原本的h
link |
48:10.600
插在一個delta h
link |
48:12.600
那這個改變呢就是
link |
48:14.600
讓他可以被當前任務很好的利用
link |
48:16.600
這個關鍵
link |
48:18.600
那在standard fine tuning裡面
link |
48:20.600
我們為了要達到
link |
48:22.600
這個改變參數的這個目的
link |
48:24.600
那我們做的事情
link |
48:26.600
就是fine tune整個model的參數
link |
48:28.600
那我們要問的是說呢
link |
48:30.600
我們有沒有辦法
link |
48:32.600
不要調整整個model所有的參數
link |
48:34.600
只要改變少部分的參數
link |
48:36.600
就可以達到改變
link |
48:38.600
hidden representation的這個目標呢
link |
48:40.600
那parameter efficient fine tuning
link |
48:42.600
要做的事情就是這件事情
link |
48:44.600
那我們來看一下
link |
48:46.600
不同的parameter efficient fine tuning
link |
48:48.600
他們是怎麼做的
link |
48:50.600
首先我們來看一個很經典的叫做adapter
link |
48:52.600
他這個方法
link |
48:54.600
他是怎麼透過增加一個叫做adapter的submodule
link |
48:56.600
來改變
link |
48:58.600
hidden representation的呢
link |
49:00.600
那adapter呢
link |
49:02.600
他做的事情他其實就是在
link |
49:04.600
controller layer裡面插入一些
link |
49:06.600
小的submodule
link |
49:08.600
那這些submodule是可以訓練的
link |
49:10.600
然後controller裡面原本的參數是不會被動到
link |
49:12.600
那controller layer
link |
49:14.600
其實原本是由
link |
49:16.600
這個multi-head attention
link |
49:18.600
然後還有three-fold order組成的
link |
49:20.600
那中間還有一些layer node
link |
49:22.600
還有identity
link |
49:24.600
那在adapter
link |
49:26.600
他做的事情呢
link |
49:28.600
就是他在原本的transformer layer裡面
link |
49:30.600
插入了兩個adapter
link |
49:32.600
所以一個原本的transformer就會插入
link |
49:34.600
兩個adapter
link |
49:36.600
那他是插在multi-head attention後面
link |
49:38.600
還有three-fold order後面
link |
49:40.600
那這個adapter module是什麼樣的東西呢
link |
49:42.600
link |
49:44.600
這個adapter module
link |
49:46.600
他其實就是一個MLP
link |
49:48.600
然後再加上一個
link |
49:50.600
這個residual connection
link |
49:52.600
那這個MLP做的事情呢
link |
49:54.600
就是當他input進來一個
link |
49:56.600
hidden representation的時候
link |
49:58.600
他會先把他降到
link |
50:00.600
低位的空間之後
link |
50:02.600
然後呢經過一個
link |
50:04.600
非線性的轉換
link |
50:06.600
然後再把他portrait回高位的空間
link |
50:08.600
那用我們剛剛
link |
50:10.600
然後那個
link |
50:12.600
所以說這個adapter這個submodule
link |
50:14.600
他做的事情呢就是把
link |
50:16.600
一個原本的hidden representation
link |
50:18.600
那這個hidden representation是什麼呢
link |
50:20.600
就是從multi-head attention包括出來
link |
50:22.600
或是從three-fold order layer包括出來的東西呢
link |
50:24.600
經過一個MLP layer
link |
50:26.600
然後產生一個叫delta h的東西
link |
50:28.600
那就是套用我們剛才的那個講法
link |
50:30.600
這個h呢
link |
50:32.600
就是原本的pre-trained language model
link |
50:34.600
他所計算出來的基數
link |
50:36.600
那這個adapter module呢
link |
50:38.600
他要產生一個
link |
50:40.600
hidden representation的變化
link |
50:42.600
delta h
link |
50:44.600
然後使得原本的hidden representation
link |
50:46.600
加上新的delta h
link |
50:48.600
這個所產生出來的charm
link |
50:50.600
可以被當初用得很好的應用
link |
50:52.600
那在fine-tune的時候呢
link |
50:54.600
我們在
link |
50:56.600
transformer layer裡面我們只會去
link |
50:58.600
fine-tuneadapter裡面的參數
link |
51:00.600
應該說這個adapter是
link |
51:02.600
不能叫fine-tune因為他沒有被培訓過
link |
51:04.600
我們只會去訓練adapter的參數
link |
51:06.600
然後這個fit-forward layer
link |
51:08.600
跟multi-attention他是完全不會被動的
link |
51:10.600
那這個adapter
link |
51:12.600
有很多不同種
link |
51:14.600
然後有些會去訓練
link |
51:16.600
learn-and-learn有些不會啊我自己的實驗
link |
51:18.600
我是沒有學
link |
51:20.600
但他訓練learn-and-learn然後結果也不錯啊
link |
51:22.600
所以我覺得learn-and-learn應該也是可以
link |
51:24.600
給我訓練的關係
link |
51:26.600
所以adapter在fine-tune的時候呢
link |
51:28.600
他做的事情就是
link |
51:30.600
他在每一層的transformer裡面
link |
51:32.600
插入了adapter這個sub-module
link |
51:34.600
然後呢
link |
51:36.600
當然原本你在fine-tune的時候
link |
51:38.600
這個classifier他還是需要的
link |
51:40.600
所以在fine-tune的時候我們使用adapter的時候
link |
51:42.600
我們只需要fine-tune這個classifier
link |
51:44.600
然後還有這個adapter
link |
51:46.600
然後原本的transformer所有的參數
link |
51:48.600
都是完全沒有動的
link |
51:50.600
那這樣子的話
link |
51:52.600
每個downstream test他所需要的
link |
51:54.600
專屬於他的
link |
51:56.600
test specific parameter
link |
51:58.600
就只有adapter的參數跟classifier的參數
link |
52:00.600
那這個adapter的參數
link |
52:02.600
跟原本整個model的參數
link |
52:04.600
比起來其實是非常非常少
link |
52:06.600
那我們等一下會看一下實際的數字
link |
52:08.600
會少到多少
link |
52:10.600
所以這樣就可以大大的減少
link |
52:12.600
我們所需要的空間
link |
52:16.600
好,那接下來我們來看
link |
52:18.600
第二個方法,第二個方法叫做LoRa
link |
52:20.600
然後我不知道怎麼念LoRa
link |
52:22.600
怎麼念LoRa
link |
52:24.600
好,然後這個LoRa呢
link |
52:26.600
他其實跟adapter非常非常像
link |
52:28.600
等一下就會知道為什麼他那麼像
link |
52:30.600
那這個LoRa他也是一樣
link |
52:32.600
在transformer的某個地方插了一些
link |
52:34.600
小的sum module
link |
52:36.600
那這個sum module的功能就是要提供
link |
52:38.600
delta h的這個改變
link |
52:40.600
那我們來看一下他是怎麼做的
link |
52:42.600
原本的transformer長的是這個樣子
link |
52:44.600
那這個LoRa呢
link |
52:46.600
他做的事情就是他在
link |
52:48.600
每一個fit-for-all layer裡面
link |
52:50.600
平行的插入了一個
link |
52:52.600
叫做LoRa的sum module
link |
52:54.600
那真的有一個fit-for-all layer
link |
52:56.600
所以LoRa就把它插在這裡
link |
52:58.600
那其實如果大家熟那個
link |
53:00.600
transformer的架構的話
link |
53:02.600
你會知道multi-header其實裡面有一個fit-for-all
link |
53:04.600
所以你也可以插一個
link |
53:06.600
這個,你也可以插一個LoRa在這裡
link |
53:08.600
那我自己的實驗
link |
53:10.600
發現你只要插在這邊就夠了
link |
53:12.600
所以我就畫在這邊就好
link |
53:14.600
好,然後這個LoRa
link |
53:16.600
到底是什麼東西呢
link |
53:18.600
原本的fit-for-all layer
link |
53:20.600
他其實是一個
link |
53:22.600
原本fit-for-all是這邊這個fit-for-all
link |
53:24.600
他其實就是一個兩層的MLP
link |
53:26.600
那這兩層的
link |
53:28.600
兩層的MLP做的事情是什麼呢
link |
53:30.600
就是先把一個低微的向量
link |
53:32.600
這個低微是
link |
53:34.600
高低的低不是英文字
link |
53:36.600
高低的低
link |
53:38.600
然後低微的向量project到一個
link |
53:40.600
高微的空間,然後再經過一個
link |
53:42.600
非先進轉換,然後down project
link |
53:44.600
到原本的空間
link |
53:46.600
那LoRa做的事情呢
link |
53:48.600
就是他在這個
link |
53:50.600
他在這個
link |
53:52.600
fit-for-all的up project
link |
53:54.600
跟down project的這兩層
link |
53:56.600
平行的插入了
link |
53:58.600
某一個submodule
link |
54:00.600
然後這個submodule計算出來的東西
link |
54:02.600
跟原本fit-for-all計算出來的東西
link |
54:04.600
會加在一起,然後形成最後的output
link |
54:06.600
那這個LoRa的submodule
link |
54:08.600
他做的事情是什麼呢
link |
54:10.600
我們來放大一下
link |
54:12.600
下面這個up project
link |
54:14.600
然後還有這個LoRa module
link |
54:16.600
所以原本的這個
link |
54:18.600
fit-for-all的up project
link |
54:20.600
他其實是一個從低微的
link |
54:22.600
這個低微是
link |
54:24.600
從低model的這個空間
link |
54:26.600
project到低fit-for-all的空間
link |
54:28.600
他原本做的事情是這樣
link |
54:30.600
所以他會把原本的一個低model的
link |
54:32.600
長度是低model的向量
link |
54:34.600
然後project到,維度是低fit-for-all
link |
54:36.600
那我們今天加了這個
link |
54:38.600
LoRa的這個
link |
54:40.600
submodule
link |
54:42.600
他做的事情呢,就是把原本的
link |
54:44.600
這個東西,先project到一個
link |
54:46.600
維度非常非常低
link |
54:48.600
然後我們用Rn代表的
link |
54:50.600
這個向量,然後呢
link |
54:52.600
這個向量再經過一個up projection
link |
54:54.600
然後把他project回低fit-for-all的
link |
54:56.600
這個維度,然後這個兩個東西
link |
54:58.600
加起來之後
link |
55:00.600
然後就形成最後的output
link |
55:02.600
那套用我們剛才的講法,我們剛才說
link |
55:04.600
FindQ你要做的事情就是我們要
link |
55:06.600
這個改變原本
link |
55:08.600
preferred language model所產生的hidden representation
link |
55:10.600
所以原本preferred language model
link |
55:12.600
他產生的hidden representation
link |
55:14.600
是這個edge,那LoRa做的事情就是
link |
55:16.600
讓他增加了一個delta
link |
55:18.600
去改變,然後最後
link |
55:20.600
產生h-prong,是個新的hidden representation
link |
55:22.600
那LoRa
link |
55:24.600
這個東西他的全名
link |
55:26.600
叫做LoRank
link |
55:28.600
LoRank
link |
55:30.600
adaptation of large language models
link |
55:32.600
那為什麼他叫LoRank
link |
55:34.600
大家可以去看一下你們的paper
link |
55:36.600
不過簡單講起來你可以把它想像成
link |
55:38.600
他就是一個沒有linearity
link |
55:40.600
然後又是平行的adapter,大概是這個樣子
link |
55:42.600
所以注意他這個地方
link |
55:44.600
中間是沒有linearity的
link |
55:46.600
adapter是有的
link |
55:48.600
好,然後
link |
55:50.600
所以LoRa在
link |
55:52.600
FindQ的時候,他做的事情
link |
55:54.600
跟adapter也非常非常類似
link |
55:56.600
就是你要在每一層的consumer
link |
55:58.600
的feedforward旁邊各插入一個
link |
56:00.600
LoRa的submodule,然後上面要
link |
56:02.600
多一個classify,那整個
link |
56:04.600
model裡面我們會去更新
link |
56:06.600
的參數,是有classify的參數
link |
56:08.600
還有LoRa的參數,灰色部分的
link |
56:10.600
參數全部不會動
link |
56:12.600
也就是這個attention啊
link |
56:14.600
或是feedforward
link |
56:16.600
都是不會被動到
link |
56:18.600
那每一個text,他專屬的
link |
56:20.600
這個參數就只有
link |
56:22.600
不是灰色的部分,所以這也是
link |
56:24.600
一樣可以大大的減低
link |
56:26.600
每一個text所需要的參數量
link |
56:30.600
好,那這個adapter跟LoRa
link |
56:32.600
聽起來是很類似的東西
link |
56:34.600
那你可能會想說
link |
56:36.600
LoRa厲害在哪裡
link |
56:38.600
LoRa厲害在他
link |
56:40.600
有一些有趣的理論背景
link |
56:42.600
那他有一個更重要的就是
link |
56:44.600
這個adapter啊,他是怎麼插的呢
link |
56:46.600
adapter他插的方式是
link |
56:48.600
剛剛講的這個adapter
link |
56:50.600
他插的方式他是插在
link |
56:52.600
他是插在feedforward layer的
link |
56:54.600
後面,所以等於是你原本的
link |
56:56.600
model的深度他會再更增加
link |
56:58.600
因為原本你沒有這兩層
link |
57:00.600
可是如果你多加了adapter之後,他就變深了
link |
57:02.600
所以他inference的時間會稍微變長一點
link |
57:04.600
可是假設你是用
link |
57:06.600
LoRa的話,LoRa他是平行的插
link |
57:08.600
所以這兩個東西其實是可以parallel
link |
57:10.600
運算的,所以他不會增加你inference的時間
link |
57:12.600
那這是他的一個賣點之一
link |
57:14.600
而且其實LoRa他在
link |
57:16.600
設計的時候,他的這個
link |
57:18.600
dimension啊,可以壓得
link |
57:20.600
非常非常小,這個東西
link |
57:22.600
可以壓得很小,所以
link |
57:24.600
他的參數量會比這個
link |
57:26.600
adapter還要再少一點點
link |
57:28.600
不過他們兩個本質上其實是類似的東西
link |
57:32.600
好,那我們再來看一下第三個
link |
57:34.600
方式,第三個也是
link |
57:36.600
Parameter Efficient Fine Tuning,這個東西呢
link |
57:38.600
叫做Prefix Tuning
link |
57:40.600
好,Prefix Tuning他做的事情也是一樣
link |
57:42.600
我們要增加某一個
link |
57:44.600
小小的Sum Module,這個Sum Module
link |
57:46.600
他叫做Prefix,那我們希望
link |
57:48.600
增加這個Prefix之後呢
link |
57:50.600
讓這個model
link |
57:52.600
可以產生,他的Hidden Orientation可以產生
link |
57:54.600
Delta H的變化,進而產生新的
link |
57:56.600
H prop,那這個
link |
57:58.600
Prefix Tuning是怎麼做的呢?我們先來解釋一下
link |
58:00.600
Prefix這個字,Prefix這個字啊
link |
58:02.600
就是中文翻譯是
link |
58:04.600
前綴,就是A lateral group of letters
link |
58:06.600
added to the beginning of a word
link |
58:08.600
to make a new word
link |
58:10.600
然後所以就像Prefix的這個pre
link |
58:12.600
他就是一個前綴
link |
58:14.600
簡單來說就是放在某個東西前面的
link |
58:16.600
那個東西叫做Prefix
link |
58:18.600
那這個,所以說
link |
58:20.600
Prefix Tuning他就是在
link |
58:22.600
模型的某個東西前面
link |
58:24.600
放了另外一個東西,他放了這個東西叫Prefix
link |
58:26.600
那他是放了什麼東西呢?
link |
58:28.600
他又是放在哪裡呢?
link |
58:30.600
他其實是放在Self Attention的
link |
58:32.600
Hidden Orientation前面
link |
58:34.600
那要講這個
link |
58:36.600
Prefix Tuning之前我們先來複習一下
link |
58:38.600
原本的Self Attention
link |
58:40.600
是怎麼做的
link |
58:42.600
原本的Self Attention
link |
58:44.600
給定一個Input Sequence
link |
58:46.600
的Hidden Representation
link |
58:48.600
X1,X2,X3,X4,X5
link |
58:50.600
那我們首先呢
link |
58:52.600
會經過Key,Value
link |
58:54.600
還有Query,Conjection,然後每個項量
link |
58:56.600
我就會知道他對應的
link |
58:58.600
Key,然後Query,還有Value
link |
59:00.600
所以每個東西都是這樣做
link |
59:02.600
那接下來呢,Self Attention
link |
59:04.600
做的事情就是
link |
59:06.600
當他要計算X1經過Self Attention
link |
59:08.600
產生Output之後
link |
59:10.600
他就需要用
link |
59:12.600
X1的Query,去Query
link |
59:14.600
每一個其他的Token,還有他自己的
link |
59:16.600
Key,來決定說我要怎麼
link |
59:18.600
做Attention,所以首先呢
link |
59:20.600
這個Q1他會去Query自己的
link |
59:22.600
Key,然後得到一個α11
link |
59:24.600
這個東西我們要叫做
link |
59:26.600
第一個Token對第一個Token的
link |
59:28.600
Unnormalized Attention Score
link |
59:30.600
然後同樣的,第一個Token也要對第二個Token
link |
59:32.600
做Attention,所以我們需要一個
link |
59:34.600
Q1對K2的
link |
59:36.600
這個Unnormalized Attention Score
link |
59:38.600
然後以此類推,他就會對
link |
59:40.600
Sequence的每一個Token做
link |
59:42.600
Attention,然後得到Unnormalized Attention
link |
59:44.600
Score,得到的Unnormalized
link |
59:46.600
Attention Score,我們再經過一個Self Next
link |
59:48.600
得到Normalized版本,也就是這幾個東西
link |
59:50.600
加起來會是1嘛
link |
59:52.600
然後得到這個Normalized Attention Score之後
link |
59:54.600
我們再用這些呢,這個
link |
59:56.600
Attention Score,對這些Value
link |
59:58.600
做為一個Sum,所以我們會把
link |
01:00:00.600
這個東西乘以這個東西
link |
01:00:02.600
加起來,這個東西乘以這個東西
link |
01:00:04.600
加上這個東西乘以這個東西
link |
01:00:06.600
然後再加上這個東西乘以這個東西
link |
01:00:08.600
再加上這個東西乘以
link |
01:00:10.600
這個東西,然後再加上
link |
01:00:12.600
α11對
link |
01:00:14.600
α15 hat,然後乘以
link |
01:00:16.600
這個Value,如果加起來之後
link |
01:00:18.600
得到這個Token,他經過
link |
01:00:20.600
標準的Self Attention
link |
01:00:22.600
得到的好分
link |
01:00:24.600
好,那Prefix Tuning呢
link |
01:00:26.600
他做的事情就是我在
link |
01:00:28.600
原本的Self Attention的
link |
01:00:30.600
這些Representation
link |
01:00:32.600
前面插了一些東西進去
link |
01:00:34.600
link |
01:00:36.600
他在前面呢,插了叫做Prefix
link |
01:00:38.600
的東西,那我們
link |
01:00:40.600
這個Prefix你可以決定你要插多少,那我們直接畫三個
link |
01:00:42.600
我插了P1,P2,P3
link |
01:00:44.600
這三個叫做Prefix的東西
link |
01:00:46.600
那這個Prefix呢,同樣
link |
01:00:48.600
也會透過某一個
link |
01:00:50.600
MLP Layer,把它Project到
link |
01:00:52.600
他所對應的
link |
01:00:54.600
Key跟Value
link |
01:00:56.600
那注意一下這邊的這個MLP跟
link |
01:00:58.600
原本的Attention用的MLP是完全
link |
01:01:00.600
不一樣的MLP Layer
link |
01:01:02.600
所以
link |
01:01:04.600
這個Prefix他也會被Project到
link |
01:01:06.600
他的這個
link |
01:01:08.600
Key跟他的Value
link |
01:01:10.600
然後第二個Prefix也會被Project到他的
link |
01:01:12.600
Key跟Value,第三個也是
link |
01:01:14.600
那這個地方還有一個
link |
01:01:16.600
要注意的就是他不會有一個Project到Query
link |
01:01:18.600
他們是沒有Query的,因為他們不會去Query別人
link |
01:01:20.600
他們只會被別人Query
link |
01:01:22.600
所以他不會有Query Vector
link |
01:01:24.600
那所以呢
link |
01:01:26.600
原本我們在計算這個X1
link |
01:01:28.600
他output出來的Key跟Representation的時候
link |
01:01:30.600
我們做的事情是
link |
01:01:32.600
我們會對這些東西
link |
01:01:34.600
做Self-Attention,那在Prefix
link |
01:01:36.600
Tuning裡面呢,我們不只要對
link |
01:01:38.600
原本Input Sequence裡面的Token
link |
01:01:40.600
做Self-Attention,我們還要對
link |
01:01:42.600
Prefix的這些
link |
01:01:44.600
這個Value做Self-Attention
link |
01:01:46.600
那做的方法也是跟標準
link |
01:01:48.600
Self-Attention一樣,我會用
link |
01:01:50.600
X1他的Query
link |
01:01:52.600
P1他的Key
link |
01:01:54.600
得到一個Unnormalized Attention Score
link |
01:01:56.600
代表說,這個第一個Token
link |
01:01:58.600
他要對第一個Prefix做多少Attention
link |
01:02:00.600
然後第一個Token
link |
01:02:02.600
要對第二個Token做多少Attention
link |
01:02:04.600
第一個Token
link |
01:02:06.600
要對第三個Prefix做多少Attention
link |
01:02:08.600
然後這些
link |
01:02:10.600
所有的Unnormalized Attention Score
link |
01:02:12.600
在一起經過Self-Net之後
link |
01:02:14.600
得到Normalized Attention Score
link |
01:02:16.600
然後再用
link |
01:02:18.600
Weighted Sum的方式
link |
01:02:20.600
把Alpha 1
link |
01:02:22.600
就是1對Token 1
link |
01:02:24.600
對Prefix 1的Attention
link |
01:02:26.600
Score乘以
link |
01:02:28.600
這個1的Value,加上
link |
01:02:30.600
Token 1
link |
01:02:32.600
對Prefix 2的Attention
link |
01:02:34.600
Score乘以第二個Prefix
link |
01:02:36.600
的Value,然後
link |
01:02:38.600
最後再往上
link |
01:02:40.600
跟這些東西加起來
link |
01:02:42.600
得到最後的
link |
01:02:44.600
Attention Output出來的
link |
01:02:46.600
Attention,所以套用我們
link |
01:02:48.600
剛剛最一開始那個講法,我們說
link |
01:02:50.600
Finetuning做的事情就是要去改變
link |
01:02:52.600
這個Return Language Model
link |
01:02:54.600
所產生的Hidden Attention
link |
01:02:56.600
在我們這個
link |
01:02:58.600
原本的Return Language Model
link |
01:03:00.600
是這一塊,他計算出來
link |
01:03:02.600
就是這個H,那我們今天
link |
01:03:04.600
Prefix他做的事情就是他要產生一個
link |
01:03:06.600
小小的Delta H
link |
01:03:08.600
的變化,然後
link |
01:03:10.600
當這個Delta H加上原本的
link |
01:03:12.600
之後可以產生一個新的
link |
01:03:14.600
HProm,然後這個HProm就是我們要用在
link |
01:03:16.600
Finetune的時候的這個
link |
01:03:18.600
Hidden Representation
link |
01:03:20.600
好,這個就是Prefix Tuning
link |
01:03:22.600
那我們真正在用Prefix Tuning的時候呢
link |
01:03:24.600
這個是Training的時候啊,那我們在
link |
01:03:26.600
Inference的時候
link |
01:03:28.600
這個東西會直接被丟掉,然後我們只要存
link |
01:03:30.600
自己的東西就好了,就是我們
link |
01:03:32.600
不用再存,因為這邊還有一個MLP Layer
link |
01:03:34.600
可是我們訓練完之後我們就可以把MLP Layer
link |
01:03:36.600
丟掉,我們也可以把這個深藍色的
link |
01:03:38.600
丟掉,我們只要留每一個
link |
01:03:40.600
Prefix他所對應的
link |
01:03:42.600
這個Key跟Value就好了
link |
01:03:44.600
所以這個在Prefix Tuning裡面
link |
01:03:46.600
每一層的Consumer他都會有
link |
01:03:48.600
對應的Prefix的
link |
01:03:50.600
Key跟Value,第二層也會有
link |
01:03:52.600
他的,第十二層也會有他的,每一層
link |
01:03:54.600
都有,那我們在Finetune的時候呢
link |
01:03:56.600
我們只會Finetune每一層
link |
01:03:58.600
他所對應的
link |
01:04:00.600
這個,我們在Finetune的時候
link |
01:04:02.600
我們Finetune是,我們會訓練的
link |
01:04:04.600
就是這個Prefix還有這邊這個MLP Layer
link |
01:04:06.600
然後我們在Inference的時候
link |
01:04:08.600
我們要存在這個每一個
link |
01:04:10.600
我們每一個Task需要存的就是
link |
01:04:12.600
他們所對應的Prefix,然後
link |
01:04:14.600
每一個Task可以Share共用的
link |
01:04:16.600
Consumer Model
link |
01:04:20.600
好,那這邊是Prefix Tuning
link |
01:04:22.600
那最後一個也是Parameter Efficient
link |
01:04:24.600
Finetuning的
link |
01:04:26.600
這個方法,這個叫做Self-Prompting
link |
01:04:28.600
然後這個Self-Prompting呢
link |
01:04:30.600
大家可以把它看成是Prefix Tuning
link |
01:04:32.600
的一個簡化版,那
link |
01:04:34.600
他有多簡化呢?他其實就只要在
link |
01:04:36.600
這個Input
link |
01:04:38.600
前面插幾個Prefix
link |
01:04:40.600
就好了,所以原本的Prefix Tuning
link |
01:04:42.600
剛才我們講的Prefix Tuning,他是插在
link |
01:04:44.600
Consumer Layer每一層的Attention
link |
01:04:46.600
前面嘛,那現在這個Prefix Tuning
link |
01:04:48.600
我們做的事情就是
link |
01:04:50.600
我們就直接插在Input前面
link |
01:04:52.600
就好,然後只有
link |
01:04:54.600
Input這一層會插,其他都不會插
link |
01:04:56.600
那假設你有一個
link |
01:04:58.600
原本的句子,他經過Embedded Layer之後
link |
01:05:00.600
他產生的Embedded Lookup是這個樣子
link |
01:05:02.600
那我們就是在這個Embedded Lookup
link |
01:05:04.600
前面插入
link |
01:05:06.600
那個可以訓練的Prefix Embedded
link |
01:05:08.600
那我們在FindQ的時候呢
link |
01:05:10.600
我們只會去FindQ
link |
01:05:12.600
這幾個畫框色的東西
link |
01:05:14.600
其他所有的參數都不會被訓練到
link |
01:05:16.600
那這個叫Soft-Prompting
link |
01:05:18.600
那為什麼這個叫做
link |
01:05:20.600
Soft-Prompting呢?就是
link |
01:05:22.600
所謂的Soft就是說
link |
01:05:24.600
這個東西他是一個連續的向量
link |
01:05:26.600
那相對於Soft就是Hard
link |
01:05:28.600
那所謂的Hard就是
link |
01:05:30.600
Hard-Prompt就是
link |
01:05:32.600
字,Token
link |
01:05:34.600
你Input,如果是
link |
01:05:36.600
放在Input Layer這邊,然後
link |
01:05:38.600
這個Prompt假設我們,像是翻譯的Text
link |
01:05:40.600
你可能就會跟Model說你要翻譯這個
link |
01:05:42.600
好,這個翻譯這兩個字就是Hard-Prompt
link |
01:05:44.600
所以這個Hard-Prompt會經過原本的Embedded Layer
link |
01:05:46.600
然後得到他做一個Embedded
link |
01:05:48.600
可是Soft-Prompt是直接
link |
01:05:50.600
放一個Embedded在這裡
link |
01:05:52.600
好,所以Soft-Prompt跟Hard-Prompt的差別
link |
01:05:54.600
第一個就是Soft-Prompt的
link |
01:05:56.600
這個Embedded是我們
link |
01:05:58.600
要訓練的,他是新的
link |
01:06:00.600
那Hard-Prompt呢
link |
01:06:02.600
他是原本就在Vocabulary
link |
01:06:04.600
裡面的
link |
01:06:06.600
Token,然後他會經過
link |
01:06:08.600
原本的Vocabulary的Embedded
link |
01:06:10.600
然後找到對應的向量
link |
01:06:12.600
那Soft-Prompt的這個Vector
link |
01:06:14.600
你要怎麼去Initialize,你可以隨便的
link |
01:06:16.600
Initialize他,你也可以把他從某些
link |
01:06:18.600
字的EmbeddingInitialize
link |
01:06:20.600
反正這個都可以做
link |
01:06:22.600
那其實Soft-Prompt跟Hard-Prompt還有很多差別
link |
01:06:24.600
因為如果你要用Soft-Prompt
link |
01:06:26.600
來翻譯Token的時候
link |
01:06:28.600
你只要訓練這個就好,可是如果你是用Hard-Prompt的話
link |
01:06:30.600
你就是整顆碼頭都要fine-tune
link |
01:06:32.600
因為你沒有辦法
link |
01:06:34.600
直接調這個字
link |
01:06:36.600
因為這個字是
link |
01:06:38.600
不連續的嘛,所以沒有辦法直接
link |
01:06:40.600
回分
link |
01:06:44.600
好,所以這個剛才講完
link |
01:06:46.600
四個Parameter Efficient Fine-Tuning的方式
link |
01:06:48.600
那他們的第一個
link |
01:06:50.600
Benefit當然就是他可以
link |
01:06:52.600
減速的減少Task-Specific Parameter
link |
01:06:54.600
那剛才講的四個方法
link |
01:06:56.600
Vector, Lower, Predict, String, Soft-Prompt
link |
01:06:58.600
我們來看一下他的Task-Specific Parameter
link |
01:07:00.600
大概有多少
link |
01:07:02.600
那我這邊沒有把那個Classifier
link |
01:07:04.600
開始算進去
link |
01:07:06.600
然後我這邊用的是Big Data Notation
link |
01:07:08.600
那Adapter呢
link |
01:07:10.600
假設你的Model有L層
link |
01:07:12.600
然後你的Adapter Input是
link |
01:07:14.600
這個Dmodel
link |
01:07:16.600
然後這邊是R的話
link |
01:07:18.600
這個他降為的這個是R的話
link |
01:07:20.600
那他所產生的
link |
01:07:22.600
這個Task-Specific Parameter
link |
01:07:24.600
就是DmodelR
link |
01:07:26.600
然後再乘以L
link |
01:07:28.600
那Lower他也一樣是
link |
01:07:30.600
Dmodel乘以R乘以L
link |
01:07:32.600
那Prefix-Tuning的話
link |
01:07:34.600
就是看你要用幾個Prefix
link |
01:07:36.600
那我這邊用N來代表
link |
01:07:38.600
有N個Prefix
link |
01:07:40.600
那你需要的就是你有
link |
01:07:42.600
N個Prefix,然後他每個Dimension
link |
01:07:44.600
是Dmodel,然後
link |
01:07:46.600
有L層,你放了L層的話
link |
01:07:48.600
就是Dmodel乘以L
link |
01:07:50.600
那最後一個是Soft-Prompt,Soft-Prompt就是
link |
01:07:52.600
你只有插在第一層
link |
01:07:54.600
他就少了那個Dom的數量值
link |
01:07:56.600
那這幾個
link |
01:07:58.600
不同的方法
link |
01:08:00.600
他所對應到的Percentage
link |
01:08:02.600
of Trainable
link |
01:08:04.600
Number of Runs
link |
01:08:06.600
就是可以訓練的參數量
link |
01:08:08.600
這個百分比是相對於整個
link |
01:08:10.600
Future Networks Model來比
link |
01:08:12.600
那Adapter他可以訓練
link |
01:08:14.600
他可以訓練的這個參數量
link |
01:08:16.600
或者是說他每一個Task所需要的
link |
01:08:18.600
參數量只有原本的
link |
01:08:20.600
Model的5%
link |
01:08:22.600
甚至更少到0.1%
link |
01:08:24.600
雖然說他們兩個數量值是一樣的
link |
01:08:26.600
不過因為我們在選的時候
link |
01:08:28.600
這個Lola他可以選1或是2
link |
01:08:30.600
然後Adapter大部分都是16、32
link |
01:08:32.600
64、128,所以他們兩個
link |
01:08:34.600
主要的差別會差那麼多
link |
01:08:36.600
是因為他這個選的會不太一樣
link |
01:08:38.600
這個是Empirically
link |
01:08:40.600
我會選,然後結果是這個樣子
link |
01:08:42.600
那Prefix Tuning呢
link |
01:08:44.600
他就更少
link |
01:08:46.600
因為這個N
link |
01:08:48.600
這個N大概
link |
01:08:50.600
應該都是
link |
01:08:52.600
應該都是100以內
link |
01:08:54.600
5個、10個其實就夠了
link |
01:08:56.600
那Soft Plumbing
link |
01:08:58.600
他當然是最少的,因為他
link |
01:09:00.600
不用每一層都插
link |
01:09:02.600
但是這個他的Performance
link |
01:09:04.600
就是需要比較大的Model
link |
01:09:06.600
才會有比較好的Performance
link |
01:09:08.600
那這幾個都不會說
link |
01:09:10.600
一定要Model很大,這個會
link |
01:09:12.600
真的需要Model比較大一點
link |
01:09:14.600
所以這個是Performance Efficient
link |
01:09:16.600
歡迎的第一個好處,就是他的
link |
01:09:18.600
需要的參數量非常非常的少
link |
01:09:20.600
那第二個好處
link |
01:09:22.600
問問題
link |
01:09:24.600
那Adapter有人試過
link |
01:09:26.600
把它變小
link |
01:09:28.600
他跟Aura不是只差一個
link |
01:09:30.600
那應該
link |
01:09:32.600
那他有人試過
link |
01:09:34.600
就是他也是
link |
01:09:36.600
10個這樣
link |
01:09:38.600
其實他們那個是Search出來的
link |
01:09:40.600
就是他們會做很多很多的Search
link |
01:09:42.600
然後總而言之就是
link |
01:09:44.600
太小還是會不夠好
link |
01:09:46.600
所以不加哪個
link |
01:09:48.600
反而可以比較小
link |
01:09:50.600
因為Laura他加的地方
link |
01:09:52.600
也不太一樣,Laura是加同時的
link |
01:09:54.600
謝謝
link |
01:09:58.600
好,那我們繼續看
link |
01:10:00.600
所以第二個
link |
01:10:02.600
他的第二個好處就是
link |
01:10:04.600
他可以比較不容易
link |
01:10:06.600
Overfit在人家的上面
link |
01:10:08.600
因為他用的參數比較少,所以可以比較不容易Overfit
link |
01:10:10.600
那比較不容易Overfit的話
link |
01:10:12.600
他就可以有比較好的Output
link |
01:10:14.600
那這邊給大家看的一個例子
link |
01:10:16.600
是當我們用
link |
01:10:18.600
SoFront來訓練,跟我們用Standard
link |
01:10:20.600
File Tuning來訓練的話
link |
01:10:22.600
他的Performance差別
link |
01:10:24.600
那今天我們把這個Task訓練在
link |
01:10:26.600
我們把Model訓練在Squat
link |
01:10:28.600
Squat是一個Question Answer的Data Set
link |
01:10:30.600
那他裡面的資料是從BDP
link |
01:10:32.600
量成出來的
link |
01:10:34.600
那他得到的Performance,假設用Standard File Tuning
link |
01:10:36.600
In Distribution
link |
01:10:38.600
可以得到這個分數,SoFront可以得到這個分數
link |
01:10:40.600
那我們把它
link |
01:10:42.600
直接測試在Out of Distribution
link |
01:10:44.600
的Data Set上面,那這邊放了一些
link |
01:10:46.600
不同的Data Set
link |
01:10:48.600
那我們就可以發現說
link |
01:10:50.600
SoFront他在很多時候
link |
01:10:52.600
他的Performance,Out of Distribution
link |
01:10:54.600
的Performance是可以遠高於
link |
01:10:56.600
你用Standard File Tuning
link |
01:10:58.600
那雖然說有某幾個Data Set
link |
01:11:00.600
他比較低一點點,可是這個
link |
01:11:02.600
低的這個程度其實是差不多
link |
01:11:04.600
這兩個其實是Compare
link |
01:11:06.600
這個是Compare
link |
01:11:08.600
好的是明顯的好非常非常多
link |
01:11:10.600
所以SoFront
link |
01:11:12.600
他因為用的參數比較少,所以他可以有
link |
01:11:14.600
比較好的Out of Distribution的Performance
link |
01:11:16.600
link |
01:11:18.600
那第三個這個好處
link |
01:11:20.600
是因為
link |
01:11:22.600
他用的Parameter比較少
link |
01:11:24.600
所以說呢
link |
01:11:26.600
他比較能夠File Tune在
link |
01:11:28.600
小一點的Data Set上面
link |
01:11:30.600
那這邊給大家看的是
link |
01:11:32.600
Low Resource,他這邊的Low Resource
link |
01:11:34.600
是幾千比幾百比的,然後他的Resource是
link |
01:11:36.600
就是好幾
link |
01:11:38.600
就是一百多K的
link |
01:11:40.600
之類的
link |
01:11:42.600
然後這兩個呢是
link |
01:11:44.600
大家看這一行,最後兩行就好
link |
01:11:46.600
這個是Roberta,然後用
link |
01:11:48.600
Standard File Tuning,然後跟Roberta
link |
01:11:50.600
用Adapter
link |
01:11:52.600
那在小一點的Data Set上面呢
link |
01:11:54.600
用Adapter的File Tuning會比較好
link |
01:11:56.600
那如果在High Resource的時候呢
link |
01:11:58.600
這個用
link |
01:12:00.600
Adapter跟用
link |
01:12:02.600
不用Adapter用Standard File Tuning
link |
01:12:04.600
他可以達到差不多的Performance
link |
01:12:06.600
所以說你即使用了少一點的參數
link |
01:12:08.600
他的Performance也不會降太多
link |
01:12:10.600
所以我們大概就
link |
01:12:12.600
講完這個
link |
01:12:14.600
Parameter Efficient File Tuning
link |
01:12:16.600
的部分,好那
link |
01:12:18.600
再來就是有一個小
link |
01:12:20.600
小小的這個主題
link |
01:12:22.600
蠻有趣的,叫做Early Exit
link |
01:12:24.600
那Early Exit他也是某種程度
link |
01:12:26.600
像想要去減少這個
link |
01:12:28.600
這個
link |
01:12:30.600
下游任務
link |
01:12:32.600
所需要的Parameter
link |
01:12:34.600
要減少的方式是動態的減少
link |
01:12:36.600
那怎麼樣動態減少呢
link |
01:12:38.600
他的
link |
01:12:40.600
想法是這個樣子的,就是因為
link |
01:12:42.600
Pretend Entry Model很大嘛,所以當我們
link |
01:12:44.600
要用這個Pretend Entry Model
link |
01:12:46.600
Inference的時候,他就要通過好多好多層
link |
01:12:48.600
那我們要通過好多好多層的時候
link |
01:12:50.600
就會很浪費時間
link |
01:12:52.600
那這個作者就想說呢
link |
01:12:54.600
這邊的作者他們就想說
link |
01:12:56.600
如果說用整顆Model
link |
01:12:58.600
要花很多時間的話,那我們就
link |
01:13:00.600
不要用整顆Model就好了
link |
01:13:02.600
那什麼叫做不要用整顆Model呢
link |
01:13:04.600
就是
link |
01:13:06.600
在原本的Transformer
link |
01:13:08.600
他每一層的Transformer
link |
01:13:10.600
他都要凹不出一組的Pretend Orientation
link |
01:13:12.600
第二層也會凹不出一組Pretend Orientation
link |
01:13:14.600
然後最後一層也會凹不出
link |
01:13:16.600
一組Pretend Orientation
link |
01:13:18.600
那我們傳統的方式就是
link |
01:13:20.600
我們用最後一層的Pretend Orientation
link |
01:13:22.600
然後去訓練一個Classifier
link |
01:13:24.600
那他問的是說
link |
01:13:26.600
這個我們有沒有辦法
link |
01:13:28.600
用前面一點的Pretend Orientation
link |
01:13:30.600
來做到很好的Rules
link |
01:13:32.600
因為有些簡單的Data
link |
01:13:34.600
在很前面的層數他就知道說
link |
01:13:36.600
答案應該是什麼了
link |
01:13:38.600
他就不需要等到最後一層
link |
01:13:40.600
才去Predict說這個答案是什麼
link |
01:13:42.600
所以呢他做的事情就是
link |
01:13:44.600
他在訓練的時候動態的
link |
01:13:46.600
使用前面一點的層數
link |
01:13:48.600
的Prediction來當作是
link |
01:13:50.600
最終的Prediction
link |
01:13:52.600
那這個作法就是
link |
01:13:54.600
在每一層都加一個Classifier
link |
01:13:56.600
那如果你在每一層
link |
01:13:58.600
都加一個Classifier的時候
link |
01:14:00.600
如果他在第一層答案就已經出來
link |
01:14:02.600
他就可以用第一層
link |
01:14:04.600
後面幾層的Classifier就全部不用用
link |
01:14:06.600
所以就可以大大的減低我們需要的運算量
link |
01:14:08.600
那這個一個最大的問題就是
link |
01:14:10.600
你要怎麼決定說哪一層的Classifier
link |
01:14:12.600
可以拿出來用
link |
01:14:14.600
link |
01:14:16.600
這個有很多不同的作法
link |
01:14:18.600
那我講一個最新的作法
link |
01:14:20.600
那這個作法是這樣子的
link |
01:14:22.600
就是我們會另外訓練
link |
01:14:24.600
一個叫做Confidence Predictor
link |
01:14:26.600
的一個Subproject
link |
01:14:28.600
那這個Confidence Predictor
link |
01:14:30.600
他會根據這個Classifier
link |
01:14:32.600
還有根據這個Representation
link |
01:14:34.600
去Predict說這個Classifier的
link |
01:14:36.600
Output夠不夠有信心
link |
01:14:38.600
如果說這個Classifier的
link |
01:14:40.600
Output很沒有信心的話
link |
01:14:42.600
這個Confidence Predictor就會告訴我們說
link |
01:14:44.600
這個Classifier他的Confidence還不夠高
link |
01:14:46.600
所以不可以拿他來當作最終的Output
link |
01:14:48.600
那可能到了第二層之後
link |
01:14:50.600
我們就發現說
link |
01:14:52.600
這個Confidence Predictor告訴我們說
link |
01:14:54.600
這個Classifier已經足夠Confident了
link |
01:14:56.600
那我們就可以直接拿
link |
01:14:58.600
這個Classifier2的
link |
01:15:00.600
Output當作最終Output
link |
01:15:02.600
那後面第三層到第四層的
link |
01:15:04.600
運算我們就直接不用用
link |
01:15:06.600
那這樣子就可以
link |
01:15:08.600
顯著的減低在
link |
01:15:10.600
Inference的時候所需要的時間
link |
01:15:14.600
那我們來看一下
link |
01:15:16.600
他到底可以減少多少時間
link |
01:15:18.600
那我們來看Bird's Lodge的表格
link |
01:15:20.600
Bird's Lodge總共有24層
link |
01:15:22.600
所以如果你用Standard Fine Tuning
link |
01:15:24.600
然後Standard Inference之後
link |
01:15:26.600
每一次你要運算
link |
01:15:28.600
的就是24層24層24層
link |
01:15:30.600
那他的Performance在這個地方
link |
01:15:32.600
那下面
link |
01:15:34.600
就是用他的方法
link |
01:15:36.600
假設我減少33%的乘數的時候
link |
01:15:38.600
我可以保留住95%的Performance
link |
01:15:40.600
就是70.1乘以95%
link |
01:15:42.600
然後假設我
link |
01:15:44.600
少了46%的乘數
link |
01:15:46.600
我可以保持94%的Performance
link |
01:15:48.600
所以即使說我
link |
01:15:50.600
這個少掉了非常非常多的乘數
link |
01:15:52.600
我還是可以保留
link |
01:15:54.600
很不錯的Performance
link |
01:15:56.600
所以這個就可以降低
link |
01:15:58.600
Inference的時候所需要的時間
link |
01:16:00.600
所以這個地方
link |
01:16:02.600
我們就大概講了說
link |
01:16:04.600
如果Pretended Use Model很大的時候
link |
01:16:06.600
我們要怎麼解決他
link |
01:16:08.600
那這個解決方式我們這邊提供了兩種解決方式
link |
01:16:10.600
第一個解決方式是說
link |
01:16:12.600
我們是用Parametric PCS Fine Tuning
link |
01:16:14.600
那這個方式主要的核心概念就是
link |
01:16:16.600
我們用一些
link |
01:16:18.600
可以
link |
01:16:20.600
我們用一些可以訓練的Supply Zone
link |
01:16:22.600
插在原本的Pretended Use Model裡面
link |
01:16:24.600
然後在Finding的時候我們只去Finding那些東西
link |
01:16:26.600
那Early Entry
link |
01:16:28.600
他的想法是
link |
01:16:30.600
我們在Inference的時候動態的去
link |
01:16:32.600
減低他需要的乘數
link |
01:16:34.600
那這個
link |
01:16:36.600
要做到這件事情的話你就需要在每一層
link |
01:16:38.600
多加一個Classifier
link |
01:16:40.600
然後你需要去考慮說什麼時候Classifier
link |
01:16:42.600
然後出來用
link |
01:16:44.600
那就大概講完了
link |
01:16:46.600
比我想像的還要快很多
link |
01:16:48.600
不會
link |
01:16:50.600
那這堂課我們講的內容
link |
01:16:52.600
大概就是怎麼樣讓
link |
01:16:54.600
Pretended Use Model小一點
link |
01:16:56.600
快一點然後更有效
link |
01:16:58.600
link |
01:17:00.600
我們講的另外一個主題
link |
01:17:02.600
就是我們要怎麼樣
link |
01:17:04.600
讓這個Pretended Use Model可以在
link |
01:17:06.600
Foundry的Label很少
link |
01:17:08.600
甚至根本就沒有Label之後
link |
01:17:10.600
他還是可以用的
link |
01:17:12.600
那我們今天主要講的幾個方式
link |
01:17:14.600
我們來Recap一下
link |
01:17:16.600
我們剛才講了幾個Tuning的方式
link |
01:17:18.600
第一個就是我們一開始講的Standard Find Tuning
link |
01:17:20.600
Standard Find Tuning我們會把原本
link |
01:17:22.600
Pretended Use Model的Language Model Head丟掉
link |
01:17:24.600
然後加上一個Classifier
link |
01:17:26.600
然後整顆Model一起Find Tune
link |
01:17:28.600
那另外一種方法
link |
01:17:30.600
叫做Prompt Tuning
link |
01:17:32.600
Prompt Tuning我們會保留原本的Language Model Head
link |
01:17:34.600
然後不會加Classifier
link |
01:17:36.600
然後同樣也是整顆Model一起Find Tune
link |
01:17:38.600
那這個Prompt Tuning
link |
01:17:40.600
是為了要解決這個Data Scarcity
link |
01:17:42.600
那我們剛才有講了
link |
01:17:44.600
另外四種Data Efficient
link |
01:17:46.600
Find Tuning的方式
link |
01:17:48.600
是Adapter, Rollout, Prefix Tuning跟Solve Prompt
link |
01:17:50.600
那這幾個方法呢
link |
01:17:52.600
他只有我們畫在這邊的
link |
01:17:54.600
這幾個Submodule會被訓練到
link |
01:17:56.600
然後在Find Tune的時候
link |
01:17:58.600
原本的Pretended Weight
link |
01:18:00.600
都是完全不會被動到的
link |
01:18:02.600
所以這個
link |
01:18:04.600
Prompt Tuning跟
link |
01:18:06.600
這邊的Solve Prompt還有Prefix Tuning
link |
01:18:08.600
雖然都有跟Prompt有點類似
link |
01:18:10.600
但是他們是完全不一樣的東西
link |
01:18:12.600
也不能說完全不一樣
link |
01:18:14.600
他們是很不一樣的東西
link |
01:18:16.600
他們只是名字有點像
link |
01:18:18.600
那另外我要澄清一下
link |
01:18:20.600
這個Solve Prompt
link |
01:18:22.600
其實他原本的Paper
link |
01:18:24.600
我如果沒記錯的話應該叫做Prompt Tuning
link |
01:18:26.600
可是我這邊講Prompt Tuning
link |
01:18:28.600
就是這幾個名詞大家會
link |
01:18:30.600
互相混用
link |
01:18:32.600
所以大家看的時候
link |
01:18:34.600
不能看到名字就覺得他是哪一個
link |
01:18:36.600
大家要小心一下
link |
01:18:38.600
這邊那個Solve Prompt
link |
01:18:40.600
是我這邊這樣用,也有人這樣用
link |
01:18:42.600
只是他原本的Paper他使用了Prompt Tuning
link |
01:18:44.600
然後
link |
01:18:46.600
這一些方法他是為了要解決
link |
01:18:48.600
參數太多
link |
01:18:50.600
所以才設計出來的方法
link |
01:18:52.600
我們其實只有講的
link |
01:18:54.600
就是Pretended Weight Model
link |
01:18:56.600
一小部分的問題
link |
01:18:58.600
他還有很多很多的問題要解決
link |
01:19:00.600
舉例而言
link |
01:19:02.600
為什麼Pretended Weight Model
link |
01:19:04.600
為什麼你拿了一個Self-Solid
link |
01:19:06.600
他會有好的表現
link |
01:19:08.600
這個其實也是大家現在
link |
01:19:10.600
正在努力研究的一個方向
link |
01:19:12.600
另外一個就是當我們想要把
link |
01:19:14.600
Pretended Weight Model應用在Self-Solid的時候
link |
01:19:16.600
這個人
link |
01:19:18.600
這個使用者他會希望說
link |
01:19:20.600
他可以知道為什麼Model
link |
01:19:22.600
他會做這樣的Prediction
link |
01:19:24.600
所以我們要讓Model變得可以解釋
link |
01:19:26.600
那這個其實也是Pretended Weight Model
link |
01:19:28.600
他需要去克服的問題
link |
01:19:30.600
那另外像是Domain Adaptation
link |
01:19:32.600
就是當你把一個Language Model
link |
01:19:34.600
放到某一個Pretended Corpus上面
link |
01:19:36.600
假設說
link |
01:19:38.600
舉例而言,現在的Bird
link |
01:19:40.600
它是在ETPDR上面
link |
01:19:42.600
那我們今天想要把這個Pretended Weight Model
link |
01:19:44.600
應用在醫療的Domain
link |
01:19:46.600
那醫療的Domain其實就會有很多Bird在Pretended中間
link |
01:19:48.600
有換過一次
link |
01:19:50.600
那這個時候我們要怎麼讓
link |
01:19:52.600
這個Pretended Bird
link |
01:19:54.600
還可以發揮他的功能
link |
01:19:56.600
這個就是Domain Adaptation需要去
link |
01:19:58.600
處理的問題
link |
01:20:00.600
那另外有一個我覺得最近好像
link |
01:20:02.600
蠻多人在做的叫做Continual Learning
link |
01:20:04.600
還有Live Learning
link |
01:20:06.600
那Continual Learning和Live Learning它有兩種不同的層面
link |
01:20:08.600
一種是在Find Training的時候
link |
01:20:10.600
Continual Learning,也就是當我在Find Training的時候
link |
01:20:12.600
我想要讓這個Pretended Weight Model
link |
01:20:14.600
做到Continual Learning
link |
01:20:16.600
要怎麼做?那另外一種層面是
link |
01:20:18.600
我在Pretending的時候我要做到
link |
01:20:20.600
Continual Learning,也就是說呢
link |
01:20:22.600
這個Pretending的時候
link |
01:20:24.600
我們常常都是訓練在某一個時間點
link |
01:20:26.600
就是假設是Bird,他是2018年訓練出來
link |
01:20:28.600
他就是訓練在2018
link |
01:20:30.600
以前的Wikipedia
link |
01:20:32.600
那2018年的Wikipedia跟2021年
link |
01:20:34.600
現在的Wikipedia,現在是2020
link |
01:20:36.600
跟2022的Wikipedia
link |
01:20:38.600
比較差呢,美國總統是
link |
01:20:40.600
以前2018年是
link |
01:20:42.600
拜登,那你有一個
link |
01:20:44.600
Language Model,然後
link |
01:20:46.600
他的某些知識應該要被更新
link |
01:20:48.600
那我們要怎麼去更新這些Language Model
link |
01:20:50.600
難道我們要重新Train的話
link |
01:20:52.600
這樣好像有點太浪費時間了
link |
01:20:54.600
所以要怎麼樣讓這個Pretended Language Model
link |
01:20:56.600
可以做到Live Learning
link |
01:20:58.600
是一個現在突然
link |
01:21:00.600
不知道為什麼很紅的一個研究
link |
01:21:02.600
那最後一個
link |
01:21:04.600
我列出來的主題最後一個是
link |
01:21:06.600
Security and Privacy,就是Pretended Language Model
link |
01:21:08.600
他雖然看起來很強
link |
01:21:10.600
但他還是有脆弱的時候
link |
01:21:12.600
他還能夠Attack,然後呢
link |
01:21:14.600
大家其實有發現說Pretended Language Model
link |
01:21:16.600
好像會洩漏他Pretending的資料
link |
01:21:18.600
有人發現說GP13
link |
01:21:20.600
你只要把一個人的
link |
01:21:22.600
基本資料放一些在前面
link |
01:21:24.600
他就會自動回答出他的地址
link |
01:21:26.600
還有什麼Social Security
link |
01:21:28.600
Number之類的東西
link |
01:21:30.600
所以這其實是非常非常有問題的
link |
01:21:32.600
所以要怎麼讓Pretended Language Model
link |
01:21:34.600
可以安全的運用
link |
01:21:36.600
這也是一個大家需要去解決的問題
link |
01:21:38.600
好,然後
link |
01:21:40.600
如果大家對這個主題有興趣的話
link |
01:21:42.600
可以來聽聽看那個
link |
01:21:44.600
ASL的這個總統任務
link |
01:21:46.600
是11月24號
link |
01:21:48.600
在台北,今年是在台北辦
link |
01:21:50.600
是我跟另外一個MIT的同學
link |
01:21:52.600
張宏松還有老師一起講的
link |
01:21:54.600
好,那我們今天就講到這個地方
link |
01:21:56.600
謝謝大家