损失函数(Loss Function)用于评估神经网络的预测输出和实际目标之间的差距,它反应了当前模型对训练数据的拟合程度。常见的损失函数有:
- 交叉熵损失(Cross Entropy Loss):适用于多分类任务,常用于Softmax激活的输出层。
cross_entropy_loss = -∑yilog(ŷi)
- 二元交叉熵损失(Binary Cross Entropy Loss):适用于二分类任务,常用于Sigmoid激活的输出层。
binary_cross_entropy_loss = -∑[yi*log(ŷi) + (1-yi)log(1-ŷi)]
- 平方误差损失(Mean Squared Error Loss):简单高效,输出无界,对异常值敏感。
mse_loss = ∑(yi - ŷi)2 / n
- 绝对值误差损失(Mean Absolute Error Loss):输出无界,比MSE对异常值更鲁棒。
mae_loss = ∑|yi - ŷi| / n
- Huber损失(Huber Loss):结合MSE和MAE的优点,对异常值较鲁棒,同时可以得到更平滑的优化过程。
huber_loss = {
(yi - ŷi)2 if |yi - ŷi| ≤ δ
δ(|yi - ŷi| - δ/2) otherwise
举例:
- 交叉熵损失用于Softmax输出和多分类:
loss = tf.nn.softmax_cross_entropy_with_logits(logits=outputs, labels=labels)
- 二元交叉熵损失用于Sigmoid输出和二分类:
loss = tf.nn.sigmoid_cross_entropy_with_logits(logits=outputs, labels=labels)
- MSE损失用于 Regression 任务:
loss = tf.losses.mean_squared_error(labels, predictions)