当前位置: 首页 > news >正文

神经网络常见激活函数 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. dxdRReLU={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} 8131
    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 ]
    

相关文章:

神经网络常见激活函数 6-RReLU函数

文章目录 RReLU函数导函数函数和导函数图像优缺点pytorch中的RReLU函数tensorflow 中的RReLU函数 RReLU 随机修正线性单元&#xff1a;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…...

计算机网络面经

文章目录 基础HTTPHTTP报文结构 (注意)RPC和http的区别TCPTCP报文结构(注意)IP基础 HTTP HTTP报文结构 (注意) 请求行:请求方法get/post,url,http版本 请求头:用户标识,请求体长度,类型,cookie 请求体:内容 状态行:状态码,状态消息、(http版本) 响应头:内…...

Qt:常用控件

目录 控件概述 控件体系的发展 按钮类控件 QPushButton QRadioButton QCheckBox QToolButton 显示类控件 QLabel QLCDNumber QProgressBar QCalendarWidget 输入类控件 QLineEdit QTextEdit QComboBox QSpinBox QDateEdit & QTimeEdit QDial QSlider …...

算法设计-找第二大数(C++)

一、问题描述 用于在给定的整数数组中找到 第二大值。 二、详细代码 #include<iostream> #include<limits.h> using namespace std; //初始化最大值为a[0]&#xff0c;次大值为a[1]&#xff0c;遍历一次&#xff0c;每次比较并更新最大值和次大值&#xff0c;最…...

【C++高并发服务器WebServer】-14:Select详解及实现

本文目录 一、BIO模型二、非阻塞NIO忙轮询三、IO多路复用四、Select()多路复用实现 明确一下IO多路复用的概念&#xff1a;IO多路复用能够使得程序同时监听多个文件描述符&#xff08;文件描述符fd对应的是内核读写缓冲区&#xff09;&#xff0c;能够提升程序的性能。 Linux下…...

redis项目

短信登录 这一块我们会使用redis共享session来实现 商户查询缓存 通过本章节&#xff0c;我们会理解缓存击穿&#xff0c;缓存穿透&#xff0c;缓存雪崩等问题&#xff0c;让小伙伴的对于这些概念的理解不仅仅是停留在概念上&#xff0c;更是能在代码中看到对应的内容 优惠…...

Spring统一修改RequestBody

我们编写RestController时&#xff0c;有可能多个接口使用了相同的RequestBody&#xff0c;在一些场景下需求修改传入的RequestBody的值&#xff0c;如果是每个controller中都去修改&#xff0c;代码会比较繁琐&#xff0c;最好的方式是在一个地方统一修改&#xff0c;比如将he…...

NCV4275CDT50RKG 车规级LDO线性电压调节器芯片——专为新能源汽车设计的高可靠性电源解决方案

产品概述: NCV4275CDT50RKG 是一款符合 AEC-Q100 车规认证的高性能LDO&#xff08;低压差线性稳压器&#xff09;&#xff0c;专为新能源汽车的严苛工作环境设计。该芯片支持 输出调节为 5.0 V 或 3.3 V&#xff0c;最大输出电流达 450mA&#xff0c;具备超低静态电流&#xf…...

前端开发架构师Prompt指令的最佳实践

前端开发架构师Prompt 提示词可作为系统提示词使用&#xff0c;可基于用户的需求输出对应的编码方案。 本次提示词偏向前端开发的使用&#xff0c;如有需要可适当修改关键词和示例。 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使…...

【AI实践】Windsurf AI编程voice对话应用

Android Studio新建一个安卓 hello world 应用&#xff0c;使用gitee插件&#xff0c;推送到个人gitee仓库。 本文要写一个基于GLM4-voice的一个语音对话应用&#xff0c;参考 bigmodel.cn平台和开发文档&#xff1a;智谱AI开放平台 第一轮 打开cursor&#xff0c;model切换到…...

【自学笔记】文言一心的基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 文心一言知识点总览一、文心一言简介二、文心一言的核心功能三、文心一言的技术特点四、文心一言的应用场景五、文心一言的使用技巧六、文心一言的未来发展 总结 文…...

kafka消费端之消费者协调器和组协调器

文章目录 概述回顾历史老版本获取消费者变更老版本存在的问题 消费者协调器和组协调器新版如何解决老版本问题再均衡过程**第一阶段CFIND COORDINATOR****第二阶段&#xff08;JOINGROUP&#xff09;**选举消费组的lcader选举分区分配策略 第三阶段&#xff08;SYNC GROUP&…...

线上hbase rs 读写请求个数指标重置问题分析

问题描述: 客户想通过调用hbase的jmx接口获取hbase的读写请求个数,以此来分析HBase读写请求每日增量。 但是发现生产,测试多个集群,Hbase服务指标regionserver读写请求个数存在突然下降到0或者大幅度下降情况。 需要排查原因: 某个Region的读写请求数:会发现经常会重置为…...

DeepSeek-R1 本地电脑部署 Windows系统 【轻松简易】

本文分享在自己的本地电脑部署 DeepSeek&#xff0c;而且轻松简易&#xff0c;快速上手。 这里借助Ollama工具&#xff0c;在Windows系统中进行大模型部署~ 1、安装Ollama 来到官网地址&#xff1a;Download Ollama on macOS 点击“Download for Windows”下载安装包&#x…...

数据库,数据表的增删改查操作

一.数据库的基本操作 &#xff08;1&#xff09;创建数据库 创建数据库就是在数据库系统中划分一块存储数据的空间&#xff0c;方便数据的分配、放置和管理。在MySQL中使用CREATE DATABASE命令创建数据库&#xff0c;语法格式如下: CREATE DATABASE数据库名称; 注&#xff1a…...

VUE 集成企微机器人通知

message-robot 便于线上异常问题及时发现处理&#xff0c;项目中集成企微机器人通知&#xff0c;及时接收问题并处理 企微机器人通知工具类 export class MessageRobotUtil {constructor() {}/*** 发送 markdown 消息* param robotKey 机器人 ID* param title 消息标题* param…...

《Java核心技术 卷II》Java平台的脚本机制

Java平台的脚本机制 脚本引擎&#xff1a;可以执行用某种特定语言编写的脚本类库。 ScriptEngineManager 虚拟机启动时用它发现可用的脚步引擎。 调用getEngineFactories来枚举这些引擎。 知道所需要的引擎可以通过名字、MIME类型或拓展文件来请求它。 var manager new S…...

Ollama + AnythingLLM + Deepseek r1 实现本地知识库

1、Ollama&#xff1a;‌是一个开源的大型语言模型 (LLM)服务工具&#xff0c;旨在简化在本地运行大语言模型的过程&#xff0c;降低使用大语言模型的门槛‌。 2、AnythingLLM&#xff1a;是由Mintplex Labs Inc. 开发的一款全栈应用程序&#xff0c;旨在构建一个高效、可定制、…...

记录 | WPF基础学习Style局部和全局调用

目录 前言一、Style1.1 例子1.2 为样式起名字1.3 BasedOn 继承上一个样式 二、外部StyleStep1 创建资源字典BaseButtonStyle.xamlStep2 在资源字典中写入StyleStep3 App.xaml中写引用路径【全局】Step4 调用三、代码提供四、x:Key和x:Name区别 更新时间 前言 参考文章&#xff…...

PromptSource安装报错

一、现象 运行命令&#xff1a;streamlit run promptsource/app.py 报错&#xff1a; streamlit run promptsource/app.py Traceback (most recent call last): File "/usr/local/bin/streamlit", line 5, in <module> from streamlit.cli import main File …...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...