以下是我自己這一路學習ML過程中,整理出來的ML研究與實作,使用的演進脈絡,純屬個人觀感,並未有任何理論說明是這樣區分。
因為網路上的資料實在太多,這個領域的知識和做法又在快速地進展,然而看太新的資料在沒有基礎的知識支撐之下,除了看不懂根基也不扎實,看太舊太基礎的資料又晦澀難懂,實務上好像得要花上幾年摸索才能商業化,到底怎麼有效率的學習這門學科並應用,實在是莫大的痛點。
了解了ML訓練模型,其實本自於數學運算,那麼就可以開始寫程式了,數學函式,譬如說梯度下降法會用到的微分,偏微分,啟動函式等等,其實可以用程式的方式寫出,網路上也不少參考資料。
搭配讀取進來的資料,整理成適當的資料格式後,傳入數學運算的訓練函式,執行後就可以拿到結果。
以上好比只用基礎語法if/else、for迴圈、switch等等,很辛苦的手刻各種東西,但相對若能手刻做一次,一定令人體驗深刻。
有些固定的數學運算方式寫成library是不是方便許多了?大家也可以不用重複造輪子,python的許多套件便是為了這樣產生,甚至是為了數學運算的效率而生,例如numpy套件,專門為了矩陣運算效率成為廣泛使用的套件之一。
這些套件並不是像我們寫golang那樣,也許只是外面多包一點,參入一些自己需要的功能,反而是為了需求或運算效率而產生。
以上好比有了function、class、package的概念,世代又更進一步的演進。
如果想要更懶呢?就是衍生出框架的概念。
譬如說使用 sklearn.LinearRegression() ,就直接讓框架幫我們執行迴歸模型的運算,需要細部的調教再另外設定參數。
以下列出三個比較常見的ML/DL框架,有興趣可以參閱更詳細的資料。
那麼選什麼框架,怎麼樣調教才能獲得最好的模型,或得到相對清楚的訓練報告呢?
如果願意花一點預算,Google Vertex AI功能可以提供這樣的服務,花費的金額就我們來看,相對比請幾個工程師便宜多了,當然需要比較客製化或使用進階的功能,有能力的人才依然不可或缺。