關於自學

by 王翰元
Published: Last Updated on 5 read

在自學了程式語言、機器學習、建模技巧之後,在這裡我想分享一些對於自學的反思。

我絕對算不上自學高手,比我還更有系統、更有方法的人多不勝數。不過我也靠著自學的能力,一路從大學畢業到工作三年。所以我想還是有些心得值得分享出來。

自學自學,其實就是關於學習的方法。在一路自學了程式語言、網路爬蟲、資料視覺化之後,我認為學習大致上可以歸納成兩種模式。

機器學習與深度學習。

不是,開玩笑的。

我認為學習的方法,大致上可以分成「主題式學習」和「問題式學習」。而我也從這個歸納裡發現,為什麼我(或大多數人)總是覺得以前上課那麼無聊。

問題式學習

https://images.unsplash.com/photo-1586864387967-d02ef85d93e8?ixlib=rb-4.0.3&q=80&fm=jpg&crop=entropy&cs=tinysrgb

顧名思義,問題式學習就是指從一個問題、或是一個具體的目的,作為學習的出發點。是為了解決問題或是達到目的,才去學習相關的方法或知識。但是為了達到這個目的所需要的知識可能不只是單一領域,可能是跨領域的知識。例如「如何建立機器學習模型」,就會需要先學程式語言、學資料清理、學機器學習裡的基本常識。

例如,如果只學程式語言,不了解資料清理的話,那可能連把資料餵給模型都會失敗;如果只學資料清理而對機器學習的基本知識掌握度不足,那可能訓練出來的模型表現不會很好。

問題式學習最大的好處,就在於可以快速獲得成就感。因為是帶著某個目的才學習的,所以不需要等到把所有相關知識都學完,只需要學到夠用的範圍、只要能解決眼前的問題就可以了。而解決問題為我們帶來的成就感可以讓人比較容易持續下去,能持續激發想往下學習的慾望。

不過這種方法的另外一面,就是容易見樹不見林,也就是學而不精。由於沒有把整張知識地圖走完,只是有好幾個點像蜻蜓點水般的接觸,相對來說會比較缺乏看到事情全貌,以及找到最佳解的能力。

例如,由於客戶資料放在 Google Bigquery 裡,為了處理資料我自學了 SQL。雖然我學會了基本語法,但是我卻沒有學到用 with 來做子查詢。這導致我一開始在寫 SQL 時,如果遇到需要創建很多中繼的資料表的狀況,我都是手動一個一個建完那些中繼表,最後再全部整理成我所需要的資料表及欄位。很明顯,這是非常沒效率的做法。我很後來才知道,這種需要很多中繼表的情況,用 with 就可以簡單解決了。

這是問題式學習最容易遇到的窘境。雖然解決了眼前的問題,卻不一定是最佳的解法。但好處就是可以依照自己的節奏和喜好,挑選自己想學的東西,而且動力會比較強、效率也會比較好。

主題式學習

https://images.unsplash.com/photo-1590859808308-3d2d9c515b1a?ixlib=rb-4.0.3&q=80&fm=jpg&crop=entropy&cs=tinysrgb

甚麼是主題式學習?

一個主題裡的知識就像一張網路圖,這張網路由各種點與連結所組成,跟學習地圖差不多,只是網路圖裡沒有起點或終點的概念。而主題式學習,就是指把網路裡的所有知識點都仔細地走完。每一個主題的知識網路有所不同,也有大小之分。以資料科學為例,就是一個跨學科、所需知識點很多的主題,包含統計學、微積分、線性代數、機器學習、資料視覺化等等。

主題式學習的好處,一個是可以知道最佳解,另一個是精通該領域的術語,白話一些就叫行話。

在於面對一個該領域的問題時,馬上就能知道最好的解決方法是什麼。因為已經把這個主題裡所有能學的東西都學完了,不管是常用還是冷門的全部都了解,所以可以很輕鬆地知道面對怎麼樣的問題要用什麼手段解決,也就是所謂的專家。而精通領域裡的術語,能夠彰顯專業感,進而加強說服力。

再以 SQL 為例,如果我先把所有方法學完,再開始處理客戶資料的話,我就可以在遇到很多中繼表的時候,輕輕鬆鬆的用 with 去解決眼前的麻煩。

對於兩種學習方式的反思

透過反思自己的自學過程,我得到了一個結論:

問題式學習可能是比較適合現代的方法。

過往我們所受的教育,例如高中的基礎學科、大學的必修科目都屬於主題式學習,而這最大的缺點就是:無聊。以我個人來說,由於不是所有知識都是當下所需要的,學習的過程很難獲得成就感、缺乏好奇心,也造成我幾乎沒有辦法花費時間在我沒興趣、也用不到的科目上。

當然,不可能只是因為我覺得無聊,就說這種方式已經不適合了,這是有原因的。

從 2000 年開始,網路技術開始快速竄起之後,這短短的二十年間的科技發展速度,是過往幾千年都完全無法比擬的。也就是說,我們這一代的知識負載量,已經比前幾代還要多出非常多了。

甚麼是知識負載量呢?有點像高齡化的概念。根據資料,1990 年的扶養比是 9.32,到了 2020 年已經變成了 22 了。也就是說,現今的青年人口要扶養的老人數量,已經是二十年前的兩倍多了。而這二十年間所發展的技術與知識,也像高齡人口一樣,不斷地累積、變化出新的交叉學科,而且還變得越來越複雜。

簡單的說,就是我們想要學一項新技術、成為某個領域的專家時,需要的前置知識變得越來越多。也因此學習的門檻與時間,也隨之變長了。而在這樣的背景之下,我們想要透過主題式學習,把一個領域內的知識完整的學完,已經越來越像一個不可能的任務了。

現代科技所需的知識幾乎都是交叉學科,是好幾代的先人智慧交互影響而產生的結晶,如果想要成為真.技術專家,我們就需要理解龐大的歷史與知識脈絡,而這需要比以往都還要更多的心力與耐心。然而,就算真的有超人般的學習能力,能把整個知識脈絡都理解完,到了實際工作中卻可能會發現:不一定能派得上用場。因為解決問題與掌握知識的思維,是有所不同的。

例如以資料科學家來說,真的要了解演算法的數學原理的話,就必須從最底層的公式開始理解,而這所需的前置知識是很可觀的,而且前置知識只會繼續增長,不會減少。但退一步說,就算真的能夠把 XGboost 、隨機森林的公式推導、數學性質倒背如流,在幫客戶解決問題的時候,理論真的會更有幫助嗎?或許客戶所在意的是他的問題是不是有被順利解決,而不是背後的模型用了哪個方法。

當然,我並不是要說理論不重要,理論還是非常重要的。但我想表達的是,對於知識,我們究竟要掌握到甚麼樣的程度?而我對這個問題的答案,就是「夠用就好」,而這正是問題式學習的精神。

總而言之,問題式學習的精神在於「夠用」,而主題式學習強調的是「完整」。然而,在知識量越來越龐大、日漸快速的步調以及有限的時間之下,「完整」已經越來越困難,所以轉而追求「夠用」,或許是比較有效率的。即使「夠用」可能代表給出並不是 100 分的答案,但或許 70 分也已經能解決大多數的問題了。

最後,用一段比喻來形容兩種學習方法:

主題式學習就好像在看一部很長很長的影集,要忍住前面枯燥無趣的部分才能等到後面的劇情高潮;而問題式學習就像是直接看最精彩的一集,自然會想再去了解其中的人物關係、劇情背景,以獲得更深刻的體驗。


後記

或許有人會說,我只是在替自己的懶惰找藉口,其實就是只我不想學那麼多而已。對於這點似乎完全無法反駁。在時間、專注力都有限的條件下,真的不太可能在遇到問題之前就把所有東西學完。權宜之計就只有遇到問題的時候,再用最快的時間學習。

Leave a Comment