调参侠——如何对神经网络进行调参

从实践的角度,手把手教你如何对神经网络超参数进行调参。本文涉及的调参目标有:

  • 学习率
  • Batch Size
  • 网络深度与宽度
  • Epochs
  • L1、L2正则化与平衡系数
  • Dropout
  • 激活函数

Leaning Rate

学习率是决定网络何时能够找到最优解的重要超参数。关于学习率的超参数设定,主要是初始学习率大小和学习率变化方案。学习率的变化属于网络训练的一个trick,在网络始终使用相同的学习率的情况下,模型优化程度与学习率的设定有着以下的关系。
调参侠——如何对神经网络进行调参_第1张图片
可以简单总结为以下几点:

  1. 较大的学习率加速了网络训练,但可能无法达到最优解。
  2. 较小的学习率会使网络训练缓慢。除此之外,过小的学习率可能会使网络陷入局部最优解。
  3. 学习率过大的情况小,网络无法学习到有效的知识。

一个简单的方案是在网络训练初期使用大的学习率加速收敛,之后降低学习率提高模型训练效果。这被称为学习率衰减(Learning Rate Decay)。

Batch Size

Batch Size主要影响的是每个Epoch的训练时长和每次迭代的梯度平滑度。假设全量样本为n,Batch Size设置为b,则每个Epoch的迭代次数为n/b。从这个点来看,当Batch Size减小时,迭代次数变多,每次迭代的训练时长减少,但整个Epoch的训练时长是增加的。

Batch Size过小:

  1. 迭代的梯度不平滑,模型训练loss振荡。模型的训练更偏重于拟合个体,导致在训练过程中模型容易忽视数据的整体规律性。
    训练时长增加。
  2. 内存利用率低。

Batch Size过大:

  1. 容易陷入局部最优,从而影响模型效果。过大的Batch Size容易忽视数据中的个体差异性,并使得模型的梯度下降方向固定。
  2. 内存容易溢出。在实际训练中,如果新进程导致了额外的内存占用,容易强行终止模型训练。

需要强调的是,大的Batch Size会降低模型精度,但模型的梯度下降方向更为准确,所以辅以设置更大的学习率可以加速模型的收敛;小的Batch Size可以更好的捕获到模型的个体差异性,从而具有较高的模型精度,并且应该设置更小的学习率缓解loss振荡问题。

Depth & Width

网络的深度和宽度是我们在设计网络初期就需要考虑的目标。在神经网络中的深度和宽度设置并没有绝对的意义,在网络拥有更大的深度和宽度时,能够说明该网络理论上学习到更加复杂变换,具有更强的拟合能力。但复杂的网络有着更多的参数,这意味着需要更大的训练代价。

关于网络的深度设置,需要了解以下几个关键点:

  1. 实验表明,一定范围的网络加深可以提高网络效果,而当网络效果饱和时,模型难以获得从网络加深带来的效果提升。
  2. 网络并不是越深越好。深层网络除了参数量大带来的训练缓慢问题外,同时面临着梯度消失/爆炸和网络退化带来的效果下降。一个过深的网络,浅层往往难以学习到有效的知识。
  3. 当你觉得当前网络具有足够深度而又无法获得理想的效果的时候,改进网络结构往往比提高网络深度更有效。

相比于网络深度,网络宽度的设置往往被放在一个次要的位置。大多数情况下我们认为提高网络深度可以获得更强的拟合能力,而网络宽度在设置为一个合理值后即很少给予讨论。关于网络的宽度设置,需要了解以下几点:

  1. 过小的网络宽度会使网络丧失学习能力。神经网络的每层可以看做对初始输入进行一个抽象表示,经过逐层的抽象表示的变换,最终输出预测结果。如果单层网络宽度不足,很难做到对初始输入的有效表示。
  2. 浅层的宽度重要性高于深层的宽度。在正常情况下,网络应该被设计为一个同样宽度的矩形网络或者是一个底层宽度更大的金字塔形网络。
  3. 网络宽度与深度是合作与竞争的关系。

Epochs

Epochs过大容易导致过拟合,而过小则网络训练不足。一半都是当验证集难以获得效果提升时,应该停止训练。

正则化项和平衡系数

正则化是缓解网络过拟合的策略,常见正则化有L1正则化和L2正则化。基本理念是将网络中的参数值(权重)进行统计与计算,并作为损失函数的额外项,从而缓解了网络中部分节点权重过大的问题。

[公式]

在上述公式中,a代表平衡系数,而||·||表示正则化项。关于正则化项,需要了解以下几点:

  1. 从经验上来讲,L2正则化使用频率是更高的。
  2. L1正则化的一个重要性质是可以获得稀疏解。这使它除了正则化外还可以用于特征选择,使用L1正则化来获取一个稀疏的网络,从而判断某些特征是否对结果贡献小。

而关于平衡系数:

  1. 平衡系数控制正则化项的“惩罚力度”。过小的平衡系数,会使正则化项失去了存在的必要,而过大的平衡系数会使网络权重的设置出现极端的情况(权重全部接近0),使网络无法学习到有用的知识。
  2. 理论上,平衡系数需要结合网络规模(参数量)进行设置,可参照经验设计,无需过多调整。

Dropout Rate

Dropout同样是一种缓解过拟合的正则化方案,它通过在训练过程中,对网络的节点以一定概率进行屏蔽从而使其不参与训练,使得网络的输出结果能够依靠于更多节点。一般情况下,Dropout Rate取值为0.5,在对Dropout进行调参时,它取值为0.1~0.9。

Activation Function

激活函数给神经网络带来了非线性能力。在实际调参过程中,激活函数更像一个黑盒模型,各种激活函数具备各自的优缺点。目前最常用的激活函数是ReLU。虽然大多数情况下,激活函数并不是调参的重要目标,但是需要了解一下几点:

  1. 激活函数的偏导数计算与反向传播的梯度计算紧密相关,部分梯度始终小于1的激活函数(如Sigmoid、Tanh等)更容易引起梯度消失问题。
  2. 激活函数在RNN中有着不同的适用情况,RNN更多地使用Tanh。实验表明,由于连乘效应,RNN中使用ReLU函数容易导致特别大的输出值从而影响模型效果。
  3. Sigmoid可以用于将网络节点输出限制在0~1之间,这在分类任务中是有用的。

后文

笔者认为,真正的调参不仅仅是漫无目的地调试,而是根据现有效果进行有规律的改进。实际上,深度学习涉及的超参数可能远远不止本文涉及的内容,而当你有了足够的经验后,调参往往会有迹可循,事半功倍。

你可能感兴趣的:(神经网络,python,深度学习)