深度神经网络调参-学习笔记

				深度学习调参

一、 建立评价指标
建立判别对于网络的评价指标,同个这个指标来判别这个网络的好坏层度,网络也可以有一个或者有多个指标。
(1) 最好是一个指标
网络最好是由一个指标来决定,如果由多个指标,那么我们在调参时,可能会出某一个指标好,某一个指标坏,这样会不利于我们去判别网络的好坏程度,所以一般情况会把多个指标融合成一个指标

(2) 指标容易理解
我们不希望指标是一个很复杂的公式或者很难理解。
(3) 指标的范围最好是[0,1]之间,最好是线性的
0代表网络最不好,1代表网络是最好。我们最好设计成线性,因为线性的可解释层度高,也能知道当较好变成好时,具体是怎么变化的。

二、 建立合理的预期
在网络调参之前,我们要对深度网络可能到达的评价指标做评估,我们的网络评价指标预计最高能达到多少,他是由很多个外在因素组成的,如我们的数据集是否准确,数据集的数量是否足够多,我们的芯片算力是否足够,时间上允许我们做多少天的训练等等因素。假设我们的预期是0.9,但是实际上外在因素的影响,我们到达不了0.9.那么我就要重新建立合理的预期,或者用其他的方法改进。
下面我们以image captioning为例,我们想要一张图片输入进去后,对这张图片进行翻译,那么这个功能可能有几个任务组成实现,我们图片翻译可以有四个任务组成。

	预期image captioning的最佳效果,实际上就是把各个任务单独拿出来,寻找到他们在各自领域上的最好效果,在关联起来,变成我们的最佳效果
	 
所以我们在训练调参前。我们得知道image captioning能到到的效果最好的就是0.16,而不是盲目设定一个预期,然后在那边抱怨为什么训练出来的结果那么低,其实你可能已经达到现今的最好的效果了

三、 建立合理的数据集
测试数据集与训练数据集的分布是否一致。

四、 判断是否欠/过拟合
在这里插入图片描述

如上图,左中右分别有欠拟合、正好拟合、过拟合

欠拟合:
模型描述能力太弱,以至于不能很好地学习到数据中的规律。产生欠拟合的原因通常是模型过于简单。欠拟合是指模型不能在训练集上获得足够低的误差。
如上图,数据的规律挺复杂的,是一条曲线,而我们只用了线性去模拟,会丢失很多误差信息。

过拟合:
是指学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测的很好,但对未知数据预测得很差的现象。这种情况下模型可能只是记住了训练集数据,而不是学习到了数据特征。也就是过拟合是指训练误差和测试误差之间的差距太大。
如上图,我们在训练集来看,我们的模型曲线是完美的,但是在我们的测试集上,却有很大的误差。

理解bias/variance
Bias:网络预测出来的值与真实值的差异
Variance:同一个模型用不同的数据集去训练,他们之间的差异会不会很大
在这里插入图片描述

五、 消除欠拟合
(1) 欠拟合曲线变化(1):
在这里插入图片描述

		曲线上来看,我们的测试数据曲线也在下降,当时下降的不够。

我们的解决办法如下:
1、 增加训练epoch
2、 增大batch-size
3、 调整激活函数(使用relu)
4、 调整优化算法
使用Adam
增大学习率
(2) 欠拟合曲线变化(2):
在这里插入图片描述

从曲线上来看,我们的训练数据都没达到我们预期的虚线上,训练数据和测试数据之间的相差较大,那我们的解决办法如下
在这里插入图片描述

六、 消除过拟合
(1) 过拟合曲线变化(1):

在这里插入图片描述

在这里插入图片描述

七、 超参数的优化
在这里插入图片描述

网络中会有很多超参数,我们需要对超参数进行优化。
如下图所示:
在这里插入图片描述

左侧是我们具体的超参数,右侧则是我们对超参数的优化方法

我们已知神经网络是一个非凸优化问题,他包含许多局部最小值,我们通过对超参数的优化,从而寻找到与全局最小值接近的值。
我们的超参数优化方法如下:
(1) 网格搜索(Grid Search)
罗列出所有的超参数的各个组合,一一使用这些超参数的组合进行训练,得到参数组合最好的一组,这种优化方式效率比较低
(2) 随机搜索(Random Search)
不同超参数对模型性能的影响有很大差异。有些超参数(比如正则化系数)对模型性能的影响有限,而另一些超参数(比如学习率)对模型性能影响比较大。在这种情况下,采用网格搜索会在不重要的超参数上进行不必要的尝试。
随机搜索就是对超参数进行随机组合,然后选取一个性能最好的配置
网格搜索和随机搜索都没有利用不同超参数组合之间的相关性,即如果模型的超参数组合比较类似,其模型性能也是比较接近的。
(3) 贝叶斯优化

(4) 进化算法调参
在这里插入图片描述

假设一开始我们不知道网络层数是多少层比较好,那么我就初始化一组,分别是5、2、100、17、1、9、50,都去做训练,发现9、1、50、2这四个比较好,那么我就把不好的5、100、17去掉,接下来让好的几层进行变异活着交配,生成出另外的,循环这个过程

八、 神经网络的调参
DNN网络调参:
在这里插入图片描述

	Model Design: 
				用什么样的初始化去初始参数
				用什么样的激活函数
				用什么样的损失函数
				用多少个隐含层
				每个隐含层用多少个神经元
				用什么算法优化器
				使用Dropout吗
	Hyperparameters:
					每一层参数的学习率选择什么样的学习率
					使用了Dropout,那么Dropout的Rate是多少
					训练的BatchSize是多少

		网络的调参分为两种:

(1) Optimizer hyperparameters(优化器调参)
在这里插入图片描述

(2) Model Specific hyperparameters(网络结构)
在这里插入图片描述

九、 Optimizer hyperparameters(优化器调参)
(1) 学习率的调参:
训练神经网络最重要的是(在时间不充足的情况下)-----学习率

如果我们的学习率太小于最佳值,那么我们需要更长的时间去训练,才能达到我们的理想状态
如果我们的学习率太大于最佳值,那么他将超过理想状态,并且我们的算法可能不会收敛。
在这里插入图片描述

可能你的模型有数百个参数,每个参数都有自己的误差曲线。而且学习率的改变和其他参数的变化会相互影响
误差取消不是干净的U形曲线,他们具有更复杂的形状、大量的局部最小值。

(2) BatchSize的调参:
是每次传给模型训练的样本个数
在这里插入图片描述

我们的BatchSize受硬件的影响,当我们的内存足够大,就可以用大的batchSize进行训练,这样会提升我们的训练速度。但不是越大越好,因为太大容易使得训练的梯度陷入局部最小值
在这里插入图片描述

(3) Epoch的调参:
一个Epoch就是将所有训练样本训练一次的过程。
在这里插入图片描述

训练模型的Epoch是很难准确去预估的,我可以先设置一个比较大的值,将训练的结果打印出来,去观察结果,并且通过Early Stopping的技术,当我们在后面的十个或者二十Epoch(时期)训练后,结果并没有发生改善,那我们将停止训练

十、 Model Specific hyperparameters(网络结构调参)
(1) 隐含层的节点
隐含层的节点数量是最神秘的超参数之一
隐含层的节点数量就是网络学习能力的主要衡量标准
对于一个简单的函数,他可能需要更少数量的隐含层和较少隐含层的节点数量

如果隐含层的节点数量比实际需要的多一点没有关系,但是如果多太多,将导致模型过度拟合,即如果设计的模型有太多的隐含层的节点,他可能倾向于过拟合并且只是试图记住数据集
例子如下:
在这里插入图片描述

当我们选择6个节点时,模型是正正好好,但当我们选择3个节点,则会出现欠拟合,但我选择20个节点,则又会出现过拟合现象

如果我们选择20的节点时,又不想他过拟合,那么可以加入正则化
在这里插入图片描述

图中表示,当我们的节点选则过大时,出现过拟合,我们可以加入正则化,通过调整正则化的超参数,从而避免出现过拟合现象

一般情况下,第一层隐含层的节点数量应该大于输入层的节点数量
整个网络呈现纺锤形
在这里插入图片描述

(2) 网络层次

![在这里插入图片描述](https://img-blog.csdnimg.cn/d68e33a56fd24e6ea07ee905c8443927.png)
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值