【漫话机器学习系列】111.指数之和的对数(Log-Sum-Exp)

在计算机科学和机器学习中,经常会遇到计算指数和的对数的情况,例如:

c = \log \sum_{i=1}^{n} e^{x_i}

然而,由于指数函数 e^x 的值增长极快,直接计算可能会导致数值上溢(overflow)或下溢(underflow),影响计算的准确性。为了避免这些问题,我们可以使用 Log-Sum-Exp (LSE) 技巧,本篇文章将详细介绍该技巧的原理、推导过程以及实际应用。


1. Log-Sum-Exp (LSE) 的问题背景

1.1 直接计算的数值问题

考虑上式:

S = \sum_{i=1}^{n} e^{x_i}

然后取对数:

c = \log S = \log \sum_{i=1}^{n} e^{x_i}

如果 x_i 中的某些值非常大,比如 x_i = 1000,那么 e^{x_i}​ 将会是一个极大的数,可能超出计算机浮点数的表示范围,导致溢出
另一方面,如果所有 x_i​ 都是非常小的负数,比如 x_i = -1000,那么 e^{x_i} 会趋近于 0,可能在计算机上被认为是 0,导致下溢

这些情况都会导致计算结果的不稳定或者不准确,因此需要使用 Log-Sum-Exp 技巧 来优化计算。


2. Log-Sum-Exp (LSE) 变换

为了避免上溢和下溢,我们可以做如下变换:

\log \sum_{i=1}^{n} e^{x_i}

由于指数函数的特性,我们可以从求和的项中提取一个最大值,使得剩余的项不会导致溢出或下溢。

2.1 变换公式

\log \sum_{i=1}^{n} e^{x_i} = a + \log \sum_{i=1}^{n} e^{x_i - a}

其中:

a = \max(x)

2.2 变换的直观理解

  • 原理:将所有的指数项归一化,以最大值 a 为中心,使得所有的指数计算不会超出数值范围。
  • 作用:这样做可以保证 x_i - a 的最大值始终为 0(因为 a 是最大值),从而避免指数计算时的数值问题。
  • 计算简化:由于 e^{x_i - a} 的最大值始终为 1(当 x_i = a 时),这样可以防止上溢,同时较小的指数值(负指数)也不会被计算机当作 0 处理,避免下溢。

3. 公式推导

假设:

a = \max(x_1, x_2, ..., x_n)

我们将公式改写:

S = \sum_{i=1}^{n} e^{x_i}

因 a 是最大值,我们可以提取 e^a 作为因子:

S = e^a \sum_{i=1}^{n} e^{x_i - a}

然后取对数:

\log S = \log \left(e^a \sum_{i=1}^{n} e^{x_i - a}\right)

利用对数的性质:

\log(ab) = \log a + \log b

可以得到:

\log S = \log e^a + \log \sum_{i=1}^{n} e^{x_i - a}

又因为:

\log e^a = a

最终得到:

\log \sum_{i=1}^{n} e^{x_i} = a + \log \sum_{i=1}^{n} e^{x_i - a}


4. 实际应用

4.1 在数值计算中的应用

Log-Sum-Exp 技巧主要用于避免计算机的数值溢出问题,在以下场景中非常常见:

  • 计算 softmax 函数:Softmax 用于将一组数值转换为概率分布:

    P(y_i) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}}​​
    其中的分母部分就是 Log-Sum-Exp 形式,使用 LSE 技巧可以防止计算错误。
  • 计算对数概率:在许多统计和机器学习模型中,比如 HMM(隐马尔可夫模型)、GMM(高斯混合模型),需要计算对数概率,而 Log-Sum-Exp 变换可以避免概率值过小导致的数值问题。

4.2 代码实现

在 Python 中,我们可以使用 numpy 提供的 logsumexp 方法来实现:

import numpy as np
from scipy.special import logsumexp

x = np.array([1000, 1001, 1002])
c = logsumexp(x)
print(c)  # 正确计算结果,避免溢出

输出结果 

1002.4076059644444

如果不使用 logsumexp,直接计算 np.log(np.sum(np.exp(x))),可能会导致 inf(上溢出)。


5. 结论

5.1 Log-Sum-Exp 的核心作用

  • 避免指数计算时的上溢出(overflow)和下溢出(underflow)
  • 提高计算的数值稳定性,特别是在计算 softmax 和对数概率时。

5.2 LSE 的计算流程

  1. 找到最大值 a = \max(x)
  2. 归一化指数项 e^{x_i - a},防止数值过大或过小。
  3. 重新计算对数,得到稳定的 Log-Sum-Exp 结果。

这种方法在机器学习和深度学习中非常常见,可以提高模型的数值计算稳定性,避免不必要的错误。


6. 总结

  • 直接计算 Log-Sum-Exp 时可能会导致数值溢出问题
  • 使用最大值 aaa 进行变换,可以避免溢出,同时保证计算的稳定性
  • 在深度学习、统计建模、概率计算等领域,Log-Sum-Exp 技巧被广泛应用
  • Python 提供了 scipy.special.logsumexp 直接计算该公式,推荐使用

希望本文能帮助大家理解 Log-Sum-Exp(LSE) 这个重要的数学技巧,并能够在实际应用中灵活使用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【决策树】分类属性的选择

文章目录 1.信息增益(ID3)2.信息增益率(C4.5)3.基尼指数(CART)ps.三者对比 实现决策树算法最关键的一点就是如何从所有的特征属性中选择一个最优的属性对样本进行分类,这种最优可以理解为希望划…

【tplink】校园网接路由器如何单独登录自己的账号,wan-lan和lan-lan区别

老式路由器TPLINK,接入校园网后一人登录,所有人都能通过连接此路由器上网,无法解决遂上网搜索,无果,幸而偶然看到一个帖子说要把信号源网线接入路由器lan口,开启新世界。 一、wan-lan,lan-lan区…

ubuntu部署gitlab-ce及数据迁移

ubuntu部署gitlab-ce及数据迁移 进行前梳理: 在esxi7.0 Update 3 基础上使用 ubuntu22.04.5-server系统对 gitlab-ce 16.10进行部署,以及将gitlab-ee 16.9 数据进行迁移到gitlab-ce 16.10 进行后总结: 起初安装了极狐17.8.3-jh 版本(不支持全局中文,就没用了) …

电源测试系统有哪些可以利用AI工具的科技??

AI技术的发展对电源模块测试系统的影响是深远的,不仅协助系统提升了测试效率和精度,还推动了测试方法的创新和智能化。那么在电源测试系统中哪些模块可以利用AI工具实现自动化测试? 1. 自动化测试与效率提升 智能测试流程优化 AI算法可以自动优化测试…

京准电钟:NTP校时服务器于安防监控系统应用方案

京准电钟:NTP校时服务器于安防监控系统应用方案 京准电钟:NTP校时服务器于安防监控系统应用方案 NTP校时服务器在安防监控系统中的应用方案主要通过高精度时间同步技术,解决设备间时间差异问题,确保日志、录像等数据的时间一致性…

C# Unity 唐老狮 No.5 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…

STL——list的介绍和模拟实现

前言 本篇博客我们将要开始介绍list这个容器,list是带头双向循环链表,STL标准模板库中实现了list这样方便我们去使用,那么本篇博客我们将脱下list的神秘外衣,介绍它的使用以及模拟实现。 list的介绍 list的底层是带头双向循环链…

飞鱼动画笔记

1.鱼身体:左右移动先转动身体(与飞机类似) 2.眼睛/嘴巴:绿色等腰三角形的底边和顶点,就是眼睛骨骼旋转弧线经过点 3.鱼鳍和鱼尾:使用springmagic插件制作波浪动画再微调 4.腹部

全面了解机器学习:回归、分类、分割与检测任务

在机器学习的广袤天地中,回归任务和分类任务构成了基础的两大支柱,而分割任务与检测任务则是在此基础上衍生出的重要应用方向。 机器学习的基础任务 回归任务 回归预测是监督学习中的一个重要任务,旨在预测连续数值。线性回归是最简单和最…

【论文阅读笔记】SL-YOLO(2025/1/13) | 小目标检测 | HEPAN、C2fDCB轻量化模块

目录 摘要 1 引言 2 相关工作 3 方法 3.1 为小目标检测增加一个头 3.2 优化网络结构 3.3 改进轻量化模块 3.3.1 C2fDCB 3.3.2 SCDown 4 实验 4.1 数据集 4.2 实验环境 4.3 与其他模型的比较 4.4 消融研究 ▲不同网络结构的分析 ▲不同模块的分析 ▲不同降采样…

进化算法和智能控制国际学术研讨会(ISEAIC 2025)

重要信息 官网:www.icaace.net(了解参会投稿等) 时间:2025年3月21-23日 地点:中国-上海-上海古井假日酒店 简介 2025进化算法和智能控制国际学术研究会议(ISEAIC 2025)是2025第八届先进算法…

SpringAI 调用本地ollama大模型

pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

【二.提示词工程与实战应用篇】【1.提示词工程入门:AI对话的艺术】

大家好,今天咱们来聊聊一个特别有意思的话题——提示词工程。你可能已经听说过这个词,或者在使用AI工具时不经意间接触过它。但提示词工程到底是什么?它为什么这么重要?咱们今天就来深入探讨一下,看看它是如何影响我们与AI的对话,以及如何在实际应用中发挥作用的。 什么…

C++:类和对象(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _mont…

【计算机网络】考研复试高频知识点总结

文章目录 一、基础概念1、计算机⽹络的定义2、计算机⽹络的目标3、计算机⽹络的组成4、计算机⽹络的分类5、计算机⽹络的拓扑结构6、计算机⽹络的协议7、计算机⽹络的分层结构8、OSI 参考模型9、TCP/IP 参考模型10、五层协议体系结构 二、物理层1、物理层的功能2、传输媒体3、 …

【Python 数据结构 5.栈】

目录 一、栈的基本概念 1.栈的概念 2.入栈 入栈的步骤 3.出栈 出栈的步骤 4.获取栈顶元素 获取栈顶元素的步骤 二、 Python中的栈 顺序表实现 链表实现 三、栈的实战 1.LCR 123. 图书整理 I 思路与算法 2.LCR 027. 回文链表 思路与算法 3.1614. 括号的最大嵌套深度 思路与算法 …

C++基础算法:模拟

文章目录 1.[P1067 [NOIP 2009 普及组\] 多项式输出 - 洛谷](https://www.luogu.com.cn/problem/P1067)题目解析算法解析代码实现 2.[P5731 【深基5.习6】蛇形方阵 - 洛谷](https://www.luogu.com.cn/problem/P5731)题目解析算法原理代码实现 3.[P1098 [NOIP 2007 提高组\] 字符…

关于对机器中的人工智能进行基准测试

大家读完觉得有帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; 抽象 最近的基准研究声称&#xff0c;AI 在各种认知任务上的表现已经接近甚至超过人类的“水平”。然而&#xff0c;本立场文件认为&#xff0c;当前的 AI 评估范式不足以评估类似人类的认知能力。我…

c++ 内存管理系统之智能指针

1.c内存管理 1.代码区 也称Text Segment&#xff0c;存放可执行程序的机器码。 2 数据区&#xff1a; 存放已初始化的全局和静态变量&#xff0c; 常量数据&#xff08;如字符串常量&#xff09;。 存放未初始化的全局和静态变量 无疑解释静态变量的来源&#xff1a; 局…

Unity中的Destroy和DestroyImmediate的区别是什么?

在 Unity 中&#xff0c;Destroy 和 DestroyImmediate 都是用于销毁游戏对象&#xff08;GameObject&#xff09;、组件&#xff08;Component&#xff09;或资源的方法。在大多数情况下&#xff0c;建议优先使用 Destroy 方法&#xff0c;只有在确实需要立即销毁对象时才使用 …