如何向交叉熵中添加负熵项构建自定义损失函数?
正则化损失实现说明
论文核心信息
- 参考论文题目:《REGULARIZING NEURAL NETWORKS BY PENALIZING CONFIDENT OUTPUT DISTRIBUTIONS》
- 核心实现逻辑:在负对数似然基础上加入负熵项,对低熵输出分布进行惩罚,实现神经网络正则化,可基于该规则构造自定义损失函数用于模型训练
- 损失计算公式:

- 超参数说明:
β为惩罚系数,用于控制置信惩罚的强度
现有代码基础
已完成的基础分类交叉熵损失函数代码如下:
import tensorflow as tf def custom_loss(y_true, y_pred): cce = tf.keras.losses.CategoricalCrossentropy() cce_loss = cce(y_true, y_pred) return cce_loss
补充负熵项后的完整实现
import tensorflow as tf def custom_loss(y_true, y_pred, beta=0.1): # 计算原始分类交叉熵损失 cce = tf.keras.losses.CategoricalCrossentropy() cce_loss = cce(y_true, y_pred) # 计算预测分布的熵,添加极小值避免log(0)报错 entropy = -tf.reduce_sum(y_pred * tf.math.log(y_pred + 1e-10), axis=-1) # 叠加负熵惩罚项得到最终损失 total_loss = cce_loss + beta * (-tf.reduce_mean(entropy)) return total_loss
注:可根据实际训练效果调整
beta的取值,适配不同任务的正则化强度需求。
内容的提问来源于stack exchange,提问作者shiva
相关产品推荐
相关产品推荐

