- 機器學習系統:設計和實現
- 麥絡 董豪編著
- 1069字
- 2024-12-27 20:30:14
1.2 機器學習框架的設計目標
為了支持在不同應用中高效開發機器學習算法,人們設計和實現了機器學習框架(如TensorFlow、PyTorch、MindSpore等)。廣義來說,這些框架實現了以下共性的設計目標:
(1)神經網絡編程:深度學習的巨大成功使得神經網絡成為了許多機器學習應用的核心。根據應用的需求,人們需要定制不同的神經網絡,如卷積神經網絡(Convolutional Neural Networks)和自注意力神經網絡(Self-Attention Neural Networks)等。這些神經網絡需要一個共同的系統軟件進行開發、訓練和部署。
(2)自動微分:訓練神經網絡會具有模型參數。這些參數需要通過持續計算梯度(Gradients)迭代改進。梯度的計算往往需要結合訓練數據、數據標注和損失函數(Loss Function)。考慮到大多數開發人員并不具備手工計算梯度的知識,機器學習框架需要根據開發人員給出的神經網絡程序,全自動地計算梯度。這一過程被稱為自動微分。
(3)數據管理和處理:機器學習的核心是數據。這些數據包括訓練、驗證、測試數據集和模型參數。因此,需要系統本身支持數據讀取、存儲和預處理(例如數據增強和數據清洗)。
(4)模型訓練和部署:為了讓機器學習模型達到最佳的性能,需要使用優化方法(例如Mini-Batch SGD,小批量隨機梯度下降)來通過多步迭代反復計算梯度,這一過程稱為訓練。訓練完成后,需要將訓練好的模型部署到推理設備。
(5)硬件加速器:機器學習的眾多核心操作都可以被歸納為矩陣計算。為了加速矩陣計算,機器學習開發人員需要大量使用針對矩陣計算加速的硬件(統稱為硬件加速器或者AI芯片)。
(6)分布式執行:隨著訓練數據量和神經網絡參數量的上升,機器學習系統的內存用量遠遠超過了單個機器可以提供的內存。因此,機器學習框架需要天然具備分布式執行的能力。
在設計機器學習框架之初,開發者曾嘗試通過傳統的神經網絡開發庫(如Theano和Caffe)、以及數據處理框架(如Apache Spark和Google Pregel)等方式達到以上設計目標。可是他們發現,神經網絡開發庫雖然提供了神經網絡開發、自動微分和硬件加速器的支持,但缺乏管理和處理大型數據集、模型部署和分布式執行的能力,無法滿足當今產品級機器學習應用的開發任務。另外,雖然并行數據處理框架具有成熟的分布式運行和數據管理能力,但缺乏對神經網絡、自動微分和加速器的支持,并不適合開發以神經網絡為核心的機器學習應用。
考慮到上述已有軟件系統的種種不足,許多公司開發人員和大學研究人員開始從頭設計和實現針對機器學習的軟件框架。在短短數年間,機器學習框架如雨后春筍般出現(較為知名的例子包括TensorFlow、PyTorch、MindSpore、MXNet、PaddlePaddle、OneFlow、CNTK等),極大推進了人工智能在上下游產業中的發展。表1.1總結了機器學習框架和其他相關系統的區別。
表1.1 機器學習框架和其他相關系統的區別

- 程序員面試算法寶典
- Learn Scala Programming
- 差分進化算法及其高維多目標優化應用
- Learning Network Forensics
- Java Web程序設計任務教程
- Python極簡講義:一本書入門數據分析與機器學習
- 21天學通C++(第5版)
- 案例式C語言程序設計實驗指導
- Visual Basic程序設計習題與上機實踐
- MINECRAFT編程:使用Python語言玩轉我的世界
- Python商務數據分析(微課版)
- Photoshop CC移動UI設計案例教程(全彩慕課版·第2版)
- Drupal 8 Development:Beginner's Guide(Second Edition)
- Java高級程序設計
- Ionic3與CodePush初探:支持跨平臺與熱更新的App開發技術