共计 2563 个字符,预计需要花费 7 分钟才能阅读完成。
神经网络在训练时的优化首先是对模型的以后状态进行误差预计,而后为了缩小下一次评估的误差,须要应用一个可能示意谬误函数对权重进行更新,这个函数被称为损失函数。
损失函数的抉择与神经网络模型从示例中学习的特定预测建模问题(例如分类或回归)无关。在本文中咱们将介绍罕用的一些损失函数,包含:
- 回归模型的均方误差损失
- 二元分类模型的穿插熵和 hinge 损失
回归模型的损失函数
回归预测模型次要是用来预测间断的数值。所以咱们将应用 scikit-learn 的 make_regression() 函数来生成一些模仿数据,并应用这些数据构建回归模型。
咱们将生成 20 个输出特色:其中 10 个特色将是有意义的,但 10 个与问题无关。
并且随机生成 1,000 个示例。并且指定随机种子,所以无论何时运行代码都会生成雷同的 1,000 个示例。
将实值输出和输入变量缩放到一个正当的范畴通常能够进步神经网络的性能。所以咱们要对对数据进行标准化解决。
StandardScaler 也能够在 scikit-learn 库中找到,为了简化问题咱们将在将所有数据宰割为训练集和测试集之前对其进行缩放。
而后均匀宰割训练和验证集
为了介绍不同的损失函数,咱们将开发一个小型多层感知器 (MLP) 模型。
依据问题定义,有 20 个特色作为输出,通过咱们的模型。须要要预测的一个实值,所以输入层将有一个节点。
咱们应用 SGD 进行优化,并且学习率为 0.01,动量为 0.9,两者都是正当的默认值。训练将进行 100 个轮,测试集将在每个阶段完结时进行评估,并且绘制学习曲线。
模型实现后就能够进行损失函数的介绍:
MSE
回归问题最常应用的是均方误差损失(MSE)。当指标变量的散布为高斯分布时,它是最大似然推理下的首选损失函数。所以只有当你有一个更好的理由时,才应该扭转为其余损失函数。
如果在 Keras 中编译模型时将“mse”或“mean_squared_error”指定为损失函数,则应用均方误差损失函数。
上面的代码是上述回归问题的残缺示例。
在运行示例的第一步中,打印了模型的训练和测试数据集的均方误差,因为保留了 3 位小数,所以显示为 0.000
从下图中能够看出,模型收敛速度相当快,训练和测试性能放弃不变。依据模型的性能和收敛个性,均方误差是回归问题的一个很好的抉择。
MSLE
在具备宽泛值的回归问题中,可能不心愿在预测大值时像均方误差那样对模型进行惩办。所以能够通过首先计算每个预测值的自然对数来计算均方误差。这种损失称为 MSLE,或均方对数误差。
当预测值呈现较大差别时,它具备放松惩办成果的成果。当模型间接预测未缩放的数量时,它可能是更适合的损失度量。
keras 中应用“mean_squared_logarithmic_error”作为损失函数
在上面的示例是应用 MSLE 损失函数的残缺代码。
该模型在训练和测试数据集上的 MSE 都略差。这是因为指标变量的散布是一个规范的高斯分布,阐明咱们的这个损失函数可能不是很适宜这个问题。
下图显示各训练轮次的比照 MSE 收敛得很好,但 MSE 可能过拟合了,因为它从 20 轮开始降落变得变换并且开始回升。
MAE
依据回归问题,指标变量的散布可能次要是高斯分布,但可能蕴含异样值,例如 远离平均值的大值或小值。
在这种状况下,均匀绝对误差或 MAE 损失是一个适合的损失函数,因为它对异样值更持重。思考到理论值与预测值的相对差值,计算为平均值。
应用“mean_absolute_error”损失函数
这是应用 MAE 的残缺代码
后果如下
下图能够看到,MAE 的确收敛了但它有一个平稳的过程。MAE 在这种状况下也不是很适宜,因为指标变量是一个没有大离群值的高斯函数。
二元分类的损失函数
二元分类问题是预测建模问题中两个标签中的一个。这个问题被定义为预测第一个或第二个类的值为 0 或 1,个别状况下通常被实现为预测属于类值 1 的的概率。
咱们也是应用 sklearn 生成数据这里应用圆问题,它有一个二维立体,有两个同心圆,其中外圆上的点属于类 0,内圆上的点属于类 1。为了使学习更具挑战性,咱们还在样本中退出了统计噪声。样本量为 1000,并退出 10% 的统计噪声。
数据集的散点图能够帮忙咱们了解正在建模的问题。上面列出的是一个残缺的示例。
散点图如下,其中输出变量确定点的地位,色彩为类值。0 是蓝色的,1 是橙色的。
这里还是一半用于训练,一半用于测试,
咱们还是定义一个简略的 MLP 模型,
应用 SGD 优化,学习率为 0.01,动量为 0.99。
模型训练 200 轮进行拟合,并依据损失和准确性评估模型的性能。
BCE
BCE 是用于解决的二元分类问题默认损失函数。在最大似然推理框架下,它是首选损失函数。对于第 1 类的预测,穿插熵计算一个分数,该分数总结了理论和预测概率分布之间的均匀差别。
在编译 Keras 模型时,能够指定 binary_crossentropy 作为损失函数。
为了预测类 1 的概率,输入层必须蕴含一个节点和一个 ’ sigmoid ‘ 激活。
上面是残缺的代码:
该模型对问题的学习绝对较好,在测试数据集上的准确率为 83%,准确率为 85%。分数之间存在肯定水平的重叠,表明模型既不是过拟合也不是欠拟合。
下图中所示,训练成果很好。因为概率分布之间的误差是间断的,损失图是平滑的,而精度线图显示出凹凸不平,因为训练和测试集中的例子只能被预测为正确或不正确,提供的颗粒信息较少。
Hinge
反对向量机 (SVM) 模型应用 Hinge 损失函数作为穿插熵的代替来解决二元分类问题。
目标值在是汇合 [-1, 1],旨在与二进制分类一起应用。如果理论类别值和预测类别值的符号不同,则 Hinge 会失去更大的误差。在二元分类问题上它有时比穿插熵更好。
作为第一步,咱们必须将指标变量的值批改为汇合 {-1, 1}。
keras 中它被称为 ’ hinge ‘。
在网络的输入层中,必须应用 tanh 激活函数的单个节点以输入介于 -1 和 1 之间的单个值。
上面是残缺代码:
比穿插熵略差的性能,在训练和测试集上的准确性不到 80%。
下图能够看出,模型曾经收敛,分类精度图表明也曾经收敛。
能够看到这个问题还是 BCE 比拟好,这里可能的起因就是因为咱们有一些噪声点导致的
https://avoid.overfit.cn/post/6f094f37a1174809b8d145510b8d6e28
作者:Onepagecode