SiLU函数

简介: SiLU(Sigmoid Linear Unit)函数,也称为 Swish 函数,是一种常用于深度学习中的激活函数。它是由 Google 的研究人员提出的,旨在解决 ReLU(Rectified Linear Unit)函数的一些缺点,尤其是在深度网络的训练过程中。

SiLU 函数的定义

SiLU 函数的数学表达式如下:SiLU(x)=x⋅σ(x)

其中:

x 是输入值。
σ(x) 是 Sigmoid 函数,定义为:
σ(x)=11+e−x

SiLU 的特性

平滑性:SiLU 函数比 ReLU 更平滑,因此可以在训练过程中提供更平稳的梯度,避免了 ReLU 函数的死神经元问题(ReLU 函数在输入小于零时梯度为零,这可能导致某些神经元的更新停止)。
非线性:像 Sigmoid 和 Tanh 函数一样,SiLU 是非线性的,这使得它能够处理更复杂的模式。
输出范围:SiLU 的输出是非负的,并且随着输入的增大,输出逐渐增大。SiLU 输出的范围在 [0,+∞)之间,这与 ReLU 类似,但 SiLU 的增长方式比 ReLU 更平滑。
可微性:SiLU 函数在所有点都是可微的,这意味着它不会出现梯度消失问题,能够为深度神经网络提供更加稳定的训练。
SiLU vs ReLU vs Sigmoid

ReLU(Rectified Linear Unit):ReLU(x)=max⁡(0,x)
只对正输入有激活作用,负输入的梯度为 0,可能会导致神经元“死亡”。
Sigmoid:σ(x)=11+e−x
输出范围是 [0,1],通常用于二分类问题的输出层,但在深度神经网络中可能会出现梯度消失问题,导致学习效率较低。
SiLU:SiLU(x)=x⋅σ(x)
结合了 Sigmoid 和线性函数的特性,在深度学习中常被认为是对 ReLU 和 Sigmoid 的改进,能够避免梯度消失,并且在训练深层网络时有更好的性能。
SiLU 的优势

避免死神经元问题:
ReLU 的问题是当输入为负时,输出为零,且无法通过梯度更新,这可能导致“死神经元”现象,即某些神经元在训练过程中不再更新权重。而 SiLU 在负输入时也有非零的输出,使得所有神经元都可以参与训练,避免了这一问题。
平滑的梯度:
SiLU 的导数是平滑的,这意味着它提供了更连续的梯度,可以帮助更好地传播误差,尤其在深层神经网络中训练时,比 ReLU 和 Sigmoid 更稳定。
增加网络的表达能力:
与 ReLU 相比,SiLU 具有更多的非线性,使得它能够学习更复杂的特征。
SiLU 的导数

SiLU 的导数可以通过链式法则求得。首先,SiLU 函数的表达式是:SiLU(x)=x⋅σ(x)

然后,使用乘积的导数公式来求导:ddxSiLU(x)=ddx(x⋅σ(x))

应用乘积法则得到:ddxSiLU(x)=σ(x)+x⋅σ(x)⋅(1−σ(x))

因此,SiLU 的导数为:SiLU′(x)=σ(x)+x⋅σ(x)⋅(1−σ(x))

SiLU 函数的图形

SiLU 函数的图像比 ReLU 更为平滑,且对于负数输入也有非零输出。随着输入的增加,SiLU 的输出会逐渐增大,类似于线性增长。

SiLU 函数的应用

SiLU 函数已经在许多深度学习任务中取得了良好的表现,尤其是在一些复杂的任务(如图像分类、自然语言处理等)中,能够帮助神经网络更好地训练。许多现代的神经网络架构,如 BERT 和 ResNet 等,都采用了类似的激活函数。

在 PyTorch 中使用 SiLU

如果你使用 PyTorch,可以通过 torch.nn.SiLU() 或者直接使用 torch.sigmoid(x) * x 来实现 SiLU 激活函数。

import torch
import torch.nn as nn

定义 SiLU 激活函数

silu = nn.SiLU()

输入张量

x = torch.randn(5)

应用 SiLU 激活

output = silu(x)
print(output)
php
139 Bytes
© 菜鸟-创作你的创作
在 TensorFlow 中使用 SiLU

在 TensorFlow 中,SiLU 函数也可以通过 tf.keras.activations.silu() 来使用:

import tensorflow as tf

输入张量

x = tf.random.normal([5])

应用 SiLU 激活

output = tf.keras.activations.silu(x)
print(output)
php
123 Bytes
© 菜鸟-创作你的创作
总结

SiLU(Swish)是一个平滑且非线性的激活函数,结合了 Sigmoid 和 线性 的优点。它不仅避免了 ReLU 的死神经元问题,还能够提供更平滑的梯度传播,尤其适用于深度神经网络。随着深度学习模型的不断发展,SiLU 已经被越来越多的研究和工程实践所采用。
https://www.52runoob.com/archives/4732

目录
相关文章
|
机器学习/深度学习 人工智能 负载均衡
基于 NVIDIA Megatron-Core 的 MoE LLM 实现和训练优化
本文将分享阿里云人工智能平台 PAI 团队与 NVIDIA Megatron-Core 团队在 MoE (Mixture of Experts) 大型语言模型(LLM)实现与训练优化上的创新工作。
|
4月前
|
机器学习/深度学习 自然语言处理 PyTorch
【笔记】激活函数SiLU和Swish
激活函数 SiLU 和 Swish 都是 深度学习 中用于神经网络中的非线性激活函数,旨在增强模型的表达能力和训练性能。实际上,SiLU(Sigmoid Linear Unit)和 Swish 本质上是同一个激活函数的两种不同名称。
306 0
|
4月前
|
机器学习/深度学习 数据采集 人工智能
基于YOLOv8的太阳能电池片缺陷检测项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
本项目基于YOLOv8与PyQt5开发,专用于太阳能电池片缺陷检测。包含完整源码、数据集、训练教程及可视化界面,支持图片、视频、摄像头等多种输入方式,提供开箱即用的工业质检AI系统,适合快速部署与二次开发。
基于YOLOv8的太阳能电池片缺陷检测项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
|
6月前
|
缓存 自然语言处理 数据挖掘
2025年,ipdodo、stormproxies、PYPROXY、LunaProxy、abcproxy、dataimpulse、proxy cheap这些海外代理用哪家?
随着海外代理IP需求增加,市场上涌现了众多服务商如ipdodo、stormproxies等。然而,这些服务商良莠不齐,语言障碍、时差问题及低效客服机制常让人头疼。
2025年,ipdodo、stormproxies、PYPROXY、LunaProxy、abcproxy、dataimpulse、proxy cheap这些海外代理用哪家?
|
11月前
|
数据采集 人工智能 编解码
书生·万象InternVL 2.5:上海 AI Lab 开源的多模态大语言模型,超越了目前许多商业模型
书生·万象InternVL 2.5是由上海AI实验室OpenGVLab团队推出的开源多模态大语言模型系列。该模型在多模态理解基准(MMMU)上表现优异,超越了许多商业模型,适用于图像和视频分析、视觉问答、文档理解和多语言处理等多个领域。
964 7
书生·万象InternVL 2.5:上海 AI Lab 开源的多模态大语言模型,超越了目前许多商业模型
|
人工智能 监控 数据可视化
基于YOLOv8的边坡排水沟堵塞检测与识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
本项目以YOLOv8为核心,结合PyQt5界面开发,构建了一个专用于边坡排水沟堵塞检测的智能识别系统。从数据标注、模型训练、精度评估,到图形界面部署与多输入方式支持,实现了从0到1的完整AI应用开发流程。
基于YOLOv8的边坡排水沟堵塞检测与识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
|
6月前
|
搜索推荐 测试技术 C语言
NPU适配推荐系统GR模型流程
本示例将开源Generative Recommendations模型迁移至NPU训练,并通过HSTU融合算子优化性能。基于Atlas 800T A2平台,使用PyTorch 2.1.0、Python 3.11.0等环境。文档涵盖容器启动、依赖安装、算子适配、源码修改、数据预处理及配置文件设置等内容。性能测试显示,使用HSTU融合算子可显著降低端到端耗时(如ml_1m数据集单step从346ms降至47.6ms)。
|
机器学习/深度学习 人工智能 算法
基于YOLOv8的钢铁缺陷实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
基于YOLOv8的钢铁缺陷实时检测系统,通过1800张图片训练,开发了带GUI界面的检测系统,支持图片、视频和摄像头实时检测,提高生产效率和产品质量。系统基于Python和Pyside6开发,具备模型权重导入、检测置信度调节等功能。项目代码、数据集可通过特定链接获取。
410 1
基于YOLOv8的钢铁缺陷实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
474 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
数据处理 Python
Python数据转换:从Pandas到NumPy转换
Python数据转换:从Pandas到NumPy转换
344 0