目录
(tf.keras.losses.binary_crossentropy)
(tf.keras.losses.categorical_crossentropy)
(tf.keras.losses.sparse_categorical_crossentropy)
前言
损失函数就是神经网络每次迭代的前向计算表达式与真实值的差,是神经网络优化的基础,神经网络模型据此调整权重和bias,使得神经网络模型的输出值向真实值靠近。
- 用随机值初始化权重和bias;
- 输入样本,模型输出的预测值;
- 用损失函数计算预测值和真实值的差;
- 对损失函数求导(对权重和bias),沿梯度最大方向将误差回传,修正权重与bias;
- goto 2, 直到损失函数值足够小或到迭代次数上限。
均方误差(MSE)
神经网络做回归时,可以选择均方误差作为损失函数(真实值和预测值的平方差的平均值)。
可以认为模型输出为实数时,可使用此损失函数。输出层不使用激活函数。
平均绝对误差(MAE)
神经网络做回归时,除了可以选择均方误差作为损失函数,也可以使用MAE(真实值和预测值差的绝对值的平均值)。
同样模型输出为实数时,可使用此损失函数。
输出层不使用激活函数。
二元交叉熵
(tf.keras.losses.binary_crossentropy)
神经网络用于二元分类任务时,输出层一个节点,输出通常使用sigmoid激活函数,输出在(0-1)范围,为样本属于0,1类别的概率。可使用二元交叉熵损失函数。
例如,神经网络对猫狗图像分类。如果输出大于0.5,则网络将其分类为猫(猫的标签为1);如果输出小于0.5,则网络将其分类为狗。即概率得分值越大,猫的机会越大。
在二分类的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为和,此时交叉熵计算公式为:
其中:
- 其中 表示样本i 的label,正类为1,负类为 0
- 表示样本 预测为正类的概率
预测 | 真实 | 是否正确 |
---|---|---|
0.3 | 0 (狗-负类) | 正确 |
0.6 | 1 (猫-正类) | 正确 |
交叉熵为:
1/2(-0*ln(0.3)+(1-0)ln(1-0.3)+(-1*ln(0.6)-(1-1)ln(0.4))
多分类交叉熵
(tf.keras.losses.categorical_crossentropy)
对于多类分类任务,可以选择多分类交叉熵损失函数。使用多分类交叉熵损失函数,输出节点的数量必须与这些类相同。最后一层的输出应该通过softmax激活函数,以便每个节点输出介于(0-1)之间的概率值,所有输出节点的概率之和为1,概率最大的输出对应的类别为该样本的类别。样本的标签为one-hot编码。
例如,在一个多分类神经网络中,它读取图像并将其分类为T恤,背心,鞋子,裙子,裤子。如果鞋子输出节点具有最高概率得分,则将图像分类为鞋子。
多分类的交叉熵计算公式为:
稀疏多分类交叉熵
(tf.keras.losses.sparse_categorical_crossentropy)
该损失函数与多分类交叉熵基本相同,区别在使用稀疏多分类交叉熵损失函数时,不需要对数据集标签进行one-hot形式的编码,使用标签编码即可。模型输出和多分类交叉熵一样,多少类别就对应多少输出节点。激活函数使用softmax。
待完善......