在媒体中经常看到词汇:人工智能、机器学习、深度学习和神经网络。那么他们之间的关系是什么?
可以认为机器学习是实现AI的一种方法,而深度学习是一种实现机器学习的技术。由于目前深度学习技术取得了突破性进展,是AI中最为前沿和重要的技术,并不断在广泛的应用场景内取代传统机器学习模型,而神经网络是深度学习的具体实现形态,使用神经网络模型来表示机器学习中深度学习这一范式。
在展开AI系统设计之前,需要首先了解AI的原理与特点。将以下面图中的实例介绍AI是如何工作的。本内容假定读者有一定机器学习经验,其中的一些概念暂不在本节过多解释,会在后续章节中介绍机器学习、神经网络与AI的原理,让读者对整体的执行流程有更加深入的理解。
如图所示,将神经网络的开发与工作模式抽象为以下几个步骤:
因此训练过程就是根据用户给定的带有标签(如图中的多张马冬梅的照片,以及马冬梅照片对应的“马冬梅”这个确定性的输出标签)的数据集,不断通过优化算法进行训练学习。而训练学习则是通过下面步骤学习出给定数据集下最优的模型权重$w_n$的取值。
3.1前向传播(ForwardPropagation):由输入到输出完成AI模型中各层矩阵计算(例如卷积层,池化层等),产生输出并完成损失函数LOSS计算。
3.2反向传播(BackPropagation):由输出到输入反向完成AI模型中各层的权重和输出对损失函数的梯度求解。
3.3梯度更新(WeightUpdate):对模型权重通过梯度下降法完成模型权重针对梯度和指定学习率更新。
不断重复以上步骤3.1~3.2,直到达到AI模型收敛(即总误差损失Loss值降到一个提前设置的阈值)或达到终止条件(例如指定达到一定迭代(Step)次数然后停止训练)。
如图所示,当完成了模型训练,意味着在给定的数据集上,模型已经达到最佳或者满足需求的预测效果。在如果开发者对模型预测效果满意,就可以进入模型部署进行推理和使用模型。·一句话而言,我们训练AI模型的过程,就是通过不断的迭代计算,使用梯度下降的优化算法,使得损失值Loss越来越小。损失值越小就表示算法达到数学意义上的最优。
如图中下半部分所示,由输入到输出完成AI模型中各层的矩阵计算(例如卷积层,池化层等),产生输出。本例中输入是“马冬梅”的图片,输出的结果为向量,向量中的各个维度编码了图像的类别可能性,其中“马冬梅”的类别概率最大,判定为“马冬梅”,后续应用可以根据输出类别信息,通过程序转换为人可读的信息。
后续章节将要介绍的AI系统,就是围绕以上负载AI训练和推理应用的AI全生命周期的开发与执行各个环节,提供给算法工程师良好的模型设计和开发体验,AI硬件的极致的执行性能,保证安全性,以及应对更大规模的数据,更大的模型结构,更大的超参数搜索空间,云上的多租的执行环境,同时利用新的加速器硬件特性,挖掘硬件的极致算力。
目前AI模型有很多种类并在每年不断推出新的AI模型,如图所示,以影响AI系统设计的视角,我们将其简要归为以下一些代表性的类型。这些代表性的AI网络结构也是AI系统进行评测和验证所广泛使用的基准。同时一些新的结构的涌现,也不断推进一些新的AI系统设计。
下面对典型的基本AI模型结构进行类型归纳:
基础模型的典型算子已经被AI框架和底层AI硬件做了较多优化,但是AI模型已经不单纯只在算子层面产生变化,其从网络结构,搜索空间等方向演化出如下的新的趋势:
催生这轮AI热潮的原因有三个重要因素:大数据的积累、超大规模的计算能力支撑、机器学习尤其是深度学习算法都取得了突破性进展,下面将围绕以上重要的三方面因素展开。
随着数字化发展,信息系统和平台不断沉淀了大量数据。AI算法利用数据驱动(DataDriven)的方式解决问题,从数据中不断学习出规律和模型,进而完成分类和回归的任务。
互联网和移动互联网公司由于有海量的用户,大规模的数据中心,信息系统完善,所以可以较早沉淀出大规模数据,并应用人工智能技术,投入研发创新人工智能技术。互联网服务和大数据平台给深度学习带来了大量的数据集。随着移动互联网的日益火爆,移动应用的发展可谓日新月异,谷歌Play、AppStore,还有众多的移动应用分发渠道上,已经积累了海量应用。
例如,以下几种服务中沉淀和形成了相应领域代表性的数据集:
同样是图像分类问题,从最开始数据规模较小的MNIST手写数字识别数据集其只有6万样本,10个分类,到更大规模的ImageNet,其有1600万样本,1000个分类,再到互联网Web服务中沉淀了数亿量级的图像数据。海量的数据让人工智能问题变得愈发挑战的同时,实质性的促进了神经网络模型效果的提升,因为当前以深度学习为核心的代表性AI算法,其本身是数据驱动的方式从数据中学习规律与知识,数据的质与量决定了模型本身的天花板。
海量数据集为AI系统的发展产生了以下的影响:
综上所述,AI系统本身的设计相较于传统机器学习系统有更多样的表达需求,更大规模和多样数据集和更广泛的用户基础。
算法研究员和工程师不断设计新的AI算法和AI模型提升预测效果,其预测效果不断取得突破性进展。但是新的算法和模型结构,需要AI框架提供便于对AI范式的编程表达力和灵活性,对执行性能优化有可能会改变原有假设,进而产生了对AI系统对于AI框架的开发过程和AI编译器的执行过程优化提出了新的挑战,因而促进了AI系统的发展。
以MNIST手写数字识别任务为例,其作为一个手写数字图像数据集,在早期通常用于训练和研究图像分类任务,由于其样本与数据规模较小,当前也常常用于教学。从图中可以观察了解到不同的机器学习算法取得的效果以及趋势:1998年,简单的CNN可以接近SVM最好效果。2012年,CNN可以将错误率降低到0.23%(2012),这样的结果已经可以和人所达到的错误率0.2%非常接近。
神经网络模型在MNIST数据集上相比传统机器学习模型的表现,让研究者们看到了神经网络模型提升预测效果的潜力,进而不断尝试新的神经网络模型和在更复杂的数据集上进行验证。神经网络算法在准确度和错误率上的效果提升,让不同应用场景上的问题,取得突破进展或让领域研发人员看到相应潜力,是驱动不同行业不断投入研发AI算法的动力。
随着每年ImageNet数据集上的新模型取得突破,新的神经网络模型结构和训练方式的潜力。更深、更大的模型结构有潜力提升当前预测的效果。1998年的Lenet到2012年的AlexNet,不仅效果提升,模型变大,同时引入了GPU训练,新的计算层(如ReLU等)。到2015年的Inception,模型的计算图进一步复杂,且有新的计算层被提出。2015年ResNet模型层数进一步加深,甚至达到上百层。到2019年MobileNet3的NAS,模型设计逐渐朝着自动化的方式进行设计,错误率进一步降低到6.7%以下。
新的模型不断在以下方面演化进而提升效果:1)更好的激活函数和层,如ReLU、BatchNorm等;2)更深更大的网络结构和更多的模型权重;3)更好的训练技巧:正则化(Regularization)、初始化(Initialization)、学习方法(LearningMethods),自动化机器学习与模型结构搜索等。
上述取得更好效果的技巧和设计,驱动算法工程师与研究员不断投入,同时也要求AI系统提供新的算子(Operator)支持与优化,进而驱动AI框架和AI编译器对前端、中间表达和系统算法协同设计的演进和发展。
从1960年以来,计算机性能的增长主要来自摩尔定律,到二十世纪初大概增长了$10^8$倍。但是由于摩尔定律的停滞,性能的增长逐渐放缓了。单纯靠工艺尺寸的进步,无法满足各种应用对性能的要求。
于是,人们就开始为应用定制专用芯片,通过消除通用处理器中冗余的功能部分,来进一步提高对特定应用的计算性能。如图形图像处理器GPU就对图像类算法进行专用硬件加速。如图所示后来出现GPGPU,即通用GPU,对适合于抽象为单指令流多数据流(SIMD)或者单指令多线程(SIMT)的并行算法与工作应用负载都能起到惊人的加速效果。
为了更高的性能,近年来AI芯片也大放光彩。其中一个代表就是谷歌TPU(TensorProcessingUnit),通过对神经网络模型中的算子进行抽象,转换为矩阵乘法或非线性变换,根据专用负载特点进一步定制流水线化执行的脉动阵列(SystolicArray),进一步减少访存提升计算密度,提高了AI模型的执行性能。华为昇腾NPU(NeuralProcessingUnit,神经网络处理器)针对矩阵运算专门优化设计,可解决传统芯片在神经网络运算时效率低下的问题。此外,华为昇腾达芬奇架构面向AI计算设计,通过独创3DCube设计,每时钟周期可进行4096次MAC运算,为AI提供强大算力支持。
除了算子层面驱动的定制,AI层面的计算负载本身在算法层常常应用的稀疏性和量化等加速手段也逐渐被硬件厂商,根据通用算子定制到专用加速器中(例如,英伟达推出的TransformerEngine),在专用计算领域进一步协同优化加速。通过定制化硬件,厂商又将处理器性能提升了大约$10^5$量级。
算力的数值运算能力早已是人类望尘莫及了,然而可惜的是,经过这么多年的发展,虽然处理器性能提升这么多,AI芯片内部执行的程序代码仍然是人类指定的固定代码,智能程度还远远不及生物大脑。从智力程度来说,大约也就只相当于啮齿动物,距离人类还有一定距离。
可以看到随着硬件的发展,虽然算力逐渐逼近人脑,让AI取得了突破。但是我们也看到,算力还是可能在短期内成为瓶颈,那么AI系统的性能下一代的出路在哪?我们在后面会看到,除了单独芯片的不断迭代进行性能放大(ScaleUp),系统工程师不断设计更好的分布式计算系统将计算并行,提出了AI集群来达到向外扩展(ScaleOut),同时发掘深度学习的作业特点,如稀疏性等通过算法,系统硬件协同设计,进一步提升计算效率和性能。