神經網絡常見激活函數 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λα(ex?1)?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. dxd?SELU(x)={λλαex?x>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.pswp.cn/news/895529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895529.shtml
英文地址,請注明出處:http://en.pswp.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;//指針地址不…