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

【深度学习_TensorFlow】误差函数

写在前面

搭建完网络层后,在每层网络中都要进行前向计算,下一步就是选择合适的误差函数来计算误差。其中均方差函数和交叉熵函数在深度学习中比较常见,均方差函数主要用于回归问题,交叉熵函数主要用于分类问题。


写在中间

均方差函数

( 1 )简单介绍

均方差函数(简称 MSE)把输出向量和真实向量映射到笛卡尔坐标系的两个点上,通过计算这两个点之间的欧式距离(准确地说是欧式距离的平方)来衡量两个向量之间的差距:

M S E ( y , o ) ≜ 1 d o u t ∑ i = 1 d o u t ( y i − o i ) 2 \mathrm{MSE}(\boldsymbol{y},\boldsymbol{o})\triangleq\frac{1}{d_{\mathrm{out}}}\sum_{i=1}^{d_{\mathrm{out}}}(y_i-o_i)^2 MSE(y,o)dout1i=1dout(yioi)2

MSE 误差函数的值总是大于等于 0,值越小,越接近真实值。

当 MSE 函数达到最小值 0 时,输出值等于真实标签,此时神经网络的参数达到最优状态。

( 2 )函数实现

# 均方差函数的实现有多种
import tensorflow as tf# 方法一:
tf.reduce_mean(tf.square(y_true - y_pred))# 方法二:
tf.keras.losses.MSE(y_true, y_pred)

交叉熵函数

介绍交叉熵函数之前,我们先了解 KL散度 这两个概念


熵用来衡量信息的不确定度,熵越大,代表不确定性越大。

公式如下:

H ( P ) ≜ − ∑ i P ( i ) log ⁡ 2 P ( i ) H(P)\triangleq-\sum_iP(i)\log_2P(i) H(P)iP(i)log2P(i)

熵的计算


熵怎样计算?对于分类问题:

  • 如果某个样本的标签的 One-hot 编码为[0, 0, 0, 1],即这张图片的分类是唯一确定的,不确定性为 0。它属于第 4 类的概率𝑃(𝑦为 4|𝒙) = 1,此标签的熵可以简单的计算为:

− 0 ⋅ log ⁡ 2 0 − 0 ⋅ log ⁡ 2 0 − 0 ⋅ log ⁡ 2 0 − 1 ⋅ log ⁡ 2 1 = 0 -0\cdot\log_20-0\cdot\log_20-0\cdot\log_20-1\cdot\log_21=0 0log200log200log201log21=0

  • 如果某个样本的标签的 One-hot 编码为[0.1, 0.1, 0.1, 0.7],即这张图片的分类属于第四类的概率较大,此标签的熵就可以计算为:

− 0.1 ⋅ log ⁡ 2 0.1 − 0.1 ⋅ log ⁡ 2 0.1 − 0.1 ⋅ log ⁡ 2 0.1 − 0.7 ⋅ log ⁡ 2 0.7 ≈ 1.356 -0.1\cdot\log_20.1-0.1\cdot\log_20.1-0.1\cdot\log_20.1-0.7\cdot\log_20.7\approx1.356 0.1log20.10.1log20.10.1log20.10.7log20.71.356

很明显,第二个结果的熵比第一个熵大,不确定度也大得多,因此最小化熵的过程也是最大化正确类别的预测概率的过程。从这个角度去理解交叉熵损失函数,非常地直观易懂。

KL散度


如果我们对于同一个随机变量 i 有两个单独的概率分布 p(i) 和 q(i),我们可以使用 KL 散度来衡量这两个分布的差异:

在深度学习中,我们通常把真实的标签分布(通常是 one-hot 编码)视为 p,把模型预测的概率分布视为 q。

KL散度的计算公式为

D K L ( p ∣ ∣ q ) = ∑ i p ( i ) l o g ( p ( i ) q ( i ) ) D_{KL}(p||q)=\sum_{i}p(i)\mathrm{log}\left(\frac{p(i)}{q(i)}\right) DKL(p∣∣q)=ip(i)log(q(i)p(i))

我们仍然使用上面的例子,标签的one-hot编码为[0, 0, 0, 1],预测值为[0.1, 0.1, 0.1, 0.7],KL散度计算结果为:

KL = 0 * log(0/0.1) + 0 * log(0/0.1) + 0 * log(0/0.1) + 1 * log(1/0.7)
= -log(0.7)
≈ 0.357

交叉熵


终于要介绍交叉熵了,你一定会猜到讲上面的知识会和交叉熵有关,对你猜的没错!

交叉熵损失函数的计算公式为:

H ( p ∣ ∣ q ) = H ( p ) + D K L ( p ∣ ∣ q ) H(p||q)=H(p)+D_{KL}(p||q) H(p∣∣q)=H(p)+DKL(p∣∣q)

其实就是熵和KL散度的加和,稍加变形就得到:

H ( p ∣ ∣ q ) ≜ − ∑ i p ( i ) log ⁡ 2 q ( i ) H(p||q)\triangleq-\sum_ip(i)\log_2q(i) H(p∣∣q)ip(i)log2q(i)

交叉熵函数的实现


import tensorflow as tf# 假设 y_true 是真实的标签,y_pred 是模型的预测值
y_true = [[0, 0, 0, 1], [0, 1, 0, 0]]
y_pred = [[0.1, 0.1, 0.1, 0.7], [0.1, 0.6, 0.1, 0.2]]loss = tf.keras.losses.categorical_crossentropy(y_true, y_pred)

写在最后

👍🏻点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!

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

相关文章:

  • mysql按照日期分组统计数据
  • 19 | 分类模型评估指标
  • 【Pycharm2022.2.1】python编辑器最新版安装教程(包含2017-2022的所有版本win/mac/linux)
  • 深度学习-相关概念
  • 眼科医生推荐的台灯 护眼台灯买什么好?
  • 如何使用 ChatGPT 为 Midjourney 或 DALL-E 等 AI 图片生成提示词
  • 【Linux后端服务器开发】Reactor模式实现网络计算器
  • 【WebRTC---源码篇】(二:一)PeerConnection详解
  • 使用tinyxml解析和修改XML文件
  • [Docker实现测试部署CI/CD----相关服务器的安装配置(1)]
  • 【自动化运维】编写LNMP分布式剧本
  • 用Rust实现23种设计模式之单例
  • 小米平板6将推14英寸版!与MIX Fold 3同步推出
  • webpack 的一点知识
  • Python 双目摄像机控制(windows + linux)
  • mybatisplus实现自动填充 时间
  • P5732 【深基5.习7】杨辉三角
  • ubuntu调整路由顺序
  • 集成学习算法是什么?如何理解集成学习?
  • npm配置最新淘宝镜像
  • 网络基础1
  • 2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
  • 61 # http 数据处理
  • 模版下载和Excel文件导入
  • Datax 数据同步-使用总结(一)
  • 代码随想录算法训练营第九天| 232.用栈实现队列,225.用队列实现栈
  • 求解二次方程
  • 【hive 运维】hive注释/数据支持中文
  • 架构,性能和游戏 《游戏编程模式》学习笔记
  • Spring Bean的生命周期