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

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

激活函数大汇总(八)(Maxout & Softmin附代码和详细公式)

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

一、引言

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

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

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

二、Maxout

Maxout激活函数是由Ian Goodfellow等人在2013年提出的,旨在通过学习激活函数本身来改进模型性能,特别是在深度学习领域。Maxout激活函数可以被看作是ReLU和其它线性变体激活函数的一般化,具有优秀的模型适应性和表现力。

1. 数学定义

Maxout函数实际上是一个片段线性函数,它的计算过程可以看作是对输入的一组线性变换的最大值。给定一个输入向量 x ∈ R d x \in \mathbb{R}^d xRd和一组权重 W ∈ R m × d W \in \mathbb{R}^{m \times d} WRm×d以及偏置 b ∈ R m b \in \mathbb{R}^m bRm,Maxout激活函数的输出为:

Maxout ⁡ ( x ) = max ⁡ i ∈ [ 1 , k ] ( W i ⋅ x + b i ) \operatorname{Maxout}(x)=\max _{i \in[1, k]}\left(W_i \cdot x+b_i\right) Maxout(x)=i[1,k]max(Wix+bi)
这里, W i W_i Wi是权重矩阵的第 i i i行, b i b_i bi是偏置向量的第 i i i个元素, k k k是一组内的单位数,通常作为超参数进行选择。
在这里插入图片描述

2. 函数特性

  • 适应性:Maxout函数可以适应数据和任务,因为它通过学习输入的不同线性组合来形成激活函数本身,提供了极大的灵活性。
  • 非饱和性:与ReLU一样,Maxout函数在一定程度上也不容易饱和,这有助于减轻梯度消失问题。
  • 兼容性:Maxout可以被看作是包括ReLU、Leaky ReLU在内的多种激活函数的泛化,因此它在理论上可以复制这些激活函数的性能。

3. 导数

Maxout函数的导数取决于在前向传播过程中选择的是哪个线性组合,对于每个输入 x x x,只有使得 W i ⋅ x + b i W_i \cdot x + b_i Wix+bi最大的那个 i i i对应的权重和偏置会对梯度更新有贡献:
∂ Maxout ⁡ ( x ) ∂ x = W i ∗ \frac{\partial \operatorname{Maxout}(x)}{\partial x}=W_{i^*} xMaxout(x)=Wi
其中, i ∗ i^* i是使得 W i ⋅ x + b i W_i \cdot x+b_i Wix+bi达到最大的索引。

4. 使用场景与局限性

使用场景

  • 提高模型表现力:在需要模型具备高度非线性和适应性的任务中,如复杂的分类和回归问题。
  • 深度学习模型:Maxout被广泛用于深度网络结构中,特别是在卷积神经网络和全连接层中。

局限性

  • 参数增加:Maxout激活函数需要学习更多的参数(由于需要对每个单元学习多个权重向量和偏置),这可能会导致模型参数显著增加,从而增加过拟合的风险。
  • 计算资源需求:与简单的激活函数如ReLU相比,Maxout在计算上更为复杂和资源密集,特别是在处理大规模数据集时。

5.代码实现

实现Maxout激活函数在Python中通常涉及到对输入进行多个线性变换,并取这些变换的最大值。这里,我将展示一个简化的Maxout函数实现,它接受预先计算好的一组线性变换结果作为输入,然后返回每个样本的最大激活值。这个简化版本假设你已经有了一组线性变换的结果,例如,通过多个全连接层(每层对应一个不同的权重集和偏置)处理同一个输入得到的。

import numpy as npdef maxout(inputs):"""简化版的Maxout激活函数。参数:inputs -- 输入值,假定为一个形状为(batch_size, num_units, num_pieces)的三维数组,其中batch_size是批处理大小,num_units是每个Maxout单元的数量,num_pieces是每个单元中线性变换的数量。返回:Maxout激活后的结果,形状为(batch_size, num_units)的二维数组。"""return np.max(inputs, axis=2)

解读

  • 输入形状inputs应该是一个三维数组,其中第一维是批处理大小(即一次处理多少样本),第二维是Maxout单元的数量,第三维是每个Maxout单元中进行的线性变换的数量。每个Maxout单元对应的是同一个输入通过不同的权重和偏置进行线性变换的结果。
  • 最大值操作np.max(inputs, axis=2)计算每个Maxout单元中所有线性变换结果的最大值。这里,axis=2指定了沿着第三个维度(即每个单元中不同线性变换的结果)进行最大值操作。
  • 输出:函数返回一个二维数组,形状为(batch_size, num_units),表示每个样本在每个Maxout单元上的最大激活值。

示例使用

以下是如何使用定义的maxout函数来处理一组输入:

# 假设有一个批次包含2个样本,每个样本需要计算2个Maxout单元,每个单元有3个线性变换的结果
inputs = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
maxout_values = maxout(inputs)print("Maxout Values:\n", maxout_values)

例子中,inputs模拟了两个样本通过两个Maxout单元(每个单元有三个线性变换)的处理结果。maxout函数计算并返回每个单元中最大的激活值。

三、Softmin

Softmin激活函数是Softmax函数的一个变体,主要用于多类分类问题中。与Softmax函数将输入向量的元素转换为对应的概率分布不同,Softmin函数关注于将输入向量转换为一个概率分布,其中较小的输入值获得较大的概率。这使得Softmin函数在某些特定的应用场景下,如需要强调较小值的情况,变得非常有用。

1. 数学定义

对于一个输入向量 x ∈ R n x \in \mathbb{R}^n xRn,Softmin函数的输出是一个同样长度的向量,其第 i i i个元素定义为:

Softmin ⁡ i ( x ) = e − x i ∑ j = 1 n e − x j \operatorname{Softmin}_i(x)=\frac{e^{-x_i}}{\sum_{j=1}^n e^{-x_j}} Softmini(x)=j=1nexjexi
这里, x i x_i xi是输入向量中的第 i i i个元素,分母是所有输入元素的指数的和的负值的指数。
在这里插入图片描述

2. 函数特性

  • 输出为概率分布:Softmin函数的输出是一个概率分布,其中每个元素的值介于0和1之间,且所有元素的和为1。
  • 强调最小值:与Softmax强调最大值不同,Softmin函数通过将较小的输入值转换为较大的输出概率,强调了输入向量中的最小值。
  • 平滑性:Softmin函数是平滑且连续的,这对于基于梯度的优化算法非常重要。

3. 导数

Softmin函数的导数相对复杂,对于输入向量 x x x中的第 i i i个元素,其导数可以表示为:

∂ Softmin ⁡ i ( x ) ∂ x i = − Softmin ⁡ i ( x ) ( 1 − Softmin ⁡ i ( x ) ) \frac{\partial \operatorname{Softmin}_i(x)}{\partial x_i}=-\operatorname{Softmin}_i(x)\left(1-\operatorname{Softmin}_i(x)\right) xiSoftmini(x)=Softmini(x)(1Softmini(x))
这表明Softmin函数的导数依赖于函数自身的输出值。

4. 使用场景与局限性

使用场景

  • 多类分类的概率建模:在需要强调较小输入值的多类分类问题中,例如,在某些类型的异常检测或者成本敏感任务中,Softmin可以作为一个有效的选择。
  • 配合Softmax使用:在某些情况下,Softmin可以与Softmax一起使用,以提供对输入向量中最大值和最小值的双重关注。

局限性

  • 数值稳定性:和Softmax类似,Softmin在处理具有极大或极小值的输入时可能遇到数值稳定性问题。
  • 特定应用场景:Softmin的应用相比Softmax更加特定,不适用于所有类型的多类分类问题。

5.代码实现

可以使用NumPy库计算Softmin函数将每个输入元素的负指数与所有元素负指数的和的倒数相乘,从而计算出每个元素对应的概率值。

import numpy as npdef softmin(x):"""计算Softmin激活函数的值。参数:x -- 输入值,可以是一个数值、一维数组(向量)或二维数组(矩阵)。返回:Softmin激活后的结果。"""e_neg_x = np.exp(-x)return e_neg_x / np.sum(e_neg_x, axis=-1, keepdims=True)

解读

  • 计算负指数np.exp(-x)计算输入x的每个元素的负指数。这个操作是Softmin函数的核心,因为它将输入向量转换为一个更容易处理的形式,特别是在强调较小输入值时。
  • 归一化:通过np.sum(e_neg_x, axis=-1, keepdims=True)计算所有元素负指数的和,并保持原数组的维度,以便于进行广播操作。然后,将每个元素的负指数与这个和的倒数相乘,从而得到Softmin的输出。
  • 支持多维数组:通过指定axis=-1keepdims=True,这个实现可以支持对一维或多维数组(如批量处理时的二维数组)进行Softmin计算,使其在深度学习模型中应用更为灵活。

示例使用

以下是如何使用softmin函数来计算一组输入值的Softmin激活:

x = np.array([1.0, 2.0, 3.0, 4.0])
softmin_values = softmin(x)print("Softmin Values:", softmin_values)

这段代码计算了数组x的Softmin激活值。

四、参考文献

Maxout

  • Goodfellow, I. J., Warde-Farley, D., Mirza, M., Courville, A., & Bengio, Y. (2013). “Maxout Networks.” In Proceedings of the 30th International Conference on Machine Learning (ICML-13), pp. 1319-1327. 这篇文章首次提出了Maxout网络,详细讨论了其设计原理、优点和在多个基准数据集上的性能。

Softmin

直接关于Softmin激活函数的专门文献可能不如Softmax丰富,因为Softmin通常被视为Softmax的补充或在特定情况下的替代。然而,Softmin的概念和应用可以在涉及Softmax函数以及深度学习模型中概率输出处理的更广泛讨论中找到:

  • Bishop, C. M. (2006). “Pattern Recognition and Machine Learning.” Springer. 虽然这本书没有专门讨论Softmin函数,但它提供了关于Softmax函数及其在多类分类问题中应用的深入分析,从而间接地为理解Softmin提供了背景知识。

相关文章:

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

激活函数大汇总(八)(Maxout & Softmin附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不…...

Docker进阶:深入了解 Dockerfile

Docker进阶:深入了解 Dockerfile 一、Dockerfile 概述二、Dockerfile 优点三、Dockerfile 编写规则四、Dockerfile 中常用的指令1、FROM2、LABEL3、RUN4、CMD5、ENTRYPOINT6、COPY7、ADD8、WORKDIR9、 ENV10、EXPOSE11、VOLUME12、USER13、注释14、ONBUILD 命令15、…...

【LeetCode热题100】206. 反转链表(链表)

一.题目要求 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 二.题目难度 简单 三.输入样例 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2…...

电玩城游戏大厅计时软件怎么用,佳易王计时计费管理系统软件定时语音提醒操作教程

电玩城游戏大厅计时软件怎么用,佳易王计时计费管理系统软件定时语音提醒操作教程 一、前言 以下软件操作教程以 佳易王电玩计时计费软件V18.0为例 说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、软件计时计费,只需点击开…...

selenium也能过某数、5s盾..

文章转载于:selenium也能过某数、5s盾… 直接安装: pip install undetected_chromedriver运行代码: import undetected_chromedriver as uc import timedriver uc.Chrome(executable_pathrC:\Users\chromedriver.exe,version_main111) driver.get(网…...

mysql笔记:8. 视图

文章目录 创建视图修改视图删除视图通过视图更新数据1. 插入数据2. 更新数据3. 删除数据 查看视图信息1. DESCRIBE2. SHOW TABLE STATUS3. SHOW CREATE VIEW4. 在views表中查看 数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的列和行数据。行…...

指针的基本概念和用法

指针的基本概念 每个变量都被存放在从某个内存地址(以字节为单位)开始的若干字节中 “指针”也被称作“指针变量”,大小为4个字节(在64位编译器中,也优肯为8个字节)的变量,其内容代表一个内存地…...

工作随记:oracle重建一张1T数据量的大表

文章目录 一、删除测试表二、重命名旧表:三、验证:四、检查alert日志和昨天到今天的统计信息任务收集是否正常 一、删除测试表 #xshell登录用户hthis用户连接登录处理: sqlplus ht/"123456" sqlplus ht/"123456"10.8.5.…...

使用timm库的一些知识点

timm(Torch Image Models)是一个在PyTorch上构建的图像模型库,它提供了一系列预训练的深度学习模型,使得研究人员和开发者可以方便地进行图像分类、目标检测等任务。 使用timm库创建模型时,如何确定模型的名字 使用…...

一种基于宏和serde_json实现的rust web中统一返回类

本人rust萌新,写web碰到了这个,基于ChatGPT和文心一言学了宏,强行把这玩意实现出来了,做个学习记录,如果有更好的方法,勿喷。 先看效果,注意不支持嵌套,且kv映射要用>(因为它这个…...

每周一算法:A*(A Star)算法

八数码难题 题目描述 在 3 3 3\times 3 33 的棋盘上,摆有八个棋子,每个棋子上标有 1 1 1 至 8 8 8 的某一数字。棋盘中留有一个空格,空格用 0 0 0 来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局…...

爬虫练习:获取某网站的房价信息

一、相关网站 二、相关代码 import requests from lxml import etree import csv with open(房天下数据.csv, w, newline, encodingutf-8) as csvfile:fieldnames [名称, 地点,价格,总价,联系电话]writer csv.DictWriter(csvfile, fieldnamesfieldnames)writer.writeheader…...

第一个C语言hello world

#include <stdio.h> int main() {printf("hello world ! \n");//打印函数return 0; } "#" : 预处理标志 include <> : 表示预处理的文件在<>内 stdio.h : 标准的io头文件 // io &#xff1a; 输入输出 // printf()…...

【Python】新手入门学习:详细介绍依赖倒置原则(DIP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍依赖倒置原则&#xff08;DIP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、Py…...

嵌入式驱动学习目录索引(更新中)

前言 这是一篇索引博客&#xff0c;用来作为索引记录学习嵌入式Linux的过程&#xff0c;可以用来给自己以及需要的读者作为一个目录索引&#xff0c;每次更新完博客都会添加进该目录中。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度…...

ruoyi-vue插件集成websocket

链接&#xff1a;插件集成 | RuoYi WebSocketServer.java&#xff1a;补充代码 /*** 此为广播消息* param message 消息内容*/public void sendAllMessage(String message) {LOGGER.info("【websocket.sendAllMessage】广播消息:"message);try {for(String sessionI…...

华为ce12800交换机m-lag(V-STP模式)配置举例

配置## 标题思路 采用如下的思路配置M-LAG双归接入IP网络&#xff1a; 1.在Switch上配置上行接口绑定在一个Eth-Trunk中。 2.分别在SwitchA和SwitchB上配置V-STP、DFS Group、peer-link和M-LAG接口。 3.分别在SwitchA和SwitchB上配置LACP M-LAG的系统优先级、系统ID。 4.分别在…...

STM32第九节(中级篇):RCC——时钟树讲解(第一节)

目录 前言 STM32第九节&#xff08;中级篇&#xff09;&#xff1a;RCC——时钟树讲解 时钟树主系统时钟讲解 HSE时钟 HSI时钟 锁相环时钟 系统时钟 SW位控制 HCLK时钟 PCLKI时钟 PCLK2时钟 RTC时钟 MCO时钟输出 6.2.7时钟安全系统(CSS&#xff09; 小结 前言 从…...

c/c++字符串处理标准库 string 介绍

c语言中string.h介绍 C语言的标准库中包含了一个头文件 <string.h>&#xff0c;该头文件提供了一系列字符串处理函数的声明和定义。以下是一些常用的函数&#xff1a; 字符串复制&#xff1a;strcpy(dest, src)。将源字符串 src 复制到目标字符串 dest&#xff0c;包括…...

HarmonyOS NEXT应用开发之深色模式适配

介绍 本示例介绍在开发应用以适应深色模式时&#xff0c;对于深色和浅色模式的适配方案&#xff0c;采取了多种策略如下&#xff1a; 固定属性适配&#xff1a;对于部分组件的颜色属性&#xff0c;如背景色或字体颜色&#xff0c;若保持不变&#xff0c;可直接设定固定色值或…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...