從多個方面深入解析激活函數

一、什麼是激活函數?

在神經網路中,激活函數決定了神經元是否應該被激活。當輸入數據經過一個神經網路節點時,這個節點會計算出加權和,再通過激活函數進行非線性變換,最終輸出一個非線性的結果值。

簡單而言,激活函數負責將輸入信號的線性變化轉換成非線性的響應,幫助神經網路理解更加複雜的輸入數據。

以下是一個簡單的Sigmoid激活函數的例子:


def sigmoid(x):
    return 1 / (1 + np.exp(-x))

二、不同種類的激活函數

激活函數是神經網路中一個非常重要的組成部分,它的設計直接影響著模型的表現。以下我將會介紹幾種常見激活函數的優缺點。

1. Sigmoid激活函數

Sigmoid是最常見的激活函數之一。當輸入很大或很小時,Sigmoid函數的導數趨於0,梯度消失的問題會很明顯。但是在一些二分類模型和少量隱藏節點的神經網路中,仍然有著一些應用。


def sigmoid(x):
    return 1 / (1 + np.exp(-x))

2. Tanh激活函數

Tanh函數在過去被廣泛應用於神經網路中,在輸入變化小時,有著相對較大的梯度。然而,當輸入較大或較小時,Tanh函數的梯度仍然存在消失問題,因此用的不是很多。


def tanh(x):
    return np.tanh(x)

3. ReLU激活函數

ReLU是最常用的激活函數之一,存在著很好的非線性特性和簡單的計算過程。當輸入大於0時,ReLU函數的導數為1,避免了梯度消失問題;而當輸入小於等於0時,ReLU函數的導數為0,使得神經元輸出為0,避免了神經元過度激活。


def relu(x):
    return np.maximum(x, 0)

4. LeakyReLU激活函數

LeakyReLU是ReLU的缺陷之一的改進版,由於ReLU激活函數在x<0時,輸出為0,從而導致一部分神經元變為「死神經元」,不再發揮作用,因此LeakyReLU激活函數解決了這個問題。當x<0時,LeakyReLU需要乘上很小的數,這樣就不會輸出0了,而是輸出很小的值,使「死神經元」繼續發揮作用。


def leaky_relu(x):
    return np.maximum(0.001 * x, x)

三、如何選擇激活函數?

選擇合適的激活函數需要考慮數據的類型和神經網路的結構。以下是一些常見激活函數的適用場景:

1. Sigmoid

Sigmoid主要適用於二分類問題,一般不建議使用。如果必須使用,則需要注意初始化神經網路的權重參數,不要讓Sigmoid函數在輸入極端取值時出現梯度消失問題。

2. Tanh

Tanh適用於中小規模的神經網路中,但同樣存在著梯度消失問題,需要注意輸入取值的範圍。

3. ReLU

ReLU是目前主流的激活函數之一,由於不存在梯度消失問題,一般在神經網路的中間層和輸出層中廣泛應用。

4. LeakyReLU

LeakyReLU可以在ReLU的基礎上避免死神經元的問題,適用於中小規模的卷積神經網路中。

選擇合適的激活函數需要根據具體的任務及模型結構選擇,需要根據具體場景來驗證選擇的激活函數是否真正符合自己的場景。

原創文章,作者:AGGJA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333680.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AGGJA的頭像AGGJA
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • 為什麼Python不能編譯?——從多個方面淺析原因和解決方法

    Python作為很多開發人員、數據科學家和計算機學習者的首選編程語言之一,受到了廣泛關注和應用。但與之伴隨的問題之一是Python不能編譯,這給基於編譯的開發和部署方式帶來不少麻煩…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 單片機列印函數

    單片機列印是指通過串口或並口將一些數據列印到終端設備上。在單片機應用中,列印非常重要。正確的列印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的列印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29

發表回復

登錄後才能評論