2013年11月3日 星期日

讀機器學習有感

這學期修了學校資工系開的機器學習一課,跟眾多資工系所的大神們一起上課,雖然內心有一些想要用機器學習來解的問題,不過目前還算是「不知道學這個有什麼確實用途」的狀態(啊…我臉書上的好友Ya教授一定會對這點很不爽O_O)。
這幾天複習一下進度,把課本的內容對照筆記再看過一遍,倒是得到一些感觸。

--

現在學習的有Perceptron Algorithm(感知學習演算法),和Linear regression Algorithm(線性迴歸),這兩個學習法從根本上有兩個不同:
Perceptron Learning是給定一大群資料和他們所屬的群體,找出那條分隔線,之後就可以利用這條分隔線作為機器判斷的基礎,這算是最最基本的機器學習演算法;要怎麼讓機器學到這條線呢?做法很簡單,針對每個點,要是現在的分隔線分錯了,就用這個點的資料去更新這條線,求到錯誤最少的那條線即可,很可惜的,要直接找出那條分隔線,已經被證明是一個NP-Hard的問題,所以我們用了一個替代的方法:一個點一個點的更新,然後記住那條表現最好的線,時間久了,這條線就是我們想要的解。

和Perceptron Learning 相對的,另一種是Linear regression: 這次我們不是要把資料分兩群,而是送來一大群資料和他們的評分,要找一個預測式,能讓預測結果和評分間的均方差(square error)為最小,和上一個問題不一樣,這次我們只要拿到資料建成矩陣,做點線性代數的運算就能直接算出解,完全不需要迭代。
不同的問題,卻讓解法天差地遠,Perceptron需要不斷迭代,找尋錯誤;Linear Regression卻像先知一樣,我說這個是答案,那這個就是答案。

像Linear Regression這樣又快又準的演算法,反而讓人覺得不像是「機器學習」,它沒有學嘛。
我們對「學習」這個詞的解釋,比較像Perceptron這樣,這筆資料我錯了,看看我錯在哪?錯了多少?把它修正回來,於是「學」會怎麼處理這筆資料;像Linear Regression這樣,那不是學習,那是工程計算,稱它為「機器學習演算法」,不免心理有些疙瘩。

--

可是話又說回來,我們的教育制度,不是一直著重公平的考試,不要真正能看學生學會什麼的申論題,不要能看學生推論過程的證明題,只留下有標準答案的選擇題。
結果學生被訓練成對選擇題有反應,給一串題幹說明,再給四個可能對、可能錯的答案,要在最短時間內選出正確的答案,於是學生不再是學習問為什麼,而是背頌式的「知道」答案,對照街上林立的補習班,這豈不和我們上面對「學習」的意義相反?

--

我們要機器像人一樣學習、卻要人像機器一樣學習,豈不本末倒置?想起來有夠荒唐。

沒有留言:

張貼留言