【DL经典回顾】激活函数大汇总(十五)(LogSoftmax附代码和详细公式)

激活函数大汇总(十五)(LogSoftmax附代码和详细公式)

更多激活函数见激活函数大汇总列表

一、引言

欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的角色,它们决定着神经元的输出,并且影响着网络的学习能力与表现力。鉴于激活函数的重要性和多样性,我们将通过几篇文章的形式,本篇详细介绍两种激活函数,旨在帮助读者深入了解各种激活函数的特点、应用场景及其对模型性能的影响。

在接下来的文章中,我们将逐一探讨各种激活函数,从经典到最新的研究成果。

限于笔者水平,对于本博客存在的纰漏和错误,欢迎大家留言指正,我将不断更新。

二、LogSoftmax

softmax是一个数学函数,它将K个真实的数的向量作为输入,并将其转换为概率分布,参见图,即在应用softmax之前,向量分量可以是负的或大于0,但是在应用softmax之后,每个分量将在区间[0,1]中,这些分量的和等于1,所以我们可以把这些值解释为概率。
在这里插入图片描述

LogSoftmax激活函数是Softmax激活函数的一个变体,常用于深度学习模型中的多分类问题。它结合了Softmax函数的归一化特性和对数运算,经常用于模型的输出层,特别是当模型的输出需要表示为概率对数时。

1. 数学定义

给定一个向量 z z z,其元素 z i z_i zi代表模型对第(i)类的原始预测分数(也称为logits),LogSoftmax函数定义为:

log ⁡ Softmax ⁡ ( z i ) = log ⁡ ( e z i ∑ j e z j ) \log \operatorname{Softmax}\left(z_i\right)=\log \left(\frac{e^{z_i}}{\sum_j e^{z_j}}\right) logSoftmax(zi)=log(jezjezi)
其中,分母是对所有类别预测分数的指数求和,确保了输出的归一化,而对数运算则直接提供了概率的对数形式。

2. 函数特性

  • 归一化和稳定性:LogSoftmax通过归一化确保了输出值表示为对数概率,这对于处理极端值特别有用,因为它有助于避免数值计算中的下溢问题。
  • 与Softmax的关系:LogSoftmax可以被看作是对Softmax输出取对数,提供了直接的概率对数输出,这在计算交叉熵损失时非常高效。

3. 导数

LogSoftmax函数的导数相对简单,给定输出类别 i i i,其导数为:

∂ log ⁡ Softmax ⁡ ( z i ) ∂ z k = { 1 − Softmax ⁡ ( z i ) if  i = k − Softmax ⁡ ( z k ) if  i ≠ k \frac{\partial \log \operatorname{Softmax}\left(z_i\right)}{\partial z_k}= \begin{cases}1-\operatorname{Softmax}\left(z_i\right) & \text { if } i=k \\ -\operatorname{Softmax}\left(z_k\right) & \text { if } i \neq k\end{cases} zklogSoftmax(zi)={1Softmax(zi)Softmax(zk) if i=k if i=k
这表示,对于目标类别 i i i,梯度取决于该类别的Softmax概率与1的差;而对于非目标类别 k k k,梯度为该类别的Softmax概率的负值。

4. 使用场景与局限性

使用场景

  • 多分类问题:LogSoftmax广泛用于深度学习中的多分类问题,尤其是当模型的输出需要进行概率解释时。
  • 交叉熵损失计算:在使用交叉熵损失函数时,直接使用LogSoftmax作为输出层可以提高计算效率,因为它避免了计算Softmax概率后再取对数的额外步骤。

局限性

  • 输出解释:由于LogSoftmax提供的是概率的对数形式,直接解释输出可能不如Softmax直观。
  • 数值稳定性:虽然LogSoftmax设计是为了提高数值稳定性,但在实际应用中仍需注意适当的数值处理,以避免数值误差。

5.代码实现

import numpy as npdef log_softmax(x):"""计算LogSoftmax激活函数的值。参数:x -- 输入值,可以是数值、NumPy数组或者多维数组。当处理多维数组时,默认对最后一个维度应用LogSoftmax。返回:LogSoftmax激活后的结果。"""# 防止在指数运算时数值溢出的常见技巧是从输入中减去最大值。# 注意:这里使用keepdims=True保持数组维度不变,以便后续的广播操作。x_max = np.max(x, axis=-1, keepdims=True)# 计算调整后的指数值,并通过指数的总和归一化,得到Softmax概率。# 再对这些概率取对数,得到LogSoftmax值。e_x = np.exp(x - x_max)log_sum_e_x = np.log(np.sum(e_x, axis=-1, keepdims=True))# LogSoftmax实际上是输入的指数减去归一化因子的对数。return (x - x_max) - log_sum_e_x# 示例输入,假设是一批3个样本的logits,每个样本对应3个类别的预测分数。
x = np.array([[2.0, 1.0, 0.1],[1.0, 3.0, 0.2],[0.2, 0.2, 4.0]
])# 应用LogSoftmax激活函数
output = log_softmax(x)print("LogSoftmax Output:\n", output)
解读
  1. 数值稳定性:通过从每个输入中减去其最大值(x_max),此技巧有助于避免在进行指数运算时的数值溢出问题,同时不影响最终的结果。这是因为LogSoftmax的计算涉及到比率的对数,而这些比率在减去一个常数后保持不变。

  2. 归一化和对数:计算每个元素的指数后,通过其总和对指数进行归一化,得到Softmax的概率分布。然后,对这个归一化的结果取对数,得到最终的LogSoftmax值。这里的(x - x_max) - log_sum_e_x实质上是先对归一化的指数值取对数,再从每个输入减去其对应的最大值和归一化因子的对数。

  3. 多维数组支持:通过在np.maxnp.sum函数中指定axis=-1和使用keepdims=True,此实现支持对多维数组进行操作,假定最后一个维度是特征或类别维度。这使得函数可以直接应用于一批数据,无需单独处理每个样本。

示例输出解释

对于示例输入,该函数为每个样本的每个类别计算了LogSoftmax值。输出显示了每个类别的LogSoftmax值,这些值可以直接用于计算交叉熵损失,优化多分类问题中的模型性能。

三、参考文献

虽然LogSoftmax函数本身可能不经常作为单独的研究主题出现,但它与Softmax函数和交叉熵损失的讨论密切相关。以下是一些相关的基础文献和资源,这些可以帮助深入理解LogSoftmax函数及其在深度学习中的应用:

  1. Goodfellow, I., Bengio, Y., & Courville, A. (2016). “Deep Learning.” MIT Press. 这本书为深度学习提供了全面的介绍,包括激活函数、损失函数以及如何在神经网络中使用它们的详细讨论。尽管它可能不直接专门讨论LogSoftmax,但提供了对Softmax函数和交叉熵损失的深入讨论,这些都与LogSoftmax紧密相关。
  2. Bishop, C. M. (2006). “Pattern Recognition and Machine Learning.” Springer. Bishop的这本书详细介绍了模式识别和机器学习的基本原理,其中包括分类问题中的概率模型和对数概率的使用。该书通过讨论Softmax函数及其性质,为理解LogSoftmax提供了背景知识。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解常用测试模型 -- V模型、W模型

目录 V模型 测试流程 特点 优、缺点 w模型/双v模型 测试流程 特点 优、缺点 V模型 测试流程 用户需求:产品经理将用户需求转变为软件需求 需求分析与系统设计:验证需求是否正确,确定编程语言和框架 概要设计:项目结构设…

Golang 开发实战day04 - Standard Library

Golang 开发实战day04 - Standard Library 接下来开始我们第四天学习,Go语言标准库提供了丰富的功能,可以帮助开发者快速完成各种任务。 golang就像其他语言一样,附带了一些非常轻量级的函数和特性,都是开箱即用的,这里…

RK3568平台开发系列讲解(基础篇)内核是如何发送事件到用户空间

🚀返回专栏总目录 文章目录 一、相关接口函数二、udevadm 命令三、实验沉淀、分享、成长,让自己和他人都能有所收获!😄 一、相关接口函数 kobject_uevent 是 Linux 内核中的一个函数, 用于生成和发送 uevent 事件。 它是 udev 和其他设备管理工具与内核通信的一种方式。…

Spring Boot Actuator介绍

大家在yaml中经常见到的这个配置 management: endpoints: web: exposure: #该配置线上需要去掉,会有未授权访问漏洞 include: "*" 他就是Actuator! 一、什么是 Actuator Spring Boot Actuator 模块提供了生产级别…

2024三掌柜赠书活动第十四期:网络靶场与攻防演练

目录 前言 网络靶场的概念和作用 攻防演练的重要性和实施方法 1、攻防演练的重要性 2、攻防演练的实施方法 关于《网络靶场与攻防演练》 编辑推荐 内容简介 作者简介 图书目录 书中前言/序言 《网络靶场与攻防演练》全书速览 结束语 前言 在当今数字化时代&#x…

ego - 人工智能原生 3D 模拟引擎——基于AI的3D引擎,可以做游戏、空间计算、元宇宙等项目

1. 产品概述:Ego是一款AI本地化的3D模拟引擎,旨在让非技术创作者通过自然语言生成逼真的角色、3D世界和交互式脚本。该平台提供了创建和分享游戏、虚拟世界和交互体验的功能。 2. 定位:Ego定位于解决开放世界游戏和模拟的三大难题:难以编写游戏脚本、非玩家角色无法展现人…

STL库中的string

文章目录 一、STL的六大组件二、string类2.1string中的size()方法2.2隐式类型的转换2.3string的多种构造2.4string中size与length是否有差异?2.4string中的capacity2.5string中的push_back和append2.6string中运算符重载operator2.7string中的reserve扩容2.8string中…

凝思操作系统离线安装mysql和node

PS:下面这就是国产凝思的界面,测试版本是V6.0.80,第一次听说这种系统,于是去官网下载部署包,下面是地址 注意:这个系统如果没有激活,ip都不会有,这样文件都不能传到服务器,xshell这些工具都连不…

电源ATE自动测试系统为您提供一站式自动化测试解决方案

ATECLOUD-POWER电源ATE自动测试系统已为许多客户提供专业的测试解决方案,并且都成功交付。那么电源模块ATE自动测试系统是如何提供测试方案,完成电源测试呢? 在工程师明确用户测试需求、掌握测试方法与步骤之后,从仪器选型到系统开发、再到机…

mac安装rust开发环境,使用brew安装和全局配置

mac下使用brew可以一键安装环境: brew install rustup 安装完成执行: rustup-init 按照提示配置即可: 出现: 想要全局生效: echo export PATH"$HOME/.cargo/bin:$PATH" >> ~/.bash_profile source…

ts版本微信小程序在wxml保存文件不刷新页面的解决办法

将project.config.json中的skylineRenderEnable改为false "skylineRenderEnable": false

遗传算法及基于该算法的典型问题的求解实践

说明 遗传算法是一个很有用的工具,它可以帮我们解决生活和科研中的诸多问题。最近在看波束形成相关内容时了解到可以用这个算法来优化阵元激励以压低旁瓣,于是特地了解和学习了一下这个算法,觉得蛮有意思的,于是把这两天关于该算法…