AI時代的網站與手機App建置與開發Part2 - 認識ML.NET
· 認識機器學習(Machine Learning)
機器學習是一種資訊科技, 經由餵入訓練資料到電腦, 讓電腦經由學習得到智慧, 再利用學習得到的智慧解決許多不同類型的問題, 包括視覺辨識, 語音辨識, 人臉辨識, 車牌辨識, 自然語言處理, 健康照護, 偽造偵測, 投資組合等等. 在這篇文章中, 我們將會為大家介紹.NET工程師如何Microsoft推出的ML.NET(Machine
Learning .NET程式庫), 開發具人工智慧的網站程式和手機App程式.
·
認識ML.NET程式庫
ML.NET程式庫支援.NET程式設計師使用C#或F#程式語言開發跨平台的人工智慧與機器學習解決方案. ML.NET程式庫有五大特點, 詳述如下:
1.
開放原始碼
Microsoft ML.NET程式庫是一套支援程式設計師自由使用, 轉散發, 甚至修改原始碼的內容, 遂行期望的目標, 不需要提供任何的原因.
2.
跨平台
使用ML.NET程式庫開發的網站和應用程式能夠部署到Windows,
Linux, 或macOS系統, 也能夠部署到Microsoft Azure或是其他廠商的雲端資料中心提供服務
3.
Code first
支援以先建立描述資料模型的類別的方式設計使用ML.NET程式庫的應用程式
4.
On-premises
ML.NET程式庫支援機器學習(Machine
Learning)與深度學習(Deep
Learning)的眾多功能,
其中的機器學習不像深度學習需要用到大量的運算資源, 但是深度學習需要大量的運算資源, 如果將使用ML.NET程式庫的應用程式部署到雲端運算環境, 將會產生較多的運算費用支出. 為了減輕開發的費用, ML.NET程式庫支援使用ML.NET程式庫的應用程式部署到一般的電腦執行, 不需要部署到雲端資料中心才能夠執行.
5.
餵入測試資料到現成的深度學習模型, 獲取預測結果
ML.NET程式庫支援程式開發者直妾餵給預訓練妥的深度學習模型, 例如分類圖片的的預訓練模型, 並獲取預測的答案, 節省程式設計師訓練深度學習模型的巨大代價.
圖1:支援在任意雲端平台, 或是企業機房中的Windows, Linux, 或macOS系統執行的ML.NET程式庫
·
機器學習和傳統程式開發的差別
圖2所示為傳統的程式, 傳統的程式是由程式設計師所製作的, 而所製作的程式負責執行資料處理, 將輸入到程式的資料依據程式設計師寫作的邏輯處理成結果, 再輸出給使用者檢視.
圖2:傳統程式運作的情形
圖3所示機器學習分成兩個階段, 第一個階段稱為訓練/評估階段, 這個階段會餵入訓練資料, 訓練機器學習模型(即機器人), 並評估學習的成果, 如果成果是OK的訓練就完成了, 如果訓練的結果不OK, 則要調整訓練技巧, 或是增加訓練資料, 重覆訓練到成果滿意為止.
第二個階段稱為推論(Inference)階段, 也就是上線階段. 這個階段會將訓練妥的機器學習模型(即機器人)上線供使用者餵入實際的資料進行測試, 也就是說機器學習模型(即機器人)並不是程式設計師開發的, 而是利用餵入訓練資料給機器學習套件(例如ML.NET)訓練出來的.
圖3:機器學習運作的情形
·
實作機器學習 / 深度學習的步驟
在訓練 / 評估階段我們必須先搜集訓練資料, 對搜集到的資料進行前處理, 將資料切分成訓練和測試資料, 選擇欲使用的演算法, 進行訓練並評估訓練結果, 如果成果OK, 則發佈給需要的使用者使用, 其詳細步驟如下:
1. 載入訓練資料
2. 處理資料(Pre-processing),
抽取特徵, 去除雜訊, …
3. 切割訓練 / 測試資料
4. 選擇演算法 / 建立訓練模型 / 使用訓練資料執行訓練
5. 使用測試資料驗証訓練結果(評估準確度)
6. 使用陌生的資料檢驗機器學習模型
7. 儲存模型 / 發佈模型(Model Serving)
機器學習發佈後的推論(上線)階段支援使用者餵入真實的資料, 並取後機器學習預測的結果
1. 用戶端 : 叫用發佈模型的功能
了解了實作機器學習的基本概念, 和實作的詳細步驟之後, 下一回我們就要使用Visual Studio和Visual Studio Code, 搭配ML.NET程式庫, 為傳統的網站和手機App加入機器學習功能.



留言
張貼留言