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/zh-hant/n/135103.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZVBA的頭像ZVBA
上一篇 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

發表回復

登錄後才能評論