激活函数 05 ——Swish

Swish背景


发展阶段典型函数主要特性局限性
早期阶段Sigmoid/Tanh平滑可导,输出有界梯度消失问题
现代阶段ReLU计算高效,缓解梯度消失神经元死亡现象
改进阶段LeakyReLU改善负区间响应参数敏感性
新星阶段Swish/GELU自适应非线性计算复杂度略高

Swish激活函数由Google Brain团队在2017年首次提出,论文:PDF

Swish ( x ) = x ⋅ σ ( β x ) \text{Swish}(x) = x \cdot \sigma(\beta x) \quad Swish(x)=xσ(βx)
其中  σ ( z ) = 1 1 + e − z \text{其中} \ \sigma(z) = \frac{1}{1+e^{-z}} 其中 σ(z)=1+ez1

原始版本中 β=1,后续研究发现可训练参数β能获得更好效果。该函数结合了ReLU的线性响应特性和Sigmoid的平滑特性。建议从固定 β=1 开始,当模型参数量>1M时考虑可训练参数版本。

函数形态

令β=1时的函数形态:

  • 正区间 lim ⁡ x → + ∞ Swish ( x ) = x \lim_{x→+\infty}\text{Swish}(x)=x limx+Swish(x)=x(与ReLU渐近一致)
  • 负区间 lim ⁡ x → − ∞ Swish ( x ) = 0 \lim_{x→-∞}\text{Swish}(x)=0 limxSwish(x)=0(保留有限梯度)
  • 原点特性 Swish ( 0 ) = 0 ⋅ σ ( 0 ) = 0 \text {Swish}(0) = 0·σ(0) = 0 Swish(0)=0σ(0)=0
  • 非单调性:在 x ∈ ( − 1.278 , 0 ) x∈(-1.278, 0) x(1.278,0) 区间呈现局部极小值

在这里插入图片描述

d d x Swish ( x ) = σ ( x ) + x ⋅ σ ( x ) ( 1 − σ ( x ) ) = σ ( x ) ( 1 + x − x σ ( x ) ) = Swish ( x ) + σ ( x ) ( 1 − Swish ( x ) ) \begin{aligned} \frac{d}{dx}\text{Swish}(x) &= \sigma(x) + x \cdot \sigma(x)(1-\sigma(x)) \\ &= \sigma(x)(1 + x - x\sigma(x)) \\ &= \text{Swish}(x) + \sigma(x)(1 - \text{Swish}(x)) \end{aligned} dxdSwish(x)=σ(x)+xσ(x)(1σ(x))=σ(x)(1+xxσ(x))=Swish(x)+σ(x)(1Swish(x))

导数特性:最大梯度值约为1.099,出现在x≈1.0处;负区间保持非零梯度(解决ReLU死亡问题);梯度曲线二阶可导,有利于高阶优化方法

参数化Swish变体

后续研究提出可训练参数版本:

Swish β ( x ) = x ⋅ σ ( β x ) \text{Swish}_β(x) = x \cdot \sigma(\beta x) Swishβ(x)=xσ(βx)

通过反向传播自动学习β参数,实验显示在图像分类任务中β常收敛到区间 [ 1.0 , 1.5 ] [1.0,1.5] [1.0,1.5]

适合场景

深层网络:尤其适合50层以上的深度架构
低初始化场景:对参数初始化敏感性低于ReLU
长期训练:在超过100epoch的训练中优势更明显

计算开销:相比ReLU增加约15%的计算量
硬件优化:需要开启自动混合精度训练(AMP)
初始化策略:建议配合He正态初始化

Pytorch实现

import torch
import torch.nn as nnclass Swish(nn.Module):def forward(self, x):return x * torch.sigmoid(x)

自动求导特性实现内存高效

class MemoryEfficientSwish(nn.Module):class F(torch.autograd.Function):@staticmethoddef forward(ctx, x):ctx.save_for_backward(x)return x * torch.sigmoid(x)@staticmethoddef backward(ctx, grad_output):x = ctx.saved_tensors[0]sigmoid_x = torch.sigmoid(x)return grad_output * (sigmoid_x * (1 + x * (1 - sigmoid_x)))def forward(self, x):return self.F.apply(x)

参数化

class ParametricSwish(nn.Module):def __init__(self, beta=1.0, trainable=True):super().__init__()self.beta = nn.Parameter(torch.tensor(beta), requires_grad=trainable)def forward(self, x):return x * torch.sigmoid(self.beta * x)

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

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

相关文章

Tria Technologies RFSoC 平台 - 入门指南

Tria Technologies RFSoC 平台 - 入门指南 适用于 RFSoC Gen-3 的宽带毫米波无线电开发平台 该平台将 Otava 和 Avnet 联合开发的 Otava DTRX2 双收发器毫米波无线电卡与 AMD Xilinx Zynq UltraScale ™ RFSoC ZCU208 评估套件相结合。 5G 毫米波相控阵天线模块开发平台 …

Win11下搭建Kafka环境

目录 一、环境准备 二、安装JDK 1、下载JDK 2、配置环境变量 3、验证 三、安装zookeeper 1、下载Zookeeper安装包 2、配置环境变量 3、修改配置文件zoo.cfg 4、启动Zookeeper服务 4.1 启动Zookeeper客户端验证 4.2 启动客户端 四、安装Kafka 1、下载Kafka安装包…

白嫖RTX 4090?Stable Diffusion:如何给线稿人物快速上色?

大家都知道,在设计的初期,我们通常会先绘制草图,然后再进行上色处理,最终才开始进行最终的设计工作。在这个上色的过程中,配色是至关重要的一环。这不仅方便了内部同事的评审,也让产品方和客户可以直观地了…

从大规模恶意攻击 DeepSeek 事件看 AI 创新隐忧:安全可观测体系建设刻不容缓

作者:羿莉(萧羿) 全球出圈的中国大模型 DeepSeek 作为一款革命性的大型语言模型,以其卓越的自然语言处理能力和创新性成本控制引领行业前沿。该模型不仅在性能上媲美 OpenAI-o1,而且在推理模型的成本优化上实现了突破…

AMD 8845HS 780M核显部署本地deepseek大模型的性能

测试了一下笔记本电脑AMD 8845HS的780M核显是否能本地部署deepseek大模型。 测试软件环境:LM Studio 0.3.9 、Windows 11 24H2 硬件:荣耀X16笔记本 CPU:AMD 8845HS 显卡:780M核显,显存为共享内存自动分配模式&…

利用二分法进行 SQL 盲注

什么是sql注入? SQL 注入(SQL Injection)是一种常见的 Web 安全漏洞,攻击者可以通过构造恶意 SQL 语句来访问数据库中的敏感信息。在某些情况下,服务器不会直接返回查询结果,而是通过布尔值(Tr…

《深度学习》——pytorch框架及项目

文章目录 pytorch特点基本概念 项目项目实现导入所需库下载训练数据和测试数据对训练和测试样本进行分批次展示手写图片判断pytorch是否支持GPU定义神经网络模型定义训练函数定义测试函数创建交叉熵损失函数和优化器通过多轮训练降低损失值得到最终结果注意 pytorch PyTorch 是…

【批量获取图片信息】批量获取图片尺寸、海拔、分辨率、GPS经纬度、面积、位深度、等图片属性里的详细信息,提取出来后导出表格,基于WPF的详细解决方案

摄影工作室通常会有大量的图片素材,在进行图片整理和分类时,需要知道每张图片的尺寸、分辨率、GPS 经纬度(如果拍摄时记录了)等信息,以便更好地管理图片资源,比如根据图片尺寸和分辨率决定哪些图片适合用于…

windows生成SSL的PFX格式证书

生成crt证书: 安装openssl winget install -e --id FireDaemon.OpenSSL 生成cert openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes -subj "/CN=localhost" 转换pfx openssl pkcs12 -export -out certificate.pfx…

UnityShader学习笔记——高级纹理

——内容源自唐老狮的shader课程 目录 1.立方体纹理 1.1.概念 1.2.用处 1.3.如何采样 1.4.优缺点 2.天空盒 2.1.概念 2.2.优点 2.3.设置 3.动态生成立方体纹理 3.1.原因 3.2.实现 3.3.代码运行中生成 4.反射 4.1.原理 4.2.补充知识 5.折射 5.1.原理 5.2.菲涅…

IBM服务器刀箱Blade安装Hyper-V Server 2019 操作系统

案例:刀箱某一blade,例如 blade 5 安装 Hyper-V Server 2019 操作系统(安装进硬盘) 刀箱USB插入安装系统U盘,登录192.168... IBM BlandeCenter Restart Blande 5,如果Restart 没反应,那就 Power Off Blade 然后再 Power On 重启后进入BIOS界面设置usb存储为开机启动项 …

C++20新特性

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 C20 是 C 标准中的一个重要版本,引入了许多新特性和改进,包括模块(Modules)、协程…

WPS如何接入DeepSeek(通过JS宏调用)

WPS如何接入DeepSeek 一、文本扩写二、校对三、翻译 本文介绍如何通过 WPS JS宏调用 DeepSeek 大模型,实现自动化文本扩写、校对和翻译等功能。 一、文本扩写 1、随便打开一个word文档,点击工具栏“工具”。 2、点击“开发工具”。 3、点击“查看代码”…

【SQL server】关于SQL server彻底的卸载删除。

1.未彻底卸载删除SQL Server会出现的问题 如果没有彻底删除之前的SQL server,就可能会出现这个 当要安装新的实例的时候因为之前安装过sql server没有删除干净而导致下图问题,说实例名已经存在。 2.首先要先关闭服务 “开始R”可以快速进入运行&#…

对话框补充以及事件处理机制 (2025.2.10)

作业 1> 将鼠标事件和键盘事件相关代码重新实现一遍 2> 将文本编辑器功能完善 主函数main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 头…

企业级Mysql实战

Mysql企业级sql编写实战 1 一对多&#xff0c;列表展示最新记录字段1.1 场景1.2 需求1.3 实现1.3.1 表及数据准备1.3.2 Sql编写 2 区间统计&#xff08;if/case when&#xff09;2.1 场景2.2 需求2.3 实现2.2.1 表及数据准备2.3.2 sql编写 3 多类别分组统计&#xff08;竖表转横…

C语言基础第04天:数据的输出和输出

C语言基础:04天笔记 内容提要 回顾C语言数据的输入输出 回顾 运算符 算术运算符 结果:数值 - * / % (正) -(负) -- i和i 相同点:i自身都会增1 不同点:他们运算的最终结果是不同的. i先使用 ,后加1; i先计算,后使用 赋值运算符 结果:赋值后的变量的值 赋值顺序:由右…

DeepSeek训练成本与技术揭秘

引言&#xff1a;在当今人工智能蓬勃发展的时代&#xff0c;DeepSeek 宛如一颗耀眼的新星&#xff0c;突然闯入大众视野&#xff0c;引发了全球范围内的热烈讨论。从其惊人的低成本训练模式&#xff0c;到高性能的模型表现&#xff0c;无一不让业界为之侧目。它打破了传统认知&…

数组与指针1

1. 数组名的理解 1.1 数组名是数组首元素的地址 int arr[10] {1,2,3,4,5,6,7,8,9,10};int *p &arr[0]; 这里我们使用 &arr[0] 的方式拿到了数组第一个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;而且是数组首元素的地址。如下&#xff1a; 1.2…

Axure原型图怎么通过链接共享

一、进入Axure 二、点击共享 三、弹出下面弹框&#xff0c;点击发布就可以了 发布成功后&#xff0c;会展示链接&#xff0c;复制即可共享给他人 四、发布失败可能的原因 Axure未更新&#xff0c;首页菜单栏点击帮助选择Axure更新&#xff0c;完成更新重复以上步骤即可