神经网络常见激活函数 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={xx≥0axx<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={1x≥0ax<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()

优缺点
- RReLU函数相对于PeLU函数的改进
- RReLU函数和PReLU函数的表达式一样,但是参数 α \alpha α 不一样,这里的 α \alpha α 是个随机震荡的数,范围是 1 8 − 1 3 \frac{1}{8} - \frac{1}{3} 81−31
- 负部分的斜率在训练中被随机化到给定的范围内,然后再测试中被固定。而PReLU训练中的斜率是训练出来的。
-
RReLU 的优点
- 缓解“死亡ReLU”问题:与ReLU不同,RReLU在负输入时引入了一个随机的斜率,这使得神经元不会因为负输入而完全失去梯度,从而避免了“死亡ReLU”问题。
- 增强梯度流:RReLU通过在负输入时提供一个非零梯度,有助于改善梯度消失问题,使得网络在训练过程中能够更好地更新权重。
- 增加模型的灵活性:RReLU的随机斜率在训练过程中可以动态调整,这增加了模型的灵活性和适应性,使其能够更好地处理复杂的模式。
- 提高模型的泛化能力:由于RReLU在训练时引入了随机性,这可以作为一种正则化手段,有助于提高模型的泛化能力。
-
RReLU 的缺点
- 计算复杂度增加:RReLU的随机斜率需要在每次训练时进行计算,这增加了计算复杂度和训练时间。
- 参数选择敏感:RReLU的随机斜率范围需要合理选择,如果选择不当,可能会导致模型训练不稳定。
- 测试时的确定性问题:在训练阶段,RReLU使用随机斜率,而在测试阶段,通常会使用一个固定的斜率(通常是训练阶段随机斜率的期望值)。这种从随机到确定性的转换可能会导致测试时的性能与训练时略有差异。
- 可能的过拟合风险:由于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 随机修正线性单元: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],次大值为a[1],遍历一次,每次比较并更新最大值和次大值,最…...
【C++高并发服务器WebServer】-14:Select详解及实现
本文目录 一、BIO模型二、非阻塞NIO忙轮询三、IO多路复用四、Select()多路复用实现 明确一下IO多路复用的概念:IO多路复用能够使得程序同时监听多个文件描述符(文件描述符fd对应的是内核读写缓冲区),能够提升程序的性能。 Linux下…...
redis项目
短信登录 这一块我们会使用redis共享session来实现 商户查询缓存 通过本章节,我们会理解缓存击穿,缓存穿透,缓存雪崩等问题,让小伙伴的对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容 优惠…...
Spring统一修改RequestBody
我们编写RestController时,有可能多个接口使用了相同的RequestBody,在一些场景下需求修改传入的RequestBody的值,如果是每个controller中都去修改,代码会比较繁琐,最好的方式是在一个地方统一修改,比如将he…...
NCV4275CDT50RKG 车规级LDO线性电压调节器芯片——专为新能源汽车设计的高可靠性电源解决方案
产品概述: NCV4275CDT50RKG 是一款符合 AEC-Q100 车规认证的高性能LDO(低压差线性稳压器),专为新能源汽车的严苛工作环境设计。该芯片支持 输出调节为 5.0 V 或 3.3 V,最大输出电流达 450mA,具备超低静态电流…...
前端开发架构师Prompt指令的最佳实践
前端开发架构师Prompt 提示词可作为系统提示词使用,可基于用户的需求输出对应的编码方案。 本次提示词偏向前端开发的使用,如有需要可适当修改关键词和示例。 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使…...
【AI实践】Windsurf AI编程voice对话应用
Android Studio新建一个安卓 hello world 应用,使用gitee插件,推送到个人gitee仓库。 本文要写一个基于GLM4-voice的一个语音对话应用,参考 bigmodel.cn平台和开发文档:智谱AI开放平台 第一轮 打开cursor,model切换到…...
【自学笔记】文言一心的基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 文心一言知识点总览一、文心一言简介二、文心一言的核心功能三、文心一言的技术特点四、文心一言的应用场景五、文心一言的使用技巧六、文心一言的未来发展 总结 文…...
kafka消费端之消费者协调器和组协调器
文章目录 概述回顾历史老版本获取消费者变更老版本存在的问题 消费者协调器和组协调器新版如何解决老版本问题再均衡过程**第一阶段CFIND COORDINATOR****第二阶段(JOINGROUP)**选举消费组的lcader选举分区分配策略 第三阶段(SYNC GROUP&…...
线上hbase rs 读写请求个数指标重置问题分析
问题描述: 客户想通过调用hbase的jmx接口获取hbase的读写请求个数,以此来分析HBase读写请求每日增量。 但是发现生产,测试多个集群,Hbase服务指标regionserver读写请求个数存在突然下降到0或者大幅度下降情况。 需要排查原因: 某个Region的读写请求数:会发现经常会重置为…...
DeepSeek-R1 本地电脑部署 Windows系统 【轻松简易】
本文分享在自己的本地电脑部署 DeepSeek,而且轻松简易,快速上手。 这里借助Ollama工具,在Windows系统中进行大模型部署~ 1、安装Ollama 来到官网地址:Download Ollama on macOS 点击“Download for Windows”下载安装包&#x…...
数据库,数据表的增删改查操作
一.数据库的基本操作 (1)创建数据库 创建数据库就是在数据库系统中划分一块存储数据的空间,方便数据的分配、放置和管理。在MySQL中使用CREATE DATABASE命令创建数据库,语法格式如下: CREATE DATABASE数据库名称; 注:…...
VUE 集成企微机器人通知
message-robot 便于线上异常问题及时发现处理,项目中集成企微机器人通知,及时接收问题并处理 企微机器人通知工具类 export class MessageRobotUtil {constructor() {}/*** 发送 markdown 消息* param robotKey 机器人 ID* param title 消息标题* param…...
《Java核心技术 卷II》Java平台的脚本机制
Java平台的脚本机制 脚本引擎:可以执行用某种特定语言编写的脚本类库。 ScriptEngineManager 虚拟机启动时用它发现可用的脚步引擎。 调用getEngineFactories来枚举这些引擎。 知道所需要的引擎可以通过名字、MIME类型或拓展文件来请求它。 var manager new S…...
Ollama + AnythingLLM + Deepseek r1 实现本地知识库
1、Ollama:是一个开源的大型语言模型 (LLM)服务工具,旨在简化在本地运行大语言模型的过程,降低使用大语言模型的门槛。 2、AnythingLLM:是由Mintplex Labs Inc. 开发的一款全栈应用程序,旨在构建一个高效、可定制、…...
记录 | WPF基础学习Style局部和全局调用
目录 前言一、Style1.1 例子1.2 为样式起名字1.3 BasedOn 继承上一个样式 二、外部StyleStep1 创建资源字典BaseButtonStyle.xamlStep2 在资源字典中写入StyleStep3 App.xaml中写引用路径【全局】Step4 调用三、代码提供四、x:Key和x:Name区别 更新时间 前言 参考文章ÿ…...
PromptSource安装报错
一、现象 运行命令:streamlit run promptsource/app.py 报错: 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 …...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...
