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

news2025/2/11 9:16:48

文章目录

    • 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 tf
    
    class RReLU(tf.keras.layers.Layer):
        def __init__(self, lower=0.125, upper=0.333, **kwargs):
            super(RReLU, self).__init__(**kwargs)
            self.lower = lower
            self.upper = upper
    
        def 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.0
            return 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.coloradmin.cn/o/2295676.html

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

相关文章

【分布式理论7】分布式调用之:服务间的(RPC)远程调用

文章目录 一、RPC 调用过程二、RPC 动态代理&#xff1a;屏蔽远程通讯细节1. 动态代理示例2. 如何将动态代理应用于 RPC 三、RPC序列化与协议编码1. RPC 序列化2. RPC 协议编码2.1. 协议编码的作用2.2. RPC 协议消息组成 四、RPC 网络传输1. 网络传输流程2. 关键优化点 一、RPC…

【Maven】项目管理工具-Maven

目录 1. Maven简介 1.1 项目管理 1.2 项目构建 1.3 项目构建工具 1.4 Maven的四大特征 1.4.1 依赖管理系统 1.4.2 多模块构建 1.4.3 一致的项目结构 1.4.4 一致的构建模型和插件机制 1.5 Maven模型 ​编辑 2.maven的安装配置 2.1 Maven的安装配置 2.1.1检测jdk的版…

ASP.NET Core WebSocket、SignalR

目录 WebSocket SignalR SignalR的基本使用 WebSocket WebSocket基于TCP协议&#xff0c;支持二进制通信&#xff0c;双工通信。性能和并发能力更强。WebSocket独立于HTTP协议&#xff0c;不过我们一般仍然把WebSocket服务器端部署到Web服务器上&#xff0c;因为可以借助HT…

【学术投稿】第五届计算机网络安全与软件工程(CNSSE 2025)

重要信息 官网&#xff1a;www.cnsse.org 时间&#xff1a;2025年2月21-23日 地点&#xff1a;中国-青岛 简介 第五届计算机网络安全与软件工程&#xff08;CNSSE 2025&#xff09;将于2025年2月21-23日在中国-青岛举行。CNSSE 2025专注于计算机网络安全、软件工程、信号处…

26~31.ppt

目录 26.北京主要的景点 题目 解析 27.创新产品展示及说明会 题目​ 解析 28.《小企业会计准则》 题目​ 解析 29.学习型社会的学习理念 题目​ 解析 30.小王-产品展示信息 题目​ 解析 31.小王-办公理念-信息工作者的每一天 题目​ 解析 26.北京主要的景点…

网络工程师 (28)IEEE802标准

前言 IEEE 802标准是由电气和电子工程师协会&#xff08;IEEE&#xff09;制定的一组局域网&#xff08;LAN&#xff09;和城域网&#xff08;MAN&#xff09;标准&#xff0c;定义了网络中的物理层和数据链路层。 一、起源与背景 IEEE 802又称为LMSC&#xff08;LAN/MAN Stand…

背包问题1

核心&#xff1a; // f[i][j] 表示只看前i个物品&#xff0c;总体积是j的情况下&#xff0c;总价值是多少 //res maxx(f[n][]0-v] //f[i][j]: //1 不选第i个物品 f[i][j] f[i-1][j] //2 选第i个物品 f[i][j] f[i-1][j-v[i]] w[i]

Spring 中的设计模式详解

控制反转(IoC)和依赖注入(DI) IoC(Inversion of Control,控制反转) 是 Spring 中一个非常非常重要的概念&#xff0c;它不是什么技术&#xff0c;而是一种解耦的设计思想。IoC 的主要目的是借助于“第三方”(Spring 中的 IoC 容器) 实现具有依赖关系的对象之间的解耦(IOC 容器…

人类的算计与机器的算计

近日&#xff0c;国外一视频网站博主通过设定&#xff0c;使DeepSeek和ChatGPT开展了一场国际象棋对弈。前十分钟双方在正常对弈&#xff0c;互有输赢&#xff0c;且ChatGPT逐渐占优。随后DeepSeek突然以对话方式告诉ChatGPT&#xff0c;国际象棋官方刚刚更新了比赛规则&#x…

7 使用 Pydantic 验证 FastAPI 的请求数据

FastAPI 是一个快速、现代的 Web 框架&#xff0c;它提供了自动生成 OpenAPI 文档的功能&#xff0c;支持 Pydantic 模型进行请求和响应数据的验证。Pydantic 提供了强大的数据验证功能&#xff0c;可以帮助你确保请求的有效性&#xff0c;自动进行数据转换&#xff0c;并生成详…

U3D支持webgpu阅读

https://docs.unity3d.com/6000.1/Documentation/Manual/WebGPU-features.html 这里看到已经该有的差不多都有了 WOW VFX更是好东西 https://unity.com/cn/features/visual-effect-graph 这玩意儿化简了纯手搓一个特效的流程 如果按原理说就是compute shader刷position&#…

Mac安装配置使用nginx的一系列问题

brew安装nginx https://juejin.cn/post/6986190222241464350 使用brew安装nginx&#xff0c;如下命令所示&#xff1a; brew install nginx 如下图所示&#xff1a; 2.查看nginx的配置信息&#xff0c;如下命令&#xff1a; brew info nginxFrom:xxx 这样的&#xff0c;是n…

在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。

题目&#xff1a;在CT107D单片机综合训练平台上&#xff0c;8个数码管分别单独依次显示0~9的值&#xff0c;然后所有数码管一起同时显示0~F的值&#xff0c;如此往复。 延时函数分析LED首先实现8个数码管单独依次显示0~9的数字所有数码管一起同时显示0~F的值&#xff0c;如此往…

组件库选择:ElementUI 还是 Ant Design

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

从运输到植保:DeepSeek大模型探索无人机智能作业技术详解

DeepSeek&#xff0c;作为一家专注于深度学习与人工智能技术研究的企业&#xff0c;近年来在AI领域取得了显著成果&#xff0c;尤其在无人机智能作业技术方面展现了其大模型的强大能力。以下是从运输到植保领域&#xff0c;DeepSeek大模型探索无人机智能作业技术的详解&#xf…

超越LSTM!TCN模型如何精准预测股市波动(附代码)

作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 写在前面的话&#xff1a;最近我用TCN时间卷积网络预测了标普500指数&#xff08;SPX&#xff09;的每日回报率&#xff0c;发现效果远超传统方法。TCN通过因果卷积和膨胀卷积捕捉时间序列的长期依赖关…

[每周一更]-(第133期):Go中MapReduce架构思想的使用场景

文章目录 **MapReduce 工作流程**Go 中使用 MapReduce 的实现方式&#xff1a;**Go MapReduce 的特点****哪些场景适合使用 MapReduce&#xff1f;**使用场景1. 数据聚合2. 数据过滤3. 数据排序4. 数据转换5. 数据去重6. 数据分组7. 数据统计8.**统计文本中单词出现次数****代码…

QML初识

目录 一、关于QML 二、布局定位和锚点 1.布局定位 2.锚点详解 三、数据绑定 1.基本概念 2.绑定方法 3.数据模型绑定 四、附加属性及信号 1.附加属性 2.信号 一、关于QML QML是Qt框架中的一种声明式编程语言&#xff0c;用于描述用户界面的外观和行为&#xff1b;Qu…

查询已经运行的 Docker 容器启动命令

一、导语 使用 get_command_4_run_container 查询 docker 容器的启动命令 获取镜像 docker pull cucker/get_command_4_run_container 查看容器命令 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock cucker/get_command_4_run_container 容器id或容器名 …

协议_CAN协议

物理层特征 信号传输原理&#xff1a; CAN控制器根据CAN_L和CAN_H上的电位差来判断总线电平&#xff0c;总线电平分为显性电平&#xff08;CAN_H与CAN_L压差 2v&#xff09;、隐性电平&#xff08;CAN_H与CAN_L压差 0v&#xff09;&#xff0c;发送方通过总线电平的变化&am…