打造機器學習系統的其中一個挑戰是 有太多選擇可以試,太多事可以調整 例如有很多超參數可以去調。 我發現做機器學習最厲害的那些人 他們很有洞察力,知道要調校什麼 來達到某一個效果。 這種過程我們稱之 "orthogonalization" (正交法) 讓我來解釋一下 這是一個很古老的電視 有很多旋鈕,以不同的方式調整畫面 這種舊電視機,可能有個旋鈕用來調整 畫面高度多高,另一個旋鈕控制多寬 可能有旋鈕調整梯形扭曲 有另個旋鈕把畫面左右移動 還有旋鈕控制旋轉角度,依此類推 設計電視的人花很多時間打造電路 —古早以前還是類比電路— 來確保每個旋鈕的功能可以被解釋 就像一個旋鈕調整這個、另個旋鈕調這個、... 等等 反過來說,想像有一個旋鈕控制 0.1 倍的畫面高度 加上 0.3 倍寬的程度,減 1.7 倍的梯度扭曲 加 0.8 倍水平方向的位置,之類的。 當你轉這一個旋鈕,畫面高度、寬度、 梯度扭曲、平移... 這些都會同時改變。 如果旋鈕像這樣,要把畫面調整到螢幕正中間 這幾乎是不可能的任務。 在這個例子、"orthogonalization" 指的是做電視機的人 要設計旋鈕,讓一個旋鈕只做一件事 這樣調校電視起來比較容易 能照你想要的把畫面置中。 還有另一個 orthogonalization 的例子 想像學開車,車有三種控制器: 方向盤決定往左右多少 還有油門、煞車。 三種控制器,或說是一個控制方向 兩個控制速度 這樣是「可解釋的」 能解釋在各個控制器的行為對車子的影響 不過呢,想像有人發明一台車,有根搖桿 控制 0.3 倍的左右 減掉 0.8 倍的速度 你有另一個控制器控制 2倍的左右 + 0.9倍的車速 理論上,只要調控這兩個, 任何車子的方向和速度,你都能實現 不過這實在太困難了,還不如你有一個控制器 來控制方向,另一個分開的控制器 來控制車速。 所以 orthogonalization 的概念是 如果你想要的一個維度是控制方向 另一個維度是控制速度 那麼,你會想要有一個旋鈕只控制方向 而另一個旋鈕 — 在車的例子是油門、煞車 — 來控制你的速度 但是如果有一個控制器把兩者混在一起 像是這一個,同時影響方向和速度 同時影響兩者的東西 這樣很難隨心所欲,設定想要的方向速度。 而有了 orthogonal (正交/直角) — 意思是互為 90 度 而有了 orthogonal 的控制器,和你想控制的 事情一致,這樣要調整會很容易 來調控方向盤角度、 油門、煞車,想讓車子做啥就做啥。 那麼,這和機器學習有何關? 為了讓監督式的學習系統表現好, 你常要調整系統的「旋鈕」,達到下面四件事 第一,你通常要確保至少在訓練資料上 能夠表現好 在訓練集上的成效必須超過某個門檻 在某些應用 這意味著和人類的表現旗鼓相當 不過這和你的應用有關 下禮拜我們會詳談跟人類水準的比較 總之在訓練資料上表現好,接下來 你會希望在開發集 (dev set) 也表現得好 然後希望在測試集 (test set) 也能表現好 最終,如果在測試集的成本函數表現好 你會希望這能讓你的系統在真實世界也表現好。 例如你會希望 這能讓貓貓App使用者開心。 回到調整電視機的例子,如果畫面 太寬太窄,你需要一個旋鈕來調整 你不想小心翼翼調整五個不同的旋鈕 還可能會搞亂其他方面 你想要一個旋鈕,只會影響電視畫面寬度。 同樣道理,倘若你的演算法在訓練集不夠準 你需要一個旋鈕 — 對,我畫的是顆旋鈕 或者一組特定的旋鈕 讓你能調整你的演算法,在訓練資料上夠準 所以這樣的旋鈕是:訓練一個更大的網路 或者用更好的最佳化演算法 例如 Adam 優化法,等等等 這周和下週我們會談到更多方法。 相反地,如果發現你在開發資料上不夠準 那你會有另一組的旋鈕 — 對,這旋鈕不怎麼美 你會想要有不同的旋鈕來實驗 所以假設,你的演算法在開發資料表現差; 在訓練集好,但在開發集不好,那麼這邊的旋鈕是 正則化,你能用這個滿足第二個條件 打個比方,你已經調好電視的畫面寬度 如果畫面的高度還不大對 你會想要有另一個旋鈕調整高度 你希望這樣做不會影響電視畫面的寬度 太多。 蒐集更多訓練資料,這會是另個可能的旋鈕 希望你的演算法能更通用 (generalize),在開發集表現好。 那現在,電視的寬度高度都調好了 如果第三個條件沒滿足呢? 在開發集表現好,但在測試集 (test set) 表現差,怎麼辦? 如果這樣 那這邊的旋鈕是,你會想要蒐集更多開發資料 因為如果在開發集表現好,但在測試集不是這樣 有可能你為了開發集調整太過火,所以要回頭 使用更多的開發資料 最後,如果在測試集表現好,但是 app使用者不開心,這意味著該回頭看看 改變開發集,或是改變成本函數 因為如果根據成本函數,宣稱測試集表現好 而現實世界的表現並不符合 這代表你的開發/訓練集的分佈不對 或是你的成本函數衡量了錯誤的指標。 我知道我講得很快,不過在這禮拜和下禮拜 我們會探討更多這些旋鈕的細節 所以現在跟不上也不打緊,不用擔心 我想給你的是這種「正交」(orthogonalization) 程序的概念 你要很清楚這四項議題 這各式各樣可以調整的東西,每一個代表什麼 當我訓練神經網路,我不大想用 early stopping (提前停止) 這方法不壞,很多人都用 不過我個人覺得 early stopping 不好理解 因為這個行為同時影響你在訓練資料上多準 因為你提前停止,還不夠適應訓練集 而這行為也同時常用來改善開發集上的表現 所以這顆旋鈕不夠「正交」 因為他同時影響兩件事 就像是一個旋鈕同時影響電視畫面的 寬度和高度 這不表示這很爛,不要用,你想的話也可以用 只是如果你有更「正交」的控制 就像我這邊列的 這讓調整神經網路更加簡單 那麼,我希望這給了你「正交」(orthogonalization) 的概念 就好比當你看著電視畫面,你可以說 喔我的畫面太寬,待我轉這顆旋鈕,或是這太高, 所以我來調這顆旋鈕,或者太扭曲,所以要調這顆 在機器學習,如果能這樣就很棒:看一下系統 就說這個部份有問題 在訓練集不好、在開發集不好、 在測試集不好、或者在測試集很好,但是在 現實中不好 弄清哪裡不好以後,能有一顆旋鈕 或是一組特定的旋鈕,來幫助你 解決這個影響系統表現的問題。 所以這周和下周,我們會解釋 怎麼去診斷你系統成效的瓶頸 還有確認你能用怎麼樣的旋鈕,調整系統 改善那方面的成效 就讓我們來更深入探討之