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

激活函数大汇总(十三)(Sinc & SwiGLU附代码和详细公式)

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

一、引言

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

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

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

二、Sinc

Sinc激活函数是一种在信号处理中广泛使用的函数,近年来也被探索用于深度学习模型中。它基于数学中的sinc函数,特别是在处理时间序列数据和频率分析时显示出其独特优势。

1. 数学定义

Sinc激活函数通常定义为:

Sinc ⁡ ( x ) = { 1  if  x = 0 sin ⁡ ( π x ) π x  otherwise  \operatorname{Sinc}(x)= \begin{cases}1 & \text { if } x=0 \\ \frac{\sin (\pi x)}{\pi x} & \text { otherwise }\end{cases} Sinc(x)={1πxsin(πx) if x=0 otherwise 
这里, x x x是激活函数的输入。
在这里插入图片描述

2. 函数特性

  • 振荡和衰减:Sinc函数在 x = 0 x=0 x=0处取得最大值1,并随着 x = 0 x=0 x=0离开原点而振荡衰减。这种特性使得Sinc函数能够捕捉到数据中的周期性和频率信息。
  • 带宽选择:Sinc函数的形状和衰减速度与信号的带宽选择密切相关,这在处理有限带宽信号时非常重要。
  • 非局部性:与大多数激活函数相比,Sinc函数对输入的变化更加敏感,即使是远离原点的输入变化也能影响输出。

3. 导数

Sinc函数的导数是:

d d x Sinc ⁡ ( x ) = { 0  if  x = 0 π x cos ⁡ ( π x ) − sin ⁡ ( π x ) ( π x ) 2  otherwise  \frac{d}{d x} \operatorname{Sinc}(x)= \begin{cases}0 & \text { if } x=0 \\ \frac{\pi x \cos (\pi x)-\sin (\pi x)}{(\pi x)^2} & \text { otherwise }\end{cases} dxdSinc(x)={0(πx)2πxcos(πx)sin(πx) if x=0 otherwise 
导数在 x = 0 x=0 x=0处是连续的,尽管看起来像是未定义。通过洛必达法则,可以证明当 x = 0 x=0 x=0时,导数为0。

4. 使用场景与局限性

使用场景

  • 信号处理:在需要进行频率分析和带宽处理的信号处理应用中,Sinc激活函数能够有效地捕捉信号的周期性和频率特征。
  • 时间序列分析:在分析和预测周期性时间序列数据时,Sinc激活函数可以帮助模型更好地理解数据的频率信息。

局限性

  • 梯度消失:由于Sinc函数远离原点时的振荡衰减,梯度可能变得非常小,导致梯度消失问题。
  • 计算复杂性:Sinc函数涉及三角函数计算,相比于ReLU等简单激活函数,其计算成本更高。

5.代码实现

import numpy as np

def sinc_activation(x):
    """
    计算Sinc激活函数的值。
    
    参数:
    x -- 输入值,可以是数值、NumPy数组或者多维数组。
    
    返回:
    Sinc激活后的结果。
    """
    # 处理x=0的情况,以避免除以0的错误
    x_pi = np.pi * x
    result = np.where(x == 0, 1, np.sin(x_pi) / x_pi)
    return result
解读
  • 处理除以零的情况np.where(x == 0, 1, np.sin(x_pi) / x_pi)这行代码首先检查x是否等于0。对于等于0的情况,直接返回1,这是因为根据Sinc函数的定义,当(x=0)时,函数值为1。
  • Sinc函数计算:对于非零的输入值,函数计算np.sin(x_pi) / x_pi,其中x_pi是输入x乘以π。这实现了Sinc函数的标准定义: Sinc ⁡ ( x ) = sin ⁡ ( π x ) π x \operatorname{Sinc}(x)=\frac{\sin (\pi x)}{\pi x} Sinc(x)=πxsin(πx)
  • 向量化操作:这个实现利用了NumPy的向量化操作能力,允许函数直接作用于整个数组,无需显式循环。这对于在深度学习模型中高效处理大量数据至关重要。
示例使用
# 创建一个从-10到10的数组
x = np.linspace(-10, 10, 100)
# 计算Sinc激活值
y = sinc_activation(x)

# 使用Matplotlib绘制结果
import matplotlib.pyplot as plt

plt.plot(x, y)
plt.title("Sinc Activation Function")
plt.xlabel("x")
plt.ylabel("Sinc(x)")
plt.grid(True)
plt.show()

这段代码演示了如何计算一系列输入值的Sinc激活,并使用Matplotlib绘制了Sinc函数的图像。

三、SwiGLU

SwiGLU (Swish Gated Linear Unit) 激活函数是深度学习中的一种激活函数,结合了Swish激活函数和GLU (Gated Linear Unit) 的特性。SwiGLU 旨在利用Swish的平滑非饱和性质和GLU的动态门控能力,提高模型在处理复杂数据时的表现力。尽管“SwiGLU”并非广泛认知的标准术语,这里的介绍基于其构成元素的理论基础。

1. 数学定义

考虑到SwiGLU的概念是基于Swish和GLU的结合,它的定义可能类似于:

SwiGLU ⁡ ( a , b ) = Swish ⁡ ( a ) ⊙ σ ( b ) \operatorname{SwiGLU}(a, b)=\operatorname{Swish}(a) \odot \sigma(b) SwiGLU(a,b)=Swish(a)σ(b)
其中:

  • a a a b b b是相同维度的输入向量。
  • Swish ⁡ ( a ) = a ⋅ σ ( a ) \operatorname{Swish}(a)=a \cdot \sigma(a) Swish(a)=aσ(a) σ ( a ) = 1 1 + e − a \sigma(a)=\frac{1}{1+e^{-a}} σ(a)=1+ea1是Sigmoid函数。
  • ⊙ \odot 表示元素乘法。
  • σ ( b ) \sigma(b) σ(b) 是对输入(b)应用Sigmoid激活函数。
    在这里插入图片描述

2. 函数特性

  • 自适应门控机制:通过 σ ( b ) \sigma(b) σ(b) a a a的Swish激活提供动态门控,使模型可以根据数据自适应地调整信息流。
  • 平滑激活:结合Swish激活函数的平滑性,SwiGLU既能捕获深层网络中的复杂特征,又能保持较好的梯度流动。
  • 增强的非线性和表现力:通过Swish和门控机制的结合,SwiGLU能够为深度学习模型提供强大的非线性表现力。

3. 导数

SwiGLU的导数结合了Swish函数和Sigmoid门控的导数,具体表达式较为复杂,需要通过链式法则计算。

4. 使用场景与局限性

使用场景

  • 复杂数据建模:在需要模型理解和处理具有复杂结构和关系的数据时,如自然语言处理(NLP)和图像识别。
  • 深度网络:在构建深层网络模型时,SwiGLU的非饱和特性和门控机制有助于缓解梯度消失问题,提升训练效果。

局限性

  • 计算开销:SwiGLU的计算相比简单的激活函数更为复杂,可能增加模型的训练时间和资源消耗。
  • 优化难度:高度非线性和动态门控机制可能使得模型参数的优化变得更加困难,需要细致的调参和足够的训练数据。

5.代码实现

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def swish(x):
    return x * sigmoid(x)

def swiglu(a, b):
    """
    
    参数:
    a -- 输入值,可以是数值、NumPy数组或者多维数组。
    b -- 用于门控的输入,维度应与a相同。
    
    返回:
    根据SwiGLU激活机制处理后的结果。
    """
    return swish(a) * sigmoid(b)
解读
  • Swish激活swish(a)对输入(a)应用Swish激活函数,这部分是通过输入(a)和它的Sigmoid激活值相乘来实现的,有助于引入非线性并保持梯度流动良好。
  • Sigmoid门控sigmoid(b)为输入(b)应用Sigmoid函数,生成一个介于0和1之间的门控信号。这个信号决定了经过Swish激活的(a)有多少信息可以流过。
  • 元素乘法:最终通过将swish(a)的结果和sigmoid(b)的结果相乘,实现了SwiGLU激活。这样,(a)的每个元素都会根据(b)中对应元素的门控信号被调节。
示例使用
# 示例输入
a = np.array([0.5, -1, 2, -2])
b = np.array([1, -1, 0, 2])

# 应用SwiGLU激活函数
output = swiglu(a, b)

print("SwiGLU Output:", output)

这个例子展示了如何对两组输入ab应用SwiGLU激活函数。

四、参考文献

  • Oppenheim, A. V., & Schafer, R. W. (1975). “Digital Signal Processing.” Prentice-Hall. 这本书详细介绍了数字信号处理的基本概念,包括Sinc函数的使用和其在信号重建中的重要性。

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

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

相关文章

【PTA+LeetCode】递归----代码练习

递归学习博客:博客地址 1.递归实现指数函数 double calc_pow( double x, int n ){//1.确定退出条件//2.找等价关系式if(n1){return x;}return x*calc_pow(x,n-1); }2.递归计算Ackermenn函数 int Ack( int m, int n ){//1.确定退出条件//2.确定关系式if(m0){return …

2.2 HTML5保留的常用标签

2.2.1 基础标签 1. 段落标签<p> 段落标签<p>和</p>用于形成一个新的段落&#xff0c;段落与段落之间默认为空一行进行分割。 2. 标题标签<h1>-<h6> HTML5使用<hn>和</hn>来标记文本中的标题&#xff0c;其中n需要替换为数字&#x…

R语言数据挖掘-关联规则挖掘(1)

一、分析目的和数据集描述 要分析的数据是美国一区域的保险费支出的历史数据。保险费用数据表的每列分别为年龄、性别、体重指数、孩子数量、是否吸烟、所在区域、保险收费。 本文的主要目的是分析在年龄、性别、体重指数、孩子数量、是否吸烟、所在区域中这些因素中&#xf…

第二十四节 Java 异常处理

什么是异常&#xff1f; 程序运行时&#xff0c;发生的不被期望的事件&#xff0c;它阻止了程序按照程序员的预期正常执行&#xff0c;这就是异常。异常发生时&#xff0c;是任程序自生自灭&#xff0c;立刻退出终止&#xff0c;还是输出错误给用户&#xff1f;或者用C语言风格…

WordPress网站启用cloudflare的CDN加速后,网站出现多重定向无法访问

这是一个使用Hostease的Linux虚拟主机的客户反馈的问题&#xff0c;Hostease的虚拟主机使用的也是cPanel面板&#xff0c;客户使用的是cPanel的softaculous安装的WordPress&#xff0c;但是在安装完成后&#xff0c;并且解析了域名之后&#xff0c;发现网站无法访问&#xff0c…

编译原理学习之-一个简单的语法制导翻译器

第二章 一个简单的语法制导翻译器 将具有代表性的程序设计语言语句翻译为三地址码&#xff08;一种中间表示形式&#xff09;&#xff0c;本章的重点是编译器的前端&#xff0c;特别是词法分析&#xff0c;语法分析和中间代码生产。 建立一个中缀算术表达式转换为后缀表达式的…

3.3 ss-sp寄存器,栈的push和pop指令

汇编语言 1. 栈 栈是一种具有特殊的访问方式的存储空间它的特殊性就在于&#xff0c;最后进入这个空间的数据&#xff0c;最先出去。即先进后出 1.1 栈的基本操作 入栈&#xff1a;入栈就是将一个新的元素放到栈顶出栈&#xff1a;出栈就是从栈顶取出一个元素栈顶的元素总是…

【计算机视觉】二、图像形成:2、几何基元和几何变换:2D变换

文章目录 一、向量和矩阵的基本运算二、几何基元和变换1、几何基元(Geometric Primitives)2、几何变换(Geometric Transformations)1. 各种变换的关系2. 变换公式3. 2D变换的层次4. python实现 一、向量和矩阵的基本运算 【计算机视觉】二、图像形成&#xff1a;1、向量和矩阵…

工业物联网平台在水务环保、暖通制冷、电力能源等行业的应用

随着科技的不断发展&#xff0c;工业物联网平台作为连接物理世界与数字世界的桥梁&#xff0c;正逐渐成为推动各行业智能化转型的关键力量。在水务环保、暖通制冷、电力能源等行业&#xff0c;工业物联网平台的应用尤为广泛&#xff0c;对于提升运营效率、降低能耗、优化管理等…

【C++设计模式】UML图的介绍及其画法

文章目录 前言一、UML图的介绍1.1 UML图是什么1.2 UML图的作用 二、UML图的画法2.1 最简单的UML图2.2 继承的UML图2.3 关联关系2.4 聚合关系2.5 组合关系2.6 依赖关系 总结 前言 在软件开发过程中&#xff0c;设计模式是一种被广泛应用的方法&#xff0c;它为解决特定问题提供…

利用数据驱动的MEG分析方法提取fMRI静息态网络

摘要 静息态网络(RSN)的电生理基础仍存在争议。特别是&#xff0c;尚未确定一个能够同样有效解释所有静息态网络的原理性机制。虽然脑磁图(MEG)和脑电图(EEG)是确定RSN电生理基础的首选方法&#xff0c;但目前没有标准的RSN分析流程。本文比较了从MEG数据中提取RSNs的两种现有…

Profinet转CC-Link网关操作技巧及功能

Profinet转CC-Link网关&#xff08;XD-PNCR20&#xff09;是一款可有效连接CCLINK总线和Profinet网络的通讯网关。Profinet转CC-Link网关主要功能是将各种CCLINK总线和Profinet网络连接起来&#xff0c;实现各种总线的互联通信。 Profinet转CC-Link网关连接到Profinet总线中做…

电源常用通讯电路详解

数字电源的采样和PWM驱动电路原理&#xff0c;通过这些技术&#xff0c;数字电源可以在内部形成控制闭环。但是要实现电源的控制和管理&#xff0c;还是需要与数字控制核心建立通讯连接。本期将带领大家了解数字电源常用的通讯电路。 一、常用的通讯方式 在前面数字电源与模拟…

Could not transform the global plan to the frame of the controller

报错&#xff1a; [ERROR] [1710509295.679888409, 296.695000000]: Extrapolation Error: Lookup would require extrapolation 0.003000000s into the future. Requested time 295.747000000 but the latest data is at time 295.744000000, when looking up transform from…

详解C++运算符重载

目录 运算符重载 1.运算符重载概念的回顾 2. 运算符重载 3. < 运算符重载 4. 赋值运算符 4.1赋值运算符和拷贝构造的区别 4.2赋值运算符重载格式 4.3 默认赋值重载 运算符重载 1.运算符重载概念的回顾 C为了增强代码的可读性引入了运算符重载&#xff0c;运…

力扣题目训练(21)

2024年2月14日力扣题目训练 2024年2月14日力扣题目训练605. 种花问题617. 合并二叉树628. 三个数的最大乘积289. 生命游戏299. 猜数字游戏149. 直线上最多的点数 2024年2月14日力扣题目训练 2024年2月14日第二十一天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;…

fortran,进坟墓了吗?新型快速开发工具突现,该何去何从?

在C、Python等流行语言风头正劲的时候&#xff0c;Fortran对于新一代开发者而言&#xff0c;却显得陌生甚至闻所未闻。 然而&#xff0c;Fortran作为计算机领域首个被广泛推广的高级语言&#xff0c;自1956年诞生至今已逾60载&#xff0c;承载着无数程序员的青春记忆。 在许多…

蓝桥杯 - 大石头的搬运工 C++ 前缀和 算法 附Java python

题目 思路和解题方法 这段代码的目标是计算给定点集的最小总移动成本&#xff0c;使得所有点都在同一直线上。它通过计算每个点左边和右边的移动成本&#xff0c;然后在所有可能的分割点中选择最小成本。具体步骤如下&#xff1a; 读取输入的点集&#xff0c;每个点表示为 (y, …

十三、项目相关方管理

十三、项目相关方管理 1、项目相关方管理 ​ 识别相关方是定期识别相关项目方&#xff0c;分析和记录他们的利益、参与度、相互依赖性、影响力和对项目成功的潜在影响的过程。 ** 1.1 关键技术 数据表现 相关方分析会产品相关方清单和关于相关方的各种信息&#xff0c;例如…

【机器学习】走进监督学习:构建智能预测模型的第一步

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…