神经网络常见激活函数 8-SELU函数

SELU

  • 缩放指数线性单元:SELU(Scaled Exponential Linear Unit)

函数+导函数

  • SELU函数
    S E L U ( x ) = { λ x x > 0 λ α ( e x − 1 ) x ≤ 0 \rm SELU(x) = \left\{ \begin{array}{} \lambda x \quad & x > 0 \\ \lambda \alpha (e^x - 1) \quad & x \le 0 \end{array} \right. SELU(x)={λxλα(ex1)x>0x0

  • SELU函数导数
    d d x S E L U ( x ) = { λ x > 0 λ α e x x ≤ 0 \frac{d}{dx} \rm SELU(x) = \left\{ \begin{array}{} \lambda \quad & x > 0 \\ \lambda \alpha e^x \quad & x \le 0 \end{array} \right. dxdSELU(x)={λλαexx>0x0
    其中, λ \lambda λ α \alpha α 是预先定义的常数,通常取值 为
    λ ≈ 1.0507 α ≈ 1.6732 \lambda \approx 1.0507 \\ \alpha \approx 1.6732 λ1.0507α1.6732


函数和导函数图像

  • 画图

    下面代码中的scale对应 λ \lambda λ, alpha 对应 α \alpha α

    import numpy as np
    from matplotlib import pyplot as plt# 定义 SELU 函数
    def selu(x, alpha=1.6732, scale=1.0507):return scale * np.where(x > 0, x, alpha * (np.exp(x) - 1))# 定义 SELU 的导数
    def selu_derivative(x, alpha=1.6732, scale=1.0507:return scale * np.where(x > 0, 1, alpha * np.exp(x))# 生成数据
    x = np.linspace(-2, 2, 1000)
    y = selu(x)
    y1 = selu_derivative(x)# 绘制图形
    plt.figure(figsize=(12, 8))
    ax = plt.gca()
    plt.plot(x, y, label='SELU')
    plt.plot(x, y1, label='Derivative')
    plt.title('SELU and Derivative')# 设置上边和右边无边框
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')# 设置 x 坐标刻度数字或名称的位置
    ax.xaxis.set_ticks_position('bottom')# 设置边框位置
    ax.spines['bottom'].set_position(('data', 0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))plt.legend(loc=2)
    plt.show()
    

    SELU


优缺点

  • SELU函数针对ReLU函数的改进
    1. 当其中参数 $\lambda \approx 1.0507 ,\alpha \approx 1.6732 $ 时候,在网络权重服从正态分布的条件下,各层输出的分布会向标准正太分布靠拢。这种【自我标准化】的特性可以避免梯度消失和爆炸。
    2. SELU激活函数是在自归一化网络中定义的,通过调整均值和方差来实现内部的归一化,这种内部归一化比外部归一化更快,这使得网络收敛的更快。
    3. SELU是给ELU乘上一个系数,该系数大于 1 。在这篇paper Self-Normalizing Neural Networks中,作者提到,SELU可以使得输入在经过一定层数之后变为固定的分布。以前的 ReLU,P-ReLU,ELU等激活函数都是在负半轴坡度平缓,这样在激活的方差过大时可以让梯度减小,防止了梯度爆炸,但是在正半轴其梯度简答的设置为了 1 。而 SELU的正半轴大于 1 ,在方差过小的时候可以让它增大,但是同时防止了梯度消失。这样激活函数就有了一个不动点,网络深了之后每一层的输出都是均值为 0 ,方差为 1 。
  • SELU 的优点

    1. 自归一化:SELU具有自归一化特性,能够自动调整网络中的激活值,使其均值和方差保持稳定。这有助于避免梯度爆炸和梯度消失问题。
    2. 解决“死亡ReLU”问题:与ReLU不同,SELU允许负输入,并通过参数α对其进行缩放,确保所有输入都对模型有贡献。
    3. 加速收敛:SELU通常能够更快地收敛,并在训练的早期阶段实现更好的准确率。
    4. 减少对批量归一化的依赖:由于SELU的自归一化特性,它减少了对批量归一化的需求,从而简化了模型结构。
    5. 适用于多种任务:SELU可以用于多分类和二分类任务,并且在深度神经网络中表现出色。
  • SELU 的缺点

    1. 对权重初始化敏感:SELU需要特定的权重初始化方法(LeCun正态初始化)才能发挥最佳效果。其他初始化方法可能会导致性能下降。
    2. 计算复杂度较高:SELU的指数运算比ReLU及其变体更复杂,计算成本更高。
    3. 资源有限:SELU不如ReLU广泛使用,这可能会使寻找基于SELU的架构的库或资源更具挑战性。
    4. 可能的过拟合风险:在某些情况下,SELU可能会导致模型过拟合,尤其是在数据集较小或模型复杂度较高时。

pytorch中的SELU函数

  • 代码

    import torch# 定义 SELU 函数
    f = torch.nn.SELU()  # PyTorch 提供的 SELU 激活函数模块
    x = torch.randn(2)   # 生成一个随机张量作为输入selu_x = f(x)        # 应用 SELU 函数print(f"x: \n{x}")
    print(f"selu_x:\n{selu_x}")"""输出"""
    x: 
    tensor([ 0.1895, -0.8333])
    selu_x:
    tensor([ 0.1991, -0.9940])
    

tensorflow 中的SELU函数

  • 代码

    python: 3.10.9

    tensorflow: 2.18.0

    import tensorflow as tf# 创建 SELU 激活函数
    selu = tf.keras.activations.selu# 生成随机输入
    # x = tf.random.normal([2])
    x = x = [ 0.1895, -0.8333]# 应用 SELU 激活函数
    selu_x = selu(x)print(f"x: \n{x}")
    print(f"selu_x:\n{selu_x}")"""输出"""
    x: 
    [0.1895, -0.8333]
    selu_x:
    [ 0.19910784 -0.99400705]
    

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

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

相关文章

【Elasticsearch】多字段查询方式汇总

在 Elasticsearch 中,实现多字段查询的常见方式有以下几种,每种方式适用于不同的场景: --- ### 1. **multi_match 查询** - **用途**:在多个字段中执行同一查询,支持多种匹配策略。 - **关键参数**&#xff1a…

多线之旅:wait 与 notify

今天小编继续来分享下多线程中的一些内容。 在多线程环境下,由于线程调度的不确定性,所以我们有时候无法很好的去保证其线程的执行顺序。 但是呢,我们又要实现这个顺序执行,所以我们可以使用到这两个方法,wait 和 no…

批量修改mysql字符串字段子字符串

替换子字符串 使用 REPLACE 函数替换字段中的特定子字符串。 示例: 将 table_name 表中 column_name 字段的所有 old_value 替换为 new_value。 UPDATE table_name SET column_name REPLACE(column_name, old_value, new_value) WHERE column_name LIKE %old_val…

达梦:AWR 生成

目录标题 AWR 性能诊断与报告生成1. 检查 AWR 系统状态2. 查看数据库中的所有表空间3. 查看现有的 AWR 快照4. 设置 AWR 快照的时间间隔5. 创建 AWR 快照6. 查看最新的 AWR 快照7. 生成 AWR HTML 报告8. 将 AWR 报告保存到指定文件链接总结 自动工作集负载信息库 AWR 报告解析指…

股票数据接口API实例代码python、JAVA等多种语言演示免费获取实时数据、历史数据、CDMA、KDJ等指标数据配有API说明文档

​ 本文中所有接口均可直接在浏览器打开获取数据,为了便于大家验证有效性,已经做好了超链接,直接点击即可! 沪深两市股票列表 API接口链接(可点击验证):https://api.mairui.club/hslt/list/b…

深入理解DOM:22个核心知识点与代码示例

本文系统介绍DOM相关的22个核心概念,每个知识点均提供代码示例及简要说明,帮助开发者全面掌握DOM操作技巧。 一、DOM基础概念 1. DOM概念 DOM(Document Object Model)是HTML/XML的编程接口,通过JavaScript可动态修改…

【Map vs Set】:Java数据存储的“双子星”对决

个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 🍰一、搜索 🍮1.概念 🍮2.模型 🍰二、Map 🍨1.什么是Map? 🍨2.Map的实例化 &…

【C语言 】C语言 桌游开发数字竞拍(源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【C语言 】C语言 桌游开发数字竞拍(源码…

Reinforcement Learning Heats Up 强化学习持续升温

Reinforcement Learning Heats Up 强化学习持续升温 核心观点:强化学习正成为构建具有高级推理能力大语言模型(LLMs)的重要途径。 最新进展 模型示例:近期出现了如DeepSeek - R1及其变体(DeepSeek - R1 - Zero&#xf…

Whisper+T5-translate实现python实时语音翻译

1.首先下载模型,加载模型 import torch import numpy as np import webrtcvad import pyaudio import queue import threading from datetime import datetime from faster_whisper import WhisperModel from transformers import AutoTokenizer, AutoModelForSeq2…

湖仓分析|浙江霖梓基于 Doris + Paimon 打造实时/离线一体化湖仓架构

导读:浙江霖梓早期使用 CDH 产品套件搭建了大数据系统,面临业务逻辑冗余、查询效率低下等问题,基于 Apache Doris 进行整体架构与表结构的重构,并基于湖仓一体和查询加速展开深度探索与实践,打造了 Doris Paimon 的实…

git bash在github的库中上传或更新本地文件

一、将本地文件上传到 GitHub 仓库 1. 创建 GitHub 仓库 如果你还没有在 GitHub 上创建仓库,首先需要创建一个新的仓库: 登录到 GitHub。点击右上角的 按钮,选择 New repository。给你的仓库起个名字,并选择 Public 或 Privat…

Jmeter压测怎么控制TPS

压测固定TPS的接口 有些任务需要我们控制接口的TPS,例如每秒请求一次。 TPS定时器 然后1个并发持续运行 压测结果 需要注意TPS在1.0/s左右,有时可能是1.2、1.3,定时器会自动调整压力,让TPS保持在1.0左右。

ArcGISPro 新建shp+数据结构

import arcpy# 设置工作空间和 Shapefile 存放路径 shp_path r"C:\path\to\your\folder\PolygonZY.shp" # Shapefile 存放路径 fields [("CHBH", "TEXT", 20),("ZCMC", "TEXT", 100),("ZCLX", "TEXT"…

理解WebGPU 中的 GPUAdapter :连接浏览器与 GPU 的桥梁

在 WebGPU 开发中, GPUAdapter 是一个至关重要的对象,它作为浏览器与 GPU 之间的桥梁,为开发者提供了请求 GPU 设备、查询 GPU 特性以及获取适配器信息的能力。本文将详细介绍 GPUAdapter 的核心属性和方法,并通过实际代码…

信呼OA办公系统sql注入漏洞分析

漏洞描述 信呼OA办公系统uploadAction存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。 环境搭建 源码下载地址:https://github.com/rainrocka/xinhu 下载后解压到本地网站根目录下,配置好数据库,然后安装即可 默认密…

vue框架生命周期详细解析

Vue.js 的生命周期钩子函数是理解 Vue 组件行为的关键。每个 Vue 实例在创建、更新和销毁过程中都会经历一系列的生命周期阶段,每个阶段都有对应的钩子函数,开发者可以在这些钩子函数中执行特定的操作。 Vue 生命周期概述 Vue 的生命周期可以分为以下几…

一文深入了解DeepSeek-R1:模型架构

本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型,以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 📝 1. 输入上下文长度 DeepSeek-R1的输入上下文长…

开发基础(8):鸿蒙图表开发

mpchart mpchart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI,mpchart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图等自定义图表库。 柱状图 导入import {BarChart, …

条款03:尽可能使用 const

const 允许我们指定一个语义约束,使某个值应该保持不变 1、const 修饰 变量,指针,函数,函数返回值等,可以使程序减少错误,或者更容易检测错误: 指针常量:int* const p;//指针地址不…