back to index

[DLHLP 2020] Speech Recognition (6/7) - RNN-T Training (optional)


link |
00:00.000
整理&字幕由Amara.org社區提供
link |
00:30.000
整理&字幕由Amara.org社區提供
link |
01:00.000
整理&字幕由Amara.org社區提供
link |
01:30.000
整理&字幕由Amara.org社區提供
link |
02:00.000
整理&字幕由Amara.org社區提供
link |
02:30.000
整理&字幕由Amara.org社區提供
link |
03:00.000
整理&字幕由Amara.org社區提供
link |
03:30.000
L0 跟 H1 丟到 decoder 裡面去
link |
03:33.060
那 decoder 產生一個 probability distribution
link |
03:36.940
這個 probability distribution
link |
03:38.740
我們用 P 下標 1 下標 0 來表示
link |
03:42.100
下標 1 下標 0 是什麼意思呢
link |
03:44.600
下標 1 下標 0 的意思我們這邊就表示是說
link |
03:47.400
它吃第一個 acoustic feature
link |
03:49.640
沒產生任何東西的時候
link |
03:51.840
RNT 產生出來的 probability distribution
link |
03:55.300
這是 P10
link |
03:56.640
它吃 H1 代表吃第一個 acoustic feature 當作輸入
link |
04:00.200
這 L0 代表之前沒產生出任何的 token
link |
04:04.440
然後產生一個 distribution 叫做 P1
link |
04:08.400
好那 Phi、Nor 這個 symbol
link |
04:11.340
Phi 放在聚首的機率是什麼呢
link |
04:13.700
這個 Nor 這個 symbol 放在聚首的機率
link |
04:15.940
就是從 P1 裡面去看說
link |
04:18.100
P1 這個 distribution 裡面產生 Nor 的機率是多少
link |
04:21.240
你就知道這個 Nor 放在聚首的機率
link |
04:24.500
接下來我們要計算有了這個 Nor 以後
link |
04:28.000
產生 C 的機率
link |
04:30.500
那這個 Nor 對這一個
link |
04:34.500
上面這個 RNN 而言不會造成任何影響
link |
04:37.340
這個 RNN 它的特色就是
link |
04:38.900
如果底下產生的東西是 Nor 它就不動
link |
04:41.980
底下要產生 token 它才會有所動作
link |
04:45.980
但是產生 Nor 的時候 encoder 這邊會不一樣
link |
04:49.100
產生 Nor 的意思就代表說
link |
04:51.100
這個 acoustic feature 我能夠用的資訊都用盡了
link |
04:54.380
給我下一個 acoustic feature
link |
04:56.380
所以 encoder 就再給你一個 decoder H2
link |
05:00.240
那對左上角這個 L0 來說是不變的
link |
05:03.140
L0 一樣把它接下來
link |
05:05.340
接下來產生 P20
link |
05:07.340
代表說我們已經讀到了第二個 acoustic feature
link |
05:09.940
然後沒有產生任何 token 的時候的一個
link |
05:12.480
probability distribution
link |
05:14.340
接下來呢
link |
05:15.580
給了這個 Phi 產生 C 的機率是多少
link |
05:17.940
你就看這個 distribution 裡面 C 的機率是多少
link |
05:20.680
就結束了
link |
05:21.480
你就看這個 distribution 裡面 C 的機率是多少 算出來
link |
05:25.540
接下來我們來計算有 Phi 有 C 以後
link |
05:27.840
再來產生 Nor 的機率是多少呢
link |
05:30.040
有 Phi 有 C
link |
05:31.740
C 會去影響左上角這個 RN
link |
05:34.740
所以左上角這個 RN 把 C 讀進去
link |
05:37.240
那它 output 就不是 L0 了
link |
05:38.740
它 output 叫做 L1
link |
05:40.340
把 C 讀進去以後 它的輸出有點變了
link |
05:43.200
那 input 的地方 encoder 的地方不變
link |
05:45.880
encoder 的地方沒有看到 Nor
link |
05:47.580
它就一樣仍然是輸入 H2
link |
05:50.640
然後把這個 H2 跟 L1 丟進來
link |
05:53.000
產生 P21
link |
05:53.940
雖然這邊一樣是輸入 H2
link |
05:55.680
這邊也是輸入 H2
link |
05:56.980
但是來自左上角這個 recurrent network
link |
05:59.640
的輸入不一樣了
link |
06:00.540
這邊是 L0 這邊是 L1 不一樣了
link |
06:02.940
所以這邊 output 也是不一樣的 叫做 P21
link |
06:05.540
然後接下來你再看 P21 裡面
link |
06:07.500
出現 Phi 的機率
link |
06:08.900
然後同樣的 process 就一直進行下去
link |
06:11.340
Nor 不影響左上角這個 RN
link |
06:13.640
但是會給你一個新的
link |
06:15.600
從 encoder 那邊給你一個新的 vector 叫 H3
link |
06:18.800
然後 H3 跟 L1 一起產生 P31
link |
06:22.000
然後你再看 P31 產生 Nor 的機率
link |
06:26.480
然後看到 Nor
link |
06:27.480
對左上角還是沒有影響
link |
06:29.280
但是會看 encoder
link |
06:31.280
會再給你一個新的 vector 叫 H4
link |
06:33.340
H4 跟 L1 產生 P41
link |
06:36.240
然後我們再看 P41 產生 A 的機率
link |
06:40.240
P41 裡面 A 的機率
link |
06:42.640
然後有了 A 以後
link |
06:43.900
這個不一樣了
link |
06:44.700
這個 A 會去影響左上角
link |
06:46.700
這個 RN 的輸出
link |
06:48.400
所以看到 A 以後
link |
06:49.840
左上角的這個 RN 被 update 了
link |
06:51.700
它的輸出變了 變成 L2
link |
06:53.800
所以接下來把 L2 接進來
link |
06:55.640
產生 P42
link |
06:57.540
然後這邊一樣輸出 Nor
link |
06:59.000
這邊一樣算 Nor 的機率
link |
07:00.700
然後接下來看到 H5
link |
07:03.400
接下來這邊產生 Nor
link |
07:04.840
所以這邊就給它看 H5
link |
07:07.500
然後 H5 跟 L2 產生 P52
link |
07:10.100
然後這個 P52 計算它產生 T 的機率
link |
07:13.440
看到 T 這邊就變了
link |
07:15.700
產生 L3
link |
07:16.700
然後這個 process 就反覆一直下去
link |
07:19.040
反覆一直下去
link |
07:20.400
反覆一直下去
link |
07:22.740
然後接下來
link |
07:23.600
你要計算這個 alignment 的機率
link |
07:26.440
就是看說這邊每一個 token
link |
07:29.100
在這個 distribution 裡面的機率
link |
07:30.860
把它全部乘起來
link |
07:32.860
這個 find 在 P10 的機率
link |
07:34.760
C 在 P20 的機率
link |
07:35.960
Find 在 P21 的機率
link |
07:37.040
Find 在 P31 的機率
link |
07:38.100
A 在 P41 的機率
link |
07:39.260
Find 在 P42 的機率
link |
07:40.760
T在 P52 的機率
link |
07:42.000
Find 在 P53 的機率
link |
07:43.000
Find 在 P63 的機率
link |
07:44.700
然後全部乘起來
link |
07:45.860
就是這個 alignment 的機率
link |
07:49.380
所以這邊就是把剛才講的事情再
link |
07:52.020
畫出來再畫出來再畫出來
link |
07:55.620
所以你把這個 path 上面
link |
07:57.620
每一個箭頭上面對應的機率
link |
07:59.280
通通都乘起來
link |
08:00.760
就是這一個 alignment 的機率了
link |
08:03.980
就是這個 alignment 的機率了
link |
08:07.260
好那我們之前有講過說
link |
08:09.280
RNT 它一個神奇的地方就是
link |
08:12.160
它特別把
link |
08:13.760
token 和 token 之間的關係
link |
08:15.760
獨立用另外一個
link |
08:17.300
recurrent network 來表達
link |
08:19.460
而這個 recurrent network
link |
08:21.060
是不吃弱的 symbol
link |
08:24.060
那我們說
link |
08:25.740
這樣子有什麼好處呢
link |
08:27.900
這樣在 training 的時候會有幫助
link |
08:30.400
現在我們就要來看看它的 training
link |
08:32.340
到底是怎麼樣的幫助
link |
08:34.600
你會覺得說這個設計
link |
08:36.360
真的是八旗等級的設計啊
link |
08:38.740
這個設計還蠻厲害的
link |
08:41.640
而現在啊
link |
08:42.700
在這一個表格上的
link |
08:45.840
每一個格子
link |
08:48.540
其實都對應到一個固定的機率
link |
08:52.800
其實都對應到一個固定的機率的
link |
08:55.680
distribution
link |
08:56.680
上面每一個格子
link |
08:57.880
都會對應到一個機率的 distribution
link |
09:00.840
而這個格子對應到的就是
link |
09:03.400
P42
link |
09:04.540
P42是什麼意思
link |
09:05.980
我們說第一個下標4代表說
link |
09:08.440
我們已經讀了四個
link |
09:10.460
accuracy feature
link |
09:11.440
讀到第四個 x4的
link |
09:13.840
accuracy feature
link |
09:14.560
但其實這個
link |
09:15.300
x1到x4有經過 encoder
link |
09:17.600
所以其實看到是 encoder 的 output
link |
09:19.400
h1到h4
link |
09:20.800
P42代表是說我們已經讀到 h4了
link |
09:24.200
那2代表什麼
link |
09:26.360
第二個下標2代表什麼代表
link |
09:29.400
已經產生出兩個 token
link |
09:33.300
c 跟 a 已經被產生出來
link |
09:36.200
c 跟 a 已經被產生出來丟到
link |
09:38.740
我們本來放在左上角
link |
09:40.160
那個 recurrent network 裡面產生 L2
link |
09:42.440
那他會影響我們接下來
link |
09:44.560
output 的 distribution
link |
09:46.400
但神奇的地方是
link |
09:48.000
今天每一個格子的 distribution
link |
09:51.140
都是固定的
link |
09:53.000
我指定一個格子
link |
09:54.600
他就有一個固定的 distribution
link |
09:57.840
這個 distribution
link |
09:58.840
接下來這句話是最關鍵的
link |
10:00.340
這個 distribution
link |
10:02.040
這個格子裡面 distribution
link |
10:04.300
不受到你如何走到這一個格子
link |
10:07.740
所影響
link |
10:08.700
大家聽得懂這句話嗎
link |
10:10.800
這句話很重要所以再講一次
link |
10:12.400
就這一個格子裡的 distribution
link |
10:15.160
不受到你如何走到這一個格子所影響
link |
10:19.300
所以你今天是怎麼走過來的
link |
10:21.700
從這個起始位置走到這個位置
link |
10:24.440
你有很多種走法
link |
10:26.100
你可以說我連續產生三個 no
link |
10:29.000
再爆產生 c a 走到這個
link |
10:31.600
你可以先產生 c a
link |
10:32.900
再連續產生三個 no 走到這個格子
link |
10:35.240
你有好多種
link |
10:36.300
不同可能走到這個格子的方法
link |
10:38.540
但是只要只要你一走到那個格子
link |
10:41.000
這個 distribution 是固定的
link |
10:44.340
那我們用圖示化的方法來跟你講一下
link |
10:47.960
你這個 distribution 是固定的
link |
10:49.500
所以你要計算這個 distribution
link |
10:50.960
裡面產生
link |
10:52.100
翻譯的機率
link |
10:53.340
那反正這個 distribution
link |
10:54.900
假設你算出來了
link |
10:56.300
你就看看他裡面翻譯的機率是多少
link |
10:59.140
你要算這個 distribution
link |
11:00.300
產生下一個 token a 的機率
link |
11:02.000
這個 distribution 算出來了
link |
11:03.340
你就看他產生
link |
11:06.240
好但接下來我們用圖示化方法
link |
11:08.160
給你講的更清楚一點
link |
11:10.060
什麼叫做這個 distribution 的機率
link |
11:12.460
是固定的不受他的路徑影響
link |
11:15.240
我們現在看的是
link |
11:16.700
P42這個 distribution
link |
11:19.060
P42這個 distribution
link |
11:20.260
代表他看的是 H4
link |
11:22.260
還有他看的是 L2
link |
11:25.240
前面已經產生 c a
link |
11:27.200
已經產生三個 no symbol
link |
11:28.900
因為產生三個 no symbol
link |
11:30.740
所以你才會看到 H4
link |
11:32.100
產生三個 no symbol
link |
11:33.100
你才能夠讀到 H4
link |
11:34.740
然後產生 c 跟 a 產生兩個 token
link |
11:37.140
你才能讀到 L2
link |
11:39.740
但是這些 token
link |
11:41.700
他們產生出來的順序
link |
11:43.680
也就是走到這個
link |
11:44.900
剛才前面那個表格裡面
link |
11:46.500
走到 P42 的路徑
link |
11:48.500
不需要是一樣的
link |
11:50.100
你可以說你先 no c no no a
link |
11:53.380
你也可以說你有 c
link |
11:55.400
然後 no no a no
link |
11:57.240
你也可以有 no no no c a
link |
11:59.800
但產生出來的 P42
link |
12:02.100
都是一樣
link |
12:03.500
那為什麼他產生出來的 P42
link |
12:05.200
都是一樣的
link |
12:06.040
關鍵的地方就是
link |
12:07.400
他把看 token 的這個 RNN
link |
12:09.880
把他讀出來
link |
12:11.180
這個 RNN 只看 token
link |
12:13.780
如果這個 RNN 他會讀這個 no 的話
link |
12:16.240
那你 no 放在不同位置
link |
12:17.380
RNN 的 output 就不一樣了
link |
12:19.180
那就不能說
link |
12:20.640
你走不同的路徑
link |
12:21.680
最後得到的 P42 都是一樣
link |
12:23.580
那你到時候你
link |
12:24.600
最後你根本沒有辦法用
link |
12:25.700
dynamic programming
link |
12:26.980
解把所有的 path 的分數
link |
12:29.840
通通都合在一起
link |
12:32.140
這個問題
link |
12:33.840
沒辦法做這件事
link |
12:35.180
但是因為今天神奇的地方就是
link |
12:37.600
我們把看 token 的這個
link |
12:39.480
RNN 獨立出來
link |
12:41.440
他只看 token
link |
12:42.600
所以 c a 放在這邊
link |
12:44.440
c a 放在這邊
link |
12:45.680
c a 放在這邊
link |
12:46.840
他都是產生 L2 去
link |
12:49.080
讓你產生這個 P42
link |
12:51.000
而這個 H4
link |
12:51.940
他就只看前面有產生幾個 no
link |
12:54.700
有產生幾個 no
link |
12:55.580
產生三個 no 就是 H4
link |
12:57.140
這三個 no 怎麼擺也不重要
link |
12:58.640
反正就是看到 H4
link |
13:00.100
所以這個 P42
link |
13:01.440
他不會受到前面走過來的路徑的影響
link |
13:04.800
他只看你前面有幾個 no
link |
13:06.240
已經產生幾個 token
link |
13:07.680
他只受到這一件事情的影響
link |
13:10.380
所以接下來
link |
13:11.980
那接下來我們要怎麼把
link |
13:14.440
所有 alignment 的分數的總和
link |
13:17.540
把它算出來呢
link |
13:19.180
這邊啊
link |
13:20.240
假設你熟悉 Hidden Markov Model 的話
link |
13:23.440
你知道說 Hidden Markov Model
link |
13:25.380
是用所謂的 Forward Backward Algorithm
link |
13:28.080
來算出所有 alignment 的分數
link |
13:31.040
那其實在這邊 RNNT
link |
13:33.440
用來算所有 alignment 分數加總的方法
link |
13:37.440
其實跟
link |
13:39.000
HMM 用的 Forward Backward Algorithm
link |
13:41.360
其實是一模一樣的
link |
13:44.560
好那怎麼說呢
link |
13:46.700
我們這邊呢定義一個東西叫做
link |
13:49.560
α 下標 i 下標 j
link |
13:52.540
α 下標 i 下標 j 是什麼意思呢
link |
13:55.640
α 下標 i 下標 j 是說我們考慮
link |
13:59.600
所有那些已經讀了
link |
14:04.080
i 個 Acoustic Feature
link |
14:06.400
已經 output
link |
14:08.000
這個 token 的 alignment
link |
14:11.280
然後我們把這些 alignment
link |
14:13.380
他的分數通通加總起來
link |
14:16.380
這個就是 α 下標 i 下標 j
link |
14:20.140
那下面這個表格啊
link |
14:22.040
每一個格子都對應到一個
link |
14:25.740
α i j
link |
14:27.040
舉例來說這個格子就對應到 α 4,2
link |
14:32.300
α 4,2 是什麼意思呢
link |
14:33.940
α 4,2 是說
link |
14:35.400
我們把所有有讀過四個 Acoustic Feature
link |
14:39.800
的 alignment 通通找出來
link |
14:41.840
我們把所有讀過四個 Acoustic Feature
link |
14:44.840
而且已經產生過兩個
link |
14:47.080
token 的 alignment 通通找出來
link |
14:49.480
那把他們的分數加總起來
link |
14:52.200
這些 alignment 可能是
link |
14:53.980
從這邊走到這裡
link |
14:55.880
可能是從這邊走到這裡
link |
14:58.840
可能是這樣子這樣子走到這裡
link |
15:01.980
可能是這樣子這樣子走到這裡
link |
15:04.820
但他們全部都
link |
15:06.920
殊途同歸
link |
15:08.280
他們全部都已經讀了四個 Acoustic Feature
link |
15:11.580
都已經產生兩個 token
link |
15:14.240
我們把這些 alignment 的分數
link |
15:17.040
全部加總起來
link |
15:18.920
叫做 α 4,2
link |
15:21.220
那這個 α 4,2 是有辦法算的
link |
15:26.260
怎麼算呢
link |
15:28.100
這個 α 4,2 是 α 4,1 跟 α 3,2
link |
15:35.160
α 4,2 可以由 α 4,1 跟 α 3,2 算出來
link |
15:40.800
為什麼呢
link |
15:42.160
我們來看看 α 4,2 是怎麼產生的
link |
15:45.660
怎麼產生一個 alignment
link |
15:47.300
他有四個 Acoustic Feature
link |
15:50.420
他已經產生兩個 token
link |
15:53.420
怎麼產生一個 alignment
link |
15:55.100
他已經讀了四個 Acoustic Feature
link |
15:57.500
怎麼已經產生兩個 token
link |
16:00.220
這個 alignment 在他變成
link |
16:03.760
看四個 Acoustic Feature
link |
16:05.520
產生兩個 token 之前
link |
16:07.400
有兩種可能的狀態
link |
16:10.460
他可能只讀了四個 Acoustic Feature
link |
16:13.660
只產生了一個 token
link |
16:15.020
接下來他可以產生下一個 token
link |
16:16.800
產生 A
link |
16:17.520
就變成產生兩個 token
link |
16:21.060
另外一個可能是他
link |
16:23.580
已經讀了三個 Acoustic Feature
link |
16:25.580
然後產生兩個 token
link |
16:26.980
接下來他只要再讀下一個 Acoustic Feature
link |
16:30.020
就會變成 4,2 的這個狀態
link |
16:33.720
所以從 4,1 的狀態
link |
16:35.980
看四個 Acoustic Feature
link |
16:37.280
只產生一個 token 要變成 4,2
link |
16:39.360
產生兩個 token
link |
16:42.060
那需要做的事情就是
link |
16:44.020
產生下一個 token
link |
16:45.520
就會從 4,1 變成 4,2
link |
16:48.060
從 3,2 變到 4,2 要怎麼做呢
link |
16:50.120
本來只讀了三個 Acoustic Feature
link |
16:53.320
兩個 token 已經產生出來了
link |
16:54.860
已經讀了三個 Acoustic Feature
link |
16:56.560
接下來就讀下一個 Acoustic Feature
link |
16:58.480
就可以讀到第四個 Acoustic Feature了
link |
17:01.580
所以讀第四個 Acoustic Feature
link |
17:03.980
產生 NO 這個 symbol
link |
17:05.520
就從 3,2 變到 4,2
link |
17:09.160
那我們現在假設 alpha 4,1 跟 alpha 3,2
link |
17:12.980
你已經算得出來了
link |
17:14.320
那你就可以算出 alpha 4,2
link |
17:16.460
你已經可以計算說
link |
17:18.560
所有從起始點到 alpha 4,1
link |
17:21.660
所有的 alignment 分數的和
link |
17:24.320
你也算得出
link |
17:25.480
從起始點到 alpha 3,2
link |
17:27.260
所有 alignment 分數的和
link |
17:29.480
接下來你就可以算 alpha 4,2 了
link |
17:32.620
那怎麼算 alpha 4,2 呢
link |
17:33.980
很簡單
link |
17:34.560
你假設你知道 alpha 4,1 的值
link |
17:36.220
跟 alpha 3,2 的值
link |
17:37.620
你就可以算出 alpha 4,2
link |
17:39.180
alpha 4,2 就是把 alpha 4,1 的值
link |
17:42.180
乘上
link |
17:42.960
a 出現的機率
link |
17:45.540
乘上產生 a 的機率
link |
17:47.900
再加上把 alpha 3,2 的值
link |
17:50.500
把 alpha 3,2 的值
link |
17:52.240
乘上產生 NO 這個 symbol 的機率
link |
17:55.440
產生 NO symbol 的機率
link |
17:57.440
因為 4,1 的 alignment
link |
18:00.200
只要再產生 a
link |
18:01.840
就會變成 4,2
link |
18:03.600
3,2 的 alignment 只要再產生 NO symbol
link |
18:06.600
就會變成 4,2
link |
18:08.640
所以我們把所有這個
link |
18:11.240
已經是 4,1 這個狀態的 alignment
link |
18:15.240
再乘上產生 a 的機率
link |
18:18.840
再加上所有已經變成 3,2 這個狀態的 alignment
link |
18:22.680
再乘上產生 phi 的機率
link |
18:25.400
就會變成 alpha 4,2
link |
18:29.380
這邊這個 alpha 4,1 乘上 a 的機率
link |
18:33.700
是所有透過產生 a
link |
18:36.580
然後變成 4,2 的 alignment 的分數總和
link |
18:41.480
然後這個 alpha 3,2 乘以 NO 的機率
link |
18:44.520
是所有透過產生 NO
link |
18:47.280
從 3,2 變成 4,2 的 alignment 的分數總和
link |
18:51.440
把這兩種可能的狀態的分數
link |
18:56.220
通通加總起來
link |
18:57.740
就變成所有
link |
19:00.320
4,2 產生 4 個
link |
19:01.580
Cursive Feature 2 個 Token
link |
19:03.580
的所有的 alignment 的分數總和
link |
19:06.020
那這一個表格裡面的每一個格子
link |
19:10.020
都對應到一個 alpha i,j
link |
19:13.220
這一格是 alpha 4,2
link |
19:15.620
這一格是 alpha 4,1
link |
19:17.720
這一格是 alpha 3,2
link |
19:20.420
那如果你可以算出最右下角這個點的
link |
19:24.620
alpha 值是多少
link |
19:26.220
你可以算出最右下角這個格子的
link |
19:28.420
alpha 值是多少
link |
19:29.820
你就可以算出所有 alignment 的分數的總和
link |
19:35.920
就所有 alignment
link |
19:37.420
它最後都會終結在右下角這個點
link |
19:41.720
所有 alignment 都從左上角起始
link |
19:44.320
一直走走走走到右下角這個點
link |
19:46.920
你可以把右下角這個點的 alpha i,j 算出來
link |
19:50.420
你就等於是算出
link |
19:52.220
所有的我們今天要找的 alignment 的分數總和
link |
19:57.920
那我們就完成了這個
link |
20:00.820
計算所有 alignment 分數總和這個任務
link |
20:03.920
那怎麼把最右下角的這一個
link |
20:07.520
格子的 alpha i,j 算出來呢
link |
20:09.920
怎麼算呢
link |
20:10.920
你只要用 Dynamic Programming 的概念
link |
20:14.620
從左上角開始一直算到右下角就可以了
link |
20:18.120
所以從左上角開始
link |
20:20.120
把這邊每一個格子的 alpha i,j 依序填滿
link |
20:24.320
那你要算這個格子的 alpha i,j
link |
20:27.320
你只需要知道這邊的 alpha i,j
link |
20:29.320
跟這邊的 alpha i,j
link |
20:30.620
這兩個 alpha i,j 你都知道
link |
20:32.620
你就可以算出這個格子的 alpha i,j 是多少
link |
20:36.020
以此類推
link |
20:38.620
你就可以把這個表格裡面
link |
20:41.220
每一個格子的 alpha i,j 都填滿
link |
20:43.420
直到你填上了最右邊
link |
20:46.220
最右下角這個格子裡面的 alpha i,j
link |
20:48.820
你就把我們要算的分數
link |
20:51.320
所有 alignment 的分數總和算出來了
link |
20:54.720
到目前為止我們會做的事情
link |
20:58.520
是計算 P of Y given X
link |
21:01.220
我們知道怎麼窮取所有的 alignment
link |
21:03.420
把所有 alignment 的分數算出來以後加總
link |
21:06.220
得到 P of Y given X
link |
21:08.220
那下課的時候有同學問我說
link |
21:09.820
老師這個不是 training 呢
link |
21:13.020
你要知道你要先有一個 model
link |
21:16.220
你先 train 好一個 RNNT
link |
21:18.420
你才能算 P of Y given X
link |
21:21.220
沒錯,你要先有 RNNT
link |
21:24.220
你才能夠算這個東西
link |
21:25.820
你要先有一個 model 參數
link |
21:27.520
你才能算這個東西
link |
21:28.920
我們都還沒有進入訓練的過程
link |
21:32.820
到目前為止我們都還沒有做訓練
link |
21:35.720
我們只是說我們知道了
link |
21:37.720
RNNT 的參數怎麼算 P of Y given X
link |
21:40.320
我們都還沒有開始做訓練
link |
21:41.920
那接下來我們要開始進入訓練的過程
link |
21:46.120
那我們訓練的時候
link |
21:48.120
我們要 optimize 目標
link |
21:49.920
我們要調整參數的目標是什麼呢
link |
21:52.120
我們的目標是假設給你一段聲音訊號 X
link |
21:55.720
這段聲音訊號工讀生標註的
link |
21:57.920
token sequence 是 Y hat
link |
21:59.720
我們希望 P of Y hat given X 越大越好
link |
22:03.120
我們希望 learn 一個 network 的參數
link |
22:05.720
使得 P of Y hat given X 越大越好
link |
22:10.120
那接下來我們要做的事情就是
link |
22:12.120
怎麼 optimize 這個 objective function 呢
link |
22:14.720
我們會用 gradient descent 的技術
link |
22:17.520
要做 gradient descent
link |
22:19.120
我們就必須要能夠計算
link |
22:22.120
你的 network 參數 theta
link |
22:24.120
對 P of Y hat given X 的偏微分
link |
22:28.120
這是我們要 optimize 的 objective function
link |
22:31.120
我們現在來看看我們怎麼計算
link |
22:33.620
theta 對 P of Y given X 的偏微分
link |
22:38.120
好那這個 P of Y given X
link |
22:41.320
是 summation over 所有的 alignment
link |
22:45.320
summation over 所有 alignment 的 P of H given X
link |
22:50.320
而每一個 alignment H
link |
22:52.320
每一個 alignment 這個 H 的 P of H given X
link |
22:56.320
是由一連串的機率相乘所得到的
link |
23:02.320
那有哪些機率相乘得到這些 alignment 呢
link |
23:05.920
如果我們再把剛才的這個表拿出來看
link |
23:09.920
這個表上其實每一個箭頭
link |
23:13.920
都代表了一個機率
link |
23:17.920
那你從左邊這個起點走到右下這個終點
link |
23:23.920
其中所經過的每一個箭頭上面的機率相乘
link |
23:29.920
就是這一個 alignment 的分數
link |
23:33.920
所以你可以想見說
link |
23:35.920
所有的這些 alignment 的分數的和
link |
23:39.920
其實就是由這些機率相乘
link |
23:45.920
然後相加的結果所得到的
link |
23:48.920
所以這一項 P of Y given X 裡面
link |
23:52.920
都是這些機率作為它的 component
link |
23:56.920
這些機率是 P of Y given X 的基本組成
link |
24:02.920
由這些機率相乘以後相加
link |
24:08.920
就得到 P of Y given X
link |
24:11.920
那我們現在知道 P of Y given X
link |
24:15.920
是由這些 token 被產生出來的機率所組成的
link |
24:21.920
而這些 token 被產生出來的機率
link |
24:25.920
是受到 network 的參數的影響
link |
24:28.920
這些參數影響了這些 token 被產生的機率
link |
24:33.920
這些 token 被產生的機率影響了 P of Y given X
link |
24:38.920
按照 Chain Rule 就寫成這個樣子
link |
24:40.920
我們要計算 Theta 對這個
link |
24:43.920
P 下標 41 A 的機率的偏微分
link |
24:48.920
然後再計算這一項對 P of Y given X 的偏微分
link |
24:52.920
加上 Theta 對 P 下標 32
link |
24:56.920
產生 Phi 的這個
link |
24:58.920
產生 Naught 的這個機率作偏微分
link |
25:01.920
再乘上這一項機率對 P of Y given X 的偏微分
link |
25:06.920
把這些每一條 path
link |
25:09.920
把這邊每一條 path 加起來
link |
25:12.920
我們就可以算出 Theta 對 P of Y given X 的偏微分
link |
25:16.920
我們要算出 Theta 對這個 P 41 of A 的偏微分
link |
25:20.920
計算 P 41 of A 對 P of Y given X 的偏微分
link |
25:25.920
加上 Theta P 32 of Naught
link |
25:28.920
乘上 P 32 of Naught 對 P of Y given X 的偏微分
link |
25:32.920
把 Theta 對每一項 component 的偏微分
link |
25:36.920
再乘上每一項 component 對 P of Y given X 的偏微分
link |
25:40.920
然後再對所有的 component 加起來
link |
25:42.920
我們就可以把這一項偏微分算出來
link |
25:45.920
那在這個圖上面呢
link |
25:48.920
每一個箭頭就代表了一個機率
link |
25:52.920
所以我們首先需要計算這個參數
link |
25:58.920
對這邊每一個箭頭的機率的影響
link |
26:01.920
然後再計算這邊每一個箭頭
link |
26:04.920
對 P of Y given X 的影響
link |
26:07.920
我們先計算出 Theta 對這邊每一個箭頭上的機率
link |
26:11.920
每一個箭頭上的機率所造成的影響
link |
26:14.920
再計算出每一個箭頭對 P of Y given X 造成的影響
link |
26:19.920
然後把它全部加起來
link |
26:22.920
就可以得到我們要算的東西
link |
26:24.920
接下來我們就來看看
link |
26:26.920
怎麼計算這個參數 Theta
link |
26:29.920
對這邊每一個箭頭上面的機率的偏微分呢
link |
26:35.920
那怎麼計算呢
link |
26:39.920
那我們這邊用 Theta 對 P41 of A 的偏微分
link |
26:45.920
作為我們用 Theta 對 P41 of A 的偏微分
link |
26:49.920
作為例子來看一下
link |
26:51.920
那這個部分其實是比較直觀的
link |
26:54.920
跟 train 一般的 network 沒有什麼不同
link |
26:57.920
其實這邊你用的就是一般的 backpropagation
link |
27:01.920
那如果因為有 RNN
link |
27:03.920
所以其實是 backpropagation through time
link |
27:05.920
你先跑 forward path 計算出 P41
link |
27:10.920
然後接下來你跑 backward path
link |
27:13.920
那這個 backward path 這個 error signal
link |
27:16.920
會傳進 encoder
link |
27:18.920
然後會傳到左上角這個 language model 裡面
link |
27:23.920
總之這個部分跟 train 一般的 network 是一樣的
link |
27:28.920
這個地方就使用 backpropagation through time
link |
27:31.920
你怎麼 train 一般的 network
link |
27:33.920
那這邊你就怎麼做
link |
27:36.920
因為我們在 train 一般的 network 的時候
link |
27:38.920
我們已經會計算某一個參數
link |
27:40.920
對 network output 的偏微分
link |
27:42.920
那這邊我們就是計算
link |
27:44.920
network 的參數對這個 P41
link |
27:46.920
這個 output distribution 的偏微分
link |
27:49.920
那這個我們在過去學 backpropagation 的時候
link |
27:53.920
我們已經知道這件事情要怎麼做
link |
27:56.920
所以這邊我們就不用細講
link |
27:59.920
那接下來我們要計算 P41 of A
link |
28:03.920
對 P of y hat given Theta 的偏微分
link |
28:06.920
那這項要怎麼算呢
link |
28:08.920
首先 P of y hat given Theta
link |
28:10.920
是由很多的 alignment 的分數
link |
28:13.920
加總起來得到的
link |
28:15.920
那我們現在把 alignment 分成兩類
link |
28:20.920
一類是有 P41 of A 的
link |
28:24.920
另外一類是沒有 P41 of A 的
link |
28:28.920
然後把它們分別加起來
link |
28:30.920
所以如果你的 alignment 裡面有 P41 of A
link |
28:33.920
那我們把它放在底下
link |
28:35.920
如果你的 alignment 裡面沒有 P41 of A
link |
28:38.920
這個 component
link |
28:40.920
那我們把它當作第二項
link |
28:42.920
接下來呢
link |
28:44.920
我們計算 P41 of A 對
link |
28:46.920
P of y hat given Theta 的偏微分
link |
28:49.920
那因為右邊這一項第二項
link |
28:52.920
根本就沒有 P41 of A 啊
link |
28:55.920
所以一做偏微分以後第二項
link |
28:57.920
就消失了
link |
28:59.920
只需要考慮第一項就好
link |
29:02.920
那在第一項裡面呢
link |
29:04.920
這邊每一個 P of h given x
link |
29:07.920
因為它們通通都有 P41 of A
link |
29:10.920
那所以我們可以把
link |
29:12.920
這邊的 P of h given x
link |
29:14.920
寫作 P41 of A
link |
29:17.920
乘上其他東西
link |
29:20.920
把 P41 of A 乘上其他東西
link |
29:23.920
那把這一項對 P41 of A 做偏微分
link |
29:27.920
我們會得到什麼呢
link |
29:29.920
P41 of A 就消失了
link |
29:31.920
我們就是 summation over 所有的 h
link |
29:34.920
然後只把剩餘的部分
link |
29:36.920
沒有 P41 of A 的部分
link |
29:38.920
把它加起來
link |
29:40.920
或是我們可以把
link |
29:42.920
Other 呢
link |
29:44.920
寫成 P of h given x
link |
29:46.920
除掉 P41 of A
link |
29:49.920
那這一項呢
link |
29:51.920
也可以寫成把 P41 of A 提出來
link |
29:54.920
提到外面去
link |
29:55.920
就是把所有有通過 P41 of A 的
link |
29:59.920
這個 alignment 啊
link |
30:00.920
把有 P41 of A 的 alignment
link |
30:02.920
它的分數通通都加起來
link |
30:04.920
再除以 P41 of A
link |
30:06.920
這個就是我們要算的
link |
30:08.920
P41 of A 對 P of y given x 的 gradient
link |
30:12.920
那麼我們要怎麼計算
link |
30:14.920
所有有通過 P41 of A 的
link |
30:17.920
alignment 的分數和呢
link |
30:20.920
那我們需要引入
link |
30:22.920
另外一個東西叫做 β
link |
30:25.920
那我們剛才已經有看過
link |
30:27.920
我們怎麼算 αij
link |
30:29.920
那其實這個 βij 啊
link |
30:31.920
跟 αij 很像
link |
30:33.920
它是 αij 的相反
link |
30:36.920
βij 的意思是說
link |
30:38.920
所有已經產生
link |
30:41.920
一個 Acoustic Feature
link |
30:43.920
跟這個 Token 的 alignment
link |
30:48.920
走到結束的分數總和
link |
30:52.920
所以 β42 的意思就是說
link |
30:56.920
已經產生了四個 Acoustic Feature
link |
30:58.920
已經產生兩個 Token
link |
31:00.920
那這些 Path 走到結尾為止
link |
31:03.920
所有從這個地方當作起始點
link |
31:06.920
走到結尾為止
link |
31:08.920
走到結尾為止
link |
31:09.920
所有的路徑的分數總和
link |
31:14.920
那這個 β42 怎麼算呢
link |
31:16.920
那這個算法跟 α 很像啊
link |
31:19.920
就是 β42 它讀了第五個 Acoustic Feature
link |
31:23.920
產生 NO 這個 Symbol 以後
link |
31:26.920
會進到 β52
link |
31:28.920
而 β42 產生 Token T 以後
link |
31:31.920
會進到 β43
link |
31:33.920
所以 β42 的算法
link |
31:35.920
就是 β43 乘上
link |
31:38.920
這個 P42 of T
link |
31:42.920
在 42 這個狀態下產生 T 的機率
link |
31:45.920
加上 β52 乘以 P42 of Y
link |
31:48.920
在 42 這個狀態下
link |
31:50.920
產生 NO 這個 Symbol 的機率
link |
31:52.920
把從這個地方
link |
31:55.920
走到結尾的機率總和 β43
link |
31:59.920
乘上從 β42 走到 β43 的機率
link |
32:03.920
再加上
link |
32:05.920
把從這個地方走到結尾
link |
32:07.920
所有的路徑的分數總和
link |
32:09.920
就是 β52
link |
32:11.920
乘上從這邊走到這邊的機率
link |
32:14.920
就是 P42 of NO
link |
32:16.920
加起來就是 β42
link |
32:20.920
那就可以跟剛才算 α 一樣
link |
32:22.920
我們可以把這一個圖表上
link |
32:25.920
每一個點的 β
link |
32:27.920
通通把它算出來
link |
32:30.920
我們會算 α
link |
32:31.920
我們會算 β 以後
link |
32:33.920
有了這個 α 跟 β 以後
link |
32:35.920
我們就可以計算出
link |
32:37.920
所有有包含 P41 of A 的
link |
32:40.920
Alignment 的分數總和
link |
32:43.920
怎麼算呢
link |
32:45.920
就是這一條路徑
link |
32:47.920
是 P41 of A
link |
32:50.920
那我們要計算
link |
32:52.920
所有從起始點走走走走
link |
32:54.920
走到這個地方
link |
32:56.920
通過 P41 of A
link |
32:58.920
再走走走走走
link |
33:00.920
走到終點的
link |
33:02.920
這些所有路徑的分數總和
link |
33:04.920
而這些所有路徑的分數總和
link |
33:06.920
就是 α41
link |
33:08.920
所有從這個初始點
link |
33:10.920
走到這個地方
link |
33:11.920
所有的分數的總和 α41
link |
33:13.920
乘上 P41 of A
link |
33:15.920
再乘上從這個地方
link |
33:17.920
走到終點
link |
33:18.920
所有的路徑的分數總和就是 β42
link |
33:20.920
把這三項乘起來
link |
33:22.920
把這三項乘起來
link |
33:24.920
就是有包含 P41 of A 的
link |
33:27.920
Alignment 的分數總和
link |
33:29.920
那這個 P41 of A 跟 P41 of A
link |
33:32.920
可以消掉
link |
33:33.920
所以我們知道說
link |
33:34.920
這一項就是 α41 乘以 β42
link |
33:39.920
所以我們知道說
link |
33:40.920
我們可以把這個
link |
33:42.920
P41 of A 對 P of y hat
link |
33:44.920
given x 的偏微分
link |
33:45.920
寫成 α41 乘上 β42
link |
33:50.920
那所以這一項偏微分呢
link |
33:52.920
我們就可以算得出來了
link |
33:54.920
我們只要會算 α
link |
33:56.920
會算 β
link |
33:57.920
會算這個東西
link |
33:59.920
那全部就結束了
link |
34:01.920
那假設你知道
link |
34:02.920
怎麼用 gradient descent
link |
34:04.920
來訓練出模型以後
link |
34:06.920
那你訓練好模型之後呢
link |
34:08.920
你就可以做 testing
link |
34:10.920
也就是 inference
link |
34:11.920
或者是 decoding
link |
34:13.920
那我們要現在做的事情就是
link |
34:16.920
我們現在有了
link |
34:18.920
這個 network 的參數
link |
34:20.920
所以你可以算出
link |
34:21.920
P of y given x
link |
34:23.920
接下來在做語音辨識的時候
link |
34:25.920
你要做的事情就是
link |
34:26.920
聲音訊號已經進來了
link |
34:28.920
已經給定了 x
link |
34:29.920
你要找出一個 y
link |
34:31.920
這個 y 可以讓
link |
34:32.920
P of y given x 的值最大
link |
34:35.920
那這個可以讓
link |
34:36.920
P of y given x 值最大的 y
link |
34:38.920
就是語音辨識的結果
link |
34:42.920
但這件事情呢
link |
34:44.920
其實不太容易
link |
34:46.920
因為這個要窮取所有的 y
link |
34:49.920
算出 P of y given x
link |
34:51.920
已經很困難了
link |
34:52.920
更何況這個 P of y given x
link |
34:54.920
還是一大堆的 alignment
link |
34:57.920
相加以後的結果
link |
35:00.920
在理想上
link |
35:01.920
你當然想直接找一個 y
link |
35:03.920
讓這個 alignment 相加的值最大
link |
35:07.920
你想要找一個 y
link |
35:08.920
這個在理想上
link |
35:10.920
你想要找一個 y
link |
35:11.920
這個 y 它所有的 alignment
link |
35:14.920
分數的和最大
link |
35:16.920
你想要找出這樣的 y
link |
35:18.920
那這個式子
link |
35:19.920
也不是完全沒有辦法
link |
35:21.920
用一些近似的方法
link |
35:24.920
來找出一個近似的解
link |
35:26.920
但是它有點複雜
link |
35:27.920
所以在這邊呢
link |
35:28.920
我們就不再細講
link |
35:31.920
那有一個在實作上
link |
35:35.920
比較容易的 decoding 的做法
link |
35:38.920
是我們把上面這個式子
link |
35:40.920
改成下面這個樣子
link |
35:43.920
也就是說
link |
35:44.920
我們要找一個分數最大的 y
link |
35:47.920
那怎麼來評比 y 之間的分數呢
link |
35:50.920
找出每一個 y
link |
35:52.920
分數最高的 h
link |
35:55.920
我們不把每一個 y
link |
35:57.920
所有的 alignment 的分數加起來
link |
36:00.920
我們只比每一個 y
link |
36:03.920
它分數最高的那一個 alignment
link |
36:08.920
那這個式子啊
link |
36:10.920
可以解讀成說
link |
36:11.920
我們把 summation over 所有的 alignment
link |
36:15.920
換成指導分數最高的那一個 alignment
link |
36:19.920
如果今天這個 summation
link |
36:22.920
根據最大的其實值差不多
link |
36:25.920
那這個替換是可以成立的
link |
36:29.920
那你可以想成說
link |
36:31.920
雖然有很多這個 alignment
link |
36:33.920
但是其中分數最大的那個 alignment
link |
36:36.920
其實比其他人都大很多
link |
36:39.920
我們可以用分數最大的那一個
link |
36:41.920
來代表全部 alignment 的分數
link |
36:44.920
那在真實的情況下
link |
36:46.920
真的是這樣嗎
link |
36:47.920
分數最大的 alignment
link |
36:48.920
會比其他的 alignment 大很多嗎
link |
36:51.920
我不管你信不信
link |
36:53.920
反正我是信了啦
link |
36:54.920
那我們就可以用下面這個 approximation
link |
36:58.920
所以在實作上你可以這樣做
link |
37:00.920
你找一個 alignment
link |
37:02.920
這個 alignment 的機率是最大的
link |
37:04.920
這個機率最大的 alignment 叫做 h star
link |
37:07.920
那你再看說這個 h star
link |
37:09.920
它背後對應的 y star 是什麼
link |
37:11.920
那我們這邊呢
link |
37:12.920
用一個這個 alignment inverse
link |
37:14.920
代表說你要把 h star
link |
37:16.920
轉回它對應的 y
link |
37:19.920
我們找出這個分數最高的 h star
link |
37:21.920
然後把這個 h star
link |
37:22.920
轉回它對應的 y star
link |
37:24.920
就是 decoding 的結果
link |
37:26.920
那怎麼算 P of h given x 呢
link |
37:29.920
這我們之前已經講過了
link |
37:30.920
假設你有一個 alignment
link |
37:31.920
長得是這個樣子
link |
37:33.920
它這個 h 裡面呢
link |
37:34.920
有一連串的 token
link |
37:36.920
h1 h2 h3
link |
37:38.920
那 P of h given x
link |
37:40.920
就是 h1 出現的機率
link |
37:42.920
然後乘上 h1
link |
37:44.920
乘上 given h1 以後
link |
37:46.920
h2 出現的機率
link |
37:47.920
乘上 given h1 h2 以後
link |
37:49.920
h3 出現的機率
link |
37:52.920
那實際上
link |
37:54.920
怎麼真的找一個
link |
37:56.920
機率最大的 alignment 呢
link |
37:59.920
在實作上你會這麼做
link |
38:01.920
就假設你訓練好一個 r n t
link |
38:03.920
那你就拿這個 r n t
link |
38:06.920
來跑一下辨識
link |
38:07.920
那在每一個 time step 呢
link |
38:09.920
r n t 都會跑出一個 distribution
link |
38:13.920
每一個 time step
link |
38:15.920
都會跑出一個 distribution
link |
38:17.920
那你就把
link |
38:19.920
這個每一個 distribution 裡面
link |
38:21.920
機率最大的那個 token
link |
38:24.920
拿出來
link |
38:25.920
其實就是這個
link |
38:27.920
h star 的一個 approximation
link |
38:29.920
當然我們在講 bin search 的時候
link |
38:31.920
就已經說過說
link |
38:32.920
每一個 time step 取機率最大的那個
link |
38:36.920
乘起來
link |
38:38.920
不見得會讓 P of h given x
link |
38:40.920
機率最大
link |
38:41.920
每一個 time step 都取機率最大的
link |
38:43.920
最終全部乘起來的機率
link |
38:45.920
不見得是最大的
link |
38:47.920
但是沒有關係
link |
38:48.920
就是假設你想要做得更好一點
link |
38:50.920
這邊你一樣可以用 bin search 的方法
link |
38:52.920
來得到更準確的結果
link |
38:54.920
來找出分數比較高的 h star
link |
38:58.920
這個部分呢
link |
38:59.920
這個 r n t training 的部分呢
link |
39:01.920
其實是比較困難的了
link |
39:03.920
所以如果前面講的東西
link |
39:05.920
你沒有聽得很懂
link |
39:06.920
那沒有關係
link |
39:07.920
你並不孤單
link |
39:09.920
如果前面講的東西
link |
39:10.920
你沒有聽得很懂
link |
39:11.920
至少你可以看一下
link |
39:12.920
LAS CTC RNT 這三個模型的比較
link |
39:16.920
我們來比較一下
link |
39:18.920
這三個常用的模型
link |
39:20.920
在 decoder 方面
link |
39:22.920
LAS 的 decoder 會考慮
link |
39:25.920
前面的 time step
link |
39:26.920
已經 generate 出來的 token
link |
39:28.920
CTC 在做 decode 的時候
link |
39:30.920
沒有考慮在之前的 time step
link |
39:32.920
已經 generate 出來的東西
link |
39:34.920
而 RNT 有考慮
link |
39:37.920
之前的 time step
link |
39:38.920
所 generate 出來的東西
link |
39:40.920
所以這三點比較起來
link |
39:42.920
CTC 是比較弱的
link |
39:43.920
LAS 跟 RNT 有考慮
link |
39:46.920
之前已經 generate 出來的東西
link |
39:48.920
所以在 decoder 上是比較強的
link |
39:51.920
接下來我們看 alignment 的部分
link |
39:53.920
CTC 跟 RNT 都需要做 alignment
link |
39:58.920
在 LAS 裡面
link |
39:59.920
我們並沒有很明確的考慮
link |
40:01.920
align 這件事
link |
40:02.920
LAS 它的 alignment 可以說是 soft
link |
40:06.920
LAS 用 attention 這個機制
link |
40:08.920
來找出語音跟文字之間的對應關係
link |
40:13.920
接下來講訓練的部分
link |
40:15.920
LAS 的訓練是比較簡單的
link |
40:17.920
就是硬吹一發就結束了
link |
40:21.920
那 CTC 跟 RNT 的訓練是比較麻煩的
link |
40:24.920
他們在訓練的時候
link |
40:25.920
你都必須要把所有的 alignment 加起來
link |
40:28.920
都必須要知道說
link |
40:30.920
怎麼窮取所有可能的 alignment
link |
40:32.920
然後把他們的分數加總起來
link |
40:35.920
我們說對語音辨識而言
link |
40:37.920
一件很重要的事情
link |
40:38.920
是你要做到 online recognition
link |
40:41.920
使用者一邊說
link |
40:42.920
就要一邊跑出語音辨識的結果
link |
40:45.920
對 LAS 來說
link |
40:46.920
他做不到這件事
link |
40:47.920
你要把整句話講完
link |
40:48.920
LAS 才可以開始輸出文字
link |
40:52.920
而 CTC 跟 RNT
link |
40:54.920
可以做到 online decoding
link |
40:57.920
那我們之前有講過說
link |
40:58.920
像 Pixel 4 內建的那個語音辨識系統
link |
41:01.920
其實就是用 RNT 做的