了解AI算法其实就是了解AI是怎么工作的,看似很神奇的可以智能控制对话等,其内部原理是什么样,本章节进行一个简单的介绍。
本文主要参考ZOMI酱的:chenzomi12.github.io/01Introduct…
1. 训练和推理
深度学习主要就是训练和推理两个过程:
-
训练(training)可以类比成在学校中学习。神经网络和大多数人一样——为了完成一项工作,需要接受教育。教育的内容就是数据集,学习的方法就是算法,经过反复的各种花样的学习,最后形成在大脑中的经验知识就是模型。
-
推理(Inference)就是利用训练好的模型,对一个新的数据进行处理,输出智能的结果。例如图片识别、对话等,属于实战应用。
一般针对数据集的训练形成的模型,需要在数据集中表现良好,并且对新的数据进行识别的准确度高,那这个算法就是优异的。
1.1 模型训练
模型训练整体流程:
-
根据任务和数据特点选择合适的模型架构。例如,对于图像识别任务,可以选择卷积神经网络(CNN) ;对于序列预测任务,可以选择循环神经网络(RNN)或Transformer等。
-
准备并预处理数据,
-
收集数据:获取与任务相关的数据集。
-
数据预处理:对原始数据进行必要的预处理,如灰度化、二值化、噪声去除、数据增强(如旋转、缩放、翻转等)以及归一化或标准化等,以提高模型的学习效果和泛化能力。
-
划分数据集:将数据集划分为训练集、验证集和测试集。训练集用于训练模型,验证集用于调整模型参数和选择最优模型,测试集用于评估模型的最终性能。
-
-
设置训练参数 确定适当的超参数,如学习率、批处理大小、训练周期(或迭代次数)、优化器等。这些参数对模型的训练效果和速度有重要影响。
-
训练模型:使用准备好的训练集和选择的模型架构进行模型训练。在训练过程中,算法会不断调整模型的参数,以最小化损失函数。损失函数用于衡量模型预测输出与真实输出之间的差距,常用的损失函数包括均方误差(MSE)、交叉熵损失等。
-
评估性能与调整参数:
-
评估性能:在验证集上评估模型的性能,并记录关键指标,如准确率、精度、召回率、F1分数等。这些指标用于衡量模型的预测能力和泛化能力。
-
调整参数:根据性能评估结果调整超参数,如学习率、批处理大小等。可以采用网格搜索、随机搜索、贝叶斯优化等调参技术来自动寻找最优参数组合。
-
训练(Training)过程:训练的本质上是通过网络中的连接逐层向后传播总误差,计算每个层中每个权重和偏差对总误差的贡献(梯度 δw),然后使用求解梯度的优化算法(如梯度下降算法)进行优化权重和偏差,并最终最小化神经网络的总误差。如上图中上半部分所示,训练过程就是根据用户给定的带有标签(如图中的 Cat,Dog 等输出标签)的数据集,不断通过优化算法进行学,通过下面步骤学习出给定数据集下最优的模型权重 wn 的取值。
推理过程常用的一些算法:
-
前向传播(Forward Propagation) :由输入到输出完成 AI 模型中各层矩阵计算(例如卷积层,池化层等),产生输出并完成损失函数 LOSS 计算。
-
反向传播(Back Propagation) :由输出到输入反向完成 AI 模型中各层的权重和输出对损失函数的梯度求解。
-
梯度更新(Weight Update) :对模型权重通过梯度下降法完成模型权重针对梯度和指定学习率更新。
不断重复以上3个步骤,直到达到 AI 模型收敛或达到终止条件(例如指定达到一定迭代(Step)次数然后停止执行)。
如图所示,当完成了模型训练,意味着在给定的数据集上,模型已经达到最佳或者满足需求的预测效果。在如果开发者对模型预测效果满意,就可以进入模型部署进行推理和使用模型。一句话而言,我们训练 AI 模型的过程,就是通过不断的迭代计算,使用梯度下降的优化算法,使得损失函数越来越小。损失函数越小就表示算法达到数学意义上的最优。
1.2 模型推理
推理(Inference)过程:推理只需要执行训练过程中的前向传播过程即可,推理的原理是基于训练好的 AI 模型,通过输入待预测的数据,经过前向传播过程,即通过 AI 模型定义的激活函数和非线性函数处理数据,得到最终的预测结果。
如图中下半部分所示,由输入到输出完成 AI 模型中各层的矩阵计算(例如卷积层,池化层等),产生输出。本例中输入是“马冬梅”的图片,输出的结果为向量,向量中的各个维度编码了图像的类别可能性,其中“马冬梅”的类别概率最大,判定为“马冬梅”,后续应用可以根据输出类别信息,通过程序转换为人可读的信息。
1.3 模型评估
模型评估(Evaluation)是指对训练完成的模型进行性能分析和测试的过程,以确定模型在新数据上的表现如何。分类任务常见的评估指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)和F1分数(F1 Score)等。
- 准确率(Accuracy) 定义:准确率是最直观也最常被提及的评估指标之一,它衡量的是模型预测正确的样本数占总样本数的比例。
计算公式:准确率 = (真正例 + 真负例) / (真正例 + 假正例 + 真负例 + 假负例)
- 精确率(Precision) 定义:精确率是指模型预测为正例中真正是正例的比例,它反映了模型预测为正例的结果的可信度。
计算公式:精确率 = 真正例 / (真正例 + 假正例)
- 召回率(Recall) 定义:召回率,也称为灵敏度(Sensitivity)或真正例率(True Positive Rate),是指模型在所有实际为正类的样本中,被正确预测为正类的样本的比例。它反映了模型捕获正类样本的能力。
计算公式:召回率 = 真正例 / (真正例 + 假负例)
- F1分数(F1 Score) 定义:F1分数是精确率和召回率的调和平均数,旨在综合两者的表现,提供一个平衡指标。
计算公式:F1分数 = 2 * (精确率 * 召回率) / (精确率 + 召回率)
参考:
2. AI算法
下面对典型的基本 AI 模型结构进行类型归纳:
- 卷积神经网络(Convolutional Neural Network,CNN) :以卷积层(Convolution Layer)为主,池化层(Pooling Layer),全连接层(Fully Connected Layer)等算子(Operator)的组合形成的 AI 网络模型,并在计算机视觉领域取得明显效果和广泛应用的模型结构。
- 循环神经网络(Recurrent Neural Network,RNN) :以循环神经网络、长短时记忆(LSTM)等基本单元组合形成的适合时序数据预测(例如,自然语言处理、语音识别、监控时序数据等)的模型结构。
- 图神经网络(Graph Neural Network,GNN) :使用神经网络来学习图结构数据,提取和发掘图结构数据中的特征和模式,满足聚类、分类、预测、分割、生成等图学习任务需求的算法总称。目的是为了尽可能多的提取 “图” 中潜在的表征信息。
- 生成对抗网络(Generative Adversarial Network,GAN) :该架构训练两个神经网络相互竞争,从而从给定的训练数据集生成更真实的新数据。例如,可以从现有图像数据库生成新图像,也可以从歌曲数据库生成原创音乐。GAN 之所以被称为对抗网络,是因为该架构训练两个不同的网络并使其相互对抗。
- 扩散概率模型(Diffusion Probabilistic Models) :扩散概率模型是一类潜变量模型,是用变分估计训练的马尔可夫链。目标是通过对数据点在潜空间中的扩散方式进行建模,来学习数据集的潜结构。如计算机视觉中,意味着通过学习逆扩散过程训练神经网络,使其能对叠加了高斯噪声的图像进行去噪。
- 混合结构网络(Model Ensemble) :组合卷积神经网络和循环神经网络,进而解决如光学字符识别(OCR)等复杂应用场景的预测任务。
基础模型的典型算子已经被 AI 开发框架和底层 AI 硬件做了较多优化,但是 AI 模型已经不单纯只在算子层面产生变化,其从网络结构,搜索空间等方向演化出如下的新的趋势:
- 更大的模型:以 Transformer 为基本结构的代表性预训练神经语言模型(Neural Language Model),例如,BERT、GPT-3、LLAMA 等,在自然语言处理和计算机视觉等场景应用越来越广泛。其不断增加的层数和参数量,该模型对底层系统内存管理,分布式训练和硬件设计提出了很大的挑战。
- 更灵活的结构:图神经网络模型、深度搜索树网模型等算法不断抽象多样且灵活的数据结构(例如图 Graph,树 Tree 等),应对更为复杂的建模需求。进而衍生了新的算子(例如图卷积等)与计算框架(例如图神经网络框架等)。
- 更稀疏的模型结构:以多专家模型(Mixture of Experts,MoE)和 Pathways 模型结构为代表的模型融合结构,让运行时的 AI 系统执行模型更加动态(Dynamic)和稀疏(Sparse),提升模型的训练效率减少训练代价,支持更多的任务。给系统设计静态分析带来了不小的挑战,同时驱动运用即时编译(Just In Time Compiling)和运行时(Runtime)更加高效的调度与优化。
- 更大规模的搜索空间:用户定义更大规模的超参数与模型结构搜索空间,通过超参数搜索优化(HPO)与神经网络结构搜索(NAS)自动化找到最优的模型结构。自动化机器学习(AutoML)为代表的训练方式,衍生出多作业执行与多作业(Multi-Jobs)编排优化的系统需求。
- 更多样的训练方式:扩散模型(Diffusion Model)和深度强化学习(Deep Reinforcement Learning)为代表的算法有比传统训练方式更为复杂的过程。其衍生出训练,推理,数据处理混合部署与协同优化的系统需求。
AI系统的三大支柱
之前就提到过AI=数据+算法+算力,这三个因素也是催生AI发展的驱动力,而未来AI技术的进步也将从这三个方面进行改进。
3.1 大规模数据驱动
互联网公司因为其有海量的用户,这些用户不断使用互联网服务,上传文字、图片、音频等数据,又积累了更为丰富的数据。这些数据随着时间的流逝和新业务功能的推出,数据量越来越大,数据模式越来越丰富。所以互联网公司较早的开发和部署了的大数据管理与处理平台。
基于这些海量数据,互联网公司通过数据驱动的方式,训练人工智能模型,进而优化和提升业务用户体验(如点击率预测让用户获取感兴趣的信息),让更多的用户使用服务,进而形成循环。由于天然的随着业务发展遇到更多需要应用人工智能技术的实际场景和需求,相较于学术界,互联网公司作为工业界的代表,较早地将深度学习的发展推到了更加实用,落地的阶段,并不断投入研发推动人工智能算法与系统的不断演进和发展。
在AI中使用的训练数据就是数据集,以下几种服务中沉淀和形成了相应领域代表性的数据集:
- 搜索引擎(Search Engine) :在图像检索(Image Search)邻域出现了如 ImageNet,Coco 等计算机视觉数据集。在文本检索(Text Search)出现了 Wikipedia 等自然语言处理数据集。
- 移动应用(Application) :移动应用数据分析是用户获取和留存的强劲引擎。如图所示,国内出现了优质的数据源的公司如知乎和小红书,传统的贴吧如天涯论坛、百度网吧等充斥广告等地方已经不再是优质数据源。各家移动互联网如淘宝、拼多多收集了大量的用户购买和浏览记录,形成庞大的推荐系统数据集,广告数据集。
海量数据集为 AI 系统的发展产生了以下的影响:
- 推动 AI 算法不断在确定任务上产生更高准确度与更低的误差。这样产生了针对 AI 系统发展的用户基础,应用落地场景驱动力和研发资源投入。
- 让 AI 有更广泛的应用,进而产生商业价值,让工业界和学术界看到其应用潜力并投入更多资源进行科学研究,持续探索。
- 传统的机器学习库不能满足相应的需求,海量的数据集让单机越来越难以完成 AI 模型的训练,进而产生了 AI 系统中分布式训练和 AI 集群的需求。
- 多样的数据格式和任务,驱动模型结构的复杂性,驱动 AI 开发框架和针对 AI 的编译体系,需要有更灵活的表达能力对 AI 问题进行表达与映射。
- 同时伴随着性能等需求得到满足,数据安全与模型安全问题挑战也变的日益突出。
3.2 AI算法的发展
算法研究员和工程师不断设计新的 AI 算法和 AI 模型提升预测效果,其预测效果不断取得突破性进展。但是新的算法和模型结构,需要 AI 开发框架提供便于对 AI 范式的编程表达力和灵活性,对执行性能优化有可能会改变原有假设,进而产生了对 AI 系统对于 AI 开发框架的开发过程和 AI 编译器的执行过程优化提出了新的挑战,因而促进了 AI 系统的发展。
-
精度提高:以 MNIST 手写数字识别任务为例,其作为一个手写数字图像数据集,在早期通常用于训练和研究图像分类任务,由于其样本与数据规模较小,当前也常常用于教学。从图中可以观察了解到不同的机器学习算法取得的效果以及趋势:1998 年,简单的 CNN 可以接近 SVM 最好效果。2012 年,CNN 可以将错误率降低到 0.23% (2012),这样的结果已经可以和人所达到的错误率 0.2% 非常接近。
-
公开数据集的发展:随着每年 ImageNet 数据集上的新模型取得突破,新的神经网络模型结构和训练方式的潜力。更深、更大的模型结构有潜力提升当前预测的效果。1998 年的 Lenet 到 2012 年的 AlexNet,不仅效果提升,模型变大,同时引入了 GPU 训练,新的计算层(如 ReLU 等)。到 2015 年的 Inception,模型的计算图进一步复杂,且有新的计算层被提出。2015 年 ResNet 模型层数进一步加深,甚至达到上百层。到 2019 年 MobileNet3 的 NAS,模型设计逐渐朝着自动化的方式进行设计,错误率进一步降低到 6.7% 以下。
新的模型不断在以下方面演化进而提升效果:
- 更好的激活函数和层,如 ReLU、Batch Norm 等;
- 更深更大的网络结构和更多的模型权重;
- 更好的训练技巧: 正则化(Regularization)、初始化(Initialization)、学习方法(Learning Methods),自动化机器学习与模型结构搜索等。
上述取得更好效果的技巧和设计,驱动算法工程师与研究员不断投入,同时也要求 AI 系统提供新的算子(Operator)支持与优化,进而驱动 AI 开发框架和 AI 编译器对前端、中间表达和系统算法协同设计的演进和发展。
3.3 算力和计算机硬件体系结构的进步
从 1960 年以来,计算机性能的增长主要来自摩尔定律,到二十世纪初大概增长了 10^8 倍。但是由于摩尔定律的停滞,性能的增长逐渐放缓了。单纯靠工艺尺寸的进步,无法满足各种应用对性能的要求。
于是,人们就开始为应用定制专用芯片,通过把通用的功能移动到单独的核,专用任务的硬件进行放大,例如AI SoC中可能一半以上的晶体管都被NPU占用了。
-
GPU:最早使用图形图像处理器 GPU 就对图像类算法进行专用硬件加速。如上图所示后来出现 GPGPU,即通用 GPU,对适合于抽象为单指令流多数据流(SIMD)或者单指令多线程(SIMT)的并行算法与工作应用负载都能起到惊人的加速效果。
-
NPU:AI 芯片拥有更高的计算能力,其中一个代表就是谷歌 TPU(Tensor Processing Unit),通过对深度学习模型中的算子进行抽象,转换为矩阵乘法或非线性变换,根据专用负载特点进一步定制流水线化执行的脉动阵列(Systolic Array),进一步减少访存提升计算密度,提高了 AI 模型的执行性能。华为昇腾 NPU(神经网络处理器)针对矩阵运算专门优化设计,可解决传统芯片在神经网络运算时效率低下的问题。此外,华为达芬奇架构面向 AI 计算设计,通过独创 3D Cube 设计,每时钟周期可进行 4096 次 MAC 运算,为 AI 提供强大算力支持。
算力的一些发展方向:
- 系统结构创新:除了算子层面驱动的定制,AI 层面的计算负载本身在算法层常常应用的稀疏性和量化等加速手段也逐渐被硬件厂商,根据通用算子定制到专用加速器中(例如,英伟达推出的 Transformer Engine),在专用计算领域进一步协同优化加速,发掘深度学习的作业特点,如稀疏性等通过算法,系统硬件协同设计,进一步提升计算效率和性能。。通过定制化硬件,厂商又将处理器性能提升了大约 10^5 量级。
- 并行计算:除了单独芯片的不断迭代进行性能放大(Scale Up),系统工程师不断设计更好的分布式计算系统将计算并行,来达到向外扩展(Scale Out),
整体来看目前AI的智力跟人脑还有很多差距,只能完成一些智商低一些的工作,否则就不保真。其中GPU/NPU的进步很大,算力已经远超人类大脑,但是目前的算法相对人脑无数年的进化还跟不上,现在AI芯片内部的代码还是人类制定的固定代码,所以只能用算力来拼,目前短期内算力仍然是一个瓶颈。
算力的核心就芯片,国内算法跟上还比较容易,例如deepseek,但是芯片只能去屯显卡,还需要有很大的发展,芯片几年前已经成为“卡脖子”的技术了。美国对一般芯片制造放的还比较宽,例如手机芯片,但是AI芯片特别是用于训练的大芯片基本一刀切的不给供了,买也是买英伟达的旧款,道路漫漫,发展不易。
后记:
芯片也是本系列之后要讲的一个重点,往往在学校基本能学到AI算法的很多内容,B站上例如李沐、吴恩达甚至一些国外的大学开源课,也有很多教程。但是AI芯片的东西,资料还比较少,一是门槛可能高,技术比较新,另外一次流片就需要很多资金,大公司才玩的起,利益比较大,尽管很多学者论文都有讲解(学术界一般领先很多年,就是技术迭代快的计算机也领先一二十年,例如数据流框架早在几十年前BSP里面就引入了,只是工业界懂的人又拿出在新领域真刀实枪的产品化应用而已),但是还没有进入大众普惠的时代,后续会重点进行介绍。