IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 飞桨领航团AI达人创造营笔记——深度学习模型训练和关键参数调优详解 -> 正文阅读

[人工智能]飞桨领航团AI达人创造营笔记——深度学习模型训练和关键参数调优详解

模型选择

在这节课中,老师把深度学习模型简单的概括为三种,即回归任务、分类任务和场景任务。个人反复想了一下啊,这么分好像也没啥太大的毛病。

回归任务

回归任务,基本上绝大多数的深度学习零基础入门到进阶到放弃类的课程,第一个讲的都是这个。包括吴恩达老师的课,第一个模型讲的就是回归任务的波士顿房价预测,这个例子也被称为深度学习的Hello word,也告诉我们,斯坦福的学生也是从回归开始学的。还有,周志华老师的西瓜书,第一个介绍的也是线性回归模型。

老师大致上举了两个例子说明回归任务是什么感觉的:
1、蓝桥杯的题,其中最经典的斐波那契数列,计算机类出身的没有不知道这个哥们发现的数列0、1、1、2、3、5、8、13、21、34、……(第三个数,是前两个数之和)。小时候,经常听父母说,学习不好就去放羊,所以,知道斐波那契数列,不管你是放羊和养兔子,你都会算出来你有多少只羊和兔子。
2、基于空间注意力SAM的GoogLeNet实现人脸关键点检测并自动添加表情贴纸。新手看到这里,可能会被这一长串的专业名词吓到,其实不用管他们,当你水平够了,自然就明白了。当人,这节课的老师也没有详细讲解,只是举这个项目为例子来介绍什么是回归任务。

分类任务

这个玩意儿,顾名思义,给AI一个图片,让它告诉你,图片上是猫还是狗。
想一下,自己小时候,是不是被长辈们用一沓卡片,教给你什么都是些什么小动物,因为我们人脑很发达,看到一张猫的卡片,就知道其他猫的卡片都是猫了。

这节课,老师介绍了一个经典数据集CIFAR-10数据集。

场景任务

老师的原话是:
这里说的场景任务是针对某一个特定的场景开发的深度学习任务,相比于回归和分类任务来说,场景任务的难度更高。这里说的场景任务包括但不限于目标检测、图像分割、文本生成、语音合成、强化学习等。
?
简单地说,所有的深度模型,除了回归和分类,其它的都是场景任务。
所以,我开头说,对于这个的划分,我想了好久,没办法算他错。

老师举了三个分任务:
1、目标检测:这个任务,现如今,依旧是各大竞赛平台的熟客,落地上,工业上,被用的非常广泛,论文量也很多。简单地说,就是让AI在图像或者视频里面,找到你想让他找到的东西,比如,无人驾驶中,你得让汽车找到什么汽车、路牌、路上的实线虚线、其他的车、行人等等。
2、人脸分割:大白话,就是抠图。Adobe的Photoshop软件早已经把这个技术用的炉火纯青,当然,美图秀秀就弱很多了。
3、文字识别:顾名思义,让AI不是文盲罢了。啥时候能让AI看懂医生写的字就好了。

模型训练

在这里,老师把模型训练归为两类,分别是:基于高层API训练模型,使用PaddleX训练模型。
第一个是我们的基本功。
既然我们在学百度飞桨的课程,那肯定得有百度自己家的东西,PaddleX就是这么个玩意儿,其实就是让第一个方法变得简单了,但是第一个方法还是要精通。

基于高层API训练模型

模型优化器,Loss计算方法,精度计算方法。
课程代码是根据PaddlePaddle框架来实现的,这个框架和Pytorch很相似。
代码不重要,重要的是理论,这里面学问大了。

使用PaddleX训练模型

简单地说,就是调包侠。
这个玩意儿,就是可以不知道底层代码的情况下,直接用。
不清楚PaddleX是不是开源,一旦不开源,直接用他们的API调包,会出现产权问题吧。
对于学术研究的话,我们研究的就是模型训练,所以还是得知道底层代码。

超参优化

参数: 参数是机器学习算法的关键,是从训练数据中学习到的,属于模型的一部分。输入一个值(x),乘以权重,结果就是网络的输出值。权重可以随着网络的训练进行更新,从而找到最佳的值,这样网络就能尝试匹配输出值与目标值。这里的权重其实就是一种参数。
超参数: 模型的超参数指的是模型外部的配置变量,是不能通过训练的进行来估计其取值不同的,且不同的训练任务往往需要不同的超参数。超参数不同,最终得到的模型也是不同的。一般来说,超参数有:学习率,迭代次数,网络的层数,每层神经元的个数 等等。

常见的超参数有以下三类:
网络结构,包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型等。
优化参数,包括优化方法、学习率、小批量的样本数量等 .
正则化系数

实践中,当你使?神经?络解决问题时,寻找好的超参数其实是一件非常困难的事情,对于刚刚接触的同学来说,都是"佛系调优",这也是一开始就"入土"的原因,没有依据的盲目瞎调肯定是不行的。

手动调参的四大方法

这部分,老师给出了相当好的干货。
老师也是总结的《Neural Network and Deep Learning》这本书。
这本书,我一定要拜读。
当然,老师也说,对于调参,目前不存在?种通用的关于正确策略的共同认知,这也是超参数调节的"玄学"之处

使用提前停止来确定训练的迭代次数

老师认为,是防止过拟合最直接的方式

做法其实很简单,做一个判断,满足条件时退出循环,终止训练:

for epoch in range(MAX_EPOCH):
	// 训练代码
	print('{}[TRAIN]epoch {}, iter {}, output loss: {}'.format(timestring, epoch, i, loss.numpy()))
	if ():
		break
	model.train()

那么这个if条件判断就十分重要了,这里有两种方案:

1、分类准确率不再提升时。
2、loss降到一个想要的范围时。

分类准确率不再提升时
我们需要再明确?下什么叫做分类准确率不再提升,这样方可实现提前停止。

我们知道,分类准确率在整体趋势下降的时候仍旧会抖动或者震荡。如果我们在准确度刚开始下降的时候就停止,那么肯定会错过更好的选择。?种不错的解决方案是如果分类准确率在?段时间内不再提升的时候终止。

当然这块用loss也是可以的,loss也是一个评判标准。

loss降到一个想要的范围时
这是老师经常使用的、更直接的方法。

因为网络有时候会在很长时间内于?个特定的分类准确率附近形成平缓的局面,然后才会有提升。如果你想获得相当好的性能,第一种方案(分类准确率不再提升时)的规则可能就会太过激进了 —— 停止得太草率。

而本方案(loss降到一个想要的范围时)能很好地解决这一问题,但随之而来的问题就是不知不觉地又多了一个超参数,实际应用上,这个用于条件判断的loss值的选择也很困难。

让学习率从高逐渐降低

我们都知道:如果学习率设置的过低,在训练的前期,训练速度会非常慢;而学习率设置地过高,在训练的后期,又会产生震荡,降低模型的精度。
?
我们?直都将学习速率设置为常量。但是,通常采用可变的学习速率更加有效。

所以最好是在前期使用一个较大的学习速率让权重变化得更快。越往后,我们可以降低学习速率,这样可以作出更加精良的调整。

?种自然的观点是使用提前终止的想法。就是保持学习速率为?个常量直到验证准确率开始变差,然后按照某个量下降学习速率。我们重复此过程若干次,直到学习速率是初始值的 1/1024(或者1/1000),然后终止训练。

宽泛策略

1、通过简化网络来加速实验进行更有意义的学习
2、通过更加频繁的监控验证准确率来获得反馈

通过简化网络来加速实验进行更有意义的学习
假设,我们第?次遇到 MNIST 分类问题。刚开始,你很有激情,但是当模型完全失效时,你会就得有些沮丧。
?
此时就可以将问题简化,将十分类问题转化成二分类问题。丢开训练和验证集中的那些除了 0 和 1的那些图像,即我们只识别0和1。然后试着训练?个网络来区分 0 和 1。
?
这样一来,不仅仅问题比 10 个分类的情况简化了,同样也会减少 80% 的训练数据,这样就多出了 5 倍的加速。同时也可以保证更快的实验,也能给予你关于如何构建好的网络更快的洞察。
?
通过更加频繁的监控验证准确率来获得反馈

小批量数据(mini-batch)大小不必最优

假设我们使用大小为 1 的小批量数据。而一般来说,使用只有?个样本的小批量数据会带来关于梯度的错误估计。

而实际上,误差并不会真的产?这个问题。原因在于单?的梯度估计不需要绝对精确。我们需要的是确保代价函数保持下降足够精确的估计。

这就好像你现在要去北极点,但是只有?个不太精确的指南针。如果你不再频繁地检查指南针,指南针会在平均状况下给出正确的?向,所以最后你也能抵达北极点。

不过使用更大的小批量数据看起来还是显著地能够进行训练加速的。

所以,选择最好的小批量数据大小是?种折中。小批量数据太小会加长训练时间;而小批量数据太大是不能够足够频繁地更新权重的。你所需要的是选择?个折中的值,可以最大化学习的速度。

幸运的是,小批量数据大小的选择其实是相对独立的?个超参数(网络整体架构外的参数),所以你不需要优化那些参数来寻找好的小批量数据大小。

因此,可以选择的方式就是使用某些可以接受的值(不需要是最优的)作为其他参数的选择,然后进行不同小批量数据大小的尝试,就像上面调整学习率那样,画出验证准确率的值随时间(非回合)变化的图,选择得到最快性能提升的小批量数据大小。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 17:22:11  更:2021-08-03 17:22:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 15:14:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码