-
前言 最近对大模型的微调时使用Pytorch-Lightning(一个基于pytorch高级封装的训练框架)非常方便地就实现大模型的分布式训练。前期自己也踩了一些坑,于是写一个笔记分享给有同样需求的后来者、避免踩坑。 PL框架在它的stratey模块中封装好了不同的分布式实现方式dp、ddp、deepspeed等 大部分情况下甚至不需额外的修改任何代码就能将实现从单机单卡到进行分布式(单机多卡、多机多卡)的训练。 少部分情况,目前只有在分布式训练模式为DP需要修改代码。虽然PL框架已经自动实现gather的过程,但如果你需要对模型训练逻辑中每一轮迭代、epoch结束时进行一些类似输出softmax()、评估验证mertic等额外操作时,还是需要手动在xxx_step_end()、xxx_epoch_end()中编码将不同GPU上所运行model返回的output、loss进行gather, 具体的编码可以看本文的第三部分。 如果想直接快速实现分布式训练、不纠结DP和DDP以及背后原理,可以跳过理论直接看第三部分,只需要记住一个结论: DDP比DP实际加速效果显著,在DP和DDP之间无脑的选择DDP。 分布式训练的理论 分布式训练顾名思义就是在相比之前只在一个机子一个显卡上训练,现在实现在多个机器多张显卡并行的进行训练。总的来说可以按照以下类别进行分类: 并行方式来分: 模型并行 vs 数据并行 更新方式来分: 同步更新 vs 异步更新 更新算法来分: Parameter Server 算法 vs AllReduce算法 物理机器分布来分:单机多卡 vs 多机单卡 vs 多机多卡 并行方式 模型并行: 将一个模型的不同部分放在不同GPU 上进行训练。使用这种方式训练时模型之间通信开销大,且规模伸缩性差。通常只有当模型大到一张GPU无法放下时才采用,大部分分布式训练采用是数据并行。 数据并行: 将全部数据分成独立部分并行运行在不同的GPU上,每个GPU上都有一个相同且完整的模型。 更新方式 对于数据并行的分布式训练,每轮迭代后需要对每个GPU上独立的模型去更新参数,根据更新方式可以划分同步和异步更新: 同步更新:每个batch所有GPU计算完成后再统一计算新权值(计算最快GPU等计算最慢的)然后等所有GPU更新参数后再进行下一轮batch的计算。 异步更新:每个GPU计算完梯度后,无需等待其他更新,立即更新整体权值并同步。异步更新GPU没有等待,但是涉及到更复杂的梯度过时,loss下降抖动大的问题。所以实践中,一般使用同步更新的方式。 更新算法 Parameter Server vs Ring-All-Reduce 在模型训练过程的同步更新中有两种常见的更新参数的算法, Parameter Server 和 Ring-All-Reduce。 Parameter Server: GPU:0 将数据分成五份分到各个GPU上(如下图所示),每张GPU负责自己的那一份mini-batch的训练,得到grad后,返回给GPU 0上做累积,得到更新的权重参数后,再分发给各个GPU。 输入图片说明 Parameter Server 的思想类似MapReduce,存在两个显著的缺点: 1.每一轮的训练迭代都需要所有卡都将数据同步完做一次Reduce才算结束,并行的卡很多的时候,木桶效应就会很严重,计算效率低。 2.所有的GPU卡需要和Reducer进行数据、梯度和参数的通信,当模型较大或者数据较大的时候,通信开销很大。 另外Parameter Server的开销和显卡有直接线性关系,显卡数越多,通信开销越大。 假设有 G 个GPU,通信一次完整的参数为 K ,使用PS架构后花费的通信成本为: T=2(G−1)K Ring AllReduce 如下图所示,5张GPU以环形相连,每张GPU都有左手GPU和右手GPU,一个负责接收,一个负责发送,整个过程5张GPU同时循环4次完成梯度累积,再循环4次做参数同步。整个过程主要涉及Scatter Reduce和All Gather两个步骤。 输入图片说明 Scatter Reduce过程:首先,我们将参数分为N份,相邻的GPU传递不同的参数,在传递N-1次之后,可以得到每一份参数的累积(在不同的GPU上)。 输入图片说明 All Gather过程:每个GPU得到每一份参数的累积之后,类似Scatter Reduce过程再通过一遍环状通信算法进行传递,将所有参数同步到所有的GPU上。 输入图片说明 根据这两个过程,所有GPU都会得到更新后的全部参数。 Parameter Service最大的问题就是通信成本和GPU的数量线性相关。而Ring AllReduce的通信成本与GPU数量无关。 同样类比PS架构,假设我们有 G 个GPU,将数据分成 N 份,全部参数一次通信的时间还是 K ,而这里每份参数通信只需要KN 时间,总共执行了两遍环形通信,一遍环形通信并行执行N-1次,因此All Reduce的通信总时间成本是: T=2(N−1)KN 可以看到通信成本 T 与GPU数量无关。同时所有GPU设备之间传递数据过程如上图所示,最终 G 个GPU上都拥有所有的参数,整个过程传递的数据量是 (G−1)∗N 。 因此更准确说:基于环状通信的集群通信算法执行时间几乎和设备数无关,但总通信量和设备数成正比。 单机多卡 vs 多机单卡 vs 多机多卡 根据实际分布式集群的部署方式可以区分: 单机多卡:单个机器内有多个GPU,成本来自单个机子内的多个GPU之间通信。 多机单卡:多个机器同时每个机器只有一个GPU,成本来自多个机器之间通信。 多机多卡:多个机器并且每个机器多个GPU,通信成本既有多个机器之间,也有单个机器内多个GPU之间。 这里多说一句,在集群测试不同分布式训练之间的(DDP)速度差异时,发现一个待验证的现象:相同总卡(GPU)数下,多机单卡方式比单机多卡、多机多卡都要快。 Pytorch的分布式DP, DDP Pytorch官方提供了两种分布式训练的实现方式:DP(DataParallel) 和DDP(DistributedDataParallel),它们都是采用数据并行的方式。API分别是torch.nn.DataParallel(DP)和torch.nn.DistributedDataParallel(DDP)。 它们差异: 在参数更新算法上,DP采用的是Parameter Server模式,梯度最后统一在device[0]上计算、更新参数。DDP采用的是Ring-all-reduce模式,通信传输的数据量更少,通信消耗的时间成本与节点数量无关。 DP是单进程多线程的实现,由于Python的GIL特性只能支持多进程,实际上DP在单进程控制GPU运行,同时主GPU进行梯度汇总和模型更新,负载不均衡。DDP是采用多进程控制多GPU的方式,并采用DistributedSampler加载数据,确保数据在各个进程之间没有重叠。DDP实现真正意义上能并发的并行训练。 DP只能支持单机多卡形式使用,DDP既能在单机多卡、也可用于多机多卡、多机单卡的形式。 总的来说,DP的优势仅在于只使用Pytorch的API实现时编码更容易,从性能(训练速度)上DDP完胜DP。 Pytorch-Lightning实现分布式训练 正如本文前言所说使用PL框架进行分布式训练非常简单,只需要通过修改 pl.Trainer()中的参数即可将单机单卡变成多机多卡的训练方式。 pl.Trainer()pytorch-lightning.readthedocs.io/en/latest/common/trainer.html?highlight=strategy#strategy 具体的通过修改参数gpus、num_nodes设置训练需要多少张GPU和所使用机器的数量,同时通过参数strategy指定分布式训练的模式。 单机多卡. 单机多卡时无需指定参数num_nodes: trainer = pl.Trainer(gpus=4, strategy="dp") # 使用4块GPU trainer = pl.Trainer(gpus=[0, 1, 2], strategy="dp") # 使用0,1,2号3块GPu 点击并拖拽以移动 多机多卡 trainer = pl.Trainer(gpus=4, num_nodes=3, strategy="ddp") # 使用3台机器,每个机器4块GPU,总共12张GPU 点击并拖拽以移动 另外PL不仅支持常见的dp、ddp、deepspeed等,甚至还可以通过DDPStrategy()自定义strategy,有更高级的需求可以查阅官方文档: https://pytorch-lightning.readthedocs.io/en/latest/accelerators/gpu_expert.htmlpytorch-lightning.readthedocs.io/en/latest/accelerators/gpu_expert.html DP模式:手动gather不同GPU的输出 DP模式是目前使用pl框架进行分布式训练时唯一遇到需要对代码进行修改情况。由于它在每轮迭代后都需要将梯度汇总到第一张GPU上进行计算,相对应在pl框架的设计中training_step()、valid_step()、test_step()等内执行的逻辑都是在各自GPU上,最终在xxx_step_end()、xxx_epoch_end()内执行将所有输出汇总在第一张GPU上进行计算和更新的逻辑 def training_step(self, batch, batch_idx): x, y = batch y_hat = self.model(x) loss = F.cross_entropy(y_hat, y) pred = ... return {"loss": loss, "pred": pred} def training_step_end(self, batch_parts): # predictions from each GPU predictions = batch_parts["pred"] # losses from each GPU losses = batch_parts["loss"] gpu_0_prediction = predictions[0] gpu_1_prediction = predictions[1] # 如果metric需要分开计算再汇总 # do something with both outputs # return (losses[0] + losses[1]) / 2 return torch.mean(losses) # 推荐这样写,无论多少张卡都适用 def training_epoch_end(self, training_step_outputs): for out in training_step_outputs: ... 点击并拖拽以移动 Training with DataParallelpytorch-lightning.readthedocs.io/en/stable/common/lightning_module.html?highlight=all_gather#training-with-dataparallel implement-your-own-distributed-ddp-trainingpytorch-lightning.readthedocs.io/en/latest/accelerators/gpu_intermediate.html?highlight=ddp#implement-your-own-distributed-ddp-training 多卡训练遇到坑 多卡训练,dp模式下batch_size是总共卡数,需要batch_size*gpu_num, ddp模式下batch_size是单个机子, 无需增大。 多卡训练learnring_rate调整,learning_rate 一般需要线性scale, 推荐采用增大sqrt()倍。 多卡训练在ddp模式开启sync_batchnorm=True, 提升模型精度。 训练加速技巧 只有当你的模型中所有参数都参与训练,可以开启find_unused_parameters=False,加快训练速度。在pl中你只需要设置stratyge=ddp_find_unused_parameters_false即可。 设置锁页内存,pl中通过设置trainer的参数pin_memory=True。 使用半精度训练,在pl中通过设置trainer的参数precison=16。 使用APEX加速,在pl中先通过设置amp_backbend='apex', 然后设置 amp_level=O1\O2\O3 。 冻结模型的部分层参数,在pl中通过设置model.parameter()的参数requires_grad=False,例如一些研究表明bert保留最后四层,效果不会下降太多。为了提升模型训练、推理速度可以冻结前几层的参数。 使用梯度累加,在pl中通过设置trainer的参数accumulate_grad_batches。
-
什么是图灵测试图灵测试是图灵提出的一个关于机器人的著名判断原则。1950年,图灵发表了具有里程碑意义的论文《电脑能思考吗?》,第一次提出“机器思维”的概念。所谓图灵测试是一种测试机器是不是具备人类智能的方法。被测试的有一个人,另一个是声称自己有人类智力的机器图灵测试的基本原理图灵测试的基本原理是一个测试者与一个计算机程序进行对话,如果测试者无法区分程序的回答是由人类还是计算机生成的,那么该计算机程序被认为通过了图灵测试。图灵测试是图灵提出的一个关于机器人的著名判断原则,其根本目的是判断机器能否具备与人类类似的"智能"。图灵测试是测试人(多人)在与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。问过一些问题后,如果测试人中超过30%的人不能根据答复确认被测试者哪个是人,哪个是机器,那么这台机器就通过了测试,并被认为具有人类智能。图灵测试的目的图灵测试的目的是判断机器能否具备与人类类似的 "智能"。图灵测试是现代计算机之父阿兰·图灵在1950年提出的,其根本目的是:机器是否能够思考,这也是目前检验强人工智能的最基本的方法。图灵测试是测试人(多人)在与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。问过一些问题后,如果测试人中超过30%的人不能根据答复确认被测试者哪个是人,哪个是机器,那么这台机器就通过了测试,并被认为具有人类智能。现状很不幸的是,目前还没有任何一个机器人或者人工智能通过了图灵测试。就连最近刚出不久的chatGPT也未能通过该测试
-
一 定义机器学*是一门从数据中研究算法的科学学科。机器学*直白来讲,是根据已有的数据,进行算法选择,并基于算法和数据构建模型,最终对未来进行预测。通过数据训练出一个模型->预测未知属性。理性认识输入: x ∈ X(属性值)输出: y ∈ Y(目标值 )获得一个目标函数(target function):f : X ∈ Y(理想的公式)输入数据:D = {(x1,y1),(x2,y2),…,(xn,yn)}(历史信息)最终具有最优性能的假设公式:g : X → Y(学*得到的最终公式 ){(Xn,Yn)} from f → ML → g目标函数f未知(无法得到)假设函数g类似函数f,但是可能和函数f不同机器学*中是无法找到一个完美的函数f机器学*从数据中获得一个假设的函数g,使其非常接近目标函数f的效果概念拟合:构建的算法符合给定数据的特征x(i) :表示第i个样本的x向量xi: x向量的第i维度的值鲁棒性:也就是健壮性、稳健性、强健性,是系统的健壮性;当存在异常数据的时候,算法也会拟合数据过拟合和欠拟合显示过拟合:算法太符合样本数据的特征,对于实际生产中的数据特征无法拟合–模型在这个数据集展示的特别好欠拟合:算法不太符合样本的数据特征–训练集不好(不存在函数或者假设不对)二 应用框架sciket-learn(Python)(小规模单机–为主)http://scikit-learn.org/stable/Mahout(Hadoop生态圈基于MapReduce)(大数据和机器学*的集合)http://mahout.apache.org/Spark MLlibhttp://spark.apache.org/个性化推荐:个性化指的是根据各种因素来改变用户体验和呈现给用户内容,这些因素可能包含用户的行为数据和外部因素;推荐常指系统向用户呈现一个用户可能感兴趣的物品列表。精准营销:从用户群众中找出特定的要求的营销对象。客户细分:试图将用户群体分为不同的组,根据给定的用户特征进行客户分组。预测建模及分析:根据已有的数据进行建模,并使用得到的模型预测未来。机器学*、数据分析、数据挖掘区别与联系数据分析:数据分析是指用适当的统计分析方法对收集的大量数据进行分析,并提取有用的信息,以及形成结论,从而对据进行详细的研究和概括过程。在实际工作中,数据分析可帮助人们做出判断;数据分析一般而言可以分为统计分析、探索性数据分析和验证性数据分析三大类。数据挖掘:一般指从大量的数据中通过算法搜索隐藏于其中的信息的过程。通常通过统计、检索、机器学*、模式匹配等诸多方法来实现这个过程。机器学*:是数据分析和数据挖掘的一种比较常用、比较好的手段机器学*分类学*分类标签==需要验证的值有监督学*:是从标签化训练数据集中推断出模型的机器学*任务。(标签化比较难)判别式模型(Discriminative Model):直接对条件概率p(y|x)进行建模,常见判别模型有:线性回归、决策树、支持向量机SVM、k近邻、神经网络等;生成式模型(Generative Model):对联合分布概率p(x,y)进行建模,常见生成式模型有:隐马尔可夫模型HMM、朴素贝叶斯模型、高斯混合模型GMM、LDA等;生成式模型更普适;判别式模型更直接,目标性更强生成式模型关注数据是如何产生的,寻找的是数据分布模型;判别式模型关注的数据的差异性,寻找的是分类面由生成式模型可以产生判别式模型,但是由判别式模式没法形成生成式模型无监督学*:推断出数据的一些内在结构。(相对有监督学*效果会差一些)无监督学*试图学*或者提取数据背后的数据特征,或者从数据中抽取出重要的特征信息,常见的算法有聚类、降维、文本处理(特征抽取)等。无监督学*一般是作为有监督学*的前期数据处理,功能是从原始数据中抽取出必要的标签信息。半监督学*:考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题,是有监督学*和无监督学*的结合主要考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题。半监督学*对于减少标注代价,提高学*机器性能具有非常重大的实际意义。SSL的成立依赖于模型假设,主要分为三大类:平滑假设、聚类假设、流行假设;其中流行假设更具有普片性。SSL类型的算法主要分为四大类:半监督分类、半监督回归、半监督聚类、半监督降维。缺点:抗干扰能力弱,仅适合于实验室环境,其现实意义还没有体现出来;未来的发展主要是聚焦于新模型假设的产生。做什么分类分类:给定信息的类别分类(有监督学*)聚类:未知类别划分为几个类别(无监督学*)回归:给出的答案是一个区间段(有监督学*)关联规则:提取数据和数据项之间的相互关系(无监督学*)算法Top10算法名称算法描述C4.5分类决策树算法,决策树的核心算法,ID3算法的改进算法。CART 分类与回归树(Classification and Regression Trees)kNNK近邻分类算法;如果一个样本在特征空间中的k个最相似的样本中大多数属于某一个类别,那么该样本也属于该类别(物以类聚)NaiveBayes贝叶斯分类模型;该模型比较适合属性相关性比较小的时候,如果属性相关性比较大的时候,决策树模型比贝叶斯分类模型效果好(原因:贝叶斯模型假设属性之间是互不影响的)SVM(应用广泛)支持向量机,一种有监督学*的统计学*方法,广泛应用于统计分类和回归分析中。EM最大期望算法,常用于机器学*和计算机视觉中的数据集聚领域(最大次元估计上的一个提升)Apriori关联规则挖掘算法K-Means聚类算法,功能是将n个对象根据属性特征分为k个分割(k<n); 属于无监督学*PageRankGoogle搜索重要算法之一(和机器学*关系不大)AdaBoost(思想特别重要)迭代算法;利用多个分类器进行数据分类(深度学*思想和他很像)人工智能 机器学* 深度学*之间的关系一般流程数据收集 → 数据清理 → 征程工程 → 数据建模数据收集与储存1.数据来源用户访问行为数据业务数据外部第三方数据(自己加或者爬虫)2.数据存储需要存储的数据:原始数据、预处理后数据、模型结果存储设施:mysql、HDFS、HBase、Solr、Elasticsearch、Kafka、Redis等3.数据收集方式Flume & Kafka (大数据)公开数据集http://archive.ics.uci.edu/ml/datasets.htmlhttps://aws.amazon.com/cn/public-datasets/https://www.kaggle.com/competitionshttp://www.kdnuggets.com/datasets/index.htmlhttp://www.sogou.com/labs/resource/list_pingce.phphttps://tianchi.aliyun.com/datalab/index.htmhttp://www.pkbigdata.com/common/cmptIndex.html数据清洗和转换(特征工程)工作量最大数据预处理:数据过滤 处理数据缺失 处理可能的异常、错误或者异常值 合并多个数据源数据 数据汇总处理方式将类别数据编码成为对应的数值表示(一般使用1-of-k方法)-dumy从文本数据中提取有用的数据(一般使用词袋法或者TF-IDF)处理图像或者音频数据(像素、声波、音频、振幅等<傅里叶变换>)数值数据转换为类别数据以减少变量的值,比如年龄分段对数值数据进行转换,比如对数转换对特征进行正则化、标准化,以保证同一模型的不同输入变量的值域相同对现有变量进行组合或转换以生成新特征,比如平均数 (做虚拟变量)不断尝试模型训练集测试将原始数据分为训练集和测试集(交叉验证)分类模型模型比较准确率(Accuracy)=提取出的正确样本数/总样本数召回率(Recall)=正确的正例样本数/样本中的正例样本数——覆盖率精准率(Precision)=正确的正例样本数/预测为正例的样本数F值=PrecisionRecall2 / (Precision+Recall) (即F值为正确率和召回率的调和平均值)ROCROC(Receiver Operating Characteristic)最初源于20世纪70年代的信号检测理论,描述的是分类混淆矩阵中FPR-TPR两个量之间的相对变化情况,ROC曲线的纵轴是**“真正例率”(True Positive Rate 简称TPR)**,横轴是“假正例率” (False Positive Rate 简称FPR)。如果二元分类器输出的是对正样本的一个分类概率值,当取不同阈值时会得到不同的混淆矩阵,对应于ROC曲线上的一个点。那么ROC曲线就反映了FPR与TPR之间权衡的情况,通俗地来说,即在TPR随着FPR递增的情况下,谁增长得更快,快多少的问题。TPR增长得越快,曲线越往上屈,AUC就越大,反映了模型的分类性能就越好。当正负样本不平衡时,这种模型评价方式比起一般的精确度评价方式的好处尤其显著。AUCAUC的值越大表达模型越好(分类模型AUC的值最小在0.7)AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而AUC作为数值可以直观的评价分类器的好坏,值越大越好。AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。分类算法评估方式指标描述scikit-learn函数Precision精确度from sklearn.metrics import precision_scoreRecall召回率from sklearn.metrics import recall_scoreF1F1指标from sklearn.metrics import f1_scoreConfusion Matrix混淆矩阵from sklearn.metrics import confusion_matrixROCROC曲线from sklearn.metrics import rocAUCROC曲线下的面积from sklearn.metrics import auc回归模型回归模型度量explained_varicance_score:可解释方差的回归评分函数mean_absolute_error:平均绝对误差mean_squared_error:平均平方误差回归算法评估方式指标描述scikit-learn函数Mean Square Error(MSE, RMSE)平均方差 from sklearn.metrics import mean_squared_errorAbsolute Error(MAE, RAE)绝对误差from sklearn.metrics import mean_absolute_error,median_absolute_errorR-SquaredR平方值(准确率)from sklearn.metrics import r2_score
-
两者的区别PyTorch和TensorFlow都是流行的深度学习框架,以下是它们的一些比较:静态和动态:在TensorFlow中,图结构是静态的,先编译再运行,而在PyTorch中,图结构是动态的,可以即时(JIT)编译。可解释性:TensorFlow更可解释,因为它有更多的库和工具支持(如TensorBoard),而PyTorch更关注于研究,因为它的模型更容易构建和修改。社区支持:TensorFlow的社区更广泛,有很多开源项目和教程可以使用,而PyTorch的社区也很活跃,并且有很多针对特定任务的开源项目和教程。移动端支持:TensorFlow在移动端(Android、iOS)支持更好,因为TensorFlow Lite提供了移动端支持,而PyTorch也支持移动端,但需要使用ONNX格式进行模型转换。计算速度:在同等条件下,TensorFlow在CPU上运行速度比PyTorch快,但在GPU上运行速度两者差不多。数据加载:TensorFlow的数据加载API设计庞大但使用有技巧,PyTorch的数据加载API整体设计粗糙但使用友好。分布式计算:两个框架都能提供在单个/多个 CPU/GPU 上面进行计算的能力。pytorch 比起 tensorflow 优势PyTorch比起TensorFlow的优势有:灵活性:PyTorch基于Python,提供了灵活的编程环境,方便研究人员和开发人员实验和快速迭代。易用性:PyTorch的API设计简洁明了,易于学习和使用,它采用了动态图的方式,调试和可视化模型比较方便。社区支持:虽然TensorFlow的社区规模更大且广泛,但PyTorch的社区也非常活跃,提供了丰富的教程、文档和示例代码,开发人员可以从中获取支持和帮助。pytorch 比起 tensorflow 的劣势PyTorch比起TensorFlow的劣势可能在于以下几个方面:在生产中缺乏模型服务:虽然PyTorch在研究社区中变得越来越流行,但其他框架已更广泛地用于实际生产工作。因此,与其他框架相比,PyTorch的文档和开发人员社区较小。有限的监控和可视化接口:虽然TensorFlow带有用于构建模型图的功能强大的可视化工具(如TensorBoard),但PyTorch还没有这样的东西。因此,开发人员可以使用许多现有的Python数据可视化工具之一或从外部连接到TensorBoard。运行效率低:PyTorch是动态编程,运行效率比较低,没有静态图运行效率高。在工业界部署时比较麻烦,没有TensorFlow部署方便。如果神经网络中需要自定义功能,TensorFlow可能是更好的选择。python 这么慢,为啥拿来搞AIPython虽然运算速度相对较慢,但它仍然被广泛用于人工智能(AI)领域,原因如下:易读与易写:Python语言较为简洁且语法清晰,易于理解和编写,这使得Python成为许多AI和数据科学项目的首选语言。科学计算与可视化:Python拥有众多的科学计算和可视化库,如NumPy、Pandas和Matplotlib等,这些库使得Python成为进行数据分析、机器学习等AI相关工作的理想工具。动态类型:Python的动态类型系统使其更具灵活性和可扩展性,可以快速进行原型开发和小规模实验。社区支持与资源丰富:Python拥有庞大的开发者社区和丰富的第三方库,可以快速找到解决问题的方法和工具。跨平台兼容性:Python可以在多种操作系统中运行,包括Windows、Linux和Mac OS等,这使得Python在AI和数据科学领域的应用更为广泛。
-
前言八大神经网络是指常用的八种神经网络结构。下面对它们进行一个简单的介绍1.卷积神经网络(CNN):卷积神经网络是用于图像和空间数据处理的神经网络,通过卷积层和池化层来捕捉图像的局部特征,广泛应用于图像分类、物体检测等领域。2.循环神经网络(RNN):循环神经网络适用于处理序列数据,如时间序列和文本。通过引入时间维度,RNN可以考虑数据的上下文信息。LSTM和GRU等变体解决了传统RNN的梯度问题,广泛应用于语言模型、文本生成等任务。3.生成对抗网络(GAN):生成对抗网络由生成器和判别器组成,用于生成逼真的数据样本。生成器尝试生成与真实数据相似的样本,判别器努力区分真实和生成样本。GAN在图像生成、风格转换等领域创造了许多引人注目的成果。4.图神经网络(GNN):图神经网络专门用于处理图数据,可以学习节点和边的表示。它在社交网络分析、分子预测等任务中有应用,对节点分类、链接预测等任务有出色表现。5.长短时记忆网络(LSTM):长短时记忆网络是一种循环神经网络的变体,专门用于解决长序列任务。通过门控机制,LSTM能够更好地捕获序列中的长期依赖关系,适用于语音识别、自然语言生成等任务。6.人工神经网络(ANN):人工神经网络是神经网络的基本形式,由神经元、权重和激活函数组成。多层感知器(MLP)是其常见形式,用于各种任务,如图像识别、数据分类等。7.自编码器(Autoencoder):自编码器是一种用于学习数据表示的神经网络,通过编码和解码过程学习数据的压缩表示。它在数据降维、去噪、特征学习等方面有应用。8.变换器(Transformer):变换器是一种基于自注意力机制的神经网络,用于处理序列数据,如自然语言文本。它在NLP领域引起了革命,广泛用于翻译、生成、情感分析等任务。 每个神经网络都有其独特的设计和应用领域,通过了解它们,您可以更好地理解它们在不同领域中的价值和作用。
-
什么是chatGPTChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI研发的聊天机器人程序,于2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。chatGPT是怎么训练出来的ChatGPT的训练方法主要包括以下步骤:构建Prompt Dataset。包含大量提示文本,对GPT-3进行监督学习微调。 训练奖励模型。对第一步微调后的GPT-3进一步推理PromptDataset任务,获得多个结果,交给人工进行标注排序,用标注的结果训练一个奖励模型,用于接下来校正GPT-3的输出结果。采用PPO强化学习算法。持续优化奖励模型,让GPT-3持续自我进化,由机器自动检查自己的学习成果,并不断做出Fine-tuning微调策略。chatGPT与传统的NLP有啥区别,它为什么能突然间火起来ChatGPT与传统的NLP相比,有以下区别:语言处理能力:ChatGPT具有更强大的语言生成和语言理解能力,可以自动学习多种语言模式和知识,而传统的NLP技术通常只针对特定领域或任务进行训练,难以处理多领域的问题。对话交互能力:ChatGPT采用了基于Transformer的模型结构,可以高效地进行对话交互,而传统的NLP技术通常只关注文本的词性和句法结构等特征,难以实现自然流畅的对话交互。知识表示能力:ChatGPT可以更好地理解和记录复杂的知识,并更准确地回答问题,而传统的NLP技术通常只关注文本的语义和上下文信息等特征,难以表示和运用复杂的知识。ChatGPT之所以能突然间火起来,主要是因为其采用了最先进的自然语言处理技术,具有强大的处理能力和广泛的应用场景,可以应用于许多不同的领域,例如智能客服、智能翻译、自然语言生成等等,受到了许多企业和组织的广泛关注和支持。同时,ChatGPT还是一个开源项目,得到了来自全球开发者社区的支持和贡献,可以不断地更新和改进,使得其技术和应用更加完善和优化。补充说明虽然目前chatGPT貌似很强,但是大伙不必慌张,它目前还取代不了人工,只能说成为我们生活中一种更加便捷的工具。类似于小汽车这样的!
-
机器学习的训练过程BP算法的学习过程由正向传播过程和反向传播过程组成。在正向传播过程中,输入信息通过逐层处理并传向输出层。如果在输出层得不到期望的输出值,则通过构造输出值与真实值的损失函数作为目标函数,转入反向传播,逐层求出目标函数对各神经元权值的偏导数,构成目标函数对权值向量的梯度,作为修改权值的依据,网络的学习在权值修改过程中完成。输出值与真实值的误差达到所期望值时,网络学习结束。什么是反向传播反向传播(Backpropagation)是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法在神经网络训练过程中,首先给网络输入一组训练数据,并计算输出结果。然后根据输出结果与实际结果的差异(即网络的误差)计算每个节点对误差的贡献(即误差反向传播到前一层的梯度),并将这些贡献反向传播到前一层。接着根据每个节点对误差的贡献大小,调整每个节点的权重,使得误差减小。重复以上过程,直到误差达到一定程度为止。通过不断调整权重,反向传播算法能够使网络越来越准确地预测结果反向传播算法有什么优势和缺点反向传播算法作为深度学习神经网络的理论核心,有以下优势:能够处理大规模网络和大量参数 。它的关键优势在于能够处理大规模网络和大量参数,并以高效的方式计算每个参数的梯度。计算精度高 。这使得深度学习能够应对复杂任务和海量数据,并取得了许多重大的突破和进展。同时,反向传播算法也存在一些缺点,比如计算成本高,存在计算冗余等。参考资料:[1]反向传播算法_百度百科 cid:link_0[2] 一文弄懂神经网络中的反向传播法 cid:link_1[3]BP反向传播矩阵推导图示详解 cid:link_2
-
什么是张量张量(Tensor)是一个定义在的一些向量空间和一些对偶空间的笛卡儿积上的多重线性映射,其坐标是 n 维空间内,有 n 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换张量这一术语起源于力学,它最初是用来表示弹性介质中各点应力状态的,后来张量理论发展成为力学和物理学的一个有力的数学工具。张量之所以重要,在于它可以满足一切物理定律必须与坐标系的选择无关的特性。张量概念是矢量概念的推广,矢量是一阶张量。张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数张量上下标的含义张量的上下标分别代表不同的意义,例如:张量的下标代表向量的某一维度,相当于向量某一维的属性值。张量的上标代表向量的编号,可以理解成这是第几个向量。张量的四种初始化方式1.直接生成,原始结构类型决定张量类型import torch data=[[1,2],[3,4]] x_data=torch.tensor(data)2.通过numpy转化生成张量(可以相互转化)import numpy as np np_array=np.array(data) x_np=torch.from_numpy(np.array)3.通过已有张量来生成新的张量 (同时新的张量将会继承已有张量的数据属性,包括结构、类型,也可以指定新的数据类型)x_zeros=torch.zeros_like(x_data) x_ones=torch.ones_like(x_data) x_rand=torch.rand_like(x_data,dtype=torch.float) #生成一个元素服从[0,1]均匀分布的张量,形状和给定张量x_data相同 x_randn=torch.randn_like(x_data) #生成一个元素服从标准正态分布的张量,形状和给定张量x_data相同 x_randint=torch.randint_like(x_data,0,100)#生成0~100均包含的张量,形状和x_data相同 x_full=torch.full_like(x_data,1.7,dtype=torch.float)4.通过指定数据维度来生成张量(用的比较少)shape=(2,3) one_tensor=torch.ones(shape) full_tensor=torch.full((shape),fill_value=5,dtype=torch.long)
-
什么是分类器分类器是一种计算机程序,其设计目标是通过自动学习将数据分到已知类别。分类器在多个领域都有应用,如搜索引擎和各种检索程序中,同时也大量应用于数据分析和预测领域。分类器是一种机器学习程序,因此归为人工智能的范畴中,其数学模型可针对模型的不同而分为多种分支,例如:Bayes分类器、BP神经网络分类器、决策树算法、SVM(支持向量机)算法等。训练一个分类器的步骤如下:收集数据:从目标领域收集数据,并对数据进行清洗和预处理,使其适合训练模型。确定模型:根据问题的特点,选择一个合适的分类模型。如果数据比较简单,可以选择一个线性模型;如果数据比较复杂,可以选择神经网络等非线性模型。准备数据:将数据划分为训练集、验证集和测试集三部分。训练集用于训练模型,验证集用于调整模型的参数,测试集用于评估模型的性能。训练模型:使用训练集训练模型,根据训练结果调整模型的参数,使得模型的分类准确率更高。验证模型:使用验证集对模型进行验证,调整模型的参数,提高模型的泛化能力。测试模型:使用测试集对模型进行最终测试,评估模型的性能,得出模型的准确率、召回率、F1 值等指标。评估模型:评估模型的性能,可以考虑使用混淆矩阵、ROC 曲线、AUC 值等指标。优化模型:如果模型的性能不够好,可以考虑使用交叉验证、正则化、集成学习等方法优化模型。应用模型:将训练好的模型应用到实际场景中,对新的数据进行分类预测。
-
什么是神经网络神经网络是一种计算机模型或者数学模型,是存在于计算机的神经系统,由大量的神经元相连接并进行计算,在外界信息的基础上,改变内部的结构,常用来对输入和输出之间复杂的关系进行建模。神经网络架构是由很多层组成的,输入层负责接收信息,比如一只猫的图片。输出层是计算机对这个输入信息的判断结果,它是不是猫。隐藏层就是对输入信息的传递和加工处理。此外,神经网络也可以指由生物神经元组成的生物神经网络,或者用于解决人工智能(AI)问题的人工神经网络。人工神经网络的原理在于,生物神经元的连接在人工神经网络中被建模为节点之间的权重,正的权重反映了兴奋性连接,而负值意味着抑制性连接。所有的输入都被一个权重修改并加总,这种活动被称为线性组合。最后,一个激活函数控制输出的振幅。神经网络的结构怎样确定神经网络的结构,一般可以分为两个主要部分:输入层和隐藏层,其中隐藏层可以有很多层,通常被称为深度学习模型。输入层是神经网络的起点,负责接收来自外界的信息,比如一张图片、一段文字等等。这些信息经过处理后,被传递到隐藏层,隐藏层负责对这些信息进行加工处理,并将处理结果传递到下一层,直到最后输出结果。神经网络的结构是由许多参数决定的,比如每个神经元的权重、阈值、激活函数等等。这些参数需要通过训练来优化,以使神经网络能够更好地学习和预测数据。通常,神经网络的结构需要根据具体的应用场景和数据来设计,需要进行大量的实验和调整来得到最优的结构参数。神经网络有哪些应用场景神经网络的应用场景非常广泛,包括但不限于以下几个方面:语音识别。计算机视觉。医学医疗。信息领域应用。智能控制。智能交互。生物信息学。机器人。智能制造。金融风控。
-
执行脚本时发生报错,脚本如下图:有没有大神能讲下怎么解决???本人新手小白,最好详细点~~~
-
执行脚本时发生报错,脚本如下图:
-
如图调用python脚本时出现报错,脚本代码如下:
-
【问题来源】广西北部湾银行【问题简要】最近这边生产新上线了一台U1960,查看中继链路有问题【问题类别】U1960【AICC解决方案版本】V200R003C30SPC500B011【问题现象描述】生产环境新上线一台U1960,接入了一条运营商的线路,因为环境为CTIPOOL的模式,所以U1960的SIP中继是配置了两台UAP,配置后使用没有问题,但是查看“资源管理”-》“中继链路状态”时显示中继不通,但是此时线路通话已经是正常的了,从UAP侧查看也是对接正常,是否为U1960侧有某个类似于心跳端口需要开放呢?
-
“图像自动化”中的“图像"功能:截图时,感觉屏幕分辨率自动变了,导致网页放大,只能看到网页的部分区域,右下区域的图片没法截取,这是BUG吗?有解决办法吗?
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签