深度学习模型训练时损失在下降但是波动较大_一个案例掌握深度学习_第1页
深度学习模型训练时损失在下降但是波动较大_一个案例掌握深度学习_第2页
深度学习模型训练时损失在下降但是波动较大_一个案例掌握深度学习_第3页
深度学习模型训练时损失在下降但是波动较大_一个案例掌握深度学习_第4页
深度学习模型训练时损失在下降但是波动较大_一个案例掌握深度学习_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深度学习模型训练时损失在下降但是波动较大_一个案例掌握深度学习人工智能越来越火,甚至成了日常生活无处不在的要素。人工智能是什么?深度学习、机器学习又与人工智能有什么关系?作为开发者如何进入人工智能领域?近期我们将连载一个深度学习专题,由百度深度学习技术平台部主任架构师毕然分享,让你快速入门深度学习,参与到人工智能浪潮中。从本专题中,你将学习到:深度学习基础知识Numpy实现神经网络构建和梯度下降算法计算机视觉领域主要方向的原理、实践自然语言处理领域主要方向的原理、实践个性化推荐算法的原理、实践这是本系列第二篇本文内容主要包括:数据处理和异步数据读取网络结构设计及背后思想损失函数介绍及使用方式模

2、型优化算法介绍和选择分布式训练方法及实践模型训练调试与优化训练中断后恢复训练涵盖了深度学习的数据处理、模型设计、模型训练与模型优化等部分,如下图所示,另外扩展了异步数据读取、分布式训练与恢复训练等知识点。数做理网络优化器-H-第节的mnist数据集为例,会涉及代码实现以下几个方面以本地,模型设计区数训壕配置采药”。采训练深度学习模型则等同于“炼丹”。殊不知,在炼丹之前,重训练数据。官卡出的数据出如JageNet、MSCOC0与VOC等,这些数据都比较干净,没有标注错误或者漏标注的问题。但是如果是自己的业务数据集,数据可能存在各种问题,需要自己去实现数据处理的函数,构建数据读取器。俣衲文件中读取

3、到数据;封駆数异步激活醐CNN均方误差CrossEntropy+SoftmaxSGD多机多卡GPU恢复训隊场景2.划分数据集为训练集,验证集;学习率LJSMomentam/AdaGrad/AdamuJLI-J3.构建数据读取器(data_loader)图:mnist数据处理不同datainput32x32culput的数据保存的文件格式和存储形式不尽相同,正确读到数据往往是开始训练的第一步。第二节:神经网络模型设计了解一下深度神经网络的设计原理。深度神经网络相比较浅层深度神经网络的区别是:网络足够深,足够复杂,非线性程度更高。复杂的模型可以拟合更复杂的函数,对现实世界的表征能力也会增强。非线性

4、程度的增加通过模型的深度和非线性函数来实现,如果没有非线性函数,即使最深的神经网络也只不过是一种线性函数表达。组建网络时,一般考虑到训练数据的数量,决定设计模型的复杂度,如果训练数据不足,很难把一个参数众多的模型训练好。如何设计深度神经网络?神经网络的基本层不外乎全连接层FC,卷积层CNN,循环神经网络RNN。不同的网络层有不同的适应任务,比如,CNN适合处理2D图像数据,CNN能更好的捕捉到空间位置信息,这是FC和LSTM顾及不到的,但是LSTM和FC也有其应用的场景。C|5;CjS;Hifeaturemapsfeaturemapsfeaturemapsfeaturemaps.2乜/_10

5、x105x5SxS、图:卷积网络模型示意图第三节:损失函函数介绍通过演示在mnist分类任务subsaorplirgwnvdution回归任务的损失函数难以在分类任务上取得较好精度。loss值较大,训练过程中loss波动明显。所以,这里引出一个疑问?为什么分类任务用均方误差为何不合适?答案是:1.物理含义不合理:实数输出和标签相减2.分类任务本质规律是“在某种特征组合下的分类概率”甲乙图:抽取黑白球到最大似然体会最大似然的思想:两个外形相同的盒子,概率甲盒中有99只白球,1只黑球;乙盒中有99个黑球个白球。一次试验取出了一?黑球.分类任务背后是概率的思想,可以从黑盒中取黑白球的概率为例为了解最

6、大似然的思想:洁问垃个戎应莎臭从嘟个箔辛由朋中的?foriinin.dex_list:数据处理intg-np.reshape(intgs.i.1,IMG_R0WS,IMG_C0LS).aslypeCfloat31)labelnp.reshape(labelsiFl).astypeCint64)labels_list.append(label)iflen(ifligs_list)-BATCHSIZE:yipIdnp.array1imgs_listknp*array(labels_lisritngs_lisi:=labels_list=def_mit_(self,name_5匚opm):网络定义s

7、upr(MN1ST,self),_inir_(name_sccpe)num_fi.Iters-20,fiIt?r_size-.5,stride-1,padding-2)pool_size=2tpool_stride=2pool_type=max)num-filtersO,filter_size=3.stride-i.p谊pool_size2,pool_stride2pcol_typer,max)name_scope-self,full_nameOslf.convl=Conv2Dlname_scopehself,poo11=Poo12Dnane_scopehf.conv2=ConvZD(nait

8、ie_scope,self,poo!2Pod12D(name_scopeFcolt,fc-FCnaW-SCOpe,sip-10,act-sofTmax15损失函痴t计隽摄牯取一个批抚样点損先的平均值loss=fluid,layers*cross_eiiTropy(predict+label)图:损失函数代码实现第四节:优化算法与学习率神经网络所拟合的函数是高度非凸函数,理想的训练目标是,优化这类函数,达到函数最小值点或接近最小值的极小值点。本部分课程中,毕老师带代价讨论优化器和学习率对训练神经网络的影响,并教大家如何选取最优的学习率和优化器。学习率的选择在深度学习神经网络模型中,学习率代表参数

9、更新幅度的大小。当学习率最优时,模型的有效容量最大。学习率设置和当前深度学习任务有关,合适的学习率往往需要调参经验和大量的实验,总结来说,学习率选取需要注意以下两点:学习率不是越小越好。学习率越小,损失函数的变化速度越慢,意味着我们需要花费更长的时间进行收敛。学习率不是越大越好。因为只根据总样本集中的一个批次计算梯度,抽样误差会导致计算出的梯度不是全局最优的方向,且存在波动。同时,在接近最优解时,过大的学习率会导致参数在最优解附近震荡,导致损失难以收敛。降1、加入“动量”,参数更新的方向更稳定,比如Momentum优化器。每个批次的数据含有抽样误差,导致梯度更新的方向波动较大。如果我们引入物理

10、动量的概念,给梯度下降的过程加入一定的“惯性”累积,就可以减少更新路径上的震荡!即每次更新的梯度由“历史多次梯度的累积方向”和“当次梯度”加权相加得到。历史多次梯度的累积方向往往是从全局视角更正确的方向,这与“惯性”的物理概念很像,也是为何其起名为“Momentum”的原因。类似不同品牌和材质的篮球有一定的重量差别,街头篮球队中的投手(擅长中远距离投篮)喜欢稍重篮球的比例较高。一个很重要的原因是,重的篮球惯性大,更不容易受到手势的小幅变形或风吹的影响。2、根据不同参数距离最优解的远近,动态调整学习率,比如AdaGrad优化器。通过调整学习率的实验可以发现:当某个参数的现值距离最优解较远时(表现

11、为梯度的绝对值较大),我们期望参数更新的步长大一些,以便更快收敛到最优解。当某个参数的现值距离最优解较近时(表现为梯度的绝对值较小),我们期望参数的更新步长小一些,以便更精细的逼近最优解。类似于打高尔夫球,专业运动员第一杆开球时,通常会大力打一个远球,让球尽量落在洞口附近。当第二杆面对离洞口较近的球时,他会更轻柔而细致的推杆,避免将球打飞。与此类似,参数更新的步长应该随着优化过程逐渐减少,减少的程度与当前梯度的大小有关。根据这个思想编写的优化算法称为“AdaGrad”,Ada是Adaptive的缩写,表示“适应环境而变化”的意思。3、因为上述两个优化思路是正交的,所以可以将两个思路结合起来,这

12、就是当前广泛应用的Adam算法。第五节:模型训练及分布式训练此前或多或少介绍了如何训练神经网络,但没有涉及分布式训练的内容,这里介绍一下分布式训练的思想,尤其是数据并行的思想,并介绍如何增加三行代码使用飞桨实现多GPU训练。分布式训练有两种实现模式:模型并行和数据并行。模型并行模型并行是将一个网络模型拆分为多份,拆分后的模型分到多个设备上(GPU)训练,每个设备的训练数据是相同的。模型并行的方式一般适用于:模型架构过大,完整的模型无法放入单个GPU。2012年ImageNet大赛的冠军模型AlexNet是模型并行的典型案例。由于当时GPU内存较小,单个GPU不足以承担AlexNet。研究者将A

13、lexNet拆分为两部分放到两个GPU上并行训练。网络模型的设计结构可以并行化时,采用模型并行的方式。例如在计算机视觉目标检测任务中,一些模型(YOLO9000)的边界框回归和类别预测是独立的,可以将独立的部分分在不同的设备节点上完成分布式训练。说明:当前GPU硬件技术快速发展,深度学习使用的主流GPU的内存已经足以满足大多数的网络模型需求,所以大多数情况下使用数据并行的方式。数据并行数据并行与模型并行不同,数据并行每次读取多份数据,读取到的数据输入给多个设备(GPU)上的模型,每个设备上的模型是完全相同的。数据并行的方式与众人拾柴火焰高的道理类似,如果把训练数据比喻为砖头,把一个设备(GPU

14、)比喻为一个人,那单GPU训练就是一个人在搬砖,多GPU训练就是多个人同时搬砖,每次搬砖的数量倍数增加,效率呈倍数提升。但是注意到,每个设备的模型是完全相同的,但是输入数据不同,每个设备的模型计算出的梯度是不同的,如果每个设备的梯度更新当前设备的模型就会导致下次训练时,每个模型的参数都不同了,所以我们还需要一个梯度同步机制,保证每个设备的梯度是完全相同的。数据并行中有一个参数管理服务器(parameterserver)收集来自每个设备的梯度更新信息,并计算出一个全局的梯度更新。当参数管理服务器收到来自训练设备的梯度更新请求时,统一更新模型的梯度。用户只需要对程序进行简单修改,即可实现在多GPU

15、上并行训练。飞桨采用数据并行的实现方式,在训练前,需要配置如下参数:1从环境变量获取设备的ID,并指定给CUDAPlacedevice_id=fluid.dygraph.parallel.Env().dev_idplace=fluid.CUDAPlace(device_id)2对定义的网络做预处理,设置为并行模式strategy=fluid.dygraph.parallel.prepare_context()#新增model=MNIST(mnist)model=fluid.dygraph.parallel.DataParallel(model,strategy)#新增3定义多GPU训练的rea

16、der,将每批次的数据平分到每个GPU上validoader=paddle.batch(paddle.dataset.mnist.test(),batch_size=16,drop_last=true)valid_loader=fluid.contrib.reader.distributed_batch_reader(valid_loader)4收集每批次训练数据的loss,并聚合参数的梯度avg_loss=mnist.scale_loss(avg_loss)#新增avg_loss.backward()mnist.apply_collective_grads()#新增第六节:训练调试与优化在模

17、型训练部分,为了保证模型的真实效果,需要对模型进行一些调试和优化:计算分类准确率,观测模型训练效果。交叉熵损失函数只能作为优化目标,无法直接准确衡量模型的训练效果。准确率可以直接衡量训练效果,但由于其离散性质,不适合做为损失函数优化神经网络。检查模型训练过程,识别潜在问题。如果模型的损失或者评估指标表现异常,我们通常需要打印模型每一层的输入和输出来定位问题,分析每一层的内容来获取错误的原因。加入校验或测试,更好评价模型效果。理想的模型训练结果是在训练集和验证集上均有较高的准确率,如果训练集上的准确率高于验证集,说明网络训练程度不够;如果验证集的准确率高于训练集,可能是发生了过拟合现象。通过在优

18、化目标中加入正则化项的办法,可以解决过拟合的问题。加入正则化项,避免模型过拟合。可视化分析。用户不仅可以通过打印或使用matplotlib库作图,飞桨还集成了更专业的第三方绘图库tb-paddle,提供便捷的可视化分析。第七节:恢复训练此前已经介绍了将训练好的模型保存到磁盘文件的方法。应用程序可以随时加载模型,完成预测任务。但是在日常训练工作中我们会遇到一些突发情况,导致训练过程主动或被动的中断。如果训练一个模型需要花费几天的训练时间,中断后从初始状态重新训练是不可接受的。不过飞桨等工具支持从上一次保存状态继续训练,只要我们随时保存训练过程中的模型状态,就不用从初始状态重新训练。飞桨保存模型的代码如下:#保存模型参数和优化器的参数fluid.save_dygraph(model.state_dict(),./checkpoint/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论