back to index

【機器學習2021】預測本頻道觀看人數 (上) - 機器學習基本概念簡介


link |
00:01.000
好,那我們就開始上課吧
link |
00:04.000
那第一堂課啊,是要簡單跟大家介紹一下
link |
00:08.000
Machine Learning 還有 Deep Learning 的基本概念
link |
00:12.000
那等一下呢,會講一個跟寶可夢完全沒有關係的故事
link |
00:18.000
告訴你機器學習還有深度學習的基本概念
link |
00:23.000
好,那什麼是機器學習呢
link |
00:26.000
那我想必大家在報章雜誌上
link |
00:29.000
其實往往都已經聽過機器學習這個詞彙
link |
00:33.000
那你可能也知道說
link |
00:35.000
機器學習就是跟今天很熱門的 AI 好像有那麼一點關聯
link |
00:42.000
那所謂的機器學習到底是什麼呢
link |
00:45.000
顧名思義,好像是說機器它具備有學習的能力
link |
00:50.000
那些科普文章往往把機器學習這個東西吹得玄之又玄
link |
00:56.000
好像機器會學習以後,我們就有了人工智慧
link |
00:59.000
有了人工智慧以後,機器接下來就要統治人類了
link |
01:04.000
那機器學習到底是什麼呢
link |
01:07.000
事實上機器學習概括來說
link |
01:10.000
可以用一句話來描述機器學習這件事
link |
01:15.000
什麼叫機器學習呢
link |
01:17.000
機器學習就是讓機器具備找一個函式的能力
link |
01:23.000
那機器具備找函式的能力以後
link |
01:26.000
它可以做什麼樣的事情呢
link |
01:28.000
它確實可以做很多事
link |
01:30.000
舉例來說,假設你今天想要叫機器做語音辨識
link |
01:34.000
機器聽一段聲音產生這段聲音對應的文字
link |
01:38.000
那你需要的就是一個函式
link |
01:41.000
這個函式的輸入是聲音訊號
link |
01:44.000
輸出是這段聲音訊號的內容
link |
01:48.000
那你可以想像說
link |
01:50.000
這個可以把聲音訊號當作輸入文字
link |
01:53.000
當作輸出的函式顯然非常非常的複雜
link |
01:57.000
它絕對不是你只可以用人手寫出來的方程式
link |
02:02.000
這個函式它非常非常的複雜
link |
02:04.000
人類絕對沒有能力把它寫出來
link |
02:07.000
所以我們期待憑藉著機器的力量
link |
02:10.000
把這個函式自動找出來
link |
02:13.000
這件事情就是機器學習
link |
02:16.000
那剛才舉的例子是語音辨識
link |
02:19.000
還有好多好多的任務
link |
02:21.000
我們都需要找一個很複雜的函式
link |
02:25.000
舉例來說,假設我們現在要做影像辨識
link |
02:29.000
那這個影像辨識我們需要什麼樣的函式呢
link |
02:33.000
這個函式的輸入是一張圖片
link |
02:36.000
它的輸出是什麼呢
link |
02:38.000
它是這個圖片裡面有什麼樣的內容
link |
02:43.000
或者是大家都知道的AlphaGo
link |
02:46.000
其實也可以看作是一個函式
link |
02:49.000
要讓機器下圍棋
link |
02:50.000
我們需要的就是一個函式
link |
02:52.000
這個函式的輸入是棋盤上黑子跟白子的位置
link |
02:56.000
輸出是什麼
link |
02:57.000
輸出是機器下一步應該落子的位置
link |
03:02.000
假設你可以找到一個函式
link |
03:04.000
這個函式的輸入就是棋盤上黑子跟白子的位置
link |
03:08.000
輸出就是下一步應該落子的位置
link |
03:13.000
那我們就可以讓機器自動下圍棋
link |
03:17.000
這件事就可以做一個AlphaGo
link |
03:20.000
那隨著我們要找的函式不同
link |
03:23.000
機器學習有不同的類別
link |
03:26.000
那這邊介紹幾個專有名詞給大家認識一下
link |
03:31.000
第一個專有名詞叫做Regression
link |
03:35.000
Regression的意思是說
link |
03:37.000
假設我們今天要找的函式
link |
03:39.000
它的輸出是一個數值
link |
03:43.000
它的輸出是一個Scalar
link |
03:46.000
那這樣子的機器學習的任務
link |
03:48.000
我們稱之為Regression
link |
03:51.000
那這邊舉一個Regression的例子
link |
03:53.000
假設我們今天要機器做的事情
link |
03:55.000
是預測未來某一個時間的PM2.5的數值
link |
04:00.000
你要叫機器做的事情是找一個函式
link |
04:03.000
這個我們用Apple來表示
link |
04:05.000
這個函式的輸出是明天中午的PM2.5的數值
link |
04:10.000
它的輸入可能是種種跟預測PM2.5有關的指數
link |
04:14.000
包括今天的PM2.5的數值
link |
04:17.000
今天的平均溫度
link |
04:18.000
今天平均的錯氧濃度等等
link |
04:21.000
這個函式可以拿這些數值當作輸入
link |
04:24.000
輸出明天中午的PM2.5的數值
link |
04:28.000
那找這個函式的任務叫做Regression
link |
04:34.000
那還有別的任務嗎
link |
04:36.000
還有別的任務
link |
04:37.000
除了Regression以外
link |
04:39.000
另外一個大家耳熟能詳的任務
link |
04:43.000
叫做Classification
link |
04:45.000
那Classification這個任務要機器做的是選擇力
link |
04:50.000
我們人類先準備好一些選項
link |
04:53.000
這些選項又叫做類別又叫做Class
link |
04:58.000
我們現在要找的函式它的輸出
link |
05:00.000
就是從我們設定好的選項裡面
link |
05:03.000
選擇一個當作輸出
link |
05:06.000
這個問題這個任務就叫做Classification
link |
05:10.000
舉例來說
link |
05:11.000
現在每個人都有Gmail Account
link |
05:14.000
那Gmail Account裡面有一個函式
link |
05:17.000
這個函式可以幫我們偵測一封郵件
link |
05:20.000
是不是垃圾郵件
link |
05:23.000
這個函式的輸入是一封電子郵件
link |
05:27.000
那它的輸出是什麼呢
link |
05:29.000
你要先準備好你要機器選的選項
link |
05:32.000
在偵測垃圾郵件這個問題裡面
link |
05:34.000
可能的選項就是兩個
link |
05:36.000
是垃圾郵件或不是垃圾郵件
link |
05:39.000
Yes或者是No
link |
05:41.000
那機器要從Yes跟No裡面
link |
05:43.000
選一個選項出來
link |
05:45.000
這個問題叫做Classification
link |
05:48.000
那Classification不一定只有兩個選項
link |
05:52.000
也可以有多個選項
link |
05:54.000
舉例來說
link |
05:55.000
AlphaGo本身也是一個Classification的問題
link |
06:01.000
只是這個Classification
link |
06:02.000
它的選項是比較多的
link |
06:04.000
那如果要叫機器下圍棋
link |
06:06.000
你想追到AlphaGo的話
link |
06:08.000
我們要給機器多少個選項呢
link |
06:10.000
你就想想看棋盤上有多少個位置
link |
06:14.000
那我們知道棋盤上有19x19個位置
link |
06:18.000
那叫機器下圍棋這個問題
link |
06:20.000
其實就是一個有19x19個選項的選擇題
link |
06:25.000
你要叫機器做的就是找一個函式
link |
06:28.000
這個函式的輸入是棋盤上A子跟白子的位置
link |
06:31.000
輸出就是從19x19個選項裡面
link |
06:34.000
選出一個正確的選項
link |
06:37.000
從19x19個可以落子的位置裡面
link |
06:40.000
選出下一步應該要落子的位置
link |
06:44.000
這個問題也是一個分類的問題
link |
06:48.000
那其實很多教科書
link |
06:50.000
在講機器學習的種種不同類型的任務的時候
link |
06:55.000
往往就講到這邊
link |
06:56.000
告訴你說機器學習兩大類任務
link |
06:59.000
一個叫做Regression
link |
07:02.000
一個叫做Classification
link |
07:04.000
然後就結束了
link |
07:06.000
但是假設你對機器學習的認知
link |
07:09.000
只停留在機器學習就是兩大類任務
link |
07:12.000
Regression跟Classification
link |
07:14.000
那就好像你以為說這個世界只有五大洲一樣
link |
07:19.000
但你知道這個世界不是只有五大洲對不對
link |
07:22.000
這個世界不是外面是有一個黑暗大陸的
link |
07:26.000
鬼滅之刃連戰之前
link |
07:28.000
我們就已經出發前往黑暗大陸了
link |
07:30.000
鬼滅之刃連戰以後
link |
07:32.000
我們居然都還沒有到
link |
07:33.000
可見這個黑暗大陸距離我們遠
link |
07:36.000
那在機器學習那個領域裡面
link |
07:38.000
所謂的黑暗大陸是什麼呢
link |
07:40.000
在Regression跟Classification以外
link |
07:43.000
大家往往害怕碰觸的問題叫做Structure問題
link |
07:48.000
也就是機器今天不只是要做選擇題
link |
07:51.000
不只是輸出一個數字
link |
07:53.000
它要產生一個有結構的物件
link |
07:57.000
舉例來說機器畫一張圖
link |
08:00.000
寫一篇文章
link |
08:01.000
這種叫機器產生有結構的東西的這個問題
link |
08:06.000
就叫做Structure Learning
link |
08:09.000
如果要講的比較擬人化比較潮一點
link |
08:12.000
Structure Learning
link |
08:13.000
你可以用擬人化的講法說
link |
08:15.000
我們就是要叫機器學會創造這件事情
link |
08:19.000
到目前為止
link |
08:21.000
我們就是講了三個機器學習的任務
link |
08:24.000
Regression Classification跟Structure Learning
link |
08:28.000
接下來我們要講的是
link |
08:30.000
我們說機器學習就是要找一個函式
link |
08:34.000
機器怎麼找一個函式呢
link |
08:37.000
這邊要用個例子跟大家說明說
link |
08:40.000
機器怎麼找一個函式
link |
08:43.000
這邊的例子是什麼呢
link |
08:45.000
這邊的例子
link |
08:46.000
在講這個例子之前
link |
08:48.000
先跟大家說一下
link |
08:49.000
這門課有一個YouTube的頻道
link |
08:53.000
我會把上課的錄影放到YouTube的頻道上面
link |
09:00.000
這個頻道感謝過去修過這門課的同學不嫌棄
link |
09:04.000
其實也蠻多人訂閱
link |
09:06.000
所以我算是一個三流的YouTuber
link |
09:09.000
是沒有什麼太多流量
link |
09:10.000
但是也是有七萬多訂閱
link |
09:14.000
那為什麼突然提到這個YouTube的頻道呢
link |
09:17.000
因為我們等一下要舉的例子
link |
09:19.000
跟YouTube是有關係的
link |
09:22.000
那你知道身為一個YouTuber
link |
09:24.000
YouTuber在意的東西是什麼呢
link |
09:26.000
YouTuber在意的就是這個頻道的流量
link |
09:29.000
對不對
link |
09:30.000
假設有一個YouTuber是靠著YouTube維生的
link |
09:34.000
他會在意說頻道有沒有流量
link |
09:37.000
這樣他才會知道他可以獲利多少
link |
09:41.000
所以我在想說
link |
09:42.000
我們有沒有可能找一個函式
link |
09:45.000
這個函式他的輸入是YouTube後台的資訊
link |
09:49.000
輸出是這個頻道隔天的總點閱率總共有多少
link |
09:55.000
假設你自己有YouTube頻道的話
link |
09:57.000
你會知道說在YouTube後台
link |
09:59.000
你可以看到很多相關的資訊
link |
10:02.000
比如說每一天按讚的人數有多少
link |
10:05.000
每一天訂閱的人數有多少
link |
10:07.000
每天觀看的次數有多少
link |
10:09.000
我們能不能夠根據一個頻道
link |
10:11.000
過往所有的資訊去預測
link |
10:14.000
他明天有可能觀看的次數是多少呢
link |
10:18.000
我們能不能夠找一個函式
link |
10:20.000
這個函式的輸入是YouTube上面
link |
10:24.000
YouTube後台所有的資訊
link |
10:26.000
輸出就是某一天隔天
link |
10:30.000
這個頻道會有的總觀看的次數呢
link |
10:34.000
那你可能會問說為什麼要做這個
link |
10:37.000
如果我有盈利的話
link |
10:39.000
我可以知道我未來可以賺到多少錢
link |
10:42.000
但我其實沒有開盈利
link |
10:43.000
所以我也不知道為什麼要做這個就是了
link |
10:45.000
完全沒有任何卵用
link |
10:47.000
我單純就是想舉一個例子而已
link |
10:50.000
好那接下來我們就要問
link |
10:53.000
怎麼找出這個函式呢
link |
10:55.000
怎麼找函式F
link |
10:56.000
輸入是YouTube後台的資料
link |
10:58.000
輸出是這個頻道隔天的點閱的總人數呢
link |
11:03.000
那機器學習找這個函式的過程
link |
11:06.000
分成三個步驟
link |
11:08.000
那我們就用YouTube頻道點閱人數
link |
11:11.000
預測這件事情來跟大家說明
link |
11:14.000
這三個步驟是怎麼運作的
link |
11:17.000
第一個步驟是
link |
11:19.000
我們要寫出一個帶有未知參數的函式
link |
11:25.000
簡單來說就是我們先猜測一下
link |
11:28.000
我們打算找的這個函式F
link |
11:30.000
它的數學式到底長什麼樣子
link |
11:35.000
舉例來說
link |
11:36.000
我們這邊先做一個最初步的猜測
link |
11:39.000
這個F長什麼樣子呢
link |
11:41.000
這個輸入跟Y之間有什麼樣的關係呢
link |
11:45.000
我們寫成這個樣子
link |
11:46.000
Y等於B加W乘以X1
link |
11:51.000
這邊的每一個數值是什麼呢
link |
11:53.000
這個Y就假設是今天吧
link |
11:56.000
這個Y因為今天還沒有過完
link |
11:58.000
所以我們還不知道今天總共的點閱次數是多少
link |
12:01.000
所以這件事情是我們未知的
link |
12:03.000
Y是我們準備要預測的東西
link |
12:05.000
我們準備要預測的是今天2月26號
link |
12:08.000
這個頻道總共觀看的人數
link |
12:11.000
那X1是什麼呢
link |
12:13.000
X1是這個頻道前一天總共觀看的人數
link |
12:18.000
Y跟X1都是數值
link |
12:22.000
Y是我們準備要預測的東西
link |
12:27.000
而X1是我們已經知道的資訊
link |
12:31.000
那B跟W是什麼呢
link |
12:33.000
B跟W是未知的參數
link |
12:37.000
它是準備要透過資料去找出來的
link |
12:40.000
我們還不知道W跟B應該是多少
link |
12:44.000
我們只是隱約的猜測說
link |
12:46.000
那這個猜測為什麼會有這個猜測呢
link |
12:48.000
這個猜測往往就來自於
link |
12:50.000
你對這個問題的紙上的了解
link |
12:53.000
也就是Domain Knowledge
link |
12:55.000
所以常常會聽到有人說
link |
12:57.000
做機器學習你就需要一些Domain Knowledge
link |
13:01.000
這個Domain Knowledge通常是用在哪裡呢
link |
13:04.000
這個Domain Knowledge就是用在
link |
13:06.000
你寫這個代表未知數的函數的時候
link |
13:10.000
所以我們怎麼知道說
link |
13:12.000
這個能夠預測未來點閱次數的函式F
link |
13:15.000
它就一定是前一天的點閱次數
link |
13:19.000
乘上W再加上B呢
link |
13:21.000
我們其實不知道
link |
13:22.000
這是一個猜測
link |
13:24.000
也許我們覺得說
link |
13:25.000
今天的點閱次數
link |
13:29.000
總是會跟昨天的點閱次數有點關聯吧
link |
13:32.000
所以我們把昨天的點閱次數
link |
13:34.000
乘上一個數值
link |
13:36.000
但是總是不會一模一樣
link |
13:37.000
所以再加上一個B做修正
link |
13:39.000
當作是對於2月26號點閱次數的預測
link |
13:44.000
這是一個猜測
link |
13:46.000
它不一定是對的
link |
13:47.000
我們等一下回頭
link |
13:48.000
會再來修正這個猜測
link |
13:51.000
那現在總之
link |
13:52.000
我們就隨便猜說
link |
13:53.000
Y等於B加W乘以X1
link |
13:56.000
而B跟W是未知的
link |
13:59.000
這個帶有未知的參數
link |
14:02.000
這個parameter中文通常翻成參數
link |
14:05.000
這個帶有unknown的parameter的
link |
14:07.000
這個function
link |
14:09.000
我們就叫做model
link |
14:11.000
所以常常聽到有人說
link |
14:13.000
模型
link |
14:14.000
model這個東西
link |
14:15.000
model這個東西
link |
14:16.000
在機器學習裡面
link |
14:18.000
就是一個帶有未知的parameter的function
link |
14:23.000
那這個X1
link |
14:25.000
是這個function裡面
link |
14:26.000
我們已經知道的東西
link |
14:28.000
它是來自於YouTube的後台資訊
link |
14:31.000
我們已經知道
link |
14:32.000
2月25號點閱的總人數是多少
link |
14:35.000
這個東西叫做feature
link |
14:38.000
而W跟B
link |
14:39.000
是我們不知道的
link |
14:40.000
它是unknown的parameter
link |
14:42.000
那這邊我們也給W跟B
link |
14:44.000
給它一個名字
link |
14:46.000
這個跟feature做相乘的
link |
14:48.000
未知的參數
link |
14:49.000
這個W
link |
14:50.000
我們叫它weight
link |
14:52.000
這個沒有跟feature相乘的
link |
14:54.000
是直接加上去的
link |
14:56.000
這個我們叫它bias
link |
14:58.000
這個只是一些名詞的定義而已
link |
15:01.000
讓等一下我們講課的時候
link |
15:03.000
在稱呼模型裡面的每一個東西的時候
link |
15:06.000
會更為方便
link |
15:07.000
這個是第一個步驟
link |
15:12.000
第二個步驟是什麼呢
link |
15:14.000
第二個步驟
link |
15:15.000
是我們要定義一個東西
link |
15:17.000
叫做Loss
link |
15:19.000
什麼是Loss呢
link |
15:21.000
Loss它也是一個function
link |
15:25.000
那這個function它的輸入
link |
15:28.000
是我們model裡面的參數
link |
15:32.000
剛才已經把我們的model寫出來了
link |
15:34.000
對不對
link |
15:35.000
我們的model叫做
link |
15:36.000
Y等於B加W乘以X1
link |
15:39.000
而B跟W是未知的
link |
15:41.000
是我們準備要找出來的
link |
15:43.000
那所謂的Loss
link |
15:46.000
它是一個function
link |
15:48.000
這個function的輸入是什麼
link |
15:50.000
這個function的輸入
link |
15:51.000
就是B跟W
link |
15:54.000
它是一個function
link |
15:55.000
它的輸入是parameter
link |
15:57.000
是model裡面的parameter
link |
16:00.000
那這個Loss
link |
16:01.000
這個function輸出的詞代表什麼呢
link |
16:03.000
這個function輸出的詞代表說
link |
16:06.000
現在如果我們把這一組未知的參數
link |
16:10.000
設定某一個數值的時候
link |
16:12.000
這個數值好還是不好
link |
16:16.000
那這樣講可能你覺得有點抽象
link |
16:19.000
所以我們就舉一個具體的例子
link |
16:21.000
假設現在我們給未知的參數的設定是
link |
16:26.000
B這個bias等於0.5K
link |
16:30.000
這個W呢直接等於1
link |
16:34.000
那這個Loss怎麼計算呢
link |
16:36.000
如果我們B設0.5K
link |
16:38.000
這個W設1
link |
16:41.000
那我們拿來預測
link |
16:43.000
未來的這個點閱次數的函式
link |
16:46.000
就變成Y等於0.5K加1倍的X1
link |
16:52.000
那這樣子的一個函式
link |
16:54.000
這個0.5K跟1
link |
16:56.000
他們所代表的這個函式
link |
16:58.000
它有多好呢
link |
17:00.000
這個東西就是Loss
link |
17:02.000
那在我們的問題裡面
link |
17:04.000
我們要怎麼計算這個Loss呢
link |
17:07.000
這個我們就要從訓練的資料來進行計算
link |
17:11.000
在這個問題裡面
link |
17:13.000
我們的訓練資料是什麼呢
link |
17:15.000
我們的訓練資料是這個頻道過去的點閱次數
link |
17:20.000
舉例來說從2017年到2020年的點閱次數
link |
17:25.000
每天的這個頻道點閱次數都知道嘛
link |
17:28.000
這邊是假的數字啦
link |
17:29.000
隨便亂編的
link |
17:31.000
那所以我們知道2017年1月1號
link |
17:34.000
到2020年12月31號的點閱數字是多少
link |
17:39.000
接下來我們就可以計算Loss
link |
17:43.000
怎麼計算呢
link |
17:44.000
我們把2017年1月1號的點閱次數
link |
17:48.000
代入這一個函式裡面
link |
17:51.000
我們已經說
link |
17:52.000
我們想要知道D設定為0.5K
link |
17:54.000
W設定為1的時候
link |
17:56.000
這個函式有多棒
link |
17:57.000
當B設定為0.5K
link |
17:59.000
W設定為1的時候
link |
18:01.000
我們拿來預測的這個函數是Y等於0.5K加1倍的X1
link |
18:05.000
那我們就把這個X1代4.8K
link |
18:08.000
看看預測出來的結果是多少
link |
18:10.000
所以根據這個函式
link |
18:12.000
根據B設0.5K
link |
18:14.000
W設1的這個函式
link |
18:17.000
如果1月1號是4.8K的點閱次數的話
link |
18:21.000
那隔天應該是4.8K乘以1加0.5K
link |
18:24.000
也就是5.3K的點閱次數
link |
18:26.000
那隔天實際上的點閱次數
link |
18:28.000
1月2號的點閱次數我們知道嗎
link |
18:31.000
從後台的資訊裡面
link |
18:32.000
我們是知道的
link |
18:34.000
所以我們可以比對一下
link |
18:36.000
現在這個函式預估的結果
link |
18:38.000
跟真正的結果
link |
18:40.000
它的差距有多大
link |
18:41.000
這個函式預估的結果是5.3K
link |
18:45.000
真正的結果是多少呢
link |
18:47.000
真正的結果是4.9K
link |
18:49.000
看來是高估了
link |
18:50.000
高估了這個頂到可能的點閱的人數
link |
18:53.000
就可以計算一下這個差距
link |
18:56.000
計算一下估測的值跟真實的值的差距
link |
18:59.000
這邊估測的值用Y來表示
link |
19:01.000
真實的值用YM來表示
link |
19:03.000
你可以計算Y跟YM之間的差距
link |
19:06.000
得到1萬
link |
19:07.000
代表估測的值跟真實的值之間的差距
link |
19:11.000
計算差距其實有不只一種方式
link |
19:13.000
我們這邊把Y跟YM相減
link |
19:15.000
直接取絕對值
link |
19:17.000
算出來的值是0.4K
link |
19:20.000
我們今天用的資料
link |
19:23.000
不是只有1月1號跟1月2號的資料
link |
19:26.000
我們有2017年1月1號到2020年12月31號
link |
19:31.000
總共三年的資料
link |
19:33.000
這個真實的值叫做Label
link |
19:36.000
所以常常聽到有人說做機器學習
link |
19:39.000
就需要Label
link |
19:40.000
Label就是正確的數值
link |
19:43.000
這個東西叫做Label
link |
19:46.000
我們不是只能夠看
link |
19:49.000
用1月1號來預測1月2號的值
link |
19:52.000
我們可以用1月2號的值來預測1月3號的值
link |
19:55.000
如果我們現在的函數是Y等於0.5K加1倍的X1
link |
19:59.000
那1月2號根據1月2號的點閱次數
link |
20:02.000
預測的1月3號的點閱次數的值是多少呢
link |
20:05.000
是5.4K
link |
20:06.000
以X1大概4.9K進去乘以倍加0.5K等於5.4K
link |
20:12.000
接下來計算這個5.4K跟真正的答案
link |
20:15.000
跟Label之間的差距
link |
20:16.000
Label是7.5K
link |
20:18.000
看來是一個低估
link |
20:19.000
低估了這個頻道在1月3號的時候的點閱次數
link |
20:23.000
就可以算出EQ
link |
20:25.000
這個EQ是Y減跟Y和Y hat之間的差距
link |
20:29.000
算出來是2.1K
link |
20:31.000
那同樣的方法
link |
20:32.000
你就可以算過這三年來每一天的預測的誤差
link |
20:37.000
假設我們今天的Function是Y等於0.5K加1倍的X1
link |
20:41.000
這三年來每一天的誤差
link |
20:43.000
通通都可以算出來
link |
20:45.000
每一天的誤差都可以給我們一個小P
link |
20:49.000
那接下來我們就把每一天的誤差通通加起來
link |
20:53.000
然後取一個平均
link |
20:55.000
這個N代表我們的訓練資料的個數
link |
20:59.000
我們訓練資料的個數就是三年來的訓練資料
link |
21:02.000
所以就365乘以3
link |
21:04.000
每年365天三年所以365乘以3
link |
21:07.000
那我們算出一個L
link |
21:10.000
我們算出一個大L
link |
21:12.000
這個大L是每一筆訓練資料的誤差
link |
21:15.000
這個E相加以後的結果
link |
21:17.000
這個大L就是我們的Loss
link |
21:20.000
這個大L越大代表說
link |
21:22.000
我們現在這一組參數越不好
link |
21:24.000
這個大L越小代表我們現在這一組參數越好
link |
21:28.000
那這個E就是計算
link |
21:31.000
這個估測的值跟實際的值之間的差距
link |
21:34.000
其實有不同的計算方法
link |
21:36.000
在我們剛才的例子裡面
link |
21:37.000
我們是算Y跟Y hat絕對值的差距
link |
21:40.000
這種計算差距的方法
link |
21:42.000
得到的這個大L
link |
21:44.000
得到的Loss
link |
21:45.000
叫做Mean Absolute Error
link |
21:48.000
所寫是MAD
link |
21:50.000
那在作業1裡面
link |
21:51.000
我們是算Y跟Y hat相減以後的平方
link |
21:56.000
如果你今天的E是用相減以後的平方算出來的
link |
21:59.000
這個叫Mean Square Error
link |
22:01.000
叫MSE
link |
22:02.000
那MSE跟NAE
link |
22:03.000
他們其實有非常微妙的差別
link |
22:06.000
通常你要選擇
link |
22:07.000
用哪一種方法來衡量距離
link |
22:10.000
是看你的需求
link |
22:12.000
看你對這個任務的理解
link |
22:14.000
在這邊我們就不往下細講
link |
22:16.000
反正我們就是選擇了NAE
link |
22:18.000
作為我們計算這個誤差的方式
link |
22:21.000
把所有的誤差加起來
link |
22:22.000
就得到Loss
link |
22:24.000
那選擇MSE也是可以的
link |
22:26.000
在作業裡面我們會用MSE
link |
22:28.000
那有一些任務
link |
22:30.000
如果Y跟Y hat
link |
22:32.000
它都是機率
link |
22:35.000
都是機率分布的話
link |
22:37.000
在這個時候
link |
22:38.000
你可能會選擇Cross Entropy
link |
22:41.000
這個我們都之後再說
link |
22:43.000
反正我們這邊就是選擇了NAE
link |
22:46.000
好的
link |
22:47.000
這個是機器學習的第二步
link |
22:50.000
那我剛才舉的那些數字
link |
22:52.000
不是真正的例子
link |
22:54.000
但是在這門課裡面
link |
22:56.000
我們在講課的時候
link |
22:57.000
就是要舉真正的例子給你看
link |
22:59.000
所以以下的數字是真實的例子
link |
23:02.000
是這個頻道真實的後台的數據
link |
23:04.000
所計算出來的結果
link |
23:06.000
link |
23:07.000
那我們可以調整不同的W
link |
23:10.000
我們可以調整不同的B
link |
23:12.000
窮取各種W
link |
23:13.000
窮取各種B
link |
23:14.000
我組合起來以後
link |
23:16.000
我們可以為不同的W跟B的組合
link |
23:19.000
都去計算它的Loss
link |
23:22.000
然後就可以畫出
link |
23:23.000
以下這一個等高線圖
link |
23:27.000
在這個等高線圖上面
link |
23:29.000
越偏紅色系代表計算出來的Loss越大
link |
23:34.000
就代表說這一組W跟B越差
link |
23:37.000
如果越偏藍色系
link |
23:39.000
就代表Loss越小
link |
23:40.000
就代表這一組W跟B越好
link |
23:43.000
那這一組W跟B
link |
23:45.000
放到我的Function裡面
link |
23:47.000
放到我的Model裡面
link |
23:49.000
那我們的預測會越精準
link |
23:51.000
所以你就知道說
link |
23:53.000
假設W帶負0.25
link |
23:56.000
這個B帶負500
link |
23:58.000
就代表說
link |
23:59.000
這個W帶負0.25
link |
24:01.000
B帶負500
link |
24:02.000
就代表說這個頻道
link |
24:03.000
每天看的人越來越少
link |
24:04.000
那顯然Loss是很大的
link |
24:06.000
只能真實的狀況不太紅
link |
24:08.000
如果W帶0.75
link |
24:10.000
B帶500
link |
24:12.000
那這個正確率
link |
24:14.000
這個估測會比較精準
link |
24:17.000
那估測最精準的地方
link |
24:19.000
看起來應該是在這裡
link |
24:20.000
如果你今天W帶一個很接近1的值
link |
24:23.000
B帶一個小小的值
link |
24:25.000
比如說100多
link |
24:27.000
那這個時候估測是最精準的
link |
24:29.000
那這跟大家預期
link |
24:30.000
可能是比較接近的
link |
24:32.000
就是你拿前一天點閱的總次數
link |
24:35.000
去預測隔天點閱的總次數
link |
24:38.000
那可能前一天跟隔天點閱的總次數
link |
24:41.000
其實差不多的
link |
24:42.000
所以大家估測1
link |
24:44.000
然後B設一個小一點的數值
link |
24:46.000
也許你的估測就會蠻精準的
link |
24:49.000
那像這樣子的一個等高線圖
link |
24:51.000
就是你試了不同的參數
link |
24:55.000
然後計算它的Loss
link |
24:56.000
畫出來的這個等高線圖
link |
24:58.000
叫做Error的Surface
link |
25:01.000
那這個是機器學習的第二步
link |
25:05.000
接下來我們進入機器學習的第三步
link |
25:09.000
那第三步要做的事情
link |
25:11.000
其實是解一個最佳化的問題
link |
25:14.000
那如果你知道最佳化的問題
link |
25:16.000
是什麼的話也沒有關係
link |
25:17.000
我們今天要做的事情就是
link |
25:19.000
找一個W跟B
link |
25:21.000
把未知的參數
link |
25:23.000
找一個數值出來
link |
25:24.000
看帶哪一個數值進去
link |
25:26.000
可以讓我們的Loss值最小
link |
25:30.000
那個就是我們要找的W跟B
link |
25:33.000
那這個可以讓Loss最小的W跟B
link |
25:35.000
我們就叫做W-star跟B-star
link |
25:39.000
代表說他們是最好的一組
link |
25:41.000
W跟B可以讓Loss的值最小
link |
25:45.000
那這個東西要怎麼做呢
link |
25:48.000
在這門課裡面
link |
25:49.000
我們唯一會用到的
link |
25:51.000
Optimization的方法
link |
25:53.000
叫做Gradient Descent
link |
25:55.000
那這個Gradient Descent的方法
link |
25:57.000
怎麼做呢
link |
25:58.000
它是這樣做的
link |
25:59.000
為了要簡化起見
link |
26:00.000
我們先假設我們位置的參數只有一個
link |
26:03.000
就是W
link |
26:04.000
你先假設沒有B那個位置的參數
link |
26:06.000
只有W這個位置的參數
link |
26:08.000
那當我們W在不同的數值的時候
link |
26:11.000
我們就會得到不同的Loss
link |
26:14.000
那這條曲線就是Error Surface
link |
26:17.000
只是剛才在前一個例子裡面
link |
26:19.000
我們看到的Error Surface是二維的
link |
26:21.000
是二滴的
link |
26:22.000
那這邊只有一個參數
link |
26:24.000
所以我們看到的這個Error Surface是一滴的
link |
26:28.000
那怎麼樣找一個W
link |
26:31.000
去讓這個Loss的值最小呢
link |
26:34.000
那首先你要隨機選取一個初始的點
link |
26:39.000
那這個初始的點我們叫做W0
link |
26:42.000
那這個初始的點往往真的就是隨機的
link |
26:46.000
就是隨便選一個真的都是隨機的
link |
26:49.000
那在往後的課程裡面
link |
26:50.000
我們其實會看到也許有一些方法
link |
26:53.000
可以給我們一個比較好的W0的值
link |
26:56.000
那我們先不講這件事
link |
26:58.000
我們先當作就是隨機的
link |
27:00.000
隨便直個骰子
link |
27:01.000
隨機決定說W0的值應該是多少
link |
27:04.000
那假設我們隨機決定的結果
link |
27:06.000
是在這個地方
link |
27:08.000
那接下來你要計算說
link |
27:11.000
在W等於W0的時候
link |
27:14.000
W這個參數對Loss的微分是多少
link |
27:19.000
那假設你知道微分是什麼
link |
27:21.000
你知道微分是什麼
link |
27:22.000
這對你來說不是個問題
link |
27:23.000
就計算W對Loss的微分是多少
link |
27:27.000
如果你不知道微分是什麼的話
link |
27:29.000
那沒有關係
link |
27:30.000
反正我們做的事情就是
link |
27:32.000
計算在這一個點
link |
27:34.000
在W0這個位置的
link |
27:37.000
這個Aero Surface的前線斜率
link |
27:40.000
也就是這一條藍色的虛線
link |
27:44.000
它的斜率
link |
27:45.000
那如果這一條虛線的斜率是負的
link |
27:49.000
那代表什麼意思呢
link |
27:50.000
代表說左邊比較高
link |
27:52.000
右邊比較低
link |
27:53.000
代表在這個位置附近
link |
27:55.000
左邊比較高
link |
27:56.000
右邊比較低
link |
27:57.000
那如果左邊比較高
link |
27:58.000
右邊比較低的話
link |
27:59.000
那我們要做什麼樣的事情呢
link |
28:01.000
如果左邊比較高
link |
28:02.000
右邊比較低的話
link |
28:03.000
那我們就把W的值變大
link |
28:06.000
那我們就可以讓Loss變小
link |
28:09.000
如果算出來的斜率是正的
link |
28:11.000
就代表說左邊比較低
link |
28:13.000
右邊比較高
link |
28:14.000
是這個樣子
link |
28:15.000
左邊比較低
link |
28:16.000
右邊比較高
link |
28:17.000
如果左邊比較低
link |
28:18.000
右邊比較高的話
link |
28:19.000
那就代表我們把W變小
link |
28:22.000
W往左邊移
link |
28:23.000
我們可以讓Loss的值變小
link |
28:25.000
那這個時候
link |
28:26.000
你就應該把W的值變小
link |
28:28.000
那假設你連斜率是什麼的話
link |
28:31.000
是什麼都不知道的話
link |
28:32.000
也沒有關係
link |
28:33.000
你就想像說
link |
28:34.000
有一個人站在這個地方
link |
28:36.000
然後他左右環視一下
link |
28:39.000
那這個算微分這件事
link |
28:41.000
就是左右環視
link |
28:42.000
他會知道說
link |
28:43.000
左邊比較高還是右邊比較高
link |
28:45.000
看哪邊比較低
link |
28:46.000
他就往比較低的地方跨出一步
link |
28:49.000
那這一步要跨多大呢
link |
28:51.000
這一步的步伐的大小
link |
28:53.000
取決於兩件事情
link |
28:56.000
第一件事情是
link |
28:57.000
這個地方的斜率有多大
link |
28:59.000
這個地方斜率大
link |
29:00.000
這個步伐就跨大一點
link |
29:02.000
斜率小
link |
29:03.000
步伐就跨小一點
link |
29:05.000
另外除了斜率以外
link |
29:08.000
就是除了這個微分這一項
link |
29:09.000
微分這一項
link |
29:10.000
我剛才說它就代表斜率
link |
29:12.000
除了微分這一項以外
link |
29:13.000
還有另外一個東西
link |
29:15.000
會影響步伐的大小
link |
29:17.000
這個東西
link |
29:18.000
我們這邊用Eta來表示
link |
29:20.000
這個Eta叫做Learning Rate
link |
29:23.000
叫做學習速率
link |
29:25.000
這個Learning Rate
link |
29:26.000
它是怎麼來的呢
link |
29:27.000
它是你自己設定的
link |
29:29.000
你自己決定這個Eta的大小
link |
29:31.000
如果Eta設大一點
link |
29:33.000
那你每次參數update就會量很大
link |
29:37.000
你的學習可能就比較快
link |
29:38.000
如果Eta設小一點
link |
29:40.000
那你參數的update就很慢
link |
29:42.000
每次都只會改變一點點參數的數值
link |
29:46.000
那這種你在做機器學習
link |
29:48.000
需要自己設定的東西
link |
29:51.000
叫做Hyperparameter
link |
29:53.000
這個我們剛才講說
link |
29:55.000
機器學習的第一步
link |
29:56.000
就是定一個有未知參數的function
link |
30:00.000
而這些參數
link |
30:01.000
這些未知的參數
link |
30:02.000
是機器自己找出來的
link |
30:05.000
但是有
link |
30:18.000
這其實是一個好的問題
link |
30:19.000
我複述一下這個問題
link |
30:20.000
有同學問說
link |
30:22.000
為什麼Loss可以是負的呢
link |
30:24.000
為什麼Loss可以是負的呢
link |
30:26.000
Loss這個函數是你自己定義的
link |
30:30.000
所以在剛才我們的定義裡面
link |
30:32.000
我們說Loss就是估測的值
link |
30:35.000
跟正確的值
link |
30:36.000
它的絕對值
link |
30:38.000
那如果根據剛才Loss的定義
link |
30:40.000
那它不可能是負的
link |
30:42.000
但是Loss這個function
link |
30:44.000
是你自己決定的
link |
30:45.000
你可以說
link |
30:46.000
我今天要決定一個Loss function
link |
30:48.000
就是絕對值再減100
link |
30:50.000
那你可能就有負的
link |
30:52.000
所以我這邊這個curve
link |
30:54.000
我這邊可能剛才忘了跟大家說明
link |
30:56.000
這個curve並不是一個真實的Loss
link |
30:59.000
它是我隨便亂舉的一個例子
link |
31:01.000
因為在我今天想要舉一個
link |
31:03.000
比較general的case
link |
31:04.000
它並不是一個真實任務的error surface
link |
31:08.000
所以這個Loss的curve
link |
31:10.000
這個error surface
link |
31:11.000
它可以是任何形狀
link |
31:13.000
我們這邊沒有預測立場說
link |
31:14.000
它一定要是什麼形狀
link |
31:16.000
但是確實在真實
link |
31:18.000
在剛才這個
link |
31:19.000
如果Loss的定義
link |
31:20.000
就跟我們剛才定的一樣是絕對值
link |
31:23.000
那它就不可能是負值
link |
31:25.000
但是Loss這個function
link |
31:26.000
是你自己決定的
link |
31:27.000
所以它有可能是負的
link |
31:29.000
好,既然有同學問問題
link |
31:30.000
我們就在這邊停一下
link |
31:31.000
看大家有沒有問題想問
link |
31:34.000
然後住校以後
link |
31:35.000
會幫我看那個YouTube的直播
link |
31:41.000
有人在那個直播上問問題嗎
link |
31:43.000
如果有的話
link |
31:44.000
你就幫我念一下
link |
31:55.000
對,你先看好以後再念給我聽
link |
31:57.000
我們就先繼續講
link |
31:58.000
我們等一下講的那個段落
link |
31:59.000
再來繼續回答大家的問題
link |
32:01.000
再問一下現場同學
link |
32:02.000
有沒有同學想要問問題呢
link |
32:06.000
沒有的話就請著我繼續講
link |
32:09.000
好,那剛才講到哪裡呢
link |
32:10.000
剛才講到hyperparameter這個東西
link |
32:13.000
Hyperparameter是你自己設的
link |
32:16.000
所以在機器學習的這整個過程中
link |
32:19.000
你需要自己設定的這個東西
link |
32:22.000
就叫做Hyperparameter
link |
32:25.000
好,那我們說
link |
32:27.000
我們要把W0往右移一步
link |
32:29.000
那這個新的位置就叫做W1
link |
32:33.000
那這一步的步伐
link |
32:35.000
是Eta乘上每分的節度
link |
32:38.000
那如果你要用數學式來表示它的話
link |
32:40.000
就是把W0減掉Eta
link |
32:43.000
乘上微分的結果得到W1
link |
32:48.000
好,那接下來
link |
32:49.000
你就是反覆進行剛才的操作
link |
32:51.000
你就計算一下W1這個微分的結果
link |
32:55.000
然後再決定現在要把W1移動多少
link |
33:00.000
然後再移動到W2
link |
33:02.000
然後你再繼續反覆做同樣的操作
link |
33:04.000
不斷的把W移動位置
link |
33:06.000
最後你會停下來
link |
33:09.000
那什麼時候會停下來呢
link |
33:11.000
往往有兩種狀況
link |
33:12.000
第一種狀況是你失去耐心了
link |
33:15.000
你一開始會設定說
link |
33:17.000
我今天在調整我的參數的時候
link |
33:19.000
我在計算我的微分的時候
link |
33:21.000
我最多計算幾次
link |
33:23.000
你等於設說
link |
33:24.000
我的上限就是設定一百萬次
link |
33:27.000
所以我的參數更新
link |
33:28.000
一百萬次以後我就不再更新了
link |
33:30.000
那至於要更新幾次
link |
33:32.000
這個也是一個Hyperparameter
link |
33:34.000
這個是你自己決定
link |
33:36.000
就是明天你可能更新的次數就設少一點
link |
33:39.000
不要等到下週你更新的次數就設多一點
link |
33:41.000
那還有另外一種理想上的
link |
33:44.000
停下來的可能是
link |
33:45.000
今天當我們不斷調整參數
link |
33:48.000
調整到一個地方
link |
33:49.000
它的微分的值
link |
33:51.000
就是這一項算出來正好是零的時候
link |
33:54.000
如果這一項正好算出來是零
link |
33:56.000
零乘上這個Learning Rate App還是零
link |
33:59.000
所以你的參數就不會在移動的位置
link |
34:04.000
好,那假設我們是一個理想的狀況
link |
34:07.000
我們把W0更新到W1再更新到W2
link |
34:10.000
最終更新到WT
link |
34:12.000
我的電腦有點卡
link |
34:13.000
更新到WT
link |
34:14.000
卡住了
link |
34:15.000
也就是算出來這個微分的值是零了
link |
34:19.000
那就不會在
link |
34:20.000
參數的位置就不會再更新了
link |
34:23.000
那講到這邊
link |
34:24.000
你可能會馬上發現說
link |
34:26.000
Gradient Descent這個方法
link |
34:28.000
哇,有一個巨大的問題
link |
34:31.000
這個巨大的問題
link |
34:32.000
在這個例子裡面非常容易被看出來
link |
34:34.000
就是我們沒有找到真正最好的解
link |
34:39.000
我們沒有找到那個
link |
34:41.000
可以讓Loss最小的那個W
link |
34:44.000
在這個例子裡面
link |
34:45.000
把W設定在這個地方
link |
34:47.000
你可以讓Loss最小
link |
34:49.000
但是如果Gradient Descent
link |
34:51.000
是從這個地方
link |
34:52.000
當作隨機初始的位置的話
link |
34:54.000
你很有可能走到這裡
link |
34:56.000
你的訓練就停住了
link |
34:58.000
你就沒有辦法再移動W的位置
link |
35:03.000
那這個位置
link |
35:04.000
這個真的可以讓Loss最小的地方
link |
35:07.000
叫做Global的Minimum
link |
35:10.000
而這個地方叫做Local的Minimum
link |
35:15.000
它的左右兩邊
link |
35:16.000
都比這個地方的Loss還要高一點
link |
35:19.000
但是它不是整個Aero Surface上面的最低點
link |
35:23.000
這個東西叫做Local Minimum
link |
35:26.000
常常可能會聽到有人講到Gradient Descent
link |
35:28.000
就會說Gradient Descent不是個好方法
link |
35:32.000
這個方法會有Local Minimum的問題
link |
35:35.000
你沒有辦法真的找到Global Minimum
link |
35:38.000
但是教科書常常這樣講
link |
35:41.000
農場文常常這樣講
link |
35:43.000
但這個其實只是幻覺而已
link |
35:46.000
事實上
link |
35:47.000
假設你有做過深度學習相關的事情
link |
35:51.000
假設你有自己訓練Aero
link |
35:53.000
自己做Gradient Descent的經驗的話
link |
35:55.000
其實Local Minimum是一個假議題
link |
35:59.000
我們在做Gradient Descent的時候
link |
36:01.000
我們真正面對的難題
link |
36:03.000
不是Local Minimum
link |
36:06.000
到底是什麼
link |
36:07.000
這個我們之後會再講到
link |
36:10.000
在這邊你就先接受
link |
36:12.000
先相信多數人的講法
link |
36:14.000
說Gradient Descent有Local Minimum的問題
link |
36:17.000
在這個圖上
link |
36:18.000
在這個例子裡面
link |
36:19.000
顯然有Local Minimum的問題
link |
36:21.000
但之後會再告訴你說
link |
36:23.000
Gradient Descent真正的痛點到底是什麼
link |
36:29.000
剛才舉的
link |
36:31.000
是使用一個參數的例子而已
link |
36:34.000
我們實際上
link |
36:35.000
我們剛才模型有兩個參數
link |
36:37.000
有Ardu跟Beam
link |
36:39.000
那有兩個參數的情況下
link |
36:41.000
怎麼用Gradient Descent呢
link |
36:42.000
其實跟剛才一個參數
link |
36:44.000
沒有什麼不同
link |
36:45.000
如果一個參數你沒有問題的話
link |
36:47.000
你可以很快的推廣到兩個參數
link |
36:50.000
我們現在有兩個參數
link |
36:51.000
那我們給他兩個參數
link |
36:53.000
我們都給他隨機的初始的值
link |
36:55.000
就是W0跟B0
link |
36:58.000
然後接下來呢
link |
37:00.000
你要計算W對Loss的為分
link |
37:02.000
你要計算B對Loss的為分
link |
37:05.000
計算是在W等於W0的位置
link |
37:08.000
B等於B0的位置
link |
37:09.000
在W等於W0的位置
link |
37:11.000
B等於B0的位置
link |
37:12.000
你要計算W對L的為分
link |
37:15.000
計算B對L的為分
link |
37:18.000
計算完以後
link |
37:19.000
就根據我們剛才一個參數的時候的做法
link |
37:22.000
去更新W跟B
link |
37:24.000
把W0減掉Learning Rate乘上為分的結果
link |
37:28.000
得到W1
link |
37:29.000
把B0減掉Learning Rate乘上為分的結果
link |
37:32.000
得到B1
link |
37:34.000
那有的同學可能會問說
link |
37:36.000
這個為分這個要怎麼算啊
link |
37:39.000
在政府你不會算為分的話
link |
37:43.000
不用緊張
link |
37:44.000
怎麼不用緊張呢
link |
37:46.000
在Deep Learning的Framework裡面
link |
37:49.000
或在我們做議會用的PyTorch裡面
link |
37:52.000
這個算為分啊
link |
37:54.000
都是程式自動幫你算的
link |
37:56.000
你就Call一行
link |
37:58.000
你就寫一行程式
link |
37:59.000
自動就把為分的值就算出來了
link |
38:02.000
你就算完全不知道自己在幹嘛
link |
38:04.000
你還是可以把為分的值算出來
link |
38:07.000
所以這邊
link |
38:08.000
如果你根本就不知道為分是什麼
link |
38:11.000
不用擔心
link |
38:12.000
這一步驟就是一行程式
link |
38:15.000
這個等一下
link |
38:17.000
之後在作業一的時候
link |
38:18.000
大家可以自己體驗看看
link |
38:20.000
那就是反覆同樣的步驟
link |
38:22.000
就不斷的更新W跟B
link |
38:25.000
期待最後
link |
38:26.000
你可以找到一個最好的W
link |
38:28.000
W0跟最好的B
link |
38:30.000
B0
link |
38:32.000
那這邊呢
link |
38:33.000
就是舉一下例子
link |
38:34.000
跟大家看一下說
link |
38:36.000
如果在這個問題上
link |
38:38.000
它操作起來是什麼樣子
link |
38:40.000
假設你隨便選一個初始的值在這個地方
link |
38:42.000
你就先計算一下這個W對L的為分
link |
38:46.000
計算一下B對L的為分
link |
38:49.000
然後接下來你要更新W跟B
link |
38:51.000
更新的方向就是
link |
38:53.000
W對L的為分乘以Eta再乘以一個負號
link |
38:57.000
B對L的為分再乘以Eta乘以一個負號
link |
39:00.000
算出這個為分的值
link |
39:02.000
你就可以決定更新的方向
link |
39:04.000
你就可以決定W要怎麼更新
link |
39:06.000
B要怎麼更新
link |
39:07.000
那把W跟B更新的方向集合起來
link |
39:09.000
它就是一個向量
link |
39:10.000
就是這個紅色的箭頭
link |
39:12.000
我們就從這個位置移到這個位置
link |
39:15.000
然後再計算一次為分
link |
39:16.000
然後你再決定要走什麼樣的方向
link |
39:19.000
把這個為分的值乘上learning rate再乘上負號
link |
39:23.000
你就知道紅色的箭頭要指向哪裡
link |
39:25.000
你就知道怎麼移動W跟B的位置
link |
39:28.000
一直移動一直移動一直移動一直移動
link |
39:31.000
期待最後可以找出一組不錯的W跟B
link |
39:36.000
實際上真的用Gradient Descent進行一番計算以後
link |
39:43.000
這個是真正的數據
link |
39:45.000
我們算出來的最好的W是0.97
link |
39:50.000
最好的B是0.1
link |
39:53.000
跟我們猜測蠻接近的
link |
39:54.000
因為X1的值可能跟Y很接近
link |
39:57.000
所以這個W就設一個接近1的值
link |
39:59.000
B就設一個比較偏小的值
link |
40:02.000
那Loss多大呢
link |
40:04.000
Loss算一下是0.48k
link |
40:07.000
也就是在2017到2020年的資料上
link |
40:11.000
如果使用這個函式
link |
40:13.000
B帶0.1k
link |
40:15.000
R流淡0.97
link |
40:17.000
那平均的誤差是0.48k
link |
40:22.000
也就是它的預測觀看人數的誤差
link |
40:26.000
大概是500人次左右
link |
40:29.000
那講到目前為止
link |
40:33.000
我們就講了機器學習的三個步驟
link |
40:36.000
第一個步驟寫出一個函式
link |
40:38.000
這個函式裡面是有未知數的
link |
40:40.000
第二個步驟定一個叫做Loss Function
link |
40:43.000
第三個步驟
link |
40:44.000
解一個Optimization Problem
link |
40:46.000
找到一組W跟B讓Loss增小
link |
40:51.000
W跟B的值剛才我們找出來的
link |
40:53.000
那這組W跟B可以讓Loss小到0.48k
link |
40:59.000
但是這樣是一個讓人滿意
link |
41:03.000
或值得稱道的結果嗎
link |
41:05.000
也許不是
link |
41:07.000
為什麼
link |
41:08.000
因為這三個步驟合起來
link |
41:10.000
叫做訓練
link |
41:12.000
我們現在是在
link |
41:14.000
我們已經知道答案的資料上
link |
41:17.000
去計算Loss
link |
41:19.000
2017到2020年的資料
link |
41:22.000
我們已經知道了
link |
41:23.000
我們其實已經知道
link |
41:24.000
2017到2020年每天的觀看次數
link |
41:28.000
所以我們現在其實只是在自嗨而已
link |
41:31.000
我們就是假裝我們不知道
link |
41:33.000
隔天的觀看次數
link |
41:35.000
然後拿這個函式來進行預測
link |
41:37.000
發現誤差是0.48k
link |
41:40.000
但是我們真正要在意的是
link |
41:43.000
已經知道的觀看次數嗎
link |
41:45.000
不是
link |
41:46.000
我們要真正在意的是
link |
41:47.000
我們不知道未來的觀看次數是多少
link |
41:52.000
所以我們接下來要做的事情是什麼
link |
41:55.000
就是拿這個函式
link |
41:56.000
來真的預測一下
link |
41:58.000
未來的觀看次數
link |
42:00.000
那這邊我們只有2017年到2020年的值
link |
42:05.000
我們在2020年的最後一天
link |
42:08.000
跨年夜的時候
link |
42:09.000
找出了這個函式
link |
42:11.000
接下來從2021年開始
link |
42:14.000
每一天我們都拿這個函式
link |
42:17.000
去預測隔天的觀看人次
link |
42:20.000
我們就拿2020年的12月31號的觀看人次
link |
42:24.000
去預測2021年元旦的觀看人次
link |
42:28.000
用2021年元旦的觀看人次
link |
42:30.000
預測一下2021年元旦隔天1月2號的觀看人次
link |
42:35.000
用1月2號的觀看人次
link |
42:36.000
去預測1月3號的觀看人次
link |
42:38.000
每天都做這件事
link |
42:40.000
一直做到2月14號就做到情人節
link |
42:44.000
然後等到平均的值
link |
42:46.000
平均的誤差值是多少呢
link |
42:48.000
這個是真實的數據的結果
link |
42:50.000
在2021年沒有看過的資料上
link |
42:53.000
這個誤差值是
link |
42:56.000
我們這邊用Lπ來表示
link |
42:58.000
它是0.58
link |
43:00.000
所以在有看過的資料上
link |
43:02.000
在訓練資料上
link |
43:03.000
誤差值是比較小的
link |
43:05.000
在沒有看過的資料上
link |
43:06.000
在2021年的資料上
link |
43:08.000
看起來誤差值是比較大的
link |
43:11.000
那我們每天的平均誤差
link |
43:13.000
有580人左右
link |
43:15.000
600人左右
link |
43:17.000
能不能夠做得更好呢
link |
43:20.000
在做得更好之前
link |
43:22.000
我們先來分析一下結果
link |
43:25.000
這個圖怎麼看呢
link |
43:26.000
這個圖的橫軸代表的是時間
link |
43:30.000
所以0這個點
link |
43:31.000
最左邊的點
link |
43:32.000
代表的是2021年1月1號
link |
43:36.000
最右邊的點代表的是
link |
43:38.000
2021年2月14號
link |
43:41.000
然後這個縱軸
link |
43:42.000
就是觀看的人次
link |
43:44.000
這邊是用千人當作單位
link |
43:47.000
紅色的線是什麼呢
link |
43:48.000
紅色的線是真實的
link |
43:51.000
真實的觀看人次
link |
43:54.000
藍色的線是機器
link |
43:56.000
用這一個函式預測出來的觀看人次
link |
44:00.000
你會發現很明顯的
link |
44:01.000
這個藍色的線
link |
44:02.000
沒什麼神奇的地方
link |
44:04.000
它幾乎就是紅色的線
link |
44:06.000
往右平移一天而已
link |
44:09.000
它其實也沒做什麼特別厲害的預測
link |
44:11.000
就把紅色的線往右平移一天
link |
44:13.000
因為這很合理
link |
44:14.000
因為我們覺得F1
link |
44:16.000
也就是前一天的觀看人次
link |
44:18.000
跟隔天觀看人次的
link |
44:20.000
要怎麼拿前一天觀看人次
link |
44:22.000
去預測隔天觀看人次呢
link |
44:24.000
前一天觀看人次乘以0.97
link |
44:25.000
加上0.1K
link |
44:27.000
加上100
link |
44:28.000
就是隔天的觀看人次
link |
44:30.000
所以你會發現說
link |
44:31.000
機器幾乎就是拿
link |
44:32.000
前一天的觀看人次
link |
44:34.000
來預測隔天的觀看人次
link |
44:37.000
但是如果你仔細觀察這個圖
link |
44:39.000
你就會發現
link |
44:40.000
這個真實的資料
link |
44:42.000
有一個很神奇的現象
link |
44:46.000
它是有週期性的
link |
44:48.000
它有一個神奇的週期性
link |
44:49.000
你知道這個週期是什麼嗎
link |
44:51.000
你知道它每隔七天
link |
44:54.000
就會有兩天特別低
link |
44:56.000
兩天觀看的人特別少
link |
44:58.000
那兩天是什麼日子呢
link |
45:00.000
你會發現那兩天都固定是
link |
45:02.000
禮拜五跟禮拜六
link |
45:03.000
禮拜五跟禮拜六我可以了解
link |
45:05.000
禮拜五週末啊
link |
45:07.000
大家出去玩啊
link |
45:08.000
誰還要學機器學習啊
link |
45:09.000
禮拜六誰還要學機器學習啊
link |
45:11.000
但不知道為什麼禮拜天
link |
45:12.000
大家是願意學機器學習
link |
45:14.000
這個我還沒有
link |
45:16.000
我還沒有參透
link |
45:17.000
為什麼是這個樣子
link |
45:18.000
也許跟YouTube背後
link |
45:19.000
神奇的演算法有關係
link |
45:21.000
比如說YouTube在
link |
45:23.000
你知道YouTube都會
link |
45:24.000
推頻道的影片嘛
link |
45:25.000
也許YouTube在
link |
45:26.000
推頻道的影片的時候
link |
45:28.000
都選擇禮拜五禮拜六不推
link |
45:30.000
只推禮拜天到禮拜四
link |
45:32.000
可是為什麼
link |
45:33.000
推禮拜天到禮拜四呢
link |
45:34.000
這個我也不了解
link |
45:35.000
但是反正看出來的結果
link |
45:38.000
我們看真實的數據
link |
45:39.000
就是這個樣子
link |
45:40.000
每隔七天一個循環
link |
45:41.000
禮拜五禮拜六
link |
45:42.000
看的人就是特別少
link |
45:44.000
所以既然我們已經知道
link |
45:45.000
每隔七天就是一個循環
link |
45:47.000
那這一個式子
link |
45:49.000
這一個model顯然很爛
link |
45:51.000
因為它只能夠看前一天啊
link |
45:53.000
如果這個每隔七天
link |
45:54.000
看一個循環
link |
45:55.000
我們應該要看七天對不對
link |
45:57.000
我們如果我們一個模型
link |
45:58.000
它是參考前七天的資料
link |
46:00.000
把七天前的資料
link |
46:02.000
直接複製到
link |
46:03.000
拿來當作預測的結果
link |
46:05.000
也許預測的會更準
link |
46:07.000
也說不定
link |
46:08.000
所以我們就要修改一下
link |
46:10.000
我們的模型
link |
46:11.000
通常你對模型的修改
link |
46:13.000
往往來自於
link |
46:14.000
你對這個問題的理解
link |
46:17.000
也就是domain knowledge
link |
46:19.000
所以一開始我們對問題
link |
46:20.000
完全不理解的時候
link |
46:21.000
我們就胡亂寫一個
link |
46:22.000
y等於b加ws1
link |
46:25.000
並沒有做得特別好
link |
46:26.000
接下來我們觀察了
link |
46:28.000
真實的數據以後
link |
46:29.000
得到一個結論是
link |
46:30.000
每隔七天有一個循環
link |
46:31.000
所以我們應該要把
link |
46:33.000
前七天的觀看人次
link |
46:35.000
都列入考慮
link |
46:37.000
所以我們寫了一個新的模型
link |
46:39.000
這個模型長什麼樣子呢
link |
46:41.000
這個模型就是
link |
46:42.000
y等於b加xj
link |
46:45.000
xj代表什麼
link |
46:46.000
這個下標j
link |
46:47.000
代表是幾天前
link |
46:49.000
然後這個j等於1到7
link |
46:51.000
也就是從一天前
link |
46:52.000
兩天前一直考慮到
link |
46:53.000
七天前
link |
46:55.000
七天前的資料
link |
46:56.000
通通乘上不同的weight
link |
46:59.000
乘上不同的wj
link |
47:00.000
加起來再加上bio
link |
47:03.000
得到預測的結果
link |
47:06.000
如果這個是我們的model
link |
47:08.000
那我們得到的結果
link |
47:09.000
是怎麼樣呢
link |
47:10.000
我們在訓練資料上的loss
link |
47:12.000
是0.38k
link |
47:14.000
那因為這邊只考慮一天
link |
47:16.000
這邊考慮七天
link |
47:17.000
所以在訓練資料上
link |
47:18.000
你會得到比較低的loss
link |
47:20.000
這邊考慮比較多的資訊
link |
47:22.000
在訓練資料上
link |
47:23.000
你應該要得到更好的
link |
47:25.000
更低的loss
link |
47:26.000
這邊算出來
link |
47:27.000
是0.38k
link |
47:29.000
但是在他沒有看過的資料上面
link |
47:31.000
做不做得好呢
link |
47:32.000
在你沒有看到的資料上
link |
47:34.000
有比較好
link |
47:35.000
是0.49k
link |
47:37.000
所以剛才只考慮一天
link |
47:40.000
是0.58k的誤差
link |
47:43.000
考慮七天
link |
47:44.000
是0.49k的誤差
link |
47:45.000
那這邊每一個w跟b
link |
47:47.000
我們都會用歸根底線
link |
47:49.000
算出他的最佳值
link |
47:50.000
他的最佳值長什麼樣子呢
link |
47:52.000
這邊秀出來給你看
link |
47:53.000
他的最佳值長這個樣子
link |
47:55.000
當然機器的邏輯
link |
47:56.000
我是有點沒有辦法了解
link |
47:57.000
我本來以為他會選
link |
47:59.000
七天前的數據
link |
48:01.000
七天前的觀看人數值
link |
48:03.000
直接複製過來
link |
48:04.000
不過看來他沒有這樣選就是了
link |
48:06.000
他的邏輯是
link |
48:08.000
前一天跟你要預測的
link |
48:12.000
隔天的數值的關係很大
link |
48:14.000
所以w1是大
link |
48:15.000
是0.79k
link |
48:17.000
那不知道為什麼
link |
48:18.000
他還考慮前三天
link |
48:19.000
前三天是0.12k
link |
48:21.000
然後前六天是0.3k
link |
48:23.000
前七天是0.18k
link |
48:25.000
不過他知道說
link |
48:26.000
如果是前兩天
link |
48:27.000
前四天
link |
48:28.000
前五天
link |
48:29.000
他的值呢
link |
48:30.000
會跟未來我們要預測的隔天的值
link |
48:32.000
是成反比的
link |
48:33.000
所以w2 w4跟w5
link |
48:35.000
他們最佳的值
link |
48:37.000
讓NOS可以在訓練資料上
link |
48:38.000
是0.38k的值
link |
48:40.000
是符合的
link |
48:41.000
但是w1 w3 w6跟w7是正的
link |
48:46.000
我們考慮前七天的值
link |
48:49.000
那你可能會問說
link |
48:50.000
能不能夠考慮更多天呢
link |
48:52.000
可以
link |
48:53.000
輕易的看
link |
48:54.000
考慮更多天
link |
48:55.000
本來只考慮前七天
link |
48:56.000
考慮28天
link |
48:58.000
會怎麼樣呢
link |
48:59.000
28天就一個月嘛
link |
49:00.000
考慮前一個月
link |
49:02.000
每一天的觀看人次
link |
49:03.000
去預測隔天的觀看人次
link |
49:05.000
預測出來結果怎樣呢
link |
49:07.000
訓練資料上
link |
49:08.000
是0.33k
link |
49:10.000
那在2021年的資料上
link |
49:12.000
在沒有看過的資料上
link |
49:14.000
是0.46k
link |
49:16.000
看起來又更好一點
link |
49:18.000
28天
link |
49:19.000
接下來考慮
link |
49:20.000
56天會怎麼樣呢
link |
49:21.000
在訓練資料上
link |
49:23.000
稍微再好一點
link |
49:25.000
是0.32k
link |
49:26.000
在沒看過的資料上
link |
49:28.000
還是0.46k
link |
49:30.000
看起來考慮更多天
link |
49:31.000
沒有辦法再更進步了
link |
49:34.000
看來考慮天數這件事
link |
49:36.000
也許已經到了一個極限
link |
49:39.000
那這邊
link |
49:40.000
這些模型
link |
49:41.000
他們都是把輸入的這個X
link |
49:43.000
這個X
link |
49:44.000
還記得他叫什麼嗎
link |
49:45.000
他叫做feature
link |
49:46.000
把feature乘上一個weight
link |
49:47.000
再加上一個biome
link |
49:48.000
就得到預測的結果
link |
49:50.000
這樣的模型
link |
49:51.000
有一個共同的名字
link |
49:52.000
叫做linear model
link |
49:54.000
那我們接下來就看
link |
49:56.000
怎麼把linear model
link |
49:57.000
做得更好