当前位置: 首页 > news >正文

深度学习损失函数详解 | Binary Cross Entropy(二元交叉熵)原理 + 数学推导 + Python实现

在二分类任务中,最常用的损失函数之一就是 Binary Cross Entropy(二元交叉熵),它衡量的是模型输出的概率分布与真实标签之间的差距。

本文将带你全面理解 BCE 的数学原理、Python 实现方式、以及常见的应用场景。

📘 一、什么是 Binary Cross Entropy?

Binary Cross Entropy(简称 BCE)是用于二分类模型的损失函数,通常用于输出为概率(0~1)的问题,比如逻辑回归、神经网络的输出层等。

它本质上是信息论中的交叉熵(Cross Entropy)在二分类场景下的特例。

🧮 二、数学公式(LaTeX 表达)

设:

  • y∈{0,1}:真实标签

  • \hat{y}∈(0,1):模型预测的概率

  • 损失函数为 BCE(y,\hat{y})

那么 Binary Cross Entropy 的数学定义为:

\text{BCE}(y, \hat{y}) = - \left[ y \cdot \log(\hat{y}) + (1 - y) \cdot \log(1 - \hat{y}) \right] 

解释:

  • 如果真实标签 y=1,损失为 −log⁡(\hat{y})

  • 如果 y=0,损失为 −log⁡(1−\hat{y})

该函数具有良好的凸性,可以用于梯度下降优化。

🧑‍💻 三、Python 手动实现 BCE 函数

下面是使用 Python 实现的 binary_cross_entropy 函数,并加入了防止 log(0) 的数值稳定性处理:

import mathdef binary_cross_entropy(y_true, y_pred_prob):"""手动实现二元交叉熵损失函数(Binary Cross Entropy)参数:y_true: 真实标签(0 或 1)y_pred_prob: 模型预测的概率(0 到 1 之间)返回:BCE 损失值"""epsilon = 1e-15  # 防止 log(0)y_pred_prob = min(max(y_pred_prob, epsilon), 1 - epsilon)return - (y_true * math.log(y_pred_prob) + (1 - y_true) * math.log(1 - y_pred_prob))# 示例
print("真实为 1,预测为 0.9:", binary_cross_entropy(1, 0.9))
print("真实为 0,预测为 0.1:", binary_cross_entropy(0, 0.1))

✅ 输出示例: 

真实为 1,预测为 0.9: 0.105360...
真实为 0,预测为 0.1: 0.105360...

🎯 四、Binary Cross Entropy 的特性 

特性说明
适用场景二分类问题、逻辑回归、神经网络输出层
值域[0,∞)[0, \infty),预测越准确,损失越接近 0
数值稳定性需避免对 0 或 1 取对数,通常添加 ϵ=1×10−15\epsilon = 1 \times 10^{-15}
凸函数适用于梯度下降优化

📊 五、图像理解

  • 当 y=1,损失随 \hat{y} 的减小而快速增大;

  • 当 y=0,损失随 \hat{y}的增大而快速增大;

BCE 曲线呈对数型变化,预测错误时惩罚很大,鼓励模型收敛于正确的概率预测。

🤖 六、常见应用

  • 逻辑回归(Logistic Regression)

  • 二分类神经网络输出层(Sigmoid + BCE)

  • 自动编码器中的重构损失函数

  • GAN判别器的损失函数

📌 七、总结

Binary Cross Entropy 是一个经典且强大的损失函数,适用于任何概率型的二分类输出模型。掌握其原理不仅有助于理解模型的优化过程,也能在实际建模中灵活应用与调试。

http://www.lryc.cn/news/591125.html

相关文章:

  • 中科米堆CASAIM三维激光扫描仪用于注塑件3d扫描逆向建模
  • 【Linux】第一个小程序—进度条
  • 黑色风格音乐播放器网站模板(附完整源码)
  • 前端防复制实战指南:5 种主流方案效果对比与实现
  • 北京-4年功能测试2年空窗-报培训班学测开-第五十三天
  • 数据库管理-第349期 Oracle DB 23.9新特性一览(20250717)
  • 【37】MFC入门到精通——MFC中 CString 数字字符串 转 WORD ( CString, WORD/int 互转)
  • 【华为】交换机vlan互访实验
  • 边缘智能革命:嵌入式机器学习如何让万物“思考”
  • CephFS 和 SSHFS 挂载指南:从配置到排错
  • SQL一些关于存储过程和使用的总结
  • 并发事务~
  • Selector的用法
  • 一台显示器上如何快速切换两台电脑主机?
  • Adobe Photoshop:数字图像处理的终极工具指南
  • JavaScript进阶篇——第八章 原型链、深浅拷贝与原型继承全解析
  • 爬虫逆向:一篇文章掌握 Hopper 的详细使用(macOS 和 Linux 反汇编程序:对可执行文件进行静态分析)
  • Alibaba-NLP/WebAgent 项目总结
  • 如何在PyCharm中删除虚拟环境
  • [MRCTF2020]PYWebsite
  • web APIs(更新中)
  • 中兴B860AV5.1-M2_S905L3SB最新完美版线刷包 解决指示灯异常问题
  • 【测试100问】为什么要做接口测试?
  • 大带宽服务器对于高流量网站的作用
  • 2025年6月GESP(C++一级):值日
  • 淘宝获取商品规格接口(item-sku)操作详解
  • 【Modelsim】原理图怎么看?
  • 【后端】.NET Core API框架搭建(8) --配置使用RabbitMQ
  • `@Configuration` 是 Spring 框架中的一个注解
  • Jmeter使用 -1