【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提供了背景知识。

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

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

相关文章

学生时期学习资源同步-1 第一学期结业考试题4

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载

PBKDF2算法:保障密码安全的利器

title: PBKDF2算法:保障密码安全的利器 date: 2024/3/14 16:40:05 updated: 2024/3/14 16:40:05 tags: PBKDF2算法密码安全性迭代盐值密钥 PBKDF2算法起源: PBKDF2(Password-Based Key Derivation Function 2)算法是一种基于密码…

如何理解闭包

闭包是编程语言中一个重要的概念,特别是在函数式编程中常常会遇到。以下是对闭包的理解: 1. 定义: 闭包是一种函数,它引用了在其定义范围之外的自由变量(非全局变量),并且这些引用的变量在函数…

pip 配置镜像加速安装

在使用pip安装Python第三方库时,默认是使用pip官网的非常慢,可通过配置国内镜像源加速下载速度,以下是如何使用国内镜像源安装Python库的两种常见方式: 临时使用镜像源安装 如果你只是想临时使用某个镜像源安装单个或几个库&…

基于UE官方像素实现的像素流部署程序

写了很多像素流部署的技术文章,但因为大部分做UE的研发人员对于前端都不太熟悉,很难里面NodeJS中的官方像素流插件的使用。为此,我花了两天时间对官方像素流程序进行大量优化,支持以下特性。 单程序,支持windows和linux,无任何其他第三方依赖,双击即可运行完成像素流部署…

string接口[小白理解篇]

作文目的 本文是为了加深对string底层函数的一点理解(请勿与底层源码混为一谈),下面从模拟与注意项出发。 一.string 功能化模拟 1.迭代器模拟 迭代器,为实现简单便理解故使用指针的方式(非说明迭代器使用该方法实现)。其中的begin、end都是为了给迭代…

LVGL移植到ARM开发板(GEC6818开发板)

LVGL移植到ARM开发板(GEC6818开发板) 一、LVGL概述 LVGL(Light and Versatile Graphics Library)是一个开源的图形用户界面库,旨在提供轻量级、可移植、灵活和易于使用的图形用户界面解决方案。 它适用于嵌入式系统…

MySQL 系统变量查看与设置(System Variables Configuration)

MySQL中有大量的系统变量控制服务器的行为,大部分的系统变量是不需要我们调整的,保持默认即可。但为了获得更高的性能和稳定性,有时需要适当对部分变量进行调整,本文总结了MySQL中系统变量的查看与设置方法。 目录 一、变量的类型…

整数序列删除指定数字,其他数顺序不变

#include <stdio.h>//整数序列删除一个数&#xff0c;其他数顺序不变 int main() {int arr[50] {0};//int arr[50] {1,2,3,4,5};int n 0;int del 0;int i 0;int j 0;scanf("%d",&n);for(i 0;i < n;i)scanf("%d",&arr[i]);scanf(&q…

未来城市:数字孪生技术助力智慧城市构建

目录 一、数字孪生技术的兴起与定义 二、数字孪生技术在智慧城市构建中的应用 1、城市规划与管理 2、智慧交通 3、智慧能源 4、智慧环保 三、数字孪生技术助力智慧城市构建的挑战与对策 四、结语 随着科技的飞速发展&#xff0c;未来城市正在经历一场前所未有的变革。数…

Maven简单入门

Maven 一&#xff1a;什么是Maven&#xff1a; Maven是一个项目管理工具&#xff0c;用于构建和管理Java项目。它可以帮助开发人员自动化构建过程&#xff0c;管理项目依赖关系&#xff0c;并协助项目的发布和部署。通过Maven&#xff0c;开发人员可以定义项目的结构、依赖关…

C语言例3-11:使用算术运算符的例子。

代码如下&#xff1a; int main(void) {int a12, b10;float c2.0, d0.5;double e6.5, f13.0;printf("-a %d\n",-a);printf("ab %d\n",ab);printf("a-b %d\n",a-b);printf("a*b %d\n",a*b);printf("a/b %d\n"…

SE园区综合实验(未补齐版)

实验要求&#xff1a; 1.局域网存在vlan10和vlan20两个业务vlan&#xff0c;ip网段分别对应192.168.1.0/24和192.168.2.0/24 2.业务vlan可以在所有链路上传输数据 3.sw1和sw2之间的直连链路上配置静态链路聚合实现链路冗余&#xff0c;并提高链路带宽 4.sw3为某接入点二次交…

SpringBoot 项目整合xxl-job

一、简介 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。要想在SpringBoot 项目中接入到XXL-JOB中进行分布式定时任务处理&#xff0c;可以参考官方文档: https://www.xuxueli.com/xxl-job/ 二、下载并部署调度中心 2.1…

【LeetCode】84. 柱状图中最大的矩形(困难)——代码随想录算法训练营Day60

题目链接&#xff1a;84. 柱状图中最大的矩形 题目描述 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,…

msfconsole数据库连接不了的问题【已解决】

msfconsole数据库连接 1.msf数据库端口 msf使用的是postgresql&#xff0c;这个数据库默认端口是5432 单个模块的使用可以不需要数据库&#xff0c;但是模块与模块之间需要沟通的时候就会用到数据库。 2.查看msf数据库连接状态 db_status #msf内部查看systemctl status p…

HTML视频笔记

学习arm开发板&#xff0c;涉及到网页HTML PHP什么的&#xff0c;简单看个视频学习下 HTML&#xff5c;超简单HTML入门教程 https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element ​​​​​​vscode需要的libc6等需要的版本高​​​​​​ 为了安装vscode&#xff0c;将…

Spring Cloud Alibaba微服务从入门到进阶(四)(服务发现-Nacos )

Nacos是服务发现组件和配置服务器 作为服务发现注册组件Nacos Server 搭建Nacos Server 下载、启动 访问nacos,默认 用户/密码 nacos/nacos 将应用注册到nacos 加依赖 在SpringCloud子项目中&#xff0c;Feign是属于OpenFeign&#xff0c;Sentinel、Nacos是属于alibaba的&…

FX110网:1月美国零售货币资金环比上升2.61%,嘉盛环比上升1.86%

美国商品期货交易委员会&#xff08;CFTC&#xff09;发布的最新月度报告显示&#xff0c;2024年1月零售货币存款与上月相比上升2.61%。 这份报告涵盖在美国运营的注册零售货币对交易商&#xff08;RFED&#xff09;和经纪自营商。包括嘉信理财&#xff08;CHARLES SCHWAB Futu…

【安装mysql】centos7 安装mysql

文章目录 1.卸载不用的环境2.获取mysql官方yum源3.开始安装4.常规登录4.1方法一&#xff1a;【博主可以】4.2方法二&#xff1a;直接用client登录4.3方法三&#xff1a;修改配置文件 5.设置配置文件5.1配置my .cnf5.2开机自启动 1.卸载不用的环境 查看有无mysql/mariadb ps ax…