您当前的位置:首页 >> 综合 >> 
“四两拨千斤”-损失函数对参数优化的影响

时间:2023-08-06 17:10:59    来源:哔哩哔哩


【资料图】

1. 分类问题的模型表示

在“众里寻他千百度”-深度学习的本质一文中,以一个案例的形式介绍了回归模型的表示形式。在回归模型中,输出结果为任意可能的实数。但对于分类模型来说,输出结果是个类别。因此需要讨论,通过什么形式来表示分类模型的输出结果。考虑简单的情况,假定某分类问题有三个类别,分别用整数1、2和3表示。这种表示方法存在不合理之处,即模型在计算或预测时蕴含着“3”表示的类别大于“2”表示的类别,“2”表示的类别大于“1”表示的类别。同时,也表示“3”表示的类别离“2”表示的的类别更近,离“1”表示的类别更远。如果实际的类别之间存在这种等级关系,例如根据人脸图像预测人的年龄,用这种表示方式是可行的,但如果不存在这种关系,会对模型参数估计带来很大的影响。

2. 独热编码

解决上述问题的一个常见的做法是使用独热编码(One Hot Encoding)来表示类别,假设,待预测的类别有三类,那么可以将每个类别通过一个三维的列向量来表示,第一个类别的向量除了第一行数值为1,其余数值为0;第二个类别的向量除了第二行数值为1,其余数值为0;第三个类别的向量除了第三行数值为1,其余数值均为0。这样设计的优势是能够保证每个类别之间的距离均相等,不会出现类别之间存在“亲疏关系”的问题。

3. 神经网络分类模型的表示

从神经网络符号表示的角度来看,由于输出结果变成了一个向量,分类模型的表示与回归模型的神经网络符号表示有所区别,主要体现在输出层。由于上述案例有三个类别,输出层由原来的一个神经元变成了三个。输出层的神经元和上层的所有神经元都存在权重连接,并且会加上偏差(bias)。

4. softmax函数的使用

对于分类模型的输出结果,除了在输出层新增了神经元之外,还会对输出的结果计算softmax函数。softmax函数的公式见式(1)。

对于使用分类模型的神经网络中使用softmax函数的原因,一个直观的解释是网络预期的输出结果为0和1,需要将输出结果也归一化到0至1区间内方便进行相似度的计算。

一般将soft函数的输入称为logit。经过softmax函数处理之后的数值有四个特点,第一个特点是输出结果和原始数值正相关;第二个特点是输出结果在0至1之间;第三个特点是输出结果之和等于1;第四个特点是放大了原始数值之间的差距。当有两个类别时,softmax函数就蜕化成sigmoid函数,因此softmax函数与sigmoid函数是等价的,只是在不同维度的表现形式不同。

5. 分类模型的损失函数

与回归模型计算损失函数的方式不同,一般情况下,使用交叉熵(cross-entropy)来计算分类模型的损失函数。cross-entropy的计算公式见式(2),它表示成预测的实际值与输出结果的自然对数相乘求和再取负号。通过数学理论推导可知,最小化的cross-entropy,等价于最大化似然函数。

6. 两种损失函数的参数优化比较

比较cross-entropy和均方误差mse两种损失函数,在深度学习中,cross-entropy的损失函数优于均方误差。关于均方误差的函数表达式见文章“众里寻他千百度”-深度学习的本质。

通过一个案例来比较两种损失函数在分类模型的实际表现。图中所示的案例是一个三分类的神经网络模型,假定y3是一个定值为-1000,考虑y1和y2在-10到10之间的误差变化情况。图中左侧为均方误差的损失函数曲面图,右侧为交叉熵的损失函数曲面图。图中通过色彩的变化来代表误差的大小,红色的色系代表大误差,蓝色色系代表小误差。假定随机化的点在左上方,通过梯度下降法更新参数会发现,图中左侧的损失曲面左上角的一片区域较为平坦,参数想要向右下方更新十分困难。而图中右侧的损失曲面坡度较为陡峭,更新非常顺利。因此,对于分类模型来说,选择交叉熵的损失函数优于选择均方误差的损失函数。

综上,损失函数的选择对于模型优化训练也非常重要。正如上述案例,选择正确的损失函数能够把阻碍训练的“大山”铲平,起到四两拨千斤的效果。

标签: