漫談機器學習入門 - iThome
文章推薦指數: 80 %
身為想了解機器學習的開發者,若要瞭解原始碼實現方式,背後數學原理,該如何進入這個領域?我們能以向量運算、矩陣運算、微積分等來思考, ...
移至主內容
文/林信良
|
2021-07-22發表
人工智慧、機器學習、深度學習……這一連串的技術名詞,在近幾年來,接連地冒出,也不斷地出現在我的眼前,相關的文件或書籍,也蜂湧而出,不禁令人好奇,這些東西到底在談些什麼。
在試著接觸相關知識的這段日子,卻總覺得難以將這些知識內化己用,最主要的是在瞭解的過程中,心裡的想法是,在這些領域已經蹲很多年,才是能真正靈活運用這些東西的人。
你憑什麼入門?
確實地,深度學習等字眼近來會成為熱門,原因之一確實是因為多了許多便利的程式庫或框架,在一些簡單的案例上,可讓人無腦地做出分析、預測之類的動作。
然而,畢竟身為一名開發者,必備的能力之一,就是探索底層,只是我這邊所談到的底層,不單只是程式庫或框架的原始碼探究那麼簡單,而是更進一步地,瞭解原始碼實現的公式,其背後的數學原理、推導過程,以及它們為什麼能夠運作等。
如果只是照著文件或書籍,寫出幾行程式來呼叫程式庫或套用框架,就能辨識數字圖片、對鳶尾花分類等,實在稱不上入門機器學習。
而這也是近期我接觸機器學習以來的感受:對於底層的數學,沒有一定程度的理解,我又怎麼稱得上入門呢?
「你憑什麼入門?」這問句可以從質疑的口氣來看,如果你從事的開發領域並非與數學為伍,或者寫程式從沒用過邏輯以外的思考,甚至是以「寫程式從來不用數學」自傲的人,對於機器學習相關領域的文件或書籍,基本上是可以直接略過,入門的難度太高了。
「你憑什麼入門?」這問句可以從純粹詢問的角度來看。
機器學習需要理解數學,然而,這需要什麼樣的廣度與深度呢?就廣度來說,機器學習涉及的數學包含了向量運算、矩陣運算、微積分等,就深度而言,則是讓你足以理解程式庫或框架,是以什麼樣的原理及心智模型實作出來。
先習慣用數學來思考
當然,漫無目的地學習這些數學,容易迷失在一堆公式與理論之中,從專門談機器學習的文件、書籍或課程中,一邊累積數學基礎是個方式,但是,這也不容易,因為文件、書籍或課程的內容很難規畫,其內容在理論、程式實作、程式庫與框架之間的平衡,很難拿捏。
例如,每次我看完那些偏重程式庫、框架應用的文件,在辨識數字圖片、對鳶尾花分類的範例之後,總覺得空虛,然而,看理論方面的內容時,又覺得茫然。
而且,在漫長學習這些數學之後,就只為了機器學習,過程應該會滿無趣的;比較好的方式是,先忘了機器學習,試著先解決一些需要數學的任務,這會讓過程有一些正向回饋的成就感,就算最後你還是沒達到機器學習入門,累積起來的數學基礎,在其他任務上也會有用武之地。
以我個人的經驗來說,是在玩弄繪圖、3D建模的過程當中,先累積了對於向量及矩陣運算的熟悉度;但是,我一開始並不是面對問題,就會用向量或矩陣來思考,而是直覺地就用起個別變數、逐一實現為函式罷了;然而,隨著經驗的增加,我發現,一些變數若組織為向量,程式寫來更為簡潔而便利,再隨著累積更多的經驗,我又發現了一些向量可以組織為矩陣,此時,撰寫或運算起來都更加地有效率。
在機器學習中會大量面對向量與矩陣,這是因為要處理的資料往往具備大量的特徵值,若不運用向量與矩陣來組織,無論是在公式撰寫、推導或者程式撰寫上,絕對會是一團漿糊。
在程式開發領域,確實是有些針對程式人的數學書,過去的一些專欄(例如〈程式人的數學書〉)我也談過幾本書籍,如果是針對向量與矩陣談比較多,且具有主題任務的書,我個人推薦的是《TheNatureofCode》,它是基於Processing、使用Java,偏向模擬自然現象。
就撰寫這篇專欄的時間點來說,我又發現一本不錯的新書《MathforProgrammers》,使用Python,從繪圖、3D、物理模擬等任務中,學習向量、矩陣、微積分等理論基礎,最後更來到機器學習入門,像是迴歸、分類、類神經網路等。
數學與程式的心智模型結合
在逐漸習慣用數學思考,用程式碼來解決問題的過程中,慢慢地你會發現,有些程式庫或框架提供了現成的實作,例如,繪圖有2D/3D引擎,物理現象模擬有物理引擎等,在過程中,需要更多花時間摸索的,往往就是這程式庫或框架怎麼使用、它們實現了哪些數學。
有能力的話,從頭至尾自行實現程式庫,此時愛用什麼心智模型就隨個人選擇,但這會花上許多時間,還不見得有效率、具通用性等;若使用的程式庫,各自擁有獨特的使用模型,結合時也會是一大麻煩。
比較好的方式是,從具有技術堆疊而發展出來的程式庫或框架中開始。
以Python來說,使用NumPy會是個不錯的開始,它在陣列方面的功能不在話下,對向量、矩陣也有充分的支援,更重要的是,它提倡的「陣列程式設計」典範,比較接近數學方面的思考方式,而不是程式設計方面,在習慣該典範之後,對數學與程式的心智模型結合上,有很大的幫助。
目前有不少相關的程式庫是基於NumPy而成,像是Pandas、Scipy等,這讓你在需要對資料做更進一步處理時,不用重新適應新的心智模型;如果需要處理圖像,OpenCV的Python介面(opencv-python)也是基於NumPy,因為機器學習常見的處理對象之一就是圖像,認識一下opencv-python,絕對有很大的助益。
我會建議多瞭解在圖像處理中,如何辨識圖像邊緣,例如Laplacian轉換、Sobel運算等,你應該試著去瞭解其背後的數學原理,因為會涉及微分概念,也能從中學到卷積(convolution)的應用。
這會是個漫長的累積過程
如果你在這個過程當中,依然是以機器學習為目標,下一步或許可以試試scikit-learn,基本上,它也是基於NumPy的技術堆疊,可用來做為迴歸、分類、類神經網路的程式庫入門,你可以試著用之前累積下來的數學思考習慣,去理解相關的數學理論基礎。
當然,這會是個漫長的累積過程!即便我已經從繪圖、3D建模中累積了一些經驗,也還是前前後後試了不少途徑,耗費近一年,才終於覺得來到機器學習的門口,在數學基礎書籍的推薦上有點難,我想每個人狀況不同,就我來說,機器學習算是新東西,因此《練好機器學習的基本功》這種以對話為主超級入門書,反而對我是比較有幫助的。
如果你從沒有試著從數學的角度來解決需求,或許要花費更多的時間,才能入門機器學習,這很公平,畢竟真正能靈活運用這些東西的人,在這些領域也花很多年吧!是的,程式庫或框架很方便,然而若不想只會辨識數字圖片、對鳶尾花分類的話,還是必須靜下心來,做好長時間的規畫,並逐步實現學習的過程!
專欄作者
林信良
因在網路上經營「良葛格學習筆記」(openhome.cc)而聞名,曾任昇陽教育訓練中心技術顧問、甲骨文教育訓練中心授權講師,目前為自由工作者,專長為技術寫作、翻譯與教育訓練。
喜好研究程式語言、框架、社群,從中學習設計、典範及文化。
閒暇之餘記錄所學,技術文件涵蓋C/C++、Java、Ruby/Rails、Python、JavaScript、Haskell等多個領域。
熱門新聞
【微服務架構弱點,遇上超完整DR計畫盲點,連6年SRE老手都失守】SaaS業界近年最大當機事件追追追
2022-05-23
Atlassian四月大當機為何14天才復原?問題出在工程思維DR計畫,缺乏關鍵的顧客視角
2022-05-23
Conti關門大吉、化身成數個新勒索軟體
2022-05-23
Windows11測試新版WindowsSubsystemforAndroid
2022-05-23
解決開源軟體安全將從10大問題面著手,美政府、業者與社群協力提對策,並宣布投入預算
2022-05-22
【資安週報】2022年5月16日至20日
2022-05-21
臺灣積極發展資安職務地圖,促進產官學溝通對焦,新興資安產業版首登場
2022-05-20
歐洲第二版資安指令NIS2即將發布,更多重要中大型產業納入規範
2022-05-22
Advertisement
專題報導
6年SRE老手為何仍大當機14天
【從端到端數位化,邁向以顧客體驗為核心】玉山金控金融即服務戰略2.0
解放政府行動力
DPU走入企業應用
如何當一個稱職的資安長?
更多專題報導
延伸文章資訊
- 1Python機器學習入門[線上課程] - 台灣大學資訊系統訓練班
Python機器學習入門[線上課程]. AI 已經進入到不同產業,不論在電子、金融、資訊、醫療、零售、通訊、交通、物流等領域,您都可能透過機器學習(Machine Learning) ...
- 2台灣大學資訊系統訓練班
Python機器學習入門. AI 已經進入到不同產業,不論在電子、金融、資訊、醫療、零售、通訊、交通、物流等領域,您都可能透過機器學習(Machine Learning)解決過去難以 ...
- 3博客來-深度學習入門教室:6堂基礎課程+Python實作練習 ...
書名:深度學習入門教室:6堂基礎課程+Python實作練習,Deep Learning、人工智慧、機器學習的理論和應用全圖解,原文名稱:いちばんやさしいディープラーニング入門 ...
- 4機器學習(Machine Learning) -入門觀念 - iT 邦幫忙
機器學習(Machine Learning) -入門觀念. AI無法一步登天,讓我們先從專 ... 這也是為什麼AI、機器學習,這領域,始終給人很大距離感的原因。(相比之下,Big Data真是...
- 5適合初學者閱讀的7 本機器學習優良書籍 - Tableau
不需要任何數學背景,也不需要程式設計經驗,對任何有興趣要瞭解機器學習的人而言,這確實是最基本的入門書。 其中特別強調「普通」語言,目的是避免初學者因面對大量技術 ...