神經網絡常見激活函數 6-RReLU函數

文章目錄

    • RReLU
      • 函數+導函數
      • 函數和導函數圖像
      • 優缺點
      • pytorch中的RReLU函數
      • tensorflow 中的RReLU函數

RReLU

  • 隨機修正線性單元:Randomized Leaky ReLU

函數+導函數

  • RReLU函數
    R R e L U = { x x ≥ 0 a x x < 0 \rm RReLU = \left\{ \begin{array}{} x \quad x \ge 0 \\ a x \quad x < 0 \end{array} \right. RReLU={xx0axx<0?
    其中,( a ) 是一個在訓練過程中隨機從均勻分布 ( U(l, u) ) 中采樣的值,( l ) 和 ( u ) 是預先設定的下界和上界,通常 ( 0 < l < u < 1 )。

  • RReLU函數導數
    d d x R R e L U = { 1 x ≥ 0 a x < 0 \frac{d}{dx} \rm RReLU = \left\{ \begin{array}{} 1 \quad x \ge 0 \\ a \quad x < 0 \end{array} \right. dxd?RReLU={1x0ax<0?
    在 RReLU 中,當 ( x < 0 ) 時,導數是一個隨機變量 ( a ),這個隨機變量在每次訓練時都會從 ( U(l, u) ) 中重新采樣。與 LeakyReLU 不同,RReLU 的斜率 ( a ) 是隨機的,而不是固定的。


函數和導函數圖像

  • 畫圖

    分為兩張圖了,上面是訓練階段,在訓練階段,負值部分的斜率P是隨機從區間[lower, upper]中采樣的。在測試階段,負值部分的斜率P是區間[lower, upper]的平均值((lower + upper) / 2)

    import numpy as np
    from matplotlib import pyplot as plt# 定義 RReLU 函數
    def rrelu_train(x, lower=0.125, upper=0.333):P = np.random.uniform(lower, upper)  # 訓練階段:隨機化負值部分的斜率return np.where(x < 0, P * x, x)def rrelu_test(x, lower=0.125, upper=0.333):P = (lower + upper) / 2  # 測試階段:使用負值部分的平均斜率return np.where(x < 0, P * x, x)# 定義 RReLU 的導數
    def rrelu_derivative_train(x, lower=0.125, upper=0.333):P = np.random.uniform(lower, upper)  # 訓練階段:隨機化負值部分的斜率return np.where(x < 0, P, 1)def rrelu_derivative_test(x, lower=0.125, upper=0.333):P = (lower + upper) / 2  # 測試階段:使用負值部分的平均斜率return np.where(x < 0, P, 1)# 生成數據
    x = np.linspace(-2, 2, 1000)
    lower = 1/8  # 負值部分斜率的下限
    upper = 1/3  # 負值部分斜率的上限# 訓練階段
    y_train = [rrelu_train(xi, lower, upper) for xi in x]
    y1_train = [rrelu_derivative_train(xi, lower, upper) for xi in x]# 測試階段
    y_test = [rrelu_test(xi, lower, upper) for xi in x]
    y1_test = [rrelu_derivative_test(xi, lower, upper) for xi in x]# 繪制圖形
    fig, axs = plt.subplots(2, 1, figsize=(12, 12))# 訓練階段
    axs[0].plot(x, y_train, label='RReLU (Train)', color='blue')
    axs[0].plot(x, y1_train, label='Derivative (Train)', color='orange')
    axs[0].set_title(f'RReLU (Train) and Derivative (lower={lower}, upper={upper})')
    axs[0].legend(loc='upper left')
    axs[0].spines['right'].set_color('none')
    axs[0].spines['top'].set_color('none')
    axs[0].spines['bottom'].set_position(('data', 0))
    axs[0].spines['left'].set_position(('data', 0))# 測試階段
    axs[1].plot(x, y_test, label='RReLU (Test)', color='blue', linestyle='--')
    axs[1].plot(x, y1_test, label='Derivative (Test)', color='orange', linestyle='--')
    axs[1].set_title(f'RReLU (Test) and Derivative (lower={lower}, upper={upper})')
    axs[1].legend(loc='upper left')
    axs[1].spines['right'].set_color('none')
    axs[1].spines['top'].set_color('none')
    axs[1].spines['bottom'].set_position(('data', 0))
    axs[1].spines['left'].set_position(('data', 0))plt.tight_layout()
    plt.show()
    

    ? image-20250205111957796


優缺點

  • RReLU函數相對于PeLU函數的改進
    1. RReLU函數和PReLU函數的表達式一樣,但是參數 α \alpha α 不一樣,這里的 α \alpha α 是個隨機震蕩的數,范圍是 1 8 ? 1 3 \frac{1}{8} - \frac{1}{3} 81??31?
    2. 負部分的斜率在訓練中被隨機化到給定的范圍內,然后再測試中被固定。而PReLU訓練中的斜率是訓練出來的。
  • RReLU 的優點

    1. 緩解“死亡ReLU”問題:與ReLU不同,RReLU在負輸入時引入了一個隨機的斜率,這使得神經元不會因為負輸入而完全失去梯度,從而避免了“死亡ReLU”問題。
    2. 增強梯度流:RReLU通過在負輸入時提供一個非零梯度,有助于改善梯度消失問題,使得網絡在訓練過程中能夠更好地更新權重。
    3. 增加模型的靈活性:RReLU的隨機斜率在訓練過程中可以動態調整,這增加了模型的靈活性和適應性,使其能夠更好地處理復雜的模式。
    4. 提高模型的泛化能力:由于RReLU在訓練時引入了隨機性,這可以作為一種正則化手段,有助于提高模型的泛化能力。
  • RReLU 的缺點

    1. 計算復雜度增加:RReLU的隨機斜率需要在每次訓練時進行計算,這增加了計算復雜度和訓練時間。
    2. 參數選擇敏感:RReLU的隨機斜率范圍需要合理選擇,如果選擇不當,可能會導致模型訓練不穩定。
    3. 測試時的確定性問題:在訓練階段,RReLU使用隨機斜率,而在測試階段,通常會使用一個固定的斜率(通常是訓練階段隨機斜率的期望值)。這種從隨機到確定性的轉換可能會導致測試時的性能與訓練時略有差異。
    4. 可能的過擬合風險:由于RReLU引入了額外的隨機性,如果數據集較小或模型復雜度較高,可能會增加過擬合的風險。

pytorch中的RReLU函數

  • 代碼

    這里僅僅演示訓練階段 α \alpha α 為隨機值的時候

    l o w e r = 1 / 8 \mathrm lower = 1/8 lower=1/8

    u p p e r = 1 / 3 \mathrm upper = 1/3 upper=1/3

    # 定義 RReLU 函數
    f = torch.nn.RReLU(lower=0.125,upper=0.333)  # PyTorch 提供的 RReLU 激活函數模塊
    x = torch.randn(2)    # 生成一個隨機張量作為輸入rrelu_x = f(x)        # 應用 RReLU 函數print(f"x: \n{x}")
    print(f"rrelu_x:\n{rrelu_x}")"""輸出"""
    

tensorflow 中的RReLU函數

  • 代碼

    python: 3.10.9

    tensorflow: 2.18.0

    rrelu并不是tensorflow標準庫的一部分,為此我們實現一個RReLU函數,包含訓練階段和推理階段

    這里僅僅演示訓練階段 α \alpha α 為隨機值的時候

    l o w e r = 1 / 8 \mathrm lower = 1/8 lower=1/8

    u p p e r = 1 / 3 \mathrm upper = 1/3 upper=1/3

    import tensorflow as tfclass RReLU(tf.keras.layers.Layer):def __init__(self, lower=0.125, upper=0.333, **kwargs):super(RReLU, self).__init__(**kwargs)self.lower = lowerself.upper = upperdef call(self, inputs, training=None):if training:# 在訓練模式下,隨機選擇一個斜率alpha = tf.random.uniform(shape=inputs.shape, minval=self.lower, maxval=self.upper)else:# 在推理模式下,使用平均斜率alpha = (self.lower + self.upper) / 2.0return tf.where(inputs >= 0, inputs, alpha * inputs)# 創建 RReLU 激活函數層
    rrelu = RReLU()# 生成隨機輸入
    x = tf.random.normal([2])# 應用 RReLU 激活函數
    rrelu_x = rrelu(x, training=True)print(f"x: \n{x}")
    print(f"rrelu_x:\n{rrelu_x}")"""輸出"""
    x: 
    [-0.97807205  0.9327775 ]
    rrelu_x:
    [-0.26978785  0.9327775 ]
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895102.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue(6)

一.路由板塊封裝 &#xff08;1&#xff09;路由的封裝抽離 目標&#xff1a;將路由板塊抽離出來 好處&#xff1a;拆分板塊&#xff0c;利于維護 // 路由的使用步驟 5 2 // 5個基礎步驟 // 1. 下載 v3.6.5 // 2. 引入 // 3. 安裝注冊 Vue.use(Vue插件) // 4. 創建路由對象…

【python】matplotlib(animation)

文章目錄 1、matplotlib.animation1.1、FuncAnimation1.2、修改 matplotlib 背景 2、matplotlib imageio2.1、折線圖2.2、條形圖2.3、散點圖 3、參考 1、matplotlib.animation 1.1、FuncAnimation matplotlib.animation.FuncAnimation 是 Matplotlib 庫中用于創建動畫的一個…

【東莞常平】戴爾R710服務器不開機維修分享

1&#xff1a;2025-02-06一位老客戶的朋友剛開工公司ERP服務器一臺戴爾老服務器故障無法開機&#xff0c;于是經老客戶介紹找到我們。 2&#xff1a;服務器型號是DELL PowerEdge R710 這個服務器至少也有15年以上的使用年限了。 3&#xff1a;客戶反饋的故障問題為&#xff1a;…

Spring AI -使用Spring快速開發ChatGPT應用

前言 Spring在Java生態中一直占據大半江山。最近我發現Spring社區推出了一個Spring AI項目&#xff0c;目前該項目還屬于Spring實驗性項目&#xff0c;但是我們可以通過該項目&#xff0c;可以非常快速的開發出GPT對話應用。 本篇文章將會對SpringAI進行簡單的介紹和使用&#…

經典排序算法復習----C語言

經典排序算法復習 分類 交換類 冒泡快排 分配類 計數排序基數排序 選擇類 選擇排序 堆排序 歸并類 歸并排序 插入類 直接插入排序 希爾排序 折半插入排序 冒泡排序 基于交換。每一輪找最大值放到數組尾部 //冒泡排序 void bubSort(int* arr,int size){bool sorte…

BFS解決拓撲排序(3題)

目錄 拓撲排序 1.如何排序&#xff1f; 2.如何形成拓撲排序 3.如何建圖 1.看數據稠密度 2. 根據算法流程靈活建圖 1.課程表 2.課程表2 3.火星詞典 拓撲排序 找到做事情的先后順序&#xff0c;拓撲排序的結果可能不是唯一的 1.如何排序&#xff1f; 1.找出圖中入度為…

kafka 3.5.0 raft協議安裝

前言 最近做項目&#xff0c;需要使用kafka進行通信&#xff0c;且只能使用kafka&#xff0c;筆者沒有測試集群&#xff0c;就自己搭建了kafka集群&#xff0c;實際上筆者在很早之前就搭建了&#xff0c;因為當時還是zookeeper&#xff08;簡稱ZK&#xff09;注冊元數據&#…

Unity項目接入xLua的一種流程

1. 導入xlua 首先導入xlua&#xff0c;這個不用多說 2. 編寫C#和Lua交互腳本 基礎版本&#xff0c;即xlua自帶的版本 using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; using System; using System.IO;[Serializable] public…

四次揮手詳解

文章目錄 一、四次揮手各狀態FIN_WAIT_1CLOSE_WAITFIN_WAIT_2LAST_ACKTIME_WAITCLOSE 二、雙方同時調用close()&#xff0c;FIN_WAIT_1狀態后進入CLOSING狀態CLOSING狀態 三、TIME_WAIT狀態詳解(1) TIME_WAIT狀態下的2MSL是什么MSL &#xff08;報文最大生存時間&#xff09;為…

【嵌入式 Linux 音視頻+ AI 實戰項目】瑞芯微 Rockchip 系列 RK3588-基于深度學習的人臉門禁+ IPC 智能安防監控系統

前言 本文主要介紹我最近開發的一個個人實戰項目&#xff0c;“基于深度學習的人臉門禁 IPC 智能安防監控系統”&#xff0c;全程滿幀流暢運行。這個項目我目前全網搜了一圈&#xff0c;還沒發現有相關類型的開源項目。這個項目只要稍微改進下&#xff0c;就可以變成市面上目前…

java: framework from BLL、DAL、IDAL、MODEL、Factory using oracle

oracel 21c sql: -- 創建 School 表 CREATE TABLE School (SchoolId CHAR(5) NOT NULL,SchoolName NVARCHAR2(500) NOT NULL,SchoolTelNo VARCHAR2(8) NULL,PRIMARY KEY (SchoolId) );CREATE OR REPLACE PROCEDURE addschool(p_school_id IN CHAR,p_school_name IN NVARCHAR2,p…

解決錯誤:CondaHTTPError: HTTP 000 CONNECTION FAILED for url

解決錯誤&#xff1a;CondaHTTPError: HTTP 000 CONNECTION FAILED for url 查看channels:vim ~/.condarcshow_channel_urls: true channels:- http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/- http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/…

Apache APISIX 快速入門

文章目錄 apisix 快速入門什么是apisix有了 NGINX 和 Kong&#xff0c;為什么還需要 Apache APISIX&#xff1f;軟件架構基于 Nginx 開源版本&#xff0c;而 Nginx 并不支持動態配置&#xff0c;為什么 Apache APISIX 聲稱自己可以實現動態配置&#xff1f; 安裝配置 APISIX配置…

2025嵌入式高頻面試題解析

一、概述 到了年初&#xff0c;是求職者最活躍的時間。本文梳理了嵌入式高頻面試題&#xff0c;幫助求職者更好地準備面試&#xff0c;同時也為技術愛好者提供深入學習嵌入式知識的參考。 二、C 語言基礎 2.1 指針與數組 問題 1&#xff1a;指針和數組的區別是什么&#xf…

1.攻防世界 baby_web

題目描述這里有提示&#xff0c;初始頁面 進入題目頁面如下 很簡潔的頁面只有一行HELLO WORLD ctrlu查看了源碼也沒有信息 用burp suite抓包&#xff0c;并發送到重放器 根據提示&#xff08;初始頁面&#xff09;修改訪問index.php文件 index.php index.php 是一種常見的…

什么是三層交換技術?與二層有什么區別?

什么是三層交換技術&#xff1f;讓你的網絡飛起來&#xff01; 一. 什么是三層交換技術&#xff1f;二. 工作原理三. 優點四. 應用場景五. 總結 前言 點個免費的贊和關注&#xff0c;有錯誤的地方請指出&#xff0c;看個人主頁有驚喜。 作者&#xff1a;神的孩子都在歌唱 大家好…

【機器學習】數據預處理之數據歸一化

數據預處理之數據歸一化 一、摘要二、數據歸一化概念三、數據歸一化實現方法3.1 最值歸一化方法3.2 均值方差歸一化方法 一、摘要 本文主要講述了數據歸一化&#xff08;Feature Scaling&#xff09;的重要性及其方法。首先通過腫瘤大小和發現時間的例子&#xff0c;說明了不同…

【AIGC】語言模型的發展歷程:從統計方法到大規模預訓練模型的演化

博客主頁&#xff1a; [小????????] 本文專欄: AIGC | ChatGPT 文章目錄 &#x1f4af;前言&#x1f4af;語言模型的發展歷程&#xff1a;從統計方法到大規模預訓練模型的演化1 統計語言模型&#xff08;Statistical Language Model, SLM&#xff09;&#xff1a;統…

高效知識管理與分類優化指南:從目錄設計到實踐應用

摘要 本文旨在幫助讀者在信息爆炸時代構建高效的知識管理體系&#xff0c;提供了知識收藏目錄、瀏覽器書簽和電腦文件夾的優化分類方案。知識收藏目錄方案包括工作與項目、記錄與日常、知識管理等八大類&#xff0c;具有邊界清晰、擴展靈活、貼合實際場景等優勢。瀏覽器書簽分類…

OpenAI 實戰進階教程 - 第十二節 : 多模態任務開發(文本、圖像、音頻)

適用讀者與目標 適用讀者&#xff1a;已經熟悉基礎的 OpenAI API 調用方式&#xff0c;對文本生成或數據處理有一定經驗的計算機從業人員。目標&#xff1a;在本節中&#xff0c;你將學會如何使用 OpenAI 提供的多模態接口&#xff08;圖像生成、語音轉錄等&#xff09;開發更…