为了优化神经网络在训练集中的表现,通常可以从损失函数、训练方法、激活函数、学习速率、突破局部最优等多个方向进行尝试。
一、损失函数
误差的度量方式决定了损失函数,而损失函数又决定了模型参数的迭代方向,所以损失函数的选择将会对深度学习模型的训练产生相当重要的影响。
可以使用平方差损失函数对参数模型进行优化,但很多时候平方差损失函数存在参数更新过慢,即由于梯度过小导致模型训练速率太慢的问题。
交叉熵损失函数同样可以被用来进行误差的度量,它与平方差损失函数一样具备非负性,且当真实输出与期望输出接近时,交叉熵损失函数的函数值同样接近0。
交叉熵损失函数能够解决平方差损失函数权重更新过慢的问题。采用交叉熵损失函数后,模型参数的更新速率将与误差大小正相关,即误差越大,权重更新越快,误差越小,权重更新就越慢。
二、训练方法
如果我们可以通过更少的计算量得出正确的平均梯度,会怎么样?通过从我们的数据集中随机选择样本,我们可以通过小得多的数据集估算(尽管过程非常杂乱)出较大的平均值。
随机梯度下降法 (SGD) 将这种想法运用到极致,它每次迭代只使用一个样本(批量大小为 1)。如果进行足够的迭代,SGD 也可以发挥作用,但过程会非常杂乱。小批量随机梯度下降法(小批量 SGD)是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量 SGD 可以减少 SGD 中的杂乱样本数量,但仍然比全批量更高效。原始梯度下降算法-每次迭代要使用整个训练集;随机梯度下降算法-通过每次只取一个训练样本进行梯度计算。mini-batch梯度下降算法-把整个训练集拆成多个部分,每次选择一个部分使用。
一次参数更新被称作一次迭代,每次迭代所使用的训练样本被称为batch;当经历若干次迭代,全部训练样本均被使用过一次,就叫做一个epoch,epoch可以反映算法的效率。对于梯度下降算法来说,每次迭代都是一个epoch;而对于随机梯度下降算法来说,要经过与训练样本数量相同次数的迭代后,才算是经历了一个epoch。
由于不同梯度下降算法的batch不同,即一次迭代所使用的训练样本数量不同,因此不能单纯采用迭代次数来评价算法的效率。由于每个epoch都意味着使用了相同数量的训练样本,所以更能客观反映算法的效率。算法收敛所需要的epoch数量越少,说明效率越高。
三、激活函数
神经网络模型训练时,经常出现一种现象:梯度消失。多层神经网络解决了单层感知机不能解决的线性不可分问题,但神经网络模型不是参数越多越好,层数过多可能会导致神经网络训练时难以收敛。
在训练时经常会用到正向传播与反向传播。
正向传播沿着从输入层到输出层的顺序,依次计算并存储神经网络的中间变量。
反向传播沿着从输出层到输入层的顺序,依次计算并存储神经网络中间变量和参数的梯度。
在训练深度学习模型时,正向传播和反向传播相互依赖。一方面,正向传播的计算可能依赖于模型参数的当前值,而这些模型参数是在反向传播的梯度计算后通过优化算法迭代的。另一方面,反向传播的梯度计算可能依赖于各变量的当前值,而这些变量的当前值是通过正向传 播计算得到的。因此,在模型参数初始化完成后,我们交替地进行正向传播和反向传播,并根据反向传播计算的 梯度迭代模型参数。
通常,越靠近输出层的神经网络层,梯度越大,学习速率越快;而越靠近输入层的神经网络层,梯度越小,参数更新越慢。如果整个神经网络的层数过多,就会导致输入层附近的神经网络层几乎无法进行有效的参数更新,梯度几乎为零,这就叫梯度消失。
将线性整流函数(RELU)作为激活函数,是避免梯度消失问题的主流方法之一。
RELU函数的表现通常优于其他激活函数的表现,其主要优点如下:
计算速度快:RELU函数由两端线性函数组成,其计算速度要比sigmoid这类非线性函数的计算速度快得多。
缓解梯度消失:神经网络的复杂性及层数过多是产生梯度消失问题的重要原因,而RELU函数抑制相当一部分神经元的激活,客观上简化了神经网络,起到了降低复杂度的作用。
四、学习速率
在梯度下降算法的迭代式中,通常会设置一个学习速率调节参数(通常被称作学习速率),该参数与梯度向量向乘,共同决定模型参数的更新速率。
这个参数对训练效果有着重要影响。如果学习速率过大,那么每次更新后,总误差可能并不会减小,即所谓出现“走过头”的情况,甚至会导致算法永远无法收敛到最小值。如果学习速率过小,那么整个训练过程又会被拖得相当长。所以很自然的有人提出,学习速率这个值应当随着epoch的增加而减小。
五、对局部最优的突破
由于梯度下降算法单纯以梯度作为模型参数更新的唯一依据,所以当模型迭代到一个梯度较小的区间中时,算法的学习速率就会变慢,如果恰好到达了梯度为零的点,则该纬度的模型参数就会停止更新。
但梯度为零只能说明该纬度下这个参数值为局部最优,可能并不是全局最优。同一个损失函数曲面中可能会存在有多个总梯度为零的局部最优点,所以如果仅使用梯度作为模型参数更新的唯一依据,就可能会落入局部最优中,再也无法达到全局最优点。
六、欠拟合与过拟合
模型训练中经常出现的两类典型问题:一类是模型无法得到较低的训练误差, 我们将这一现象称作欠拟合(underfitting);另一类是模型的训练误差远小于它在测试数据集上 的误差,我们称该现象为过拟合(overfitting)。在实践中,我们要尽可能同时应对欠拟合和过拟 合。虽然有很多因素可能导致这两种拟合问题,在这里我们重点讨论两个因素:模型复杂度和训 练数据集大小。
给定训练 数据集,如果模型的复杂度过低,很容易出现欠拟合;如果模型复杂度过高,很容易出现过拟合。
为了避免过拟合,也有几种办法可以尝试:增大训练集、提早停止训练、正则化、特殊网络结构。
应对欠拟合和过拟合的一个办法是针对数据集选择合适复杂度的模型。影响欠拟合和过拟合的另一个重要因素是训练数据集的大小。一般来说,如果训练数据集中样本 数过少,特别是比模型参数数量(按元素计)更少时,过拟合更容易发生。