diff --git a/chapter_introduction/applicable_readers.md b/chapter_introduction/applicable_readers.md index 4f6f044..f4eed3e 100644 --- a/chapter_introduction/applicable_readers.md +++ b/chapter_introduction/applicable_readers.md @@ -1,6 +1,6 @@ ## 适用读者 -本书将会由浅入深地讨论机器学习系统的设计原理和实现经验。其读者包括: +本书由浅入深地讨论机器学习系统的设计原理和实现经验。其读者包括: - **学生:** 本书将帮助学生获得大量机器学习系统的设计原则和一手实践经验。从而帮助其更全面理解机器学习算法的实践挑战和理论优劣。 diff --git a/chapter_introduction/components_of_machine_learning_systems.md b/chapter_introduction/components_of_machine_learning_systems.md index 0fcb1b5..5189f42 100644 --- a/chapter_introduction/components_of_machine_learning_systems.md +++ b/chapter_introduction/components_of_machine_learning_systems.md @@ -1,38 +1,35 @@ -## 机器学习系统基本组成 +## 基本组成 -一个现代的机器学习系统往往具有如 :numref:`framework_architecture`所示的基本架构。 +一个完整的机器学习系统往往具有如 :numref:`framework_architecture`所示的基本架构。 ![机器学习框架基本构成](../img/ch01/framework_architecture.png) :width:`600px` :label:`framework_architecture` -- **编程接口:** 为了支持广泛的开发者,机器学习框架的编程接口(Programming - interface)不仅仅需要多样的高层次编程函数(例如,Python,Julia和Java),同时也需要支持高性能编程(利用C和C++函数调用操作系统和硬件加速器)。 +- **编程接口:** 为了支持广泛的开发者,机器学习框架的编程接口不仅需要高层次简易编程(例如,Python,Julia和Java),同时也需要支持低层次高性能编程(利用C和C++函数调用操作系统和硬件加速器)。 - **计算图:** - 利用不同编程接口实现的机器学习应用需要共享一个执行后端。实现这一后端的关键技术是:应用无关的计算图(Computational - graph)。计算图包含计算节点,节点之间的边表达计算依赖。计算图可以被同步和异步执行。 + 利用不同编程接口实现的机器学习程序需要共享一个运行后端。实现这一后端的关键技术是:应用无关的计算图。计算图包含计算节点,节点之间的边表达计算依赖。计算图可以被同步和异步执行。 - **编译器前端:** - 给定一个计算图,机器学习框架会对计算图做一系列优化。和硬件无关的优化由编译器前端实现。编译器前端实现包括:中间表达(Intermediate - Representation),自动微分,类型推导和静态分析等等。 + 给定一个计算图,机器学习框架会对计算图做一系列优化。和硬件无关的优化由编译器前端实现。编译器前端实现包括:中间表达,自动微分,类型推导和静态分析等等。 - **编译器后端和运行时:** 机器学习框架利用编译器后端对计算图可以进一步针对硬件的特性(例如说,L2/L3大小,指令流水线长度)进行性能优化。最终优化后的计算图通过运行时执行在通用处理器(CPU)或者是硬件加速器之上。运行时需要实现算子选择和内存分配等技术。 - **硬件加速器:** - 现代硬件加速器提供了丰富的编程接口让应用来优化其相关性能。在本书中,我们将会介绍硬件加速器的基本组成原理和编程接口。我们同时会给出一个完整的硬件加速器使用案例来从0到1讲述高效加速器程序的编写。 + 现代硬件加速器提供了丰富的编程接口。在本书中,我们将会介绍硬件加速器的基本组成原理和编程接口。我们同时会给出一个硬件加速器使用案例来从0到1讲述如何高效使用加速器。 - **数据处理:** - 对于数据读取,存储和预处理的功能由数据处理模块(例如,TensorFlow的tf.data和PyTorch的DataLoader)完成。数据处理模块需要针对机器学习应用实现易用性,保序性和高效性等设计目标。 + 机器学习系统拥有专门的数据处理框架来实现数据读取,存储和预处理的功能由数据处理模块(例如,TensorFlow的tf.data和PyTorch的DataLoader)。这一框架需要针对机器学习应用实现易用性,保序性和高效性等设计目标。 - **模型部署:** - 在模型完成训练后,下一个常用的系统模块是:模型部署工具。为了确保模型可以被广泛的硬件设备执行,我们往往会使用模型转换,量化,蒸馏等模型压缩技术。同时,针对推理硬件,我们也需要实现特定硬件优化。最后,为了保证模型的安全(不被黑客窃取),实践者还会对模型进行混淆设计。 + 在模型完成训练后,下一个常用的系统功能是:模型部署。为了确保模型可以在内存有限的硬件上执行,我们会使用模型转换,量化,蒸馏等模型压缩技术。同时,我们也需要实现针对推理硬件平台(例如,英伟达Jetson)的模型算子优化。最后,为了保证模型的安全(不被黑客窃取),实践者还会对模型进行混淆设计。 - **分布式训练:** - 分布式训练日渐成为一个现代机器学习框架的核心组件。本书将介绍各类型分布式训练的方法(数据并行,模型并行,混合并行和流水线并行)。同时我们会深入介绍这些方法的高效系统实现(包括集合通讯库和参数服务器)。 + 分布式训练日渐成为一个机器学习框架的核心组件。本书将介绍常见的分布式训练方法(数据并行,模型并行,混合并行和流水线并行)。同时我们会深入介绍这些方法的高效系统实现(包括集合通讯库和参数服务器)。 - **拓展模块:** - 机器学习系统的广泛部署使得许多的扩展模块陆续出现。本书将会介绍得到大量实践部署的:深度学习推荐系统,联邦学习系统,强化学习系统,可解释性AI系统和机器人系统。 + 机器学习系统的广泛部署使得许多的扩展模块陆续出现。本书将会介绍得到大量实践部署的拓展模块:深度学习推荐系统,联邦学习系统,强化学习系统,可解释性AI系统和机器人系统。 -另外,机器学习算法相关的理论知识是本书的预备知识,本书不做深入讨论。基础的机器学习理论知识可以在附录中找到。 \ No newline at end of file +机器学习算法相关的理论知识是本书的预备知识,本书不做深入讨论。基础的机器学习理论知识可以在附录中找到。 \ No newline at end of file diff --git a/chapter_introduction/machine_learning_applications.md b/chapter_introduction/machine_learning_applications.md index 2cb5c85..e790865 100644 --- a/chapter_introduction/machine_learning_applications.md +++ b/chapter_introduction/machine_learning_applications.md @@ -1,10 +1,14 @@ ## 机器学习应用 -通俗来讲,机器学习是指从数据中学习出有用知识的计算技术。从学习模式来说,机器学习可以分为监督学习(Supervised +通俗来讲,机器学习是指从数据中学习出有用知识的技术。从学习模式来说,机器学习可以分为监督学习(Supervised Learning)、无监督学习(Unsupervised Learning)、强化学习(Reinforcement -Learning)等等。监督学习是已知输入输出对应关系情况下的学习,比如给定输入图像和它对应的内容标签,则学习图像分类(Classification)。无监督学习是只有输入数据但不知道输出标签情况下的学习,比如:给定一堆猫和狗的图像,自主学会猫和狗的分类,这种无监督分类也称为聚类(Clustering)。强化学习则是给定一个学习环境和任务目标,算法自主地去不断尝试、改进自己、以实现任务目标。比如AlphaGo围棋就是用强化学习实现的,给定的环境是围棋的规则,而目标则是胜利得分。 +Learning)等: -从应用领域上划分,主要可以包括计算机视觉、自然语言处理和智能决策这三大部分,而且这三大部分之间也有很多交集。 +* 监督学习是已知输入输出对应关系情况下的学习,比如: 给定输入图像和它对应的内容标签,学习图像分类(Classification)。 +* 无监督学习是只有输入数据但不知道输出标签情况下的学习,比如:给定一堆猫和狗的图像,自主学会猫和狗的分类,这种无监督分类也称为聚类(Clustering)。 +* 强化学习则是给定一个学习环境和任务目标,算法自主地去不断尝试、改进自己、以实现任务目标 ,比如: AlphaGo围棋就是用强化学习实现的,给定的环境是围棋的规则、而目标则是胜利得分。 + +从应用领域上划分,主要包括计算机视觉、自然语言处理和智能决策这三大部分,而且这三大部分之间也有交集。 狭义上来讲基于图像的应用都可归为计算机视觉方面的应用,典型的应用有人脸识别、物体识别、目标跟踪、人体姿态估计、以及图像的理解、修复、分割与检测等等。 计算机视觉方法广泛应用于自动驾驶、智慧城市、智慧安防等领域。 自然语言处理涉及文本或者语音方面的应用,典型的应用包括语言翻译、文本转语音、语音转文本、以及文本理解、分类、风格变换与纠错等等。 @@ -16,4 +20,4 @@ Machine,SVM)、逻辑回归(Logistic Regression)、朴素贝叶斯(Naive Bayes) 等方法。然而得力于大数据互联网和计算机性能的提升,以深度学习(Deep Learning)为代表的方法得到了广泛的研究和应用。 -虽然机器学习算法很多,但无论是经典算法还是深度学习算法的计算往往以向量、矩阵运算为主体的,因此本书主要通过深度神经网络为例子展开机器学习系统的介绍。下面我们来快速了解一下机器学习系统的设计需求、目标以及其组成原理。 \ No newline at end of file +虽然机器学习算法很多,但无论是经典算法还是深度学习算法的计算往往以向量、矩阵运算为主体的,因此本书主要通过深度神经网络为例子展开机器学习系统的介绍。下面我们来快速了解一下机器学习系统的设计需求、实现目标以及组成原理。 \ No newline at end of file diff --git a/chapter_introduction/requirements_for_machine_learning_systems.md b/chapter_introduction/requirements_for_machine_learning_systems.md index b31ac91..671bc64 100644 --- a/chapter_introduction/requirements_for_machine_learning_systems.md +++ b/chapter_introduction/requirements_for_machine_learning_systems.md @@ -1,38 +1,38 @@ -## 机器学习系统的需求 +## 设计目标 ![机器学习框架](../img/ch01/framework_position.png) :width:`600px` :label:`framework_position` -为了支持日益增长的机器学习应用,开发者需要设计机器学习系统来满足以下需求(如 :numref:`framework_position`所示): +开发者需要设计和实现机器学习系统来满足以下目标(如 :numref:`framework_position`所示): - **支持多种神经网络:** - 深度学习的巨大成功使得神经网络成为了机器学习应用的核心。不同的应用需要不同的神经网络,例如,卷积神经网络(Convolutional + 深度学习的巨大成功使得神经网络成为了机器学习应用的核心。不同应用需要不同的神经网络,例如,卷积神经网络(Convolutional Neural Networks),图神经网络(Graph Neural - Networks),自注意力神经网络(Self-attention Neural - Networks)等等。这些神经网络需要一个共同的系统软件来进行开发。 + Networks),自注意力神经网络(Self-Attention Neural + Networks)等。这些神经网络需要一个共同的系统软件来进行开发和运行。 - **支持自动微分:** 为了训练神经网络,我们需要利用数据、标注(Label)和目标损失函数(Loss - Function)来计算梯度(Gradients)。因此,我们需要一个通用系统**自动化**推导出梯度的计算方法,这个推导过程被称之为自动微分。 + Function)来计算梯度(Gradients)。因此,机器学习通系统需要有一个通用的方法来**自动化**计算梯度(这一过程被称之为自动微分)。 - **支持数据管理和处理:** - 机器学习的核心是数据。这些数据不仅包括训练、评估和测试数据集,还包括训练后产生的模型参数。因此,我们需要系统本身支持数据读取,存储和预处理(例如,数据增强和数据清洗)。 + 机器学习的核心是数据。这些数据包括训练、评估、测试数据集和模型参数。因此,我们需要系统本身支持数据读取、存储和预处理(例如,数据增强和数据清洗)。 - **支持模型的训练和部署:** 为了让机器学习模型达到最佳的性能,人们需要使用优化方法(例如,Mini-Batch - SGD)来**迭代**计算梯度(这一过程称之为训练)。训练完成后,系统需要将训练好的模型部署推理设备。 + SGD)来通过多步迭代反复计算梯度(这一过程称之为训练)。训练完成后,系统需要将训练好的模型部署推理设备。 - **高效使用硬件加速器:** - 神经网络的相关计算往往通过矩阵计算实现。这一类计算可以被硬件加速器(例如,通用图形处理器-GPU)加速。因此,机器学习系统需要高效利用硬件加速器。 + 神经网络的相关计算往往通过矩阵计算实现。这一类计算可以被硬件加速器(例如,通用图形处理器-GPU)加速。因此,机器学习系统需要高效利用多种硬件加速器。 - **分布式计算:** - 随着训练数据量和神经网络参数量的上升,机器学习系统的内存用量远远超过了单机内存的容量。因此,机器学习框架需要天然具备分布式执行的能力。 + 随着训练数据量和神经网络参数量的上升,机器学习系统的内存用量远远超过了单个机器可以提供的内存。因此,机器学习框架需要天然具备分布式执行的能力。 -在设计机器学习系统之初,开发者曾尝试通过拓展**神经网络开发库**(如Theano和Caffe)和**大数据计算框架**(如Apache +在设计机器学习系统之初,开发者曾尝试拓展**神经网络开发库**(如Theano和Caffe)和**大数据计算框架**(如Apache Spark和Google Pregel)来达到以上目标。可是他们发现(如 :numref:`comparison_of_ml_frameworks`所示), -神经网络库虽然提供了神经网络开发、自动微分和加速器的支持,但是其缺乏管理和处理大型数据集、模型部署和分布式执行的能力,无法满足产品级机器学习应用的开发任务。 -另一方面,虽然大数据计算框架具有成熟的分布式执行和数据管理能力,但是其缺乏对神经网络、自动微分和加速器的支持,使得其并不适合开发以神经网络为核心的机器学习应用。因此,业界从头开始,设计出了包括MindSpore、PaddlePaddle、TensorFlow,PyTorch等一系列机器学习框架。 +神经网络库虽然提供了神经网络开发、自动微分和硬件加速器的支持,但是其缺乏管理和处理大型数据集、模型部署和分布式执行的能力,无法满足产品级机器学习应用的开发任务。 +另一方面,虽然大数据计算框架具有成熟的分布式执行和数据管理能力,但是其缺乏对神经网络、自动微分和加速器的支持,使得其并不适合开发以神经网络为核心的机器学习应用。因此,业界设计出了包括MindSpore、PaddlePaddle、TensorFlow,PyTorch等一系列新型机器学习系统(框架)。 :机器学习框架和相关系统的比较