PReLU-带参数的整流线性单元

一、PReLU的定义和背景

PReLU是一种激活函数,相比于ReLU,它对输入的负值的响应做了调整,将响应值从0变成了一个 learnable 的负数值。PReLU的参数基于训练数据进行更新。

ReLU激活函数在深度学习中大获成功,将前向传播过程中的非线性层转化为简单的阈值函数。ReLU本身非常简单,易于计算,几乎不会降低模型的拟合能力,但训练时有时可能会出现“神经元死亡”的问题。具体地,如果输入小于零,整个神经元死亡(输出恒为0),从而导致相应的权重和偏置量一直没有被更新。同时,ReLU的矩阵积累应该是离均差的,因此其在限制网络分布方面欠缺一些性质。

PReLU由何凯明在2015年提出。与ReLU不同,PReLU将负轴(negative axis)上不满足线性关系的部分进行函数转换。

二、PReLU的表达式

设 $x$ 是一个scalar,$y$ 是一个scalar。令 $w$ 是一个可学习的参数,$w \leq 0$。那么 PReLU 的表达式定义为:

$$
  y=\begin{cases}
    x &\text{if } x>0 \\
    wx &\text{if } x\leq 0
  \end{cases}
$$

在机器学习中,不是w本身,而是它在训练集上的值被学习并保留的参数对 $w$ 进行优化。如果 $w = 0$,则退化为ReLU激活函数。

三、PReLU的特点和优点

1. 适用性广泛:PReLU广泛用于图像分类和目标检测领域;经过实验发现,PReLU不仅在图像识别网络中表现良好,而且在人脸识别和自然语言处理中也非常成功。

2. 防止ReLU神经元死亡的问题:PReLU通过调整负数输入的值,解决了ReLU中存在的神经元死亡问题。这样,神经元不再是”dead”状态,从而使神经网络具有更强的鲁棒性。

3. 可学习的参数:$w$ 和其他模型参数一起被优化,因此可以将具体的情况融入到模型设计之中。

四、PReLU的应用

应用PReLU在LeNet-5、AlexNet、VGGNet、GoogLeNet和残差网络(ResNet)等多个深度学习网络中都具有很好的效果表现,例如,ResNet-34网络在图像分类领域中的优势就是把PReLU与残差结构相结合。

五、PReLU的代码实现

  import tensorflow as tf
  
  class PReLU(tf.keras.layers.Layer):
      def __init__(self):
          super(PReLU, self).__init__()
          self.alpha = tf.Variable(0.01, dtype=tf.float32)

      def call(self, x):
          alpha = tf.keras.backend.maximum(0.01, self.alpha)
          return tf.keras.activations.relu(x) - alpha * tf.keras.activations.relu(-x)

六、总结

本文详细介绍了一个适用于深度神经网络的PReLU,对PReLU 的定义和背景,表达式,特点和优点,应用和代码实现均有阐述。

原创文章,作者:ZVBA,如若转载,请注明出处:https://www.506064.com/n/135103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZVBAZVBA
上一篇 2024-10-04 00:10
下一篇 2024-10-04 00:10

相关推荐

  • 三星内存条参数用法介绍

    本文将详细解释三星内存条上面的各种参数,让你更好地了解内存条并选择适合自己的一款。 一、容量大小 容量大小是内存条最基本的参数,一般以GB为单位表示,常见的有2GB、4GB、8GB…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python input参数变量用法介绍

    本文将从多个方面对Python input括号里参数变量进行阐述与详解,并提供相应的代码示例。 一、基本介绍 Python input()函数用于获取用户输入。当程序运行到inpu…

    编程 2025-04-29
  • Spring Boot中发GET请求参数的处理

    本文将详细介绍如何在Spring Boot中处理GET请求参数,并给出完整的代码示例。 一、Spring Boot的GET请求参数基础 在Spring Boot中,处理GET请求参…

    编程 2025-04-29
  • Python Class括号中的参数用法介绍

    本文将对Python中类的括号中的参数进行详细解析,以帮助初学者熟悉和掌握类的创建以及参数设置。 一、Class的基本定义 在Python中,通过使用关键字class来定义类。类包…

    编程 2025-04-29
  • Hibernate日志打印sql参数

    本文将从多个方面介绍如何在Hibernate中打印SQL参数。Hibernate作为一种ORM框架,可以通过打印SQL参数方便开发者调试和优化Hibernate应用。 一、通过配置…

    编程 2025-04-29
  • Python函数名称相同参数不同:多态

    Python是一门面向对象的编程语言,它强烈支持多态性 一、什么是多态多态是面向对象三大特性中的一种,它指的是:相同的函数名称可以有不同的实现方式。也就是说,不同的对象调用同名方法…

    编程 2025-04-29
  • Python实现一元线性回归模型

    本文将从多个方面详细阐述Python实现一元线性回归模型的代码。如果你对线性回归模型有一些了解,对Python语言也有所掌握,那么本文将对你有所帮助。在开始介绍具体代码前,让我们先…

    编程 2025-04-29
  • 全能编程开发工程师必知——DTD、XML、XSD以及DTD参数实体

    本文将从大体介绍DTD、XML以及XSD三大知识点,同时深入探究DTD参数实体的作用及实际应用场景。 一、DTD介绍 DTD是文档类型定义(Document Type Defini…

    编程 2025-04-29
  • Python可变参数

    本文旨在对Python中可变参数进行详细的探究和讲解,包括可变参数的概念、实现方式、使用场景等多个方面,希望能够对Python开发者有所帮助。 一、可变参数的概念 可变参数是指函数…

    编程 2025-04-29

发表回复

登录后才能评论