【深度学习基础】超参数介绍

深度学习基础:

  1. 性能评估指标
  2. 超参数介绍
  3. 损失函数

在深度神经网络中,超参数的调整是一项必备技能,通过观察在训练过程中的监测指标如损失loss和准确率来判断当前模型处于什么样的训练状态,及时调整超参数以更科学地训练模型能够提高资源利用率。下面将分别介绍并总结了不同超参数的调整规则。**按照超参数的重要程度进行介绍**

(1)学习率

学习率(learning rate或作lr)是指在优化算法中更新网络权重的幅度大小。学习率可以是恒定的、逐渐降低的,基于动量的或者是自适应的。不同的优化算法决定不同的学习率。
⼀般来说,微调参数层(finetune_net)会使用 较小 的学习率(eg:0.001)或固定不变,而从头训练输出层(scratch_net)可以使用 较大 的学习率(eg:0.01)
在这里插入图片描述

  • 当学习率过大则可能导致模型不收敛,损失loss不断上下震荡;
  • 学习率过小则导致模型收敛速度偏慢,需要更长的时间训练。
  • 通常lr取值为[0.01,0.001,0.0001]

(2)批次大小batch_size
在这里插入图片描述
批次大小是每一次训练神经网络送入模型的样本数,在卷积神经网络中,大批次通常可使网络更快收敛,但由于内存资源的限制,批次过大可能会导致内存不够用或程序内核崩溃

  • bath_size通常取值为[16,32,64,128]

(3)优化器optimizer

目前Adam是快速收敛且常被使用的优化器。随机梯度下降(SGD)虽然收敛偏慢,但是加入动量Momentum可加快收敛,同时带动量的随机梯度下降算法有更好的最优解,即模型收敛后会有更高的准确性。通常若追求速度则用Adam更多。

(4)迭代次数(epoch)

迭代次数是指整个训练集输入到神经网络进行训练的次数,当测试错误率和训练错误率相差较小时,可认为当前迭代次数合适;当测试错误率先变小后变大时则说明迭代次数过大了,需要减小迭代次数,否则容易出现过拟合。

(5)激活函数

在神经网络中,激活函数不是真的去激活什么,而是用激活函数给神经网络加入一些非线性因素,使得网络可以更好地解决较为复杂的问题。激活函数主要是非线性的,如sigmoid、tanh、relu。sigmoid函数通常用于二分类,但要防止梯度消失,故适合浅层神经网络且需要配备较小的初始化权重,

  • tanh函数具有中心对称性,适合于有对称性的二分类。
  • relu是使用最多的激活函数,简单又避免了梯度消失。

训练方法:

熊猫法(Panda) VS. 鱼子酱法(Caviar)

熊猫法:
当我们训练一个很大的模型,但是计算资源又没有那么多的时候,我们会很珍惜我们的训练机会,通常会像照顾一个熊猫一样去照顾我们的模型的训练过程。
具体来说,我们先初始化一组超参数,然后每训练一段时间,比如一天,就赶紧去看看进展如何,是否按照我们预想的方向发展,然后做一定的微调,接着训练,保持观察;如果发现偏离了方向,赶紧对超参数进行调整。就这样,一天天地照看,直到最后达到我们的训练目标。
可以用下面的图来表示:
在这里插入图片描述

熊猫法

如图所示,每一天我们观察一次效果,并做微调。可以看到,前三天都不错,第四天突然走偏了,于是我们赶紧退回到D3的节点,调整参数重新训练,让它回到正轨。
这就跟熊猫的养成一样,熊猫每次只能生一个,而且存活率也很低,所以我们必须特别小心地看护。

鱼子酱法
鱼产卵一次就是一大坨,成千上万个小孩生出来,生死由命。
如果我们的计算资源足够丰富,可以同时训练多个模型,那么我们就可以用鱼子酱法:

在这里插入图片描述

鱼子酱法

我们直接丢一堆超参数组合的模型去训练,然后不管了,最后看看谁的效果最好就选择谁。

对于这两种方式怎么选择,当然是看具体的情况了,一般情况话,训练一个大模型的时候,我们没有那么壕,所以小心翼翼地去像照顾熊猫一样去调节我们的模型可能更常见一些。

发布了68 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35307005/article/details/97395128