back to index

【機器學習 2022】魚與熊掌可以兼得的深度學習


link |
00:00.000
好,今天這堂課要告訴大家說,深度學習到底好在哪裡
link |
00:08.000
好,我們說我們這個陷入了兩難,這個兩難是什麼呢?
link |
00:13.000
這個兩難是如果我們把模型選擇比較大
link |
00:18.000
也就是說呢,我們今天在做Optimization的時候
link |
00:22.000
可以選擇的Function比較多
link |
00:25.000
這個時候雖然我們可以讓這個LODO也就是最理想的狀況
link |
00:35.000
理想的狀況他的Loss壓得很低
link |
00:39.000
但是同時他的壞處是什麼呢?
link |
00:41.000
他的壞處就是理想跟現實會有比較大的差距
link |
00:46.000
反過來說,如果我們選擇了一個比較小的模型
link |
00:49.000
只有比較少的可以選擇的Function
link |
00:52.000
那我們的Loss就會比較大,我們的理想會比較糟
link |
00:57.000
雖然我們的理想跟現實會比較接近
link |
01:00.000
所以上次我們停在這邊說我們陷入了兩難
link |
01:05.000
那最後我說魚與熊掌有沒有可能可以兼得呢?
link |
01:12.000
什麼叫做魚與熊掌可以兼得?
link |
01:15.000
我們有沒有可能既有一個Loss很低的理想
link |
01:20.000
同時又讓現實跟理想很接近呢?
link |
01:24.000
要怎麼做到這個魚與熊掌兼得的狀況呢?
link |
01:28.000
如果你今天在找這個理想的HO的時候
link |
01:33.000
如果你今天要從大H裡面找出某一個Function小H
link |
01:39.000
把小H用在DO做的Data上
link |
01:42.000
要讓Loss越小越好,找出這個HO
link |
01:46.000
如果你今天可以找到一個大H
link |
01:49.000
大H有神奇的能力
link |
01:51.000
第一個大H本身裡面的成員沒有很多
link |
01:55.000
你只有很少的可以選擇的Function
link |
01:58.000
同時雖然這邊裡面的成員很少
link |
02:01.000
但他們的成員都是菁英
link |
02:04.000
可以讓這個大L可以讓你的Loss又很低
link |
02:09.000
你既小又讓Loss很低
link |
02:14.000
如果這兩者同時可以成立的話
link |
02:16.000
那我們就可以讓魚與熊掌兼得
link |
02:19.000
我們就可以有好的理想Loss低的理想
link |
02:23.000
同時又讓現實跟理想很接近
link |
02:26.000
這是我們要的狀況
link |
02:28.000
上次就說什麼樣的模型可以做到這件事呢?
link |
02:31.000
接下來我們要講深度學習
link |
02:34.000
如何做到魚與熊掌兼得
link |
02:38.000
在開始講深度學習之前
link |
02:41.000
幫大家複習一下為什麼我們需要深度學習
link |
02:46.000
為什麼我們需要Hidden Layer
link |
02:49.000
在教大家預習的錄影裡面
link |
02:52.000
已經跟大家講過Hidden Layer的重要性
link |
02:55.000
所以以下這一段是複習
link |
02:59.000
這一段講得比較快一點
link |
03:01.000
它是預習的影片裡面已經有的複習
link |
03:05.000
如果你等一下聽得沒有很清楚的話
link |
03:07.000
你再回去看預習的影片
link |
03:09.000
那為什麼我們要深度學習
link |
03:12.000
為什麼我們要加Hidden Layer呢?
link |
03:16.000
在預習的影片中跟你講的理由是這個樣子的
link |
03:21.000
我們說我們可以透過一個Hidden Layer
link |
03:25.000
就製造出所有可能的Function
link |
03:29.000
我們要找一個Function
link |
03:31.000
它的輸入就是這個圖上的X軸
link |
03:34.000
它的輸出是這個圖上的Y軸
link |
03:38.000
我們怎麼找一個Function來逼近
link |
03:41.000
我們今天隨便畫一條線
link |
03:44.000
怎麼找一個Function
link |
03:46.000
怎麼用一個Network來逼近這條線呢?
link |
03:49.000
怎麼用一個Network來產生這條線呢?
link |
03:52.000
首先你先把這條線分成一段一段的
link |
03:56.000
把它結成一段一段
link |
03:59.000
然後把每一個線段的端點間連起來
link |
04:05.000
得到一個Piecewise Linear的Function
link |
04:09.000
那這個Piecewise Linear的Function
link |
04:11.000
也就是這個綠色的線
link |
04:13.000
雖然在這個例子裡面
link |
04:15.000
可能跟黑色的線沒有非常的接近
link |
04:19.000
但你可以很直覺的想到說
link |
04:21.000
如果今天這個Piecewise Linear的
link |
04:24.000
這個綠色的這條線
link |
04:26.000
如果它的線段夠多
link |
04:28.000
我在切這個Piece的時候
link |
04:30.000
切得夠碎
link |
04:32.000
那綠色的線跟黑色的線就會足夠接近
link |
04:37.000
那接下來要跟大家講的就是
link |
04:39.000
你可以用一個Hidden Layer的Neural Network
link |
04:43.000
輕易的製造出綠色的這條Piecewise Linear的線段
link |
04:49.000
那一個Neural Network
link |
04:50.000
怎麼製造出綠色的這個線段呢?
link |
04:53.000
那我們經過觀察發現說
link |
04:55.000
這個綠色的線段
link |
04:57.000
可以看作是一個長數項
link |
05:00.000
加上一堆這樣形狀的藍色的Function
link |
05:05.000
所以一個綠色的Piecewise Linear的Function
link |
05:08.000
它可以看作是一個長數
link |
05:10.000
加上一堆三坡形的Function
link |
05:12.000
那在這個投影片上呢
link |
05:14.000
跟大家舉了一個例子
link |
05:16.000
怎麼製造這個綠色的Piecewise Linear的Function呢?
link |
05:20.000
首先你要有一個這個長數項
link |
05:22.000
這個長數項的高度呢
link |
05:24.000
就跟這邊這個綠色的線段
link |
05:27.000
最左邊的這個端點的地方一樣高
link |
05:32.000
那接下來你加上第一個階梯形的Function
link |
05:36.000
第一個階梯形的Function呢
link |
05:38.000
是為了要產生這個線段
link |
05:41.000
接下來呢
link |
05:42.000
你再加第二個階梯形的Function
link |
05:44.000
第二個階梯形的Function呢
link |
05:46.000
是為了產生第二個線段
link |
05:48.000
產生第二個線段
link |
05:50.000
你再加第三個階梯形的Function
link |
05:53.000
為了產生第三個線段
link |
05:55.000
把這個長數項
link |
05:57.000
加上這三個階梯形的Function
link |
06:00.000
把它合在一起以後
link |
06:02.000
就可以製造出綠色的Piecewise Linear的Function
link |
06:07.000
所以一個Piecewise Linear的Function
link |
06:09.000
你可以用長數項
link |
06:11.000
加上一堆階梯形的Function
link |
06:13.000
組合出來
link |
06:14.000
而Piecewise Linear的Function
link |
06:16.000
可以逼近任何的Function
link |
06:18.000
所以任何的Function
link |
06:19.000
你其實都有辦法用Neural Network製造出來
link |
06:21.000
那Neural Network
link |
06:23.000
怎麼製造出這個Piecewise Linear的Function呢
link |
06:26.000
怎麼表示這個階梯形的Function呢
link |
06:29.000
那我們可以用一個叫做
link |
06:31.000
Sigmoid Function
link |
06:33.000
來近似這個階梯形的Function
link |
06:36.000
這個階梯形的Function呢
link |
06:37.000
有人又叫做Hard Sigmoid Function
link |
06:41.000
那接下來呢
link |
06:42.000
每一個Neural
link |
06:44.000
假設我們造了一個
link |
06:46.000
一個Hidden Layer的Neural Network
link |
06:48.000
它的每一個Neural
link |
06:50.000
可以製造出一個階梯形的Function
link |
06:53.000
假設你現在你的Neural Network
link |
06:55.000
你選擇的Activation Function
link |
06:57.000
是Sigmoid的話
link |
06:59.000
那你可以透過
link |
07:01.000
設定不同的Weight
link |
07:02.000
設定不同的Bias
link |
07:04.000
製造出不同的Sigmoid Function
link |
07:07.000
那你製造出合適的Sigmoid Function
link |
07:09.000
把它們通通加起來
link |
07:11.000
再加上長數項以後
link |
07:12.000
你可以產生任何的
link |
07:14.000
Piecewise Linear的Function
link |
07:16.000
那你就可以用這個Piecewise Linear的Function
link |
07:18.000
去逼近任何的Function
link |
07:21.000
所以我們上課的時候就告訴你說
link |
07:23.000
任何再複雜的Function
link |
07:25.000
你也不用怕
link |
07:26.000
你只要有足夠多的Neural
link |
07:28.000
你就可以想辦法去產生
link |
07:30.000
任何的Function
link |
07:32.000
另外一個
link |
07:33.000
表示這個Hard Sigmoid Function的方法呢
link |
07:37.000
是用另外一個叫做
link |
07:39.000
兩個Relu的Function
link |
07:41.000
所組合成的
link |
07:42.000
Relu的Function
link |
07:43.000
就是長得是這樣子的形狀
link |
07:45.000
長得是這樣子的形狀
link |
07:47.000
它有一個
link |
07:49.000
這個轉角的地方
link |
07:51.000
在轉角的地方
link |
07:52.000
其中一邊都是0
link |
07:54.000
另外一邊是一條直線
link |
07:56.000
這個Function呢
link |
07:57.000
叫做Relu
link |
07:58.000
那用兩個Relu疊起來
link |
08:00.000
可以產生一個
link |
08:02.000
Hard Sigmoid Function
link |
08:04.000
所以如果我們有
link |
08:06.000
一個Hidden Layer的Network
link |
08:08.000
這個Network裡面
link |
08:10.000
它的Neural啊
link |
08:11.000
都是Relu
link |
08:13.000
那我們有夠多的
link |
08:15.000
有Relu當作Activation Function的Neural
link |
08:19.000
把它全部疊起來
link |
08:21.000
兩個Relu可以形成一個
link |
08:23.000
Hard Sigmoid
link |
08:24.000
夠多的Hard Sigmoid
link |
08:25.000
可以形成任何Piecewise Linear Function
link |
08:28.000
Piecewise Linear Function
link |
08:29.000
可以逼近任何的Function
link |
08:32.000
所以就算是我們的Neural
link |
08:34.000
是Relu也沒有關係
link |
08:36.000
有夠多的Relu
link |
08:38.000
把夠多的Relu組合起來
link |
08:40.000
可以變成任何Piecewise Linear Function
link |
08:43.000
可以逼近任何的Function
link |
08:46.000
那講到這邊
link |
08:48.000
有一個很自然的問題
link |
08:50.000
你就會想到一個問題
link |
08:52.000
這個問題是
link |
08:54.000
我們一直強調
link |
08:56.000
有一個Hidden Layer的Network
link |
08:59.000
它可以產生任何的Function
link |
09:03.000
它可以逼近任何的Function
link |
09:06.000
那只要一個Hidden Layer就夠啦
link |
09:08.000
弄一個Deep的Network
link |
09:10.000
有什麼意義呢
link |
09:12.000
所以有人就說
link |
09:14.000
Deep Learning
link |
09:15.000
它只是一個行銷的騙局
link |
09:18.000
就是Deep聽起來就非常的厲害
link |
09:22.000
其實只要一個Hidden Layer
link |
09:24.000
就可以做所有的事情
link |
09:26.000
你只要有一個夠胖的Network
link |
09:28.000
一個Hidden Layer
link |
09:29.000
很多Neural就很胖嘛
link |
09:30.000
你只要有一個夠胖的Network
link |
09:31.000
它可以做任何的事情
link |
09:33.000
但是之所以不創造Fat Neural Network
link |
09:35.000
只是因為Fat Neural Network
link |
09:36.000
聽起來實在是太廢了
link |
09:38.000
所以我們比較喜歡Deep Learning
link |
09:40.000
Deep Learning聽起來就是比較潮
link |
09:43.000
真的是這樣子嗎
link |
09:45.000
在實驗上
link |
09:47.000
你其實可以發現
link |
09:48.000
Deep的Network確實比較強
link |
09:52.000
那你通常在文獻上
link |
09:53.000
你會看到這樣子的實驗結果
link |
09:55.000
那這個是取自一篇
link |
09:57.000
InterSpeech 2011年的paper
link |
10:00.000
這個10年以前的paper
link |
10:03.000
那個時代呢
link |
10:04.000
Deep Learning還是一個非常潮的東西
link |
10:07.000
可以疊個五六層的Network
link |
10:09.000
大家覺得驚為天人
link |
10:10.000
覺得哇好深喔好可怕
link |
10:12.000
所以現在這樣子等級的Network
link |
10:14.000
你在作業2裡面隨便Train
link |
10:16.000
也是Train個五個八個
link |
10:18.000
不過當年呢
link |
10:19.000
要Train這種Network
link |
10:20.000
還是非常困難的
link |
10:21.000
像你們今天
link |
10:22.000
像這個作業2啊
link |
10:25.000
你Train個三層五層Network
link |
10:27.000
你大概跑個一個小時
link |
10:29.000
就可以結束了吧
link |
10:31.000
但是你想想看同樣的東西
link |
10:32.000
在當我剛回台大任教的時候
link |
10:35.000
差不多類似的作業
link |
10:36.000
大概要跑個一天左右
link |
10:38.000
這個時候我就會告訴你說
link |
10:39.000
如果你離Deadline只剩24個小時
link |
10:42.000
你唯一可以做的事情
link |
10:43.000
就是放棄這樣子
link |
10:44.000
因為你不可能把這個NetworkTrain完了
link |
10:46.000
但現在
link |
10:47.000
你都可以趕在
link |
10:48.000
這個作業佼佼前的前一個晚上
link |
10:51.000
再來爆氣
link |
10:52.000
在更久之前
link |
10:53.000
還是學生的時候
link |
10:54.000
如果你要Train個類似的Network
link |
10:56.000
你的時間是用週來計算的
link |
10:59.000
知道嗎
link |
11:00.000
然後如果這個電機器突然跳電
link |
11:02.000
你就欲哭無淚這樣子
link |
11:04.000
所以這個
link |
11:05.000
我只能說時代變了啊大人
link |
11:07.000
就是時代變了
link |
11:08.000
現在大家隨隨便便
link |
11:09.000
都Train個十五成八成的Network
link |
11:12.000
link |
11:13.000
那總之呢
link |
11:14.000
在文獻上
link |
11:15.000
你常常可以看到這樣子的結果
link |
11:17.000
我一開始呢
link |
11:18.000
有一個Layer
link |
11:19.000
然後呢
link |
11:20.000
每個Layer
link |
11:21.000
有2K兩千個Neural
link |
11:24.000
那這個時候呢
link |
11:25.000
這邊Paper是一個
link |
11:26.000
跟語音辨識有關的Paper啦
link |
11:29.000
那他這邊Report的數據呢
link |
11:31.000
是語音辨識的錯誤率
link |
11:33.000
那錯誤率當然是越低越好嘛
link |
11:36.000
那其實啊
link |
11:38.000
在這一篇Paper裡面
link |
11:40.000
他實際上把Deep Learning使用的方式
link |
11:44.000
跟大家在作業2做的方式
link |
11:47.000
是一樣的
link |
11:49.000
大家知道在作業2裡面啊
link |
11:50.000
我們並不是真的產生語音辨識的結果
link |
11:53.000
對不對
link |
11:54.000
你是對一小段一小段的聲音訊號
link |
11:56.000
我們叫做Friend
link |
11:57.000
去預測每一個Friend
link |
11:59.000
屬於哪一個Phoning
link |
12:01.000
那他並不是真的語音辨識
link |
12:03.000
因為你Output Phoning
link |
12:04.000
人也看不懂嘛
link |
12:05.000
而且他那個Phoning呢
link |
12:06.000
還會重複很多次
link |
12:08.000
所以那根本不是真正的語音辨識
link |
12:10.000
但是在早年啊
link |
12:11.000
在還沒有那個
link |
12:14.000
End-to-end
link |
12:15.000
In-train一發的那種Network之前啊
link |
12:17.000
其實如果你說你用Deep Learning
link |
12:19.000
做語音辨識
link |
12:20.000
你就是做像作業2那個方式
link |
12:22.000
你先用類似作業2的Network
link |
12:25.000
產生每一個Friend
link |
12:27.000
他對應到哪一個Phoning
link |
12:28.000
接下來呢
link |
12:29.000
你再把他丟到另外一個
link |
12:32.000
如果我們叫WFST啦
link |
12:34.000
那你就想成是
link |
12:35.000
Rule-based的東西就對了
link |
12:36.000
接下來呢
link |
12:37.000
年後的
link |
12:38.000
他可以把那個Phoning的Sequence
link |
12:39.000
吃進去
link |
12:40.000
然後想辦法呢
link |
12:41.000
把他轉成文字這樣
link |
12:42.000
那從Phoning轉成文字那一段
link |
12:44.000
你可以想成
link |
12:45.000
他其實是用規則產生出來的
link |
12:47.000
所以總之
link |
12:48.000
其實這篇文章裡面做的事
link |
12:50.000
跟大家在作業2裡面
link |
12:52.000
做的其實是一樣的
link |
12:54.000
好 雖然他是語音辨識
link |
12:56.000
但他並不是真的跑出文字
link |
12:58.000
他其實也是跑出Phoning來
link |
13:00.000
其實那個時候啊
link |
13:01.000
跑出來的也不是Phoning
link |
13:02.000
他跑出來是比Phoning更小的單位
link |
13:05.000
叫做Xenon這樣子
link |
13:07.000
一個Phoning
link |
13:08.000
由三個Xenon所組成
link |
13:10.000
那個時候覺得
link |
13:11.000
預測Phoning還是更困難一點
link |
13:13.000
所以我們預測一個更小的單位
link |
13:14.000
預測叫做Xenon的東西
link |
13:16.000
不過這個都是
link |
13:17.000
就是過去的歷史啦
link |
13:19.000
你可以直接弄個
link |
13:20.000
Sequence to Sequence的Model
link |
13:22.000
丟進聲音訊號
link |
13:23.000
直接就輸出文字
link |
13:24.000
然後中間呢
link |
13:25.000
就不需要再接觸人的力量了
link |
13:27.000
好 那我們回到這個
link |
13:29.000
投影片上的數據
link |
13:31.000
如果我們是一層的Network
link |
13:33.000
2000個Neural
link |
13:34.000
錯誤率24.2
link |
13:37.000
兩層的Network
link |
13:39.000
每一層一樣是2000個Neural
link |
13:41.000
20.4%的錯誤率
link |
13:43.000
三層18.4
link |
13:45.000
四層17.8
link |
13:47.000
五層17.2
link |
13:48.000
七層17.1
link |
13:50.000
這個Network越深
link |
13:52.000
錯誤率越低
link |
13:53.000
所以Network越深
link |
13:54.000
表現越好
link |
13:56.000
這個哇
link |
13:57.000
就是Deep Learning的力量
link |
13:59.000
當你這麼講的時候
link |
14:00.000
有人就會質疑說
link |
14:02.000
這個當Network越深的時候
link |
14:04.000
它的參數量就越多啊
link |
14:07.000
當參數量越多的時候
link |
14:09.000
你可以讓你的理想
link |
14:11.000
越來越美好
link |
14:13.000
讓你的理想越來越美好
link |
14:15.000
如果今天你的資料量足夠多
link |
14:17.000
你知道這個
link |
14:18.000
理想跟現實的差距
link |
14:20.000
取決於兩件事嘛
link |
14:21.000
一件事情是
link |
14:23.000
你的模型有多大
link |
14:24.000
如果太大
link |
14:25.000
差距就會很大
link |
14:26.000
但另外一件事情是取決於
link |
14:28.000
你有多少的訓練資料
link |
14:30.000
如果今天收集的到
link |
14:31.000
足夠多的訓練資料
link |
14:32.000
就算你的模型很大
link |
14:34.000
理想跟現實也會是接近的
link |
14:37.000
所以當我們把Network
link |
14:38.000
越疊越深的時候
link |
14:40.000
代表說你的這個H
link |
14:41.000
你的模型越來越大
link |
14:43.000
那你的這個理想
link |
14:45.000
會越來越好
link |
14:46.000
你的理想的Loss
link |
14:47.000
會越來越低
link |
14:49.000
那如果今天
link |
14:50.000
有足夠的資料量
link |
14:51.000
理想跟現實
link |
14:52.000
也不會差太多
link |
14:54.000
所以深度學習
link |
14:55.000
沒什麼神奇的
link |
14:56.000
就是需要一個大模型
link |
14:58.000
但大模型
link |
14:59.000
往往伴隨著
link |
15:00.000
需要大量的資料
link |
15:03.000
所以很多人對
link |
15:04.000
深度學習的印象就是
link |
15:05.000
深度學習就是大模型
link |
15:07.000
大模型就要大資料
link |
15:09.000
沒有大資料
link |
15:10.000
就會Overfitting
link |
15:11.000
所以沒有大資料
link |
15:12.000
我們不適合用深度學習
link |
15:15.000
那接下來還會有人質疑說
link |
15:17.000
用個大模型
link |
15:18.000
有什麼了不起的
link |
15:19.000
不需要深度學習
link |
15:20.000
我們也可以製造出
link |
15:22.000
很大的模型啊
link |
15:23.000
舉例來說
link |
15:24.000
我們也可以讓模型
link |
15:26.000
不要往天空發展
link |
15:28.000
不要往直向的發展
link |
15:30.000
而讓它變胖
link |
15:31.000
往橫向的發展
link |
15:33.000
這樣子也可以製造出
link |
15:35.000
很大的模型啊
link |
15:37.000
所以光是把Layer加深
link |
15:41.000
把深度學習的網路加深
link |
15:43.000
說它Performance會比較好
link |
15:45.000
說它的Error rate
link |
15:47.000
與變色錯誤率會比較低
link |
15:49.000
是不夠的
link |
15:51.000
如果你要真的體現
link |
15:52.000
深度學習的力量的話
link |
15:54.000
你應該把一個矮胖的內窩
link |
15:58.000
跟一個高瘦的內窩
link |
16:00.000
來進行評比
link |
16:02.000
當它們參數量一樣的時候
link |
16:05.000
當它們有一樣的參數量
link |
16:07.000
一樣的未知的參數的時候
link |
16:10.000
那到底誰會比較好呢
link |
16:13.000
所以剛才在同一篇論文裡面
link |
16:15.000
他就做了以下這個實驗
link |
16:17.000
在論文中有這麼一個實驗
link |
16:19.000
他說我們現在試個
link |
16:21.000
一層的內窩吧
link |
16:23.000
一層的內窩但是把它長得很胖
link |
16:25.000
有3772個Neuron
link |
16:27.000
那為什麼選3772呢
link |
16:29.000
就是當你一層的內窩
link |
16:31.000
3772個Neuron的時候
link |
16:33.000
它的參數量會跟五層內窩
link |
16:35.000
2000個Neuron的參數量
link |
16:37.000
是接近的
link |
16:39.000
當你選擇一層3772個Neuron的時候
link |
16:42.000
你的錯誤率是22.5
link |
16:45.000
你會發現說
link |
16:47.000
同樣的參數量下
link |
16:49.000
當我們把這些參數往直向發展
link |
16:52.000
往天空發展
link |
16:54.000
往深的多層的方向發展的時候
link |
16:57.000
模型的表現是比較好的
link |
17:01.000
同樣的道理今天
link |
17:03.000
七層每層2000個Neuron
link |
17:05.000
跟一層4634個Neuron
link |
17:08.000
它們的參數量是一樣的
link |
17:10.000
但是七層的內窩
link |
17:12.000
表現是遠好於一層的內窩
link |
17:15.000
甚至當你把參數量
link |
17:17.000
不斷的增加
link |
17:19.000
一層的內窩有16K個Neuron的時候
link |
17:22.000
所以右下角的這個內窩
link |
17:25.000
它的參數量是遠大於
link |
17:27.000
投影片上的其他的內窩的
link |
17:31.000
就算是你開了一個
link |
17:33.000
很大的一層矮胖的內窩
link |
17:36.000
它的表現雖然比同樣層數2000個Neuron還要好
link |
17:40.000
但是你只要疊兩層的內窩
link |
17:43.000
雖然它的參數量是遠少於巨大模型的
link |
17:47.000
但是深的模型
link |
17:49.000
深的網路
link |
17:51.000
它的錯誤率還是比較低的
link |
17:54.000
所以這個是深度學習真正的力量
link |
17:58.000
當你有同樣大小的模型的時候
link |
18:01.000
與其把內窩變胖
link |
18:03.000
不如把內窩變高
link |
18:06.000
反而會得到比較好的結果
link |
18:09.000
接下來問的問題就是
link |
18:11.000
為什麼會這樣呢?
link |
18:13.000
為什麼把內窩變高
link |
18:15.000
比把內窩變胖
link |
18:17.000
更加的有效呢?
link |
18:20.000
那直接跟大家講結論
link |
18:23.000
雖然一個Hidden Layer的內窩
link |
18:26.000
可以表示任何Function
link |
18:29.000
但是當你要表示某一個Function的時候
link |
18:32.000
往往用一個Deep的架構
link |
18:35.000
會是比較有效率的
link |
18:38.000
舉例來說假設你有某一個Function
link |
18:41.000
這邊就隨便畫一個綠色的Function
link |
18:43.000
你可以用一個矮胖的內窩
link |
18:45.000
來產生這個Function
link |
18:47.000
你也可以用一個高瘦的內窩
link |
18:49.000
來產生這個Function
link |
18:51.000
但是往往使用高瘦的內窩
link |
18:53.000
你需要的參數量是比較少的
link |
18:57.000
矮胖的內窩反而會需要比較多的參數
link |
19:02.000
所以你會發現說
link |
19:04.000
你要做到同一件事
link |
19:05.000
你要產生某一個Function
link |
19:07.000
用高瘦的內窩反而是比較有效率的
link |
19:12.000
所以用Deep Learning並不是比較容易Overfitting
link |
19:15.000
很多人對Deep Learning都有一個誤解
link |
19:17.000
所謂的Deep就是大的模型
link |
19:19.000
很多個Layer
link |
19:20.000
增加了參數
link |
19:21.000
增加了參數
link |
19:22.000
如果你沒有足夠的Data
link |
19:23.000
那就會Overfitting
link |
19:24.000
但這不是Deep Learning的核心
link |
19:26.000
並不是Deep Learning真正的優勢所在
link |
19:29.000
Deep Learning真正的優勢所在是
link |
19:31.000
當你要做某一件事情
link |
19:32.000
當你要產生某一個Function的時候
link |
19:34.000
你需要比較少的參數
link |
19:37.000
比較少的參數意味著什麼
link |
19:38.000
比較少的參數意味著
link |
19:40.000
你比較不會Overfitting
link |
19:42.000
或者是你只需要比較少的訓練資料
link |
19:46.000
是不是跟你直覺想到的
link |
19:48.000
或者是跟坊間報章雜誌上隨便看到的
link |
19:51.000
是正好相反的呢
link |
19:53.000
因為一般的印象就是Deep Learning
link |
19:55.000
就是大資料容易Overfitting
link |
19:57.000
但事實上Deep Learning它真正的強項
link |
19:59.000
反而是不容易Overfitting
link |
20:02.000
那我們來講一下
link |
20:05.000
為什麼Deep
link |
20:07.000
為什麼把Neo疊多層
link |
20:09.000
會得到這樣的效果呢
link |
20:11.000
在我們直接探討Deep Learning的好處之前
link |
20:14.000
我們先來舉幾個例子
link |
20:16.000
告訴你說
link |
20:17.000
深多層往往會帶來什麼好處
link |
20:21.000
第一個例子是有關邏輯電路
link |
20:24.000
修過邏輯電路的同學舉手一下
link |
20:28.000
很多好手放下
link |
20:30.000
因為大多數的同學都修過邏輯電路
link |
20:34.000
那今天假設有人說
link |
20:36.000
我們要用邏輯電路來兜一個
link |
20:39.000
Parity Check的模組
link |
20:41.000
什麼是Parity Check呢
link |
20:43.000
Parity Check的模組就是
link |
20:45.000
你給你的電路一串0101的Sequence
link |
20:50.000
然後接下來你的電路要去數
link |
20:53.000
這個Sequence裡面
link |
20:55.000
1出現的次數是奇數還是偶數
link |
20:59.000
如果1出現的次數是偶數
link |
21:01.000
那就輸出1
link |
21:02.000
如果1出現的次數是奇數
link |
21:04.000
就輸出0
link |
21:05.000
像這樣的模組
link |
21:07.000
在通訊領域裡面是很重要的
link |
21:10.000
假設有人叫你兜這樣的電路出來
link |
21:14.000
其實如果你有修過邏輯電路設計的話
link |
21:18.000
你會知道說
link |
21:19.000
不管什麼樣的要求
link |
21:21.000
你一定都可以把電路兜出來
link |
21:24.000
為什麼
link |
21:25.000
因為只要兩層電路
link |
21:27.000
只要兩層邏輯閘
link |
21:29.000
可以製造出任何的功能
link |
21:32.000
對不對
link |
21:33.000
所以在這個例子裡面
link |
21:35.000
如果你要做一個Parity Check的模組
link |
21:37.000
如果你只用兩層的邏輯閘的話
link |
21:41.000
那你需要2的低次方
link |
21:44.000
這邊低是什麼
link |
21:45.000
低是輸入的Sequence的長度
link |
21:48.000
假設輸入的Sequence長度叫做低的話
link |
21:50.000
你需要2的低次方的Gate
link |
21:53.000
你就可以兜出這個Parity Check的模組
link |
21:56.000
但是你知道說
link |
21:57.000
這並不是一個有效率的方法
link |
22:00.000
你可以用兩層邏輯電路做出任何的東西
link |
22:04.000
但是沒有人用兩層的邏輯電路來做一台電腦
link |
22:07.000
因為你知道說
link |
22:08.000
把邏輯電路用其他的方式來建構
link |
22:12.000
可能會產生更有效率的
link |
22:14.000
可能會是更有效率的解法
link |
22:16.000
舉例來說
link |
22:17.000
在Parity Check裡面
link |
22:19.000
如果你要用邏輯電路來解Parity Check的問題
link |
22:22.000
你根本不需要用到2個低次方的Gate
link |
22:26.000
其實如果依照上面這個例子
link |
22:29.000
輸入是4個Bit的時候
link |
22:31.000
你其實只需要3個XNOR的Gate
link |
22:35.000
就可以得到我們想要的結果了
link |
22:37.000
那XNOR的Gate是什麼呢
link |
22:39.000
它的真值表就寫在右上角
link |
22:41.000
當輸入XNOR的Gate
link |
22:44.000
就是輸入兩個Bit輸出一個Bit
link |
22:46.000
當輸入的兩個Bit不一樣的時候
link |
22:48.000
輸出就是0
link |
22:49.000
輸出兩個Bit一樣的時候
link |
22:50.000
輸出就是1
link |
22:52.000
所以當XNOR的Gate
link |
22:53.000
比如說舉這個例子
link |
22:55.000
輸入是1010
link |
22:57.000
然後10進去XNOR的Gate
link |
22:59.000
它就輸出0
link |
23:01.000
然後接下來
link |
23:02.000
把第一個XNOR的Gate
link |
23:04.000
跟第三個Bit結合起來
link |
23:06.000
再得到第二個輸出
link |
23:08.000
然後把第二個輸出
link |
23:09.000
再跟最後一個Bit結合起來
link |
23:10.000
得到最終的輸出
link |
23:12.000
你會得到你要的答案
link |
23:14.000
所以你發現說
link |
23:15.000
當你把這些XNOR的Gate
link |
23:17.000
不是排成兩層
link |
23:18.000
而是排成一個Diff的結構的時候
link |
23:21.000
就是第一個XNOR的Gate
link |
23:23.000
它的輸出會是
link |
23:24.000
下一個XNOR的Gate的輸入
link |
23:26.000
下一個XNOR的Gate的輸出
link |
23:27.000
又會再是下一個XNOR的Gate的輸入
link |
23:30.000
當你把它們串成一排的時候
link |
23:32.000
你會用比較少的Gate
link |
23:34.000
就做到比較複雜的事情
link |
23:37.000
這個是用邏輯電路來做舉例
link |
23:42.000
那如果用程式來做舉例的話
link |
23:45.000
也是一樣的
link |
23:46.000
你知道說今天我們在寫程式的時候
link |
23:49.000
你的程式裡面
link |
23:51.000
也是會有架構的
link |
23:54.000
你不會把所有的東西
link |
23:56.000
都放在你的Main Function裡面
link |
23:59.000
對不對
link |
24:00.000
你除了Main Function以外
link |
24:01.000
你會寫很多的Module
link |
24:03.000
你會在適當的時機去呼喚這些Module
link |
24:07.000
然後呢
link |
24:08.000
每一個Module
link |
24:09.000
或者每一個這個Function裡面
link |
24:11.000
都還有它可以去呼叫的Subfunction
link |
24:14.000
然後不同的Function
link |
24:16.000
也可以呼叫同樣的Subfunction
link |
24:19.000
你知道你在寫程式的時候
link |
24:21.000
你也是會有某種結構的
link |
24:24.000
而有這種結構的好處是什麼呢
link |
24:26.000
有這種結構的好處是
link |
24:27.000
它會避免你的程式太過冗長
link |
24:30.000
增加它的可讀性
link |
24:32.000
那如果同一個功能
link |
24:34.000
在一個程式裡面需要被反覆使用的話
link |
24:37.000
那你可以去Call同樣的Function
link |
24:39.000
可以讓你的程式更為簡潔
link |
24:42.000
所以在寫程式的時候
link |
24:44.000
其實你也會用到頂的結構
link |
24:47.000
或者是
link |
24:48.000
假設我們再舉一個
link |
24:50.000
跟電機自動領域完全無關的例子
link |
24:53.000
那這邊舉的例子呢
link |
24:54.000
是剪窗花
link |
24:56.000
大家應該都知道剪窗花是什麼吧
link |
24:58.000
就你一個設置
link |
24:59.000
然後把這個設置呢
link |
25:01.000
把它折起來
link |
25:02.000
然後在折起來的設置上剪幾刀
link |
25:05.000
展開你就有一個複雜的圖案
link |
25:08.000
那雖然這個複雜的圖案
link |
25:10.000
你也可以直接去剪它
link |
25:12.000
但你要直接剪出這個複雜的圖案
link |
25:15.000
跟哪一張設置來
link |
25:16.000
直接剪出這個圖案
link |
25:18.000
沒有先把紙做對摺直接剪
link |
25:20.000
那是很麻煩的
link |
25:22.000
你要剪很多刀
link |
25:23.000
但如果我們把紙折起來
link |
25:26.000
我們只需要剪幾刀
link |
25:27.000
就可以剪出複雜的圖案
link |
25:30.000
我們會比較有效率
link |
25:33.000
所以今天這個折紙的過程
link |
25:35.000
把紙對摺再對摺
link |
25:37.000
這個對摺的過程
link |
25:39.000
其實就是Deep Learning裡面的Layer
link |
25:42.000
在做的事情
link |
25:44.000
好那以上呢
link |
25:45.000
就是舉一些例子
link |
25:48.000
跟大家說明
link |
25:49.000
Deep有什麼潛在的好處
link |
25:52.000
好那接下來
link |
25:53.000
我們就真的來看
link |
25:55.000
當一個Network
link |
25:56.000
把它弄成Deep的時候
link |
25:58.000
會發生什麼樣的事情
link |
26:00.000
我們先來看一個
link |
26:02.000
只有一層的Shallow的Network
link |
26:04.000
這個只有一層的Shallow的Network
link |
26:07.000
它的輸入我們叫做X
link |
26:09.000
它的輸出我們叫做A1
link |
26:13.000
那這個Network呢
link |
26:14.000
假設它的參數
link |
26:15.000
我們都已經知道了
link |
26:18.000
它有兩個Neuron
link |
26:19.000
第一個Neuron呢
link |
26:20.000
它的Weight是1
link |
26:21.000
Bias是-0.5
link |
26:23.000
第二個Neuron呢
link |
26:24.000
它的Weight是-1
link |
26:25.000
它的Bias是0.5
link |
26:28.000
好那在進入這兩個Neuron之前
link |
26:31.000
進入這兩個Neuron的數值
link |
26:33.000
分別是X-0.5跟-X加0.5
link |
26:39.000
那這兩個Neuron呢
link |
26:40.000
我們這邊用的Activation Function
link |
26:42.000
是Relu這個Activation Function
link |
26:44.000
所以把X-0.5跟-X加0.5通過Relu
link |
26:48.000
然後呢再加起來
link |
26:50.000
那再加起來的時候呢
link |
26:52.000
我們會把這兩個Neuron的Output
link |
26:54.000
都乘上1
link |
26:55.000
再加起來得到A1
link |
26:58.000
那我們現在來想一下
link |
26:59.000
這個X跟A1之間的關係
link |
27:02.000
是長什麼樣子的
link |
27:05.000
假設我們的橫軸是X
link |
27:07.000
這邊其實不是橫軸
link |
27:08.000
這邊是縱軸
link |
27:09.000
這個圖呢
link |
27:10.000
是你要把頭轉90度來看的
link |
27:12.000
希望你可以看得懂
link |
27:14.000
這個軸是我們的X
link |
27:17.000
這個軸是我們的A1
link |
27:19.000
那我們來畫一下
link |
27:20.000
X跟A1有什麼樣的關係
link |
27:25.000
那你其實可以用想的
link |
27:26.000
你就可以想一下
link |
27:27.000
X跟A1之間的關係
link |
27:29.000
因為第一個Neuron
link |
27:30.000
它是一個Relu
link |
27:33.000
所以當輸入的這個X大於0.5的時候
link |
27:36.000
輸入的X大於0.5的時候
link |
27:38.000
輸出就會跟輸入一樣
link |
27:41.000
如果今天輸入的X小於0.5的時候
link |
27:43.000
輸出就會是0
link |
27:47.000
所以第一個Neuron
link |
27:48.000
它製造出了這一條線
link |
27:51.000
它製造出了這一條線
link |
27:52.000
當輸入的值小於0.5的時候
link |
27:54.000
輸出就是0了
link |
27:56.000
它對A1就沒有任何貢獻了
link |
27:59.000
那這個呢
link |
28:00.000
-X加0.5呢
link |
28:02.000
如果輸入小於0.5會發生什麼事呢
link |
28:05.000
如果輸入小於0.5的話
link |
28:08.000
那輸出就會跟輸入一樣
link |
28:11.000
如果輸入大於0.5的話
link |
28:13.000
那輸出就會是0
link |
28:15.000
所以下面這個Neuron
link |
28:16.000
它貢獻了這一條線
link |
28:18.000
貢獻了這一條線
link |
28:20.000
當輸入大於0.5的時候
link |
28:21.000
輸出就會是0
link |
28:22.000
就沒有任何貢獻了
link |
28:24.000
所以把這兩個藍色的Neuron結合起來
link |
28:27.000
我們產生的是這樣一條線
link |
28:30.000
我們產生的是這樣的一個凹部
link |
28:34.000
那兩個Neuron分別貢獻一半
link |
28:37.000
把這兩個Neuron的輸出結合起來
link |
28:39.000
就變成一個凹部
link |
28:42.000
那這個對大家來說都非常簡單
link |
28:44.000
非常的直覺
link |
28:46.000
那接下來我們把這個Neuron變深
link |
28:49.000
看看會發生什麼樣的事情
link |
28:52.000
所以我們再加第二層的Neuron
link |
28:55.000
那怎麼把第二層的Neuron加上去呢
link |
28:58.000
首先呢
link |
28:59.000
第一個Neuron
link |
29:00.000
它把之前的A1
link |
29:03.000
加上一個Bias
link |
29:05.000
那我們這邊Bias的設-0.5
link |
29:09.000
所以第一個Neuron
link |
29:10.000
它的輸入是A1-0.5
link |
29:14.000
那第二個Neuron呢
link |
29:17.000
它把前面這兩個藍色Neuron的輸出
link |
29:20.000
都乘上-1
link |
29:23.000
然後呢
link |
29:26.000
因為本來如果藍色這兩個Neuron都乘上1
link |
29:28.000
就會變成A1嘛
link |
29:30.000
如果都乘上-1
link |
29:31.000
那就變成-A1
link |
29:33.000
那把這個-A1再加上Bias
link |
29:35.000
這邊Bias的設0.5
link |
29:38.000
得到-A1加0.5
link |
29:40.000
然後再通過一個Redu的Activation Function
link |
29:43.000
這個是我們第二層的兩個Neuron
link |
29:46.000
那我們把我們第二層的這兩個Neuron呢
link |
29:49.000
它的輸出都乘上1
link |
29:50.000
再加起來得到A2
link |
29:52.000
再來我們要問的問題就是
link |
29:54.000
X跟A2間
link |
29:57.000
現在會有什麼樣的關係呢
link |
29:59.000
我們已經知道X跟A1的關係
link |
30:02.000
那A1跟A2的關係
link |
30:05.000
我們其實也可以輕易的把它想出來
link |
30:07.000
這個A1跟A2的關係是什麼呢
link |
30:09.000
這個A1跟A2的關係啊
link |
30:11.000
其實跟X還有A1的關係
link |
30:14.000
是一樣的
link |
30:16.000
對不對
link |
30:17.000
我們已經知道說
link |
30:18.000
假設第一個Neuron
link |
30:19.000
它的Activation Function的輸入是X-0.5
link |
30:22.000
第二個Neuron
link |
30:23.000
它的輸入是-X加0.5
link |
30:25.000
那我們知道X跟A1的關係
link |
30:27.000
就是這個圖的這個樣子
link |
30:29.000
那現在如果第一個綠色的Neuron
link |
30:32.000
它的輸入是A1-0.5
link |
30:34.000
第二個綠色的Neuron
link |
30:35.000
它的輸入是-A1加0.5
link |
30:37.000
那這個A1跟A2之間的關係
link |
30:39.000
會長什麼樣子呢
link |
30:41.000
你就是把藍色這條線
link |
30:43.000
換成綠色這條線
link |
30:45.000
把黑色這條線換成藍色這條線
link |
30:47.000
A1跟A2之間的關係
link |
30:49.000
也是一個山谷的形狀
link |
30:53.000
但是我們現在真正關心的問題
link |
30:55.000
是X跟A2之間的關係
link |
30:59.000
那X跟A2之間有什麼樣的關係呢
link |
31:02.000
我們已經知道
link |
31:03.000
X跟A1之間的關係
link |
31:05.000
我們也知道A1跟A2之間的關係
link |
31:08.000
那接下來我們要問的就是
link |
31:10.000
那X跟A2之間的關係
link |
31:13.000
應該是什麼樣子呢
link |
31:17.000
那我們就來想想看
link |
31:19.000
當我們把X從0一直挪到1的時候
link |
31:23.000
當我們把X從0挪到1的時候
link |
31:25.000
A2會有什麼樣的變化
link |
31:28.000
當我們把X從0挪到1的時候
link |
31:32.000
我們先從這個地方開始
link |
31:34.000
從0的地方
link |
31:35.000
然後一直把這個X的值一直增加
link |
31:38.000
增加到中間
link |
31:39.000
增加到0.5的時候
link |
31:41.000
我們來看A2會有什麼樣的變化
link |
31:44.000
X從0增加到0.5的時候
link |
31:47.000
綠色這條線
link |
31:48.000
也就是A1是怎麼變的
link |
31:50.000
它從1變到0
link |
31:54.000
所以X從0挪到0.5的時候
link |
31:57.000
綠色這條線
link |
31:58.000
也就是A1
link |
31:59.000
它是從1變到0
link |
32:01.000
A1從1變到0
link |
32:02.000
A2呢
link |
32:03.000
A2它就經歷了一次輪迴
link |
32:05.000
它從1變到0又變回1
link |
32:08.000
它就經歷了
link |
32:09.000
從1變到0又變回1這個過程
link |
32:12.000
所以從0到0.5
link |
32:14.000
X從0到0.5的過程中
link |
32:16.000
A2已經經歷了一次輪迴
link |
32:18.000
從1到0又變回了1
link |
32:21.000
那這個是X從0到0.5的變化
link |
32:25.000
那X如果從0.5到1會發生什麼事呢
link |
32:28.000
X從0.5到1
link |
32:30.000
這個藍色這條線是從0到1
link |
32:32.000
藍色這條線是從0到1
link |
32:35.000
那藍色這條線從0到1
link |
32:36.000
綠色這條線是從1變到0
link |
32:38.000
再變回1
link |
32:39.000
所以綠色這條線
link |
32:40.000
就從1變回0再變回1
link |
32:42.000
所以X跟A2的關係
link |
32:44.000
是兩個
link |
32:46.000
一個這個W的形狀
link |
32:48.000
一個W的形狀
link |
32:49.000
本來只是一個V的形狀
link |
32:51.000
但是呢
link |
32:52.000
這個X跟A1的關係
link |
32:54.000
是一個V的形狀
link |
32:55.000
A1跟A2的關係
link |
32:57.000
是一個V的形狀
link |
32:58.000
兩個加起來
link |
32:59.000
就變成一個W的形狀
link |
33:03.000
那這個是接了第二層
link |
33:06.000
而接下來呢
link |
33:08.000
我們接第三層看看
link |
33:10.000
我們現在呢
link |
33:11.000
把A2加上一個BIAS
link |
33:15.000
當作第三層的
link |
33:16.000
第一個Neuron的輸入
link |
33:18.000
我們也給第三層
link |
33:19.000
加另外一個Neuron
link |
33:21.000
這個Neuron呢
link |
33:22.000
它的輸入是-A2加0.5
link |
33:25.000
那把這兩個紅色Neuron的輸出
link |
33:27.000
加起來得到A3
link |
33:30.000
那你就可以很直覺的發現說
link |
33:32.000
這邊X跟A1的關係
link |
33:34.000
A1跟A2的關係
link |
33:35.000
還有A2跟A3的關係
link |
33:37.000
其實都是一樣的
link |
33:38.000
所以A2跟A3的關係
link |
33:40.000
一樣可以畫出一個V字形
link |
33:42.000
當A2從0變到1的時候
link |
33:44.000
A3呢
link |
33:45.000
從1變回0
link |
33:46.000
再變回1
link |
33:48.000
所以A2跟A3的關係
link |
33:49.000
是一個V字形
link |
33:51.000
那現在我們要問的是
link |
33:53.000
那X跟A3的關係
link |
33:55.000
是什麼樣子呢
link |
33:56.000
X跟A3的關係
link |
33:57.000
才是這整個Network
link |
33:58.000
所代表的Function嘛
link |
33:59.000
那X跟A3的關係
link |
34:01.000
是什麼樣呢
link |
34:02.000
我們已經知道
link |
34:03.000
X跟A2的關係
link |
34:04.000
我們知道A2跟A3的關係
link |
34:06.000
兩者疊起來
link |
34:07.000
會發生什麼事呢
link |
34:09.000
那我們就來看看
link |
34:10.000
X跟A3的關係是什麼
link |
34:13.000
當X從0變到1的時候
link |
34:17.000
當X從0變到1的時候
link |
34:19.000
A3會有什麼樣的變化呢
link |
34:23.000
當X從0變到1的時候
link |
34:25.000
首先我們先來看
link |
34:27.000
前面這四分之一的移動
link |
34:29.000
X移動了前面四分之一
link |
34:29.000
從0到0.25
link |
34:34.000
這個時候綠色這條線
link |
34:36.000
是從1一路降到0
link |
34:38.000
綠色這條線
link |
34:39.000
從1一路降到0
link |
34:41.000
那紅色這條線
link |
34:42.000
就從1變回0
link |
34:43.000
再變回1
link |
34:44.000
所以紅色這條線
link |
34:46.000
就產生了一個V字形
link |
34:48.000
同樣的道理
link |
34:49.000
當黑色這條線
link |
34:51.000
再從0.25挪到0.5
link |
34:55.000
從0.25挪到0.5的時候
link |
34:58.000
紅色的線會有什麼變化呢
link |
35:01.000
黑色線從0.25挪到0.5的時候
link |
35:03.000
綠色這條線從0變1
link |
35:06.000
所以紅色這條線
link |
35:07.000
又再產生一個V字形
link |
35:11.000
同樣的道理
link |
35:13.000
剩下這邊
link |
35:14.000
從0.5到1
link |
35:17.000
會發生什麼事呢
link |
35:19.000
綠色這條線
link |
35:20.000
從1變到0再變到1
link |
35:22.000
從1變到0再變回1
link |
35:24.000
所以紅色這條線
link |
35:25.000
它是1到0到1
link |
35:27.000
從1到0到1
link |
35:29.000
所以你發現說呢
link |
35:31.000
當X的變化
link |
35:33.000
從0.5到1的時候
link |
35:37.000
這個紅色這個線
link |
35:39.000
也就是我們的這個A3
link |
35:41.000
它已經幾經輪迴
link |
35:43.000
從1到0又變回1
link |
35:47.000
再變到0
link |
35:48.000
再變到1
link |
35:49.000
又產生了另外一個W形
link |
35:53.000
所以現在
link |
35:54.000
如果我們看X跟A3的關係
link |
35:57.000
看這個有三層的Neural Network
link |
36:01.000
它的Input的X
link |
36:02.000
跟Output的A3的關係
link |
36:04.000
那你發現呢
link |
36:05.000
A3它有2的三次方個線段
link |
36:10.000
2的三次方個Pieces
link |
36:14.000
那以此類推
link |
36:16.000
假設今天在0到1之間
link |
36:19.000
在X從0到1變化的過程中
link |
36:23.000
你想讓一個Neural Network的Output Y呢
link |
36:28.000
它有2的K次方的線段
link |
36:31.000
2的K次方的Pieces
link |
36:34.000
那你需要多複雜的Neural Network呢
link |
36:38.000
現在你的Network的Input是X
link |
36:40.000
Output是Y
link |
36:41.000
Input是X
link |
36:42.000
Output是Y
link |
36:44.000
Y希望有2個K次方的
link |
36:47.000
像這樣鋸齒狀的線段
link |
36:50.000
那你其實不需要一個太複雜的Network
link |
36:53.000
你只要有K層每層兩個Neural
link |
36:57.000
總共2K個Neural
link |
37:00.000
就可以達成像這樣子的
link |
37:03.000
Input跟Output的關係
link |
37:05.000
那同樣的這個鋸齒狀的
link |
37:08.000
Input跟Output的關係
link |
37:10.000
如果你想要用一個Shallow的Network
link |
37:13.000
你要怎麼做到呢
link |
37:15.000
假設一樣輸入是X輸出是Y
link |
37:18.000
但是你的Network只有一層
link |
37:20.000
你要怎麼產生這個
link |
37:22.000
鋸齒狀的輸入跟輸出的關係呢
link |
37:26.000
那也不是做不到
link |
37:27.000
因為我們有說
link |
37:28.000
就算是只有一個Hidden Layer
link |
37:30.000
其實也可以製造出
link |
37:32.000
任何可能的Function
link |
37:35.000
但是你需要大量的Neural
link |
37:38.000
因為當只有一個Hidden Layer的時候
link |
37:40.000
假設你用的Neural是Relu
link |
37:43.000
你的Activation Function是Relu
link |
37:45.000
那每一個Neural只能製造一個線段出來
link |
37:51.000
2的K次方的線段
link |
37:53.000
就需要2的K次方的Neural
link |
37:58.000
所以我們比較一個Shallow跟Deep的Network
link |
38:00.000
要產生同樣的Function
link |
38:03.000
Deep的Network2K個Neural
link |
38:06.000
Shallow的Network是2的K次方的Neural
link |
38:11.000
他們的差距是非常顯著的
link |
38:13.000
他們是Exponential的差別
link |
38:16.000
所以今天要產生同樣的Function的時候
link |
38:19.000
Deep的Network參數量比較小
link |
38:21.000
它有比較簡單的模型
link |
38:24.000
而Shallow的Network它的參數量比較大
link |
38:27.000
你需要一個比較複雜的模型
link |
38:31.000
而複雜的模型比較容易Overfit
link |
38:36.000
或者是複雜的模型
link |
38:38.000
因為比較容易Overfit
link |
38:40.000
所以你必須要比較大量的資料
link |
38:44.000
所以Deep Learning的優勢
link |
38:46.000
跟你直覺想像的是反過來的
link |
38:49.000
很多人以為Deep Learning需要大量的資料
link |
38:52.000
但事實上你要做到同樣的事情
link |
38:55.000
你不用Deep的Network選擇Shallow的Network
link |
38:58.000
你需要更大量的資料
link |
39:03.000
所以我們今天學到一件事
link |
39:06.000
如果你今天你的目標的Function
link |
39:10.000
也就是可以讓你的Loss很低的那個Function
link |
39:15.000
它是複雜而且有規律的
link |
39:18.000
那Deep的Network會優於Shallow的Network
link |
39:23.000
那什麼樣的問題會讓Loss低的那些Function
link |
39:28.000
會是複雜且有規律的呢
link |
39:30.000
那很有可能語音、影像等等這些問題
link |
39:34.000
會讓Loss低的那些Function是複雜而有規律的
link |
39:39.000
那這可以解釋說
link |
39:40.000
為什麼今天深度學習在影像上、在語音上
link |
39:45.000
尤其是效果非常的好呢
link |
39:47.000
那可能就是因為語音跟影像上
link |
39:50.000
那些可以讓Loss特別低的Function
link |
39:52.000
正好是複雜而有規律的
link |
39:56.000
那有人會問說
link |
39:58.000
那到底要多複雜的Function
link |
40:01.000
Deep相較於Shallow才能夠佔到優勢呢
link |
40:06.000
那如果說Function要真的很複雜的時候
link |
40:08.000
Deep才會有優勢
link |
40:09.000
那也許多數的狀況
link |
40:11.000
Deep仍然是不會有優勢的
link |
40:14.000
那在以下這兩段影片裡面
link |
40:18.000
就是實際舉例告訴你說
link |
40:20.000
也許這個所謂的複雜
link |
40:23.000
也不用複雜到哪裡去
link |
40:26.000
那在以下這兩段影片中
link |
40:28.000
會直接告訴你說
link |
40:30.000
假設今天有一個Function
link |
40:32.000
叫Y等於X平方
link |
40:34.000
那Y等於X平方
link |
40:35.000
那顯然是一個非常簡單的Function
link |
40:38.000
我們用Shallow的Network去產生這樣的Function
link |
40:41.000
跟用Deep的Network去產生這樣子的Function
link |
40:44.000
這個比較起來啊
link |
40:46.000
Deep是比Shallow還要Exponential的好
link |
40:50.000
什麼叫Exponential的好
link |
40:52.000
就是Shallow的Network
link |
40:54.000
相較於Deep的Network
link |
40:56.000
要產生Y等於X平方這個Function
link |
40:59.000
它需要Exponential多的參數量
link |
41:06.000
最後就是今天這堂課的結論
link |
41:09.000
深度學習是一個可以讓魚與熊掌
link |
41:13.000
可以兼得的方法
link |
41:15.000
透過深度學習
link |
41:17.000
我們有機會在比較少的
link |
41:20.000
參數量的情況下
link |
41:22.000
得到比較低的Loss
link |
41:25.000
這就是為什麼深度學習
link |
41:27.000
是一個有潛力的方法
link |
41:29.000
因為它是一個可以讓魚與熊掌兼得的方法