back to index

【機器學習2021】自注意力機制 (Self-attention) (下)


link |
00:00.000
那這個self-attention
link |
00:03.000
我們上週已經跟大家操作過
link |
00:06.000
怎麼根據input sequence
link |
00:08.000
得到其中一個output
link |
00:10.000
self-attention要做的事情
link |
00:12.000
就是給一排input的vector
link |
00:15.000
得到另外一排output的vector
link |
00:18.000
那我們上週已經操作過說
link |
00:20.000
其實上上週啦
link |
00:21.000
上上週已經操作過說
link |
00:23.000
怎麼根據input的這一排vector sequence
link |
00:25.000
得到B1
link |
00:27.000
好,那我們就停在這邊
link |
00:29.000
如果上上週的東西
link |
00:31.000
你沒有聽到的話
link |
00:32.000
那剛剛好
link |
00:33.000
我們來講一下
link |
00:34.000
怎麼從這一排vector得到B2
link |
00:38.000
其實從這一排vector得到B1
link |
00:40.000
跟從這一排vector得到B2
link |
00:42.000
它的操作是一模一樣的
link |
00:44.000
所以我們再講一次
link |
00:45.000
怎麼從input的vector得到B2
link |
00:47.000
等於是幫大家複習
link |
00:49.000
上上週說過的東西
link |
00:51.000
那當然這邊要強調一點是
link |
00:53.000
這邊的B1到B4
link |
00:55.000
他們並不需要依序產生
link |
00:58.000
不需要算完B1再算B2
link |
01:00.000
再算B3再算B4
link |
01:02.000
B1到B4
link |
01:03.000
他們是一次同時被計算出來的
link |
01:08.000
那怎麼計算這個B2呢
link |
01:11.000
那我們現在的主角就變成A2
link |
01:15.000
A2會乘上一個transform
link |
01:18.000
就是你把A2乘上一個matrix
link |
01:20.000
變成Q2
link |
01:22.000
然後接下來你會根據Q2
link |
01:25.000
去對A1到A4這四個位置
link |
01:28.000
都去計算attention的score
link |
01:31.000
那怎麼計算attention的score呢
link |
01:33.000
你就把Q2跟K1做個double order
link |
01:38.000
你把Q2跟K2也做個double order
link |
01:42.000
你把Q2跟K3也做double order
link |
01:45.000
你把Q2跟K4也做double order
link |
01:48.000
得到四個分數
link |
01:50.000
你得到這四個分數以後
link |
01:51.000
你可能還會做一個normalization
link |
01:54.000
比如說solvemax
link |
01:56.000
然後得到最後的attention的score
link |
01:59.000
那我們這邊用alpha prime
link |
02:01.000
來表示經過normalization以後的attention score
link |
02:05.000
那得到這個attention的分數以後
link |
02:08.000
得到這個alpha21 alpha22 alpha23 alpha24
link |
02:11.000
這四個數值以後
link |
02:13.000
接下來我們拿這四個數值來做什麼呢
link |
02:15.000
我們把這些數值
link |
02:17.000
分別乘上V1 V2 V3 V4
link |
02:21.000
我們把alpha21乘上V1
link |
02:24.000
把alpha22乘上V2
link |
02:26.000
把alpha23乘上V3
link |
02:27.000
把alpha24乘上V4
link |
02:29.000
然後全部加起來就是V2
link |
02:33.000
或者是我們把V2的式子列在這邊
link |
02:36.000
V2是怎麼來的呢
link |
02:37.000
V2就是把VI
link |
02:39.000
VI就是這邊的V1到V4
link |
02:42.000
把VI乘上alpha
link |
02:45.000
這邊每一個V1到V4
link |
02:47.000
都有一個對應的alpha
link |
02:49.000
alpha21到alpha24
link |
02:51.000
把每個VI都乘上alpha
link |
02:53.000
全部再加起來就得到V2
link |
02:57.000
所以我們這邊呢
link |
02:58.000
就再跟大家操作了一下
link |
03:00.000
V2是怎麼被計算出來的
link |
03:03.000
同理呢
link |
03:04.000
你就可以由A3乘一個transform
link |
03:07.000
得到Q3
link |
03:08.000
然後就計算B3
link |
03:10.000
從A4乘一個transform得到Q4
link |
03:12.000
就計算B4
link |
03:14.000
所以現在你就知道說
link |
03:16.000
怎麼從A1到A4計算出B1到B4
link |
03:21.000
好那剛才講的是
link |
03:23.000
是這個self-attention
link |
03:26.000
它運作的過程
link |
03:28.000
那接下來呢
link |
03:29.000
我們從舉證懲罰的角度
link |
03:32.000
再重新講一次
link |
03:34.000
我們剛才講的self-attention
link |
03:36.000
是怎麼運作的
link |
03:38.000
好那self-attention是怎麼運作的呢
link |
03:41.000
我們現在已經知道說
link |
03:43.000
A1到A4
link |
03:44.000
他們每一個A
link |
03:46.000
都要分別產生QKB
link |
03:49.000
所以A1要產生Q1 K1 V1
link |
03:51.000
A2要產生Q2 K2 V2
link |
03:53.000
以此類推
link |
03:54.000
每一個A都產生QKB
link |
03:57.000
如果要用舉證運算
link |
03:59.000
表示這個操作的話
link |
04:01.000
是什麼樣子呢
link |
04:03.000
我們每一個A AI
link |
04:05.000
都乘上Q這個
link |
04:07.000
都乘上一個舉證
link |
04:08.000
我們這邊用WQ來表示它
link |
04:10.000
得到QI
link |
04:11.000
每一個A都要乘上WQ
link |
04:14.000
得到QI
link |
04:16.000
那這些不同的A
link |
04:18.000
你可以把它合起來
link |
04:20.000
當作一個舉證來看待
link |
04:22.000
什麼意思呢
link |
04:23.000
A1乘上WQ得到Q1
link |
04:26.000
A2也乘上WQ得到Q2
link |
04:30.000
一樣A3、A4也都乘上WQ
link |
04:33.000
得到Q3、Q4
link |
04:35.000
那你可以把A1到A4拼起來
link |
04:38.000
看作是一個舉證
link |
04:41.000
這個舉證我們用I來表示
link |
04:43.000
這邊這個I
link |
04:44.000
這個大寫的字母I
link |
04:45.000
它代表的是一個舉證
link |
04:48.000
那這個舉證有四個column
link |
04:50.000
它的column就是A1到A4
link |
04:53.000
那I乘上WQ
link |
04:56.000
就得到另外一個舉證
link |
04:58.000
我們用大Q來表示它
link |
05:00.000
這個大Q啊
link |
05:01.000
就是Q1到Q4
link |
05:03.000
你把Q1到Q4
link |
05:05.000
這四個factor拼起來
link |
05:07.000
就是大Q的四個column
link |
05:10.000
所以我們從A1到A4
link |
05:12.000
得到Q1到Q4
link |
05:14.000
這一件事情
link |
05:15.000
這個操作
link |
05:16.000
其實就是把一個叫做I的舉證
link |
05:18.000
I這個舉證
link |
05:19.000
它裡面的column
link |
05:21.000
就是我們SELF ATTENTION的input
link |
05:23.000
A1到A4
link |
05:24.000
把I這個舉證
link |
05:25.000
乘上另外一個舉證WQ
link |
05:27.000
那WQ呢
link |
05:28.000
其實是network的參數
link |
05:30.000
它是等一下會被認出來的
link |
05:32.000
把I乘上WQ
link |
05:33.000
得到大Q
link |
05:34.000
這個大Q的四個column
link |
05:36.000
就是Q1到Q4
link |
05:38.000
那接下來怎麼產生K跟V呢
link |
05:40.000
它的操作跟Q是一模一樣的
link |
05:42.000
我們就不要再細講
link |
05:43.000
免得你覺得很無聊
link |
05:45.000
所以A乘上WK
link |
05:48.000
就會得到這個K
link |
05:50.000
就會得到這個K這個factor
link |
05:52.000
那我們把這個input的四個factor
link |
05:54.000
A1到A4拼起來
link |
05:56.000
當作是一個舉證
link |
05:57.000
叫做大I
link |
05:59.000
把大I乘上一個舉證WK
link |
06:02.000
就得到另外一個舉證大K
link |
06:04.000
大K的四個column
link |
06:05.000
就是這四個key
link |
06:07.000
K1到K4
link |
06:09.000
那同理V呢
link |
06:10.000
也是一模一樣的操作
link |
06:12.000
我們已經知道說
link |
06:13.000
AI乘上WV
link |
06:14.000
會得到VI
link |
06:16.000
也就是說
link |
06:17.000
把A1到A4拼起來
link |
06:18.000
得到大I
link |
06:19.000
大I乘上舉證WV
link |
06:21.000
會得到大V這個舉證
link |
06:23.000
大V的舉證四個column
link |
06:24.000
就是這邊四個代表value的factor
link |
06:28.000
所以每一個A
link |
06:30.000
怎麼得到QKV呢
link |
06:32.000
其實就是把輸入的這個
link |
06:34.000
factor sequence
link |
06:35.000
乘上三個不同的舉證
link |
06:37.000
你就得到了Q
link |
06:39.000
得到了K
link |
06:40.000
跟得到了V
link |
06:43.000
這個是怎麼從A得到QKV
link |
06:47.000
那接下來呢
link |
06:48.000
我們說下一步是什麼
link |
06:50.000
下一步是
link |
06:51.000
每一個Q
link |
06:53.000
都會去跟每一個K
link |
06:55.000
去計算這個inner product
link |
06:58.000
去得到這個attention的分數
link |
07:01.000
那得到attention分數
link |
07:03.000
這件事情
link |
07:04.000
如果從舉證操作的角度來看
link |
07:06.000
它在做什麼樣的事情呢
link |
07:08.000
你就是把Q1跟K1
link |
07:11.000
做inner product
link |
07:12.000
得到α11
link |
07:13.000
所以α11就是Q1跟K1的inner product
link |
07:18.000
那這邊呢
link |
07:19.000
我就把這個K1
link |
07:20.000
它背後的這個向量
link |
07:22.000
把它畫這個倒下來的
link |
07:24.000
把它畫成比較寬一點
link |
07:26.000
代表說它是transpose
link |
07:28.000
希望你可以了解我的意思
link |
07:29.000
所以Q1乘上K1的transpose
link |
07:31.000
也就是Q1跟K1
link |
07:33.000
做inner product
link |
07:34.000
得到α11
link |
07:36.000
同理α12就是Q1跟K2
link |
07:39.000
做inner product
link |
07:40.000
α13就是Q1跟K3
link |
07:42.000
做inner product
link |
07:43.000
α14就是Q1跟K4
link |
07:46.000
做inner product
link |
07:47.000
那這個四個步驟的操作
link |
07:50.000
你其實可以把它拼起來
link |
07:52.000
看作是
link |
07:54.000
兩看作是
link |
07:55.000
舉證跟向量相乘
link |
07:58.000
什麼意思
link |
07:59.000
這邊Q1乘K1
link |
08:01.000
Q1乘K2
link |
08:02.000
Q1乘K3
link |
08:03.000
Q1乘K4
link |
08:04.000
這四個動作
link |
08:05.000
你可以看作是
link |
08:06.000
我們把K1到K4拼起來
link |
08:09.000
當作是一個舉證的四個row
link |
08:12.000
那把這個舉證呢
link |
08:14.000
乘上Q1
link |
08:15.000
得到另外一個向量
link |
08:18.000
你把Q1乘上由K
link |
08:20.000
所組成的這個舉證
link |
08:22.000
就得到另外一個向量
link |
08:24.000
這個向量裡面的值
link |
08:25.000
就是attention的score
link |
08:28.000
Q1到α14
link |
08:31.000
所以你把Q1乘上這個舉證
link |
08:33.000
你就得到α11到α14
link |
08:38.000
那我們剛才有講過說呢
link |
08:40.000
我們不只是Q1
link |
08:42.000
要對K1到K4計算attention
link |
08:45.000
Q2也要對K1到K4計算attention
link |
08:50.000
那怎麼把Q2
link |
08:51.000
對K1到K4計算attention呢
link |
08:54.000
你就把Q2呢
link |
08:56.000
放在這邊
link |
08:57.000
這時候Q1要乘上K1到K4
link |
09:00.000
我們現在把Q2
link |
09:01.000
也乘上K1到K4
link |
09:04.000
得到α21到α24
link |
09:08.000
那怎麼拿Q3去做attention
link |
09:10.000
怎麼拿Q4去做attention呢
link |
09:12.000
你現在的操作
link |
09:13.000
是一模一樣的
link |
09:15.000
你就把Q3乘K1到K4
link |
09:17.000
得到attention
link |
09:19.000
你把Q4乘上K1到K4
link |
09:22.000
得到attention的分數
link |
09:24.000
所以
link |
09:25.000
attention的分數是怎麼來的
link |
09:27.000
你可以看作是兩個舉證的相乘
link |
09:29.000
一個舉證它的row
link |
09:31.000
就是K K1到K4
link |
09:34.000
另外一個舉證它的column
link |
09:36.000
就是Q就是Q1到Q4
link |
09:38.000
把這個K所形成的舉證
link |
09:40.000
乘上Q所形成的舉證
link |
09:42.000
就得到這些attention的分數
link |
09:45.000
所以這邊就寫說
link |
09:47.000
K的transpose
link |
09:49.000
我們假設這個K它的column
link |
09:52.000
就是K1到K4
link |
09:53.000
所以在這邊相乘的時候呢
link |
09:54.000
我們要對大K這個舉證
link |
09:56.000
做一下transpose
link |
09:57.000
K的transpose乘上Q
link |
09:59.000
就得到一個舉證叫做A
link |
10:01.000
那A裡面存的
link |
10:03.000
就是Q跟這個K之間的attention的分數
link |
10:08.000
那麼說我們會對attention的分數呢
link |
10:11.000
做一下normalization
link |
10:13.000
比如說你會做softmax
link |
10:15.000
你會對這邊的每一個column
link |
10:17.000
每一個column做softmax
link |
10:19.000
讓每一個column裡面的值呢
link |
10:21.000
相加是1
link |
10:22.000
那我們之前有講過說
link |
10:23.000
其實這邊做softmax
link |
10:24.000
不是唯一的選項
link |
10:26.000
你完全可以選擇其他的操作
link |
10:28.000
比如說redo之類的
link |
10:30.000
那其實得到的結果
link |
10:31.000
也不會比較差
link |
10:33.000
反正我們這邊呢
link |
10:34.000
就是把A呢
link |
10:35.000
通過了softmax以後
link |
10:36.000
它得到的值有點不一樣啦
link |
10:38.000
所以我們用A'來表示
link |
10:40.000
通過softmax以後的結果
link |
10:43.000
那接下來呢
link |
10:45.000
我們已經計算出A'以後
link |
10:47.000
接下來呢
link |
10:48.000
接下來下一個步驟
link |
10:50.000
我發現我這個投影片上
link |
10:51.000
有一個小小的bug
link |
10:53.000
這個bug是什麼呢
link |
10:54.000
這個bug呢
link |
10:55.000
就是這邊應該是'
link |
10:56.000
而不是'
link |
10:58.000
這邊應該是'
link |
10:59.000
不是'
link |
11:00.000
本來最早是寫成'
link |
11:01.000
那我現在把它改成'
link |
11:03.000
讓這個地方沒有改過來
link |
11:05.000
好 那我們把這個V
link |
11:07.000
V1到V4
link |
11:09.000
乘上這邊的α以後
link |
11:11.000
就可以得到B
link |
11:13.000
得到B
link |
11:14.000
那這個B呢
link |
11:15.000
是怎麼被計算出來的呢
link |
11:17.000
你就把V1到V4拼起來
link |
11:20.000
你把V1到V4
link |
11:22.000
當成是大V這個矩陣的
link |
11:24.000
四個column把它拼起來
link |
11:26.000
然後接下來呢
link |
11:27.000
你把V乘上A'的
link |
11:30.000
第一個column以後
link |
11:32.000
你得到的結果呢
link |
11:34.000
就是B1
link |
11:36.000
如果你熟悉線性代數的話
link |
11:37.000
你知道說
link |
11:38.000
把這個A'乘上V
link |
11:42.000
這個你就是把
link |
11:44.000
A'的第一個column
link |
11:46.000
乘上V這一個矩陣
link |
11:48.000
你會得到你output矩陣的
link |
11:50.000
第一個column
link |
11:51.000
而把A的第一個column
link |
11:52.000
乘上V這個矩陣做的事情
link |
11:54.000
其實就是把V這個矩陣
link |
11:56.000
裡面的每一個column
link |
11:58.000
根據A'這個矩陣裡面的
link |
12:02.000
每一個column裡面
link |
12:04.000
每一個element做weighted sum
link |
12:06.000
就得到B1
link |
12:07.000
那就是這邊的操作
link |
12:08.000
把V1乘上weight
link |
12:10.000
把V2乘上weight
link |
12:11.000
把V3乘上weight
link |
12:12.000
把V4乘上weight
link |
12:13.000
全部加起來得到B1
link |
12:14.000
如果你用矩陣操作的角度來看它
link |
12:17.000
就是把A'的第一個column
link |
12:19.000
乘上V就得到B1
link |
12:21.000
然後接下來呢
link |
12:22.000
就是以此類推啦
link |
12:24.000
接下來就不需要再跟你詳加說明
link |
12:26.000
免得你覺得這一段非常的肉
link |
12:28.000
就是以此類推
link |
12:29.000
把A'的第二個column
link |
12:31.000
乘上V就得到B2
link |
12:33.000
A'的第三個column
link |
12:35.000
乘上V就得到B3
link |
12:36.000
A'的最後一個column
link |
12:38.000
乘上V就得到B4
link |
12:41.000
所以我們等於就是把
link |
12:43.000
A'這個矩陣
link |
12:44.000
乘上V這個矩陣
link |
12:46.000
得到O這個矩陣
link |
12:48.000
O這個矩陣裡面的每一個column
link |
12:50.000
就是SELF ATTENTION的輸出
link |
12:52.000
也就是B1到B4
link |
12:54.000
所以其實整個SELF ATTENTION
link |
12:56.000
我們在講操作的時候
link |
12:58.000
我們在最開始跟你講的時候
link |
13:00.000
我們講說
link |
13:01.000
我們先產生了QKB
link |
13:03.000
然後再根據這個Q
link |
13:06.000
去找出相關的位置
link |
13:09.000
然後再對V做weighting上
link |
13:12.000
其實這一串操作
link |
13:13.000
就是一連串矩陣的乘法而已
link |
13:16.000
怎麼說呢
link |
13:17.000
我們再複習一下
link |
13:18.000
我們剛才看到的矩陣乘法
link |
13:20.000
I是什麼
link |
13:21.000
I是我們的input
link |
13:23.000
是SELF ATTENTION的input
link |
13:25.000
SELF ATTENTION的input
link |
13:26.000
是一串的vector
link |
13:28.000
是一排的vector
link |
13:29.000
這排vector拼起來
link |
13:30.000
當作矩陣的column
link |
13:33.000
就是I
link |
13:34.000
所以I是SELF ATTENTION的input
link |
13:36.000
那這個input呢
link |
13:37.000
分別乘上三個矩陣
link |
13:39.000
WQ WK跟WB
link |
13:41.000
得到大Q大K大V
link |
13:44.000
這三個矩陣
link |
13:45.000
接下來呢
link |
13:46.000
大Q乘上K的transpose
link |
13:49.000
QKB都算出來了嘛
link |
13:50.000
你把Q乘上K的transpose
link |
13:53.000
得到A這個矩陣
link |
13:55.000
A的矩陣
link |
13:56.000
你可能會做一些處理
link |
13:57.000
得到A'
link |
13:58.000
那有時候我們會把這個A'呢
link |
14:00.000
叫做ATTENTION的matrix
link |
14:03.000
然後接下來呢
link |
14:05.000
你把A'再乘上V
link |
14:07.000
就得到O
link |
14:08.000
O就是SELF ATTENTION這個layer的輸出
link |
14:11.000
所以SELF ATTENTION
link |
14:12.000
輸入是I
link |
14:13.000
輸出是O
link |
14:15.000
那你會發現說
link |
14:16.000
雖然SELF ATTENTION這邊
link |
14:17.000
做了一個很複雜的操作
link |
14:19.000
但是其實啊
link |
14:20.000
SELF ATTENTION layer裡面
link |
14:22.000
唯一需要學的參數
link |
14:24.000
就只有WQ WK跟WB而已
link |
14:28.000
只有WQ WK WB是未知的
link |
14:32.000
是需要透過我們的訓練資料
link |
14:35.000
把它找出來的
link |
14:37.000
所以WQ WK WB是未知的
link |
14:40.000
是需要被找出來的
link |
14:42.000
但是其他的操作
link |
14:44.000
都沒有未知的參數
link |
14:46.000
都是我們人為設定好的
link |
14:48.000
都不需要透過訓練資料找出來
link |
14:51.000
只有WQ WK WB
link |
14:54.000
是透過訓練資料找出來的
link |
14:57.000
那這整個就是SELF ATTENTION的操作
link |
14:59.000
從I到O
link |
15:01.000
就是做了SELF ATTENTION
link |
15:05.000
那SELF ATTENTION呢
link |
15:06.000
有一個進階的版本
link |
15:08.000
叫做MULTIHEAD SELF ATTENTION
link |
15:11.000
那MULTIHEAD SELF ATTENTION呢
link |
15:12.000
其實今天的使用是非常的廣泛的
link |
15:15.000
那在作業4裡面呢
link |
15:17.000
助教原來的code是有MULTIHEAD SELF ATTENTION
link |
15:20.000
它的HEAD的數目是設成2
link |
15:22.000
那剛才助教有給你提示說
link |
15:24.000
把HEAD的數目少一點改成1
link |
15:26.000
其實就可以過MEDIAN的BASELINE
link |
15:28.000
但並不代表所有的任務
link |
15:30.000
都適合用比較少的HEAD
link |
15:34.000
有一些任務比如說翻譯
link |
15:36.000
比如說語音辨識
link |
15:37.000
其實用比較多的HEAD
link |
15:39.000
你反而可以得到比較好的結果
link |
15:41.000
那至於需要用多少的HEAD
link |
15:43.000
這個又是另外一個hyperparameter
link |
15:46.000
也是你需要調的
link |
15:48.000
那為什麼我們會需要比較多的HEAD呢
link |
15:51.000
你可以想成說相關這件事情
link |
15:54.000
我們說我們在做這個SELF ATTENTION的時候
link |
15:57.000
我們就是用Q去找相關的K
link |
16:02.000
但是相關這件事情
link |
16:04.000
有很多種不同的形式
link |
16:06.000
有很多種不同的定義
link |
16:09.000
所以也許我們不能只有一個Q
link |
16:12.000
我們應該要有多個Q
link |
16:14.000
不同的Q負責不同種類的相關性
link |
16:19.000
所以假設你要做MULTIHEAD SELF ATTENTION的話
link |
16:23.000
你會怎麼操作呢
link |
16:24.000
你可能會這麼操作
link |
16:26.000
你先把A乘上一個矩陣得到Q
link |
16:29.000
接下來你再把Q乘上另外兩個矩陣
link |
16:34.000
分別得到Q1跟Q2
link |
16:38.000
那這邊還有
link |
16:39.000
這邊是有兩個上標啦
link |
16:41.000
I代表的是位置
link |
16:42.000
然後這個1跟2代表是這個位置的第幾個Q
link |
16:47.000
所以這邊有QI1跟QI2
link |
16:49.000
代表說我們有兩個HEAD
link |
16:51.000
我們認為這個問題
link |
16:52.000
裡面有兩種不同的相關性
link |
16:54.000
所以我們需要產生兩種不同的HEAD
link |
16:56.000
來找兩種不同的相關性
link |
16:59.000
那既然Q有兩個
link |
17:02.000
那K也就要有兩個
link |
17:05.000
那B也就要有兩個
link |
17:07.000
那怎麼從Q得到Q1Q2
link |
17:10.000
怎麼從K得到K1K2
link |
17:12.000
怎麼從B得到V1V2
link |
17:14.000
那其實就是把Q把K把B
link |
17:17.000
分別乘上兩個矩陣
link |
17:18.000
兩個矩陣兩個矩陣
link |
17:20.000
得到不同的HEAD
link |
17:24.000
就這樣子而已
link |
17:26.000
好那所以對另外一個位置
link |
17:28.000
也做一樣的事情
link |
17:30.000
另外一個位置AJ輸入以後
link |
17:32.000
他也會得到兩個Q兩個K兩個V
link |
17:35.000
那接下來怎麼做SELF ATTENTION呢
link |
17:38.000
跟我們之前講的操作是一模一樣的
link |
17:40.000
只是現在呢
link |
17:41.000
1那一類的一起做
link |
17:44.000
2那一類的一起做
link |
17:46.000
也就是這個Q1
link |
17:48.000
他在算這個ATTENTION的分數的時候
link |
17:51.000
他就不要管那個K2了
link |
17:53.000
不要管K2
link |
17:54.000
他就只管K1就好
link |
17:56.000
只管K1就好
link |
17:57.000
所以QI1就跟KI1算個ATTENTION
link |
18:00.000
QI1就跟KJ1算個ATTENTION
link |
18:02.000
也就是算這個DOUBLE DOT
link |
18:05.000
然後呢得到這個ATTENTION的分數
link |
18:08.000
然後今天在做WEIGHTED SUM的時候
link |
18:09.000
也不要管V2了
link |
18:10.000
也不要管V2了
link |
18:11.000
看VI1跟VJ1就好
link |
18:14.000
所以你把ATTENTION的分數
link |
18:15.000
乘VI1把ATTENTION的分數
link |
18:17.000
乘VJ1
link |
18:19.000
然後接下來就得到VI1
link |
18:23.000
那你得到VI1以後呢
link |
18:25.000
這邊只用了其中一個HEAD
link |
18:27.000
那你會用另外一個HEAD
link |
18:29.000
也做一模一樣的事情
link |
18:31.000
所以Q2只對K2做ATTENTION
link |
18:33.000
Q2只對K2做ATTENTION
link |
18:35.000
他們在做WEIGHTED SUM的時候
link |
18:37.000
只對V2做WEIGHTED SUM
link |
18:39.000
然後接下來呢
link |
18:40.000
你就得到VI2
link |
18:42.000
如果你有多個HEAD
link |
18:43.000
有8個HEAD
link |
18:44.000
有16個HEAD
link |
18:45.000
那也是一樣的操作
link |
18:46.000
那這邊呢是用兩個HEAD
link |
18:49.000
來當作例子
link |
18:50.000
來給你看看有兩個HEAD的時候
link |
18:52.000
是怎麼操作的
link |
18:54.000
現在得到VI1跟VI2
link |
18:57.000
然後接下來呢
link |
18:58.000
你可能會把VI1跟VI2
link |
19:00.000
把他接起來
link |
19:01.000
然後再通過一個TRANSFORM
link |
19:03.000
也就是再乘上一個矩陣
link |
19:05.000
然後得到VI
link |
19:06.000
然後再送到下一層去
link |
19:08.000
那這個呢
link |
19:09.000
就是MULTIHEAD ATTENTION
link |
19:11.000
一個這個SELF ATTENTION的變形
link |
19:15.000
那講到目前為止
link |
19:17.000
你會發現說
link |
19:18.000
SELF ATTENTION的這個LAYER
link |
19:20.000
他少了一個
link |
19:22.000
也許很重要的資訊
link |
19:23.000
這個資訊是什麼呢
link |
19:25.000
這個資訊是未知的資訊
link |
19:28.000
你想想看
link |
19:29.000
對一個SELF ATTENTION而言
link |
19:31.000
對一個SELF ATTENTION LAYER而言
link |
19:33.000
每一個INPUT
link |
19:35.000
他是出現在SEQUENCE的最前面
link |
19:38.000
還是最後面
link |
19:39.000
他是完全沒有這個資訊的
link |
19:42.000
對不對
link |
19:43.000
你可能會說
link |
19:44.000
現在不是說INPUT
link |
19:45.000
就是有位置1 2 3 4嗎
link |
19:47.000
但是那個1 2 3 4
link |
19:48.000
是我們畫在投影片上的時候
link |
19:51.000
為了幫助大家理解
link |
19:52.000
所標上的一個編號
link |
19:54.000
你想想看對SELF ATTENTION而言
link |
19:56.000
那個位置1跟位置2
link |
19:58.000
跟位置3跟位置4
link |
19:59.000
有任何差別嗎
link |
20:01.000
完全沒有任何差別對不對
link |
20:03.000
這四個位置的操作
link |
20:04.000
其實是一模一樣的
link |
20:07.000
對他來說
link |
20:08.000
Q1到跟Q4的距離
link |
20:11.000
並沒有特別遠
link |
20:12.000
2跟4的距離並沒有特別遠
link |
20:14.000
2跟3的距離也沒有特別近
link |
20:17.000
對他來說就是天涯絡必臨
link |
20:20.000
所有的位置之間的距離
link |
20:21.000
都是一樣的
link |
20:22.000
沒有任何一個位置距離比較遠
link |
20:24.000
也沒有任何位置距離比較近
link |
20:26.000
也沒有誰在
link |
20:27.000
整個SEQUENCE的最前面
link |
20:29.000
也沒有誰在整個SEQUENCE的最後面
link |
20:32.000
但是這樣子設計
link |
20:34.000
可能會有一些問題
link |
20:35.000
因為有時候位置的資訊
link |
20:37.000
也許很重要啊
link |
20:38.000
舉例來說
link |
20:39.000
我們在做這個POS TAGGING
link |
20:41.000
就是詞性標記的時候
link |
20:43.000
也許你知道說
link |
20:44.000
動詞比較不容易出現在句首
link |
20:47.000
所以如果我們知道說
link |
20:48.000
某一個詞彙它是放在句首的
link |
20:51.000
那它是動詞的可能性
link |
20:52.000
可能就比較低
link |
20:53.000
會不會這樣子的位置的資訊
link |
20:55.000
往往也是有用的啊
link |
20:57.000
可是在我們到目前為止
link |
20:58.000
講的SELF ATTENTION的操作裡面
link |
21:00.000
它根本就沒有位置的資訊
link |
21:04.000
所以怎麼辦呢
link |
21:05.000
所以你做SELF ATTENTION的時候
link |
21:07.000
如果你覺得位置的資訊
link |
21:09.000
是一個重要的事情
link |
21:10.000
那你可以把位置的資訊
link |
21:13.000
把它塞進去
link |
21:15.000
怎麼把位置的資訊塞進去呢
link |
21:17.000
這邊就要用到一個
link |
21:18.000
叫做POSITIONAL ENCODING的技術
link |
21:21.000
這個技術是這樣子的
link |
21:22.000
你為每一個位置
link |
21:25.000
設定一個Vector
link |
21:28.000
叫做POSITIONAL VECTOR
link |
21:30.000
這邊用EI來表示
link |
21:32.000
上標I代表的是位置
link |
21:35.000
每一個不同的位置
link |
21:36.000
就有不同的Vector
link |
21:39.000
E1是一個Vector
link |
21:40.000
E2是一個Vector
link |
21:41.000
E28是一個Vector
link |
21:43.000
不同的位置
link |
21:44.000
都有一個它專屬的E
link |
21:47.000
然後把這個E
link |
21:48.000
加到AI上面
link |
21:50.000
就結束了
link |
21:52.000
就結束了
link |
21:53.000
你等於就是
link |
21:54.000
告訴你的SELF ATTENTION
link |
21:55.000
位置的資訊
link |
21:56.000
如果它看到說
link |
21:57.000
AI好像有被加上EI
link |
21:59.000
它就知道說
link |
22:00.000
現在出現的位置
link |
22:01.000
應該是在I這個位置
link |
22:04.000
那這個EI長什麼樣子呢
link |
22:06.000
最早的TRANSFORMER
link |
22:09.000
ATTENTION IS ALL YOU NEED
link |
22:10.000
那篇PAPER裡面
link |
22:11.000
它用的EI
link |
22:12.000
長的是這個樣子
link |
22:14.000
這邊這個圖上面
link |
22:16.000
每一個COLUMN
link |
22:18.000
就代表一個E
link |
22:21.000
第一個位置就是E1
link |
22:23.000
第二個位置就是E2
link |
22:25.000
第三個位置就是E3
link |
22:27.000
以此類推
link |
22:29.000
所以它就是把
link |
22:30.000
這邊這個向量
link |
22:32.000
放在第一個位置
link |
22:34.000
把這個向量
link |
22:36.000
加到第二個位置的A上
link |
22:37.000
把這個向量
link |
22:38.000
加到第三個位置的A上
link |
22:40.000
以此類推
link |
22:41.000
每一個位置
link |
22:42.000
都有一個專屬的E
link |
22:43.000
希望透過
link |
22:44.000
給每一個位置不同的E
link |
22:45.000
你的MODEL
link |
22:46.000
在處理這個INPUT的時候
link |
22:48.000
它可以知道
link |
22:49.000
現在的INPUT
link |
22:50.000
它的位置的資訊
link |
22:51.000
是什麼樣子
link |
22:53.000
那這樣子的
link |
22:56.000
POSITIONAL VECTOR
link |
22:57.000
它是HANDCRAFTED
link |
22:59.000
也就是它是人設的
link |
23:01.000
那人設的VECTOR
link |
23:02.000
有很多問題
link |
23:03.000
假設我現在
link |
23:04.000
在定這個VECTOR的時候
link |
23:05.000
只定到128
link |
23:06.000
那我現在SEQUENCE的長度
link |
23:07.000
如果是129
link |
23:08.000
我怎麼辦呢
link |
23:09.000
不過今天在
link |
23:10.000
最早的那個
link |
23:11.000
ATTENTIONS OVNI的PAPER
link |
23:12.000
裡面比較沒有這個問題
link |
23:13.000
它這個VECTOR
link |
23:14.000
是透過某一個規則
link |
23:17.000
所產生的
link |
23:19.000
透過一個很神奇的
link |
23:20.000
SINE COSINE的FUNCTION
link |
23:22.000
所產生的
link |
23:23.000
那當然你又會有新的問題
link |
23:25.000
為什麼是SINE跟COSINE呢
link |
23:26.000
為什麼不是別的東西呢
link |
23:27.000
為什麼一定要
link |
23:28.000
這樣產生HANDCRAFTED的
link |
23:30.000
這個POSITIONAL VECTOR呢
link |
23:31.000
其實你不一定要這麼產生
link |
23:33.000
這個POSITIONAL ENCODING
link |
23:35.000
仍然是一個
link |
23:36.000
上代研究的問題
link |
23:37.000
你可以創造自己新的方法
link |
23:40.000
或甚至POSITIONAL ENCODING
link |
23:42.000
是可以根據資料
link |
23:44.000
學出來的
link |
23:47.000
好 那有關
link |
23:48.000
POSITIONAL ENCODING呢
link |
23:49.000
你可以再參考一下文獻
link |
23:51.000
這個是一個
link |
23:52.000
上代研究的問題
link |
23:53.000
比如說我這邊
link |
23:54.000
引用了一篇
link |
23:55.000
這個是去年
link |
23:57.000
放在ARCHIVE上的論文
link |
23:59.000
所以你可以想見
link |
24:00.000
這其實都是很新的論文
link |
24:02.000
裡面就是比較了
link |
24:03.000
跟提出了
link |
24:04.000
新的POSITIONAL ENCODING
link |
24:06.000
比如說這個是
link |
24:07.000
最早的POSITIONAL ENCODING
link |
24:09.000
它是用一個
link |
24:10.000
神奇的SINE FUNCTION
link |
24:11.000
所產生的
link |
24:12.000
那如果你的POSITIONAL ENCODING
link |
24:14.000
你把POSITIONAL ENCODING
link |
24:15.000
裡面的述詞
link |
24:16.000
當作NETWORK參數的一部分
link |
24:18.000
直接認出來
link |
24:19.000
看起來是這個樣子的
link |
24:22.000
這個圖是橫著看的
link |
24:24.000
它是橫著看的
link |
24:25.000
它是每一個ROW
link |
24:26.000
代表一個POSITION
link |
24:28.000
這個是最原始的
link |
24:30.000
用SINE FUNCTION產生的
link |
24:32.000
這個是認出來的
link |
24:34.000
它裡面又有神奇的做法
link |
24:36.000
比如說這個
link |
24:37.000
這個是用RNN生出來的
link |
24:39.000
POSITIONAL ENCODING
link |
24:40.000
是用RNN生出來的
link |
24:42.000
這篇PAPER提出來的
link |
24:43.000
叫做FLOTTER
link |
24:44.000
是用一個神奇的
link |
24:45.000
NETWORK生出來的
link |
24:46.000
總之你有各式各樣
link |
24:48.000
不同的方法
link |
24:49.000
來產生POSITIONAL ENCODING
link |
24:51.000
那目前
link |
24:52.000
我們還不知道
link |
24:53.000
哪一種方法最好
link |
24:54.000
這是一個上代研究中的問題
link |
24:56.000
所以你不用糾結說
link |
24:57.000
為什麼SINUSOIDO最好
link |
24:58.000
你永遠可以提出新的做法
link |
25:02.000
那這個SELF ATTENTION
link |
25:03.000
當然是用得很廣啦
link |
25:04.000
我們已經提過很多次
link |
25:06.000
TRANSFORMER這個東西
link |
25:07.000
那我們大家也都知道說
link |
25:09.000
在NLP的領域
link |
25:10.000
有一個東西叫做BERT
link |
25:11.000
BERT裡面也用到SELF ATTENTION
link |
25:14.000
所以SELF ATTENTION
link |
25:15.000
在NLP上面的應用
link |
25:17.000
是大家都耳熟能詳的
link |
25:19.000
但SELF ATTENTION
link |
25:20.000
不是只能用在
link |
25:22.000
NLP相關的應用上
link |
25:24.000
它還可以用在
link |
25:25.000
很多其他的問題上
link |
25:26.000
比如說在做語音的時候
link |
25:28.000
你也可以用SELF ATTENTION
link |
25:31.000
不過在做語音的時候
link |
25:33.000
用SELF ATTENTION
link |
25:34.000
你可能會希望對SELF ATTENTION
link |
25:36.000
做一些小小的改動
link |
25:38.000
舉例來說
link |
25:39.000
因為一般語音的
link |
25:41.000
如果你要把一段聲音訊號
link |
25:43.000
表示成一排像量的話
link |
25:45.000
這排像量可能會非常的長
link |
25:48.000
因為我們之前有說過說
link |
25:50.000
在做語音辨識的時候
link |
25:52.000
你要把聲音訊號
link |
25:53.000
表示成一排像量
link |
25:54.000
而每一個像量
link |
25:56.000
其實只代表了
link |
25:57.000
10ms的長度而已
link |
26:00.000
所以如果今天是
link |
26:01.000
1秒鐘的聲音訊號
link |
26:04.000
它就有100個像量了
link |
26:06.000
5秒鐘的聲音訊號
link |
26:07.000
就500個像量了
link |
26:08.000
你隨便講一句話
link |
26:09.000
都是上千個像量了
link |
26:10.000
所以一段聲音訊號
link |
26:11.000
你要描述它的時候
link |
26:13.000
這個vector的sequence
link |
26:15.000
它的長度是非常可觀的
link |
26:18.000
那可觀的sequence
link |
26:19.000
可觀的長度
link |
26:20.000
會造成什麼問題呢
link |
26:21.000
你想想看我們今天
link |
26:22.000
在計算這個attention matrix的時候
link |
26:25.000
它的complexity
link |
26:26.000
是長度的平方
link |
26:29.000
你要計算這個
link |
26:30.000
attention matrix A'
link |
26:32.000
你需要做
link |
26:33.000
L乘以L次的inner product
link |
26:37.000
那如果這個L的值很大的話
link |
26:39.000
它的計算量就很可觀
link |
26:41.000
如果L很大的話
link |
26:42.000
你也需要很大的memory
link |
26:45.000
才能夠把這個矩陣存下來
link |
26:47.000
所以今天如果在做
link |
26:49.000
語音辨識的時候
link |
26:50.000
你講一句話
link |
26:51.000
那一句話所產生的
link |
26:53.000
這個attention matrix
link |
26:54.000
可能會太大
link |
26:55.000
大到你根本就不容易處理
link |
26:57.000
不容易訓練
link |
26:59.000
所以怎麼辦呢
link |
27:00.000
在做語音的時候
link |
27:01.000
有一招叫做
link |
27:02.000
truncated self-attention
link |
27:05.000
truncated self-attention
link |
27:06.000
做的事情就是
link |
27:07.000
我們今天在做
link |
27:08.000
self-attention的時候
link |
27:09.000
不要看一整句話
link |
27:12.000
我們就只看
link |
27:13.000
一個小的範圍就好
link |
27:16.000
至於這個範圍應該要多大
link |
27:18.000
那個是人設定的
link |
27:20.000
但為什麼我們知道說
link |
27:22.000
今天在做語音辨識的時候
link |
27:23.000
也許只需要看一個
link |
27:25.000
小的範圍就好
link |
27:26.000
那就是取決於
link |
27:27.000
你對這個問題的理解
link |
27:29.000
也許我們要辨識
link |
27:30.000
這個位置有什麼樣的phoning
link |
27:32.000
這個位置有什麼樣的內容
link |
27:34.000
我們並不需要看整句話
link |
27:35.000
只要看這句話
link |
27:37.000
跟它前後
link |
27:38.000
一定範圍之內的資訊
link |
27:40.000
其實就可以判斷
link |
27:41.000
所以如果在做
link |
27:42.000
self-attention的時候
link |
27:43.000
也許沒有必要
link |
27:44.000
看過一整個句子
link |
27:46.000
也許沒有必要
link |
27:47.000
讓self-attention
link |
27:48.000
考慮一整個句子
link |
27:49.000
也許只需要考慮
link |
27:50.000
一個小範圍就好
link |
27:52.000
這樣就可以加快
link |
27:53.000
運算的速度
link |
27:55.000
這個是truncated的self-attention
link |
27:59.000
那其實self-attention
link |
28:00.000
還可以被用在影像上
link |
28:03.000
self-attention
link |
28:04.000
怎麼被用在影像上呢
link |
28:06.000
那到目前為止
link |
28:07.000
我們在講self-attention的時候
link |
28:08.000
我們都說
link |
28:09.000
self-attention適用的範圍
link |
28:11.000
是輸入是一排像量的時候
link |
28:13.000
輸入是一個
link |
28:14.000
vector set的時候
link |
28:16.000
它適合使用self-attention
link |
28:19.000
那我們之前在講CNN的時候
link |
28:21.000
我們是跟大家說
link |
28:22.000
影像
link |
28:23.000
一張圖片
link |
28:24.000
我們把它看作是一個
link |
28:25.000
很長的像量
link |
28:27.000
那其實一張圖片
link |
28:28.000
我們也可以換一個觀點
link |
28:30.000
把它看作是一個
link |
28:32.000
vector set
link |
28:33.000
怎麼把一張圖片
link |
28:34.000
看作是一個vector set呢
link |
28:36.000
這個是一個
link |
28:37.000
解析度5x10的圖片
link |
28:39.000
那這張圖片呢
link |
28:41.000
可以看作是一個tensor
link |
28:43.000
這個tensor的大小
link |
28:44.000
是5x10x3
link |
28:46.000
3代表RGB這三個channel
link |
28:49.000
那你可以把
link |
28:50.000
每一個位置的pixel
link |
28:52.000
看作是一個
link |
28:53.000
三維的像量
link |
28:55.000
所以每一個pixel
link |
28:56.000
其實就是一個
link |
28:57.000
三維的像量
link |
28:58.000
那整張圖片
link |
28:59.000
其實就是
link |
29:00.000
5x10個像量
link |
29:02.000
所以我們其實可以
link |
29:03.000
換一個角度來看
link |
29:04.000
影像這個東西
link |
29:06.000
影像這個東西
link |
29:07.000
其實也是一個vector set
link |
29:09.000
它既然也是一個vector set的話
link |
29:11.000
你完全可以用
link |
29:12.000
self-attention來處理一張圖片
link |
29:15.000
那有沒有人用
link |
29:16.000
self-attention來處理一張圖片呢
link |
29:18.000
是有的
link |
29:19.000
那這邊就舉了兩個例子
link |
29:21.000
來給大家參考
link |
29:23.000
那現在把self-attention
link |
29:24.000
用在影像處理上
link |
29:26.000
也不算是一個
link |
29:27.000
非常石破天驚的事情
link |
29:31.000
那我們可以來比較一下
link |
29:32.000
self-attention跟CNN之間
link |
29:34.000
有什麼樣的差異
link |
29:36.000
或者是關聯性
link |
29:39.000
如果我們今天
link |
29:40.000
是用self-attention來處理一張圖片
link |
29:42.000
代表說
link |
29:43.000
假設這個是
link |
29:44.000
你要考慮的pixel
link |
29:46.000
那它產生query
link |
29:48.000
其他pixel產生key
link |
29:54.000
它產生query
link |
29:55.000
其他pixel產生key
link |
29:57.000
你今天在做inner product的時候
link |
29:59.000
你考慮的
link |
30:00.000
不是一個小範圍的資訊
link |
30:02.000
而是整張影像的資訊
link |
30:06.000
但是今天在做CNN的時候
link |
30:09.000
記不記得我們上上週講的
link |
30:11.000
CNN會畫出一個receptive field
link |
30:13.000
每一個filter 每一個neural
link |
30:15.000
只考慮receptive field範圍裡面的資訊
link |
30:20.000
所以如果我們比較
link |
30:21.000
CNN跟self-attention的話
link |
30:23.000
我們可以說
link |
30:24.000
CNN是什麼
link |
30:25.000
CNN可以看作是一種
link |
30:27.000
簡化版的self-attention
link |
30:29.000
因為在做CNN的時候
link |
30:31.000
我們只考慮
link |
30:32.000
receptive field裡面的資訊
link |
30:34.000
而在做self-attention的時候
link |
30:36.000
我們是考慮整張圖片的資訊
link |
30:39.000
所以CNN是簡化版的self-attention
link |
30:43.000
或者是你可以反過來說
link |
30:45.000
self-attention是一個複雜化的CNN
link |
30:48.000
在CNN裡面
link |
30:49.000
我們要畫定receptive field
link |
30:51.000
每一個neural只考慮
link |
30:52.000
receptive field裡面的資訊
link |
30:54.000
而receptive field的範圍跟大小
link |
30:56.000
是人決定的
link |
30:58.000
我記得我們上上週
link |
30:59.000
還花了一些時間講一下說
link |
31:01.000
receptive field有什麼樣可能的設計
link |
31:04.000
而對self-attention而言
link |
31:06.000
我們用attention去找出相關的pixel
link |
31:10.000
就好像是receptive field
link |
31:12.000
是自動被學出來的
link |
31:14.000
Neo自己決定說
link |
31:16.000
receptive field的形狀長什麼樣子
link |
31:18.000
Neo自己決定說
link |
31:20.000
以這個pixel為中心
link |
31:21.000
哪些pixel是我們真正需要考慮的
link |
31:24.000
哪些pixel是相關的
link |
31:27.000
所以receptive field的範圍
link |
31:29.000
不再是人工畫定
link |
31:30.000
而是讓機器自己學出來
link |
31:33.000
這邊講的是self-attention跟CNN的關係
link |
31:36.000
其實你可以讀一篇paper
link |
31:38.000
叫做On the relationship between self-attention and convolutional layer
link |
31:41.000
這篇paper裡面會用數學的方式
link |
31:44.000
嚴謹的告訴你說
link |
31:46.000
其實這個CNN就是self-attention的特例
link |
31:51.000
self-attention只要設定合適的參數
link |
31:54.000
它可以做到跟CNN一模一樣的事情
link |
31:58.000
所以CNN它的function set長這個樣子
link |
32:02.000
而self-attention它的function set長這個樣子
link |
32:05.000
所以self-attention是更flexible的CNN
link |
32:09.000
而CNN是有受限制的self-attention
link |
32:13.000
self-attention只要透過某些設計
link |
32:16.000
某些限制
link |
32:17.000
它就會變成CNN
link |
32:19.000
那這也不是很舊的paper
link |
32:20.000
你發現它放到網路上的時間是19年的11月
link |
32:24.000
所以你知道這些
link |
32:25.000
我們今天上課裡面講的東西
link |
32:27.000
其實都是很新的資訊
link |
32:29.000
既然CNN是self-attention的一個subset
link |
32:34.000
self-attention比較flexible
link |
32:36.000
那記不記得我們在講overfitting的時候
link |
32:38.000
我們講說比較flexible的model
link |
32:41.000
比較需要更多的data
link |
32:43.000
如果你data不夠
link |
32:44.000
就有可能overfitting
link |
32:47.000
而小的model
link |
32:48.000
而比較有限制的model
link |
32:50.000
它適合在data少的時候
link |
32:52.000
它可能比較不會overfitting
link |
32:55.000
那如果這個限制設得好
link |
32:56.000
也會有不錯的結果
link |
32:58.000
如果你今天用不同的data量
link |
33:00.000
來訓練CNN跟self-attention
link |
33:03.000
你確實可以看到我剛才講的現象
link |
33:06.000
那這個實驗結果
link |
33:08.000
來自於An image is worth 16x16 words
link |
33:12.000
這個是Google的paper
link |
33:14.000
它就是把這個self-attention
link |
33:16.000
apply在影像上面
link |
33:18.000
那其實把一張影像
link |
33:19.000
拆成16x16個patch
link |
33:22.000
然後它把每一個patch
link |
33:24.000
就想像成是一個word
link |
33:26.000
因為一般我們這個self-attention
link |
33:27.000
比較常用在NLP上面
link |
33:29.000
所以它就說想像每一個patch
link |
33:30.000
其實就是一個word
link |
33:32.000
所以它就取了一個
link |
33:33.000
很fancy的title
link |
33:34.000
叫做一張圖值16x16個文字
link |
33:38.000
那這個橫軸是什麼
link |
33:39.000
橫軸是訓練的影像的量
link |
33:42.000
那你發現說對Google來說
link |
33:44.000
用的所謂的資料量比較少
link |
33:46.000
也是你沒有辦法用的資料量
link |
33:48.000
這邊有10個million
link |
33:50.000
1000萬張圖
link |
33:51.000
是資料量比較小的setting
link |
33:54.000
然後資料量比較大的setting
link |
33:56.000
有3億張圖片
link |
33:58.000
在這個實驗裡面
link |
34:00.000
比較了self-attention
link |
34:01.000
是淺藍色的這條線
link |
34:03.000
跟CNN是深灰色的這條線
link |
34:07.000
那你就會發現說
link |
34:08.000
隨著資料量越來越多
link |
34:10.000
那self-attention的結果
link |
34:12.000
就越來越好
link |
34:14.000
最終在資料量最多的時候
link |
34:16.000
self-attention可以超過CNN
link |
34:19.000
但在資料量少的時候
link |
34:21.000
CNN它是可以比self-attention
link |
34:24.000
得到更好的結果的
link |
34:26.000
那為什麼會這樣
link |
34:27.000
你就可以從CNN跟self-attention
link |
34:30.000
它們的彈性來加以解釋
link |
34:33.000
這個self-attention
link |
34:34.000
它彈性比較大
link |
34:35.000
所以需要比較多的訓練資料
link |
34:37.000
訓練資料少的時候
link |
34:38.000
就會overbeating
link |
34:39.000
而CNN它彈性比較小
link |
34:41.000
在訓練資料少的時候
link |
34:42.000
結果比較好
link |
34:43.000
但訓練資料多的時候
link |
34:44.000
它沒有辦法從更大量的訓練資料
link |
34:47.000
得到好處
link |
34:48.000
所以這個就是self-attention
link |
34:50.000
跟CNN的比較
link |
34:53.000
那你可能問說
link |
34:54.000
那self-attention跟CNN誰比較好呢
link |
34:56.000
我應該選哪一個呢
link |
34:58.000
事實上你也可以都用對不對
link |
35:00.000
在我們作業室裡面
link |
35:01.000
如果你要做strong baseline的話
link |
35:03.000
就特別給你一個提示
link |
35:04.000
就是用conformer
link |
35:06.000
裡面就是有用到self-attention
link |
35:08.000
也有用到CNN
link |
35:11.000
好那我們來比較一下
link |
35:13.000
self-attention跟RNN
link |
35:15.000
RNN就是recurrent neural network
link |
35:18.000
那其實在這門課裡面呢
link |
35:19.000
我們現在就不會講到
link |
35:21.000
recurrent neural network
link |
35:22.000
因為recurrent neural network的角色
link |
35:24.000
很大一部分都可以
link |
35:25.000
用self-attention來取代了
link |
35:27.000
所以在這門課裡面
link |
35:28.000
我們就不會再特別把RNN拿出來講
link |
35:32.000
但是RNN是什麼呢
link |
35:33.000
假設你想知道的話
link |
35:34.000
那這邊很快的三言兩語
link |
35:36.000
把它帶過去
link |
35:37.000
RNN跟self-attention一樣
link |
35:39.000
都是要處理input
link |
35:41.000
是一個sequence的狀況
link |
35:44.000
那在RNN裡面呢
link |
35:45.000
這是你的input sequence
link |
35:47.000
你有一個memory的vector
link |
35:49.000
然後你有一個RNN的block
link |
35:52.000
這個RNN的block呢
link |
35:53.000
它持memory的vector
link |
35:55.000
持第一個input的vector
link |
35:56.000
然後output一個東西
link |
35:58.000
然後根據這個output的東西
link |
36:00.000
我們通常叫做
link |
36:01.000
這個hidden layer的output
link |
36:05.000
然後通過這個fully connected network
link |
36:07.000
然後再去做你想要的prediction
link |
36:09.000
那RNN這個module呢
link |
36:11.000
接下來當第二個
link |
36:13.000
這個sequence裡面
link |
36:14.000
第二個vector作為input的時候
link |
36:16.000
你會把這個vector
link |
36:18.000
當作input
link |
36:19.000
你會把前一個時間點
link |
36:21.000
吐出來的東西
link |
36:22.000
當作下一個時間點的輸入
link |
36:24.000
再丟進RNN裡面
link |
36:25.000
然後再產生新的vector
link |
36:27.000
再拿去給fully connected network
link |
36:29.000
做你想要做的事情
link |
36:30.000
然後第三個vector進來的時候
link |
36:32.000
你把第三個vector
link |
36:33.000
跟前一個時間點的輸出
link |
36:34.000
一起丟進RNN
link |
36:36.000
再產生新的輸出
link |
36:37.000
然後在第四個時間點
link |
36:39.000
第四個vector輸出的時候
link |
36:40.000
把第四個vector
link |
36:41.000
跟前一個時間點
link |
36:42.000
產生出來的輸出
link |
36:43.000
再一起做處理
link |
36:45.000
得到新的輸出
link |
36:46.000
再通過fully connected的那個
link |
36:48.000
這個就是RNN
link |
36:50.000
recurrent neural network
link |
36:52.000
那你會發現說
link |
36:53.000
它跟self-attention
link |
36:54.000
做的事情
link |
36:55.000
其實也非常像
link |
36:57.000
它們的input
link |
36:58.000
都是一個vector sequence
link |
37:00.000
它們的input
link |
37:01.000
都是一個vector sequence
link |
37:02.000
self-attention
link |
37:03.000
output是另外一個vector sequence
link |
37:05.000
這裡面的每一個vector
link |
37:06.000
都考慮了
link |
37:07.000
整個input的sequence以後
link |
37:09.000
再給fully connected network
link |
37:11.000
去做處理
link |
37:12.000
那RNN呢
link |
37:13.000
它也會output
link |
37:14.000
另外一群vector
link |
37:15.000
這另外一排vector
link |
37:16.000
也會給fully connected network
link |
37:19.000
做進一步的處理
link |
37:20.000
那self-attention跟RNN
link |
37:22.000
有什麼不同呢
link |
37:23.000
當然一個非常顯而易見的不同
link |
37:25.000
你可能會說
link |
37:26.000
這邊的每一個vector
link |
37:28.000
它都考慮了
link |
37:29.000
整個input的sequence
link |
37:30.000
而RNN每一個vector
link |
37:32.000
只考慮了
link |
37:33.000
左邊已經輸入的vector
link |
37:36.000
它沒有考慮右邊的vector
link |
37:38.000
那這是一個很好的觀察
link |
37:40.000
但是RNN其實也可以是
link |
37:42.000
雙向的
link |
37:43.000
所以如果你RNN用雙向的RNN的話
link |
37:46.000
其實這邊的
link |
37:47.000
每一個hidden的output
link |
37:49.000
每一個memory的output
link |
37:50.000
其實也可以看作是
link |
37:52.000
考慮了整個input的sequence
link |
37:55.000
但是假設我們把RNN的output
link |
37:59.000
跟self-attention output
link |
38:00.000
拿來做對比的話
link |
38:02.000
就算你用bi-directional的RNN
link |
38:04.000
還是有一些差別的
link |
38:06.000
對RNN來說
link |
38:07.000
假設最右邊這個黃色的vector
link |
38:10.000
要考慮最左邊的這個輸入
link |
38:13.000
那它必須要把最左邊的輸入
link |
38:16.000
存在memory裡面
link |
38:17.000
然後接下來都不能夠忘掉
link |
38:19.000
一路帶到最右邊
link |
38:20.000
才能夠在最後一個時間點被考慮
link |
38:23.000
但對self-attention來說
link |
38:25.000
沒有這個問題
link |
38:26.000
它只要這邊輸出一個query
link |
38:28.000
這邊輸出一個key
link |
38:29.000
只要它們match的起來
link |
38:31.000
天涯落壁裡
link |
38:32.000
你可以從非常遠的vector
link |
38:34.000
在整個sequence上
link |
38:35.000
非常遠的vector
link |
38:36.000
輕易的抽取資訊
link |
38:38.000
所以這是RNN跟self-attention
link |
38:41.000
一個不一樣的地方
link |
38:42.000
還有另外一個更主要的不同是
link |
38:44.000
RNN今天在處理的時候
link |
38:47.000
你input一排sequence
link |
38:48.000
output一排sequence的時候
link |
38:50.000
RNN是沒有辦法平行化的
link |
38:52.000
你要先產生這個向量
link |
38:54.000
接下來才能產生這個向量
link |
38:55.000
才能產生這個向量
link |
38:56.000
才能產生這個向量
link |
38:58.000
所以RNN
link |
38:59.000
它今天input一排vector
link |
39:01.000
output另外一排vector的時候
link |
39:03.000
它沒有辦法一次處理
link |
39:05.000
沒有辦法平行處理所有的output
link |
39:07.000
但self-attention有一個優勢
link |
39:09.000
是它可以平行處理所有的輸出
link |
39:12.000
你今天input一排vector
link |
39:14.000
在output這四個vector的時候
link |
39:16.000
這四個vector是平行產生的
link |
39:19.000
並不需要等誰先運算完
link |
39:21.000
才把其他人運算出來
link |
39:23.000
output的這個vector
link |
39:24.000
output的這個vector sequence裡面
link |
39:27.000
每一個vector
link |
39:28.000
都是同時產生出來的
link |
39:30.000
所以在運算速度化
link |
39:32.000
運算速度上self-attention
link |
39:34.000
會比RNN更有效率
link |
39:36.000
那你今天發現說
link |
39:37.000
很多的應用
link |
39:39.000
都往往把RNN的架構
link |
39:42.000
逐漸改成self-attention的架構了
link |
39:47.000
如果你想要更進一步了解
link |
39:49.000
RNN跟self-attention的關係的話
link |
39:51.000
你可以看下面這篇文章
link |
39:53.000
Transformers RNN
link |
39:55.000
裡面會告訴你說
link |
39:56.000
self-attention
link |
39:58.000
你加上了什麼東西以後
link |
40:00.000
其實它就變成了RNN
link |
40:03.000
那你發現說
link |
40:04.000
這也不是很舊的paper
link |
40:05.000
這個是去年的六月
link |
40:07.000
放到archive上
link |
40:09.000
所以今天講的
link |
40:10.000
都是一些很新的研究成果
link |
40:14.000
那RNN的部分呢
link |
40:15.000
我們這門課就不會提到
link |
40:17.000
假設你對RNN有興趣的話
link |
40:19.000
以下是這一門課之前的上課錄影
link |
40:22.000
那RNN的部分
link |
40:23.000
因為這次不會講到
link |
40:24.000
所以特別有做了英文的版本
link |
40:26.000
RNN是中文英文版本
link |
40:28.000
都同時有放在YouTube上面的
link |
40:32.000
最後呢
link |
40:33.000
self-attention也可以被用在graph上面
link |
40:37.000
那記得我們在這一堂
link |
40:39.000
這一份投影片一開始的時候
link |
40:40.000
就有跟你說過說
link |
40:42.000
graph也可以看作是一堆vector
link |
40:46.000
那如果是一堆vector
link |
40:48.000
就可以用self-attention來處理
link |
40:50.000
所以self-attention也可以用在graph上面
link |
40:54.000
但是當我們把self-attention
link |
40:56.000
用在graph上面的時候
link |
40:58.000
有什麼樣特別的地方呢
link |
41:00.000
在graph上面呢
link |
41:02.000
我們不只有每一個node
link |
41:04.000
我們每一個node
link |
41:05.000
可以表示成一個向量
link |
41:06.000
但我們不只有node的資訊
link |
41:08.000
我們還有edge的資訊
link |
41:10.000
我們知道哪些node之間
link |
41:12.000
是有相連的
link |
41:14.000
也就是哪些node是有關聯的
link |
41:16.000
我們知道哪些向量間
link |
41:18.000
是有關聯的
link |
41:20.000
那之前我們在做self-attention的時候
link |
41:23.000
所謂的關聯性
link |
41:24.000
是Neo自己找出來的
link |
41:27.000
但是現在既然有了graph的資訊
link |
41:29.000
有了edge的資訊
link |
41:30.000
那關聯性也許就不需要
link |
41:33.000
透過機器自動找出來的
link |
41:35.000
這個圖上面的edge
link |
41:37.000
已經暗示了我們node
link |
41:39.000
跟node之間的關聯性
link |
41:41.000
所以今天當你把self-attention
link |
41:43.000
用在graph上面的時候
link |
41:44.000
你有一個選擇是
link |
41:46.000
你在做這個
link |
41:47.000
attention matrix計算的時候
link |
41:49.000
你可以只計算
link |
41:51.000
有edge相連的node就好了
link |
41:54.000
舉例來說在這個圖上
link |
41:56.000
node1跟node8有相連
link |
41:58.000
那我們只需要計算
link |
42:00.000
node1跟node8這兩個向量
link |
42:03.000
之間的attention的分數
link |
42:05.000
那1跟6有相連
link |
42:06.000
所以只有1跟6之間
link |
42:08.000
需要計算attention的分數
link |
42:09.000
1跟5有相連
link |
42:10.000
所以只有1跟5
link |
42:11.000
需要計算attention的分數
link |
42:12.000
2跟3有相連
link |
42:13.000
所以只有2跟3
link |
42:14.000
需要計算attention的分數
link |
42:16.000
以此類推
link |
42:17.000
那如果兩個node之間沒有相連
link |
42:19.000
那其實很有可能就暗示
link |
42:21.000
我們這兩個node之間
link |
42:23.000
沒有關係
link |
42:24.000
既然沒有關係
link |
42:25.000
我們就不需要再去計算
link |
42:26.000
它的attention score
link |
42:28.000
直接把它設為0就好了
link |
42:30.000
因為這個graph
link |
42:31.000
往往比如說是
link |
42:32.000
人為根據某些
link |
42:33.000
domain knowledge
link |
42:34.000
建出來的
link |
42:35.000
那domain knowledge
link |
42:36.000
告訴我們說
link |
42:37.000
這兩個向量彼此之間
link |
42:38.000
沒有關聯
link |
42:39.000
我們就沒有必要
link |
42:40.000
再用機器去學習這件事情
link |
42:43.000
那其實當我們把
link |
42:44.000
self-attention
link |
42:45.000
按照我們這邊講的
link |
42:46.000
這種限制
link |
42:47.000
用在graph上面的時候
link |
42:49.000
其實就是一種
link |
42:51.000
graph neural network
link |
42:53.000
也就是一種GNN
link |
42:55.000
GNN現在也是一個
link |
42:56.000
很fancy的題目
link |
42:57.000
那我不會說
link |
42:58.000
self-attention就要
link |
42:59.000
囊括了所有GNN的
link |
43:00.000
各種變形啦
link |
43:01.000
但打self-attention
link |
43:03.000
用在graph上面
link |
43:04.000
是某一種類型的
link |
43:06.000
graph neural network
link |
43:07.000
好那這邊呢
link |
43:08.000
一樣我們也沒有辦法
link |
43:09.000
細講啦
link |
43:10.000
GNN這邊坑也是很深啦
link |
43:12.000
這邊水也是很深
link |
43:13.000
那就放一下
link |
43:14.000
助教之前上課的連結
link |
43:16.000
大概花了快
link |
43:18.000
3個小時
link |
43:19.000
在講graph neural network
link |
43:20.000
而且其實還沒有講完
link |
43:21.000
就告訴你說
link |
43:22.000
這個graph neural network
link |
43:23.000
也是有非常深的技術
link |
43:25.000
這邊水也是很深
link |
43:26.000
那這不是我們
link |
43:27.000
今天這一堂課
link |
43:28.000
可以講的內容
link |
43:30.000
好那其實
link |
43:31.000
這個self-attention
link |
43:32.000
它有非常非常多的變形
link |
43:36.000
你可以看一篇paper
link |
43:37.000
叫做Long Range Arena
link |
43:39.000
裡面比較了各種
link |
43:41.000
不同的
link |
43:42.000
self-attention的變形
link |
43:43.000
因為self-attention
link |
43:44.000
它最大的問題就是
link |
43:46.000
它的運算量
link |
43:47.000
非常的大
link |
43:48.000
所以怎麼樣減少
link |
43:49.000
self-attention的運算量
link |
43:51.000
是一個未來的重點
link |
43:52.000
可以看到這邊
link |
43:53.000
有各種各式各樣
link |
43:54.000
self-attention的變形
link |
43:56.000
那self-attention
link |
43:57.000
最早是用在
link |
43:58.000
transformer上面
link |
43:59.000
所以很多人講
link |
44:00.000
transformer的時候
link |
44:01.000
其實它指的就是
link |
44:03.000
這個self-attention
link |
44:04.000
有人說廣義的transformer
link |
44:06.000
指的就是self-attention
link |
44:08.000
那所以後來
link |
44:09.000
各式各樣的
link |
44:10.000
self-attention的變形
link |
44:11.000
都叫做是什麼former
link |
44:13.000
比如說linformer
link |
44:14.000
performer
link |
44:15.000
reformer等等
link |
44:17.000
所以self-attention的變形
link |
44:18.000
現在都叫做XXformer
link |
44:20.000
那可以看到說
link |
44:22.000
往右代表它運算的速度
link |
44:25.000
所以有很多各式各樣
link |
44:26.000
新的XXformer
link |
44:28.000
它們的速度
link |
44:29.000
會比原來的transformer快
link |
44:31.000
但是快的速度
link |
44:32.000
帶來的就是performance變差
link |
44:34.000
這個縱軸代表是performance
link |
44:36.000
所以它們往往比
link |
44:37.000
原來的transformer
link |
44:38.000
performance差一點
link |
44:39.000
但是速度會比較快
link |
44:42.000
那到底什麼樣的self-attention
link |
44:44.000
才能夠真的又快又好
link |
44:46.000
這仍然是一個
link |
44:47.000
上代研究的問題
link |
44:49.000
如果你對self-attention
link |
44:51.000
想要進一步研究的話
link |
44:52.000
你還可以看一下
link |
44:53.000
Efficient Transformer
link |
44:54.000
這篇paper
link |
44:55.000
裡面會跟你介紹
link |
44:57.000
各式各樣
link |
44:58.000
self-attention的變形
link |
45:00.000
那這個就不是
link |
45:01.000
我們這一門課
link |
45:02.000
可以講的東西了
link |
45:03.000
我們就停在這邊
link |
45:06.000
那接下來呢
link |
45:07.000
就是看一下各位同學
link |
45:09.000
有沒有問題想要問的
link |
45:13.000
大家有問題想要問的嗎
link |
45:17.000
線上有問題想要問的嗎
link |
45:24.000
以後我們就是
link |
45:25.000
放這一頁Q&A的時候
link |
45:26.000
就是讓大家問問題的時候
link |
45:28.000
那這樣之後呢
link |
45:29.000
助教要把
link |
45:30.000
你知道這個影片
link |
45:31.000
我們要拿去找人聽打
link |
45:33.000
聽打以後還要做翻譯
link |
45:35.000
然後之後這個
link |
45:36.000
Q&A這個部分
link |
45:37.000
在聽打的時候
link |
45:38.000
就會不用聽打
link |
45:40.000
就不聽打
link |
45:41.000
所以特別放一頁投影片
link |
45:43.000
這樣以後助教比較知道
link |
45:44.000
哪個地方就不用聽打
link |
45:47.000
沒有問題這樣子
link |
45:49.000
link |
45:50.000
如果大家沒有問題的話
link |
45:52.000
那我們在這邊呢
link |
45:53.000
還是先下課十分鐘
link |
45:55.000
十分鐘以後再回來