深度學習常見激活函數:ReLU,sigmoid,Tanh,softmax,Leaky ReLU,PReLU,ELU整理集合,應用場景選擇

文章目錄

  • 1、ReLU 函數(隱藏層中是一個常用的默認選擇)
    • 1.1 優點
    • 1.2 缺點
  • 2、sigmoid 函數
    • 2.1 優點
    • 2.2 缺點
  • 3、Tanh 函數
    • 3.1 優點
    • 3.2 缺點
  • 4、softmax 函數(多分類任務最后一層都會使用)
  • 5、Leaky ReLU 函數
    • 5.1 優點
    • 5.2 缺點
  • 6、PReLU 函數
  • 7、ELU 函數
  • 搭建神經網絡,應該如何選擇激活函數?
  • 總結

1、ReLU 函數(隱藏層中是一個常用的默認選擇)

整流線性單元(Rectified linear unit,ReLU) 是現代神經網絡中最常用的激活函數,大多數前饋神經網絡默認使用的激活函數,它提供了一種非常簡單的非線性變換。給定元素 x,ReLU 函數被定義為該元素與 0 的最大值。ReLU函數定義如下:
在這里插入圖片描述
代碼:

import numpy as np
import matplotlib.pyplot as plt# 定義ReLU函數
def relu(x):return np.maximum(0, x)# 生成一些輸入值,這里可以設置成其他的數值
x_values = np.linspace(-5, 5, 100)# 計算對應的ReLU輸出值
y_values = relu(x_values)# 繪制ReLU函數的圖像
plt.plot(x_values, y_values, label='ReLU Function')
plt.title('ReLU Activation Function')
plt.xlabel('Input')
plt.ylabel('Output')
plt.axhline(0, color='black',linewidth=0.5)
plt.axvline(0, color='black',linewidth=0.5)
plt.grid(color = 'gray', linestyle = '--', linewidth = 0.5)
plt.legend()
plt.show()

生成圖像如下:

在這里插入圖片描述

1.1 優點

  • x > 0 區域上,不會出現梯度飽和、梯度消失的問題,梯度永遠是常量;
  • 它在訓練神經網絡時能夠加速收斂,并且計算相對簡單;
  • 計算復雜度低,不需要進行指數運算,只要一個閾值就可以得到激活值。

1.2 缺點

  • 容易出現 神經元壞死現象(dead relu problem),最直觀的結果就是,輸入到 relu 函數中的值如果存在負數,則最終經過 relu 之后變成 0,極端情況下是輸入relu的所有值全都是負數,則relu activated之后的結果均為0。
    在這里插入圖片描述

產生這種現象的兩個原因:參數初始化不合理;learning rate 太高導致在訓練過程中參數更新太大。

2、sigmoid 函數

sigmoid 函數又稱 Logistic 函數,用于隱層神經元輸出,它將范圍 (-inf,inf) 中的任意輸入壓縮到區間 (0,1) 中的某個值,可以用來做二分類。sigmoid 函數定義如下:
在這里插入圖片描述

代碼:

# -*-coding:utf-8-*-
import numpy as np
import matplotlib.pyplot as plt# 定義Sigmoid函數
def sigmoid(x):return 1 / (1 + np.exp(-x))# 生成一些輸入值
x_values = np.linspace(-7, 7, 200)# 計算對應的Sigmoid輸出值
y_values = sigmoid(x_values)# 繪制Sigmoid函數的圖像
plt.plot(x_values, y_values, label='Sigmoid Function')
plt.title('Sigmoid Activation Function')
plt.xlabel('Input')
plt.ylabel('Output')
plt.axhline(0, color='black',linewidth=0.5)
plt.axvline(0, color='black',linewidth=0.5)
plt.grid(color = 'gray', linestyle = '--', linewidth = 0.5)
plt.legend()
plt.show()

生成圖像如下:

在這里插入圖片描述

2.1 優點

  • sigmoid 函數的輸出在 (0,1) 之間,輸出范圍有限,優化穩定,可以用作輸出層;
  • 它是個連續函數,便于求導。

2.2 缺點

  • sigmoid 函數在變量取絕對值非常大的正值或負值時會出現飽和現象,意味著函數會變得很平,并且對輸入的微小改變會變得不敏感。在反向傳播時,當梯度接近于0,權重基本不會更新,很容易就會出現梯度消失的情況,從而無法完成深層網絡的訓練。
  • 計算復雜度高,因為 sigmoid 函數是指數形式。

3、Tanh 函數

Tanh 函數也稱為雙曲正切函數,取值范圍為 (-1,1)。Tanh函數定義如下:
在這里插入圖片描述

它的導數是:

在這里插入圖片描述

代碼:

import numpy as np
import matplotlib.pyplot as plt# 定義 tanh 函數
def tanh(x):return np.tanh(x)# 定義 tanh 函數的導數
def tanh_derivative(x):return 1 - np.tanh(x)**2# 生成一些輸入值
x_values = np.linspace(-5, 5, 200)# 計算 tanh 函數的輸出值和導數值
y_tanh = tanh(x_values)
y_derivative = tanh_derivative(x_values)# 繪制 tanh 函數及其導數在同一坐標軸中的圖像
plt.plot(x_values, y_tanh, label='tanh Function')
plt.plot(x_values, y_derivative, label='tanh Derivative')
plt.title('tanh Function and its Derivative')
plt.xlabel('Input')
plt.ylabel('Output / Derivative')
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(color='gray', linestyle='--', linewidth=0.5)
plt.legend()
plt.show()

生成圖像如下:
在這里插入圖片描述
Tanh 函數圖像及導數圖像如上,當輸入接近 0 時,Tanh 函數的導數接近最大值 1。可理解為 sigmoid 函數的變形,輸入在任一方向上遠離 0 點,導數越接近 0。
在這里插入圖片描述

3.1 優點

  • 與 sigmoid 函數相同;

3.2 缺點

  • Tanh 仍然存在梯度飽和與 exp 計算復雜的問題。

4、softmax 函數(多分類任務最后一層都會使用)

使用 sigmoid 激活函數可以處理二分類任務,而在處理多分類問題的時,就需要使用 softmax 函數。它將一個實數向量(通常稱為 logits)轉換為概率分布。

輸出規則: 將輸入向量中的每個元素轉換為一個位于 (0, 1) 之間的值,使得所有元素的和等于 1。這種轉換后的好處是向量可以解釋為一個概率分布,其中每個元素表示對應類別的概率。softmax 函數公式如下:

在這里插入圖片描述
代碼:

import numpy as np
import matplotlib.pyplot as plt# 定義 Softmax 函數
def softmax(x):exp_x = np.exp(x)return exp_x / np.sum(exp_x, axis=-1, keepdims=True)# 生成一些輸入值
x_values = np.linspace(-5, 5, 200)# 計算對應的 Softmax 輸出值
y_values = softmax(x_values)# 繪制 Softmax 函數的圖像
plt.plot(x_values, y_values)
plt.title('Softmax Function')
plt.xlabel('Input')
plt.ylabel('Output Probability')
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(color='gray', linestyle='--', linewidth=0.5)
plt.show()

生成圖像如下:

在這里插入圖片描述

5、Leaky ReLU 函數

滲漏整流線性單元(Leaky ReLU),為了徹底避免 dead ReLU 現象。用一個類似 0.01 的小值來初始化神經元,從而使得 ReLU 在負數區域更偏向于激活而不是死掉。這里的斜率都是確定的,當然,這里的參數是可以調整的。

代碼:

import numpy as np
import matplotlib.pyplot as plt# 定義 Leaky ReLU 函數
def leaky_relu(x, alpha=0.01):return np.maximum(alpha * x, x)# 生成一些輸入值
x_values = np.linspace(-5, 5, 200)# 計算對應的 Leaky ReLU 輸出值
y_values = leaky_relu(x_values)# 繪制 Leaky ReLU 函數的圖像
plt.plot(x_values, y_values, label='Leaky ReLU Function')
plt.title('Leaky ReLU Activation Function')
plt.xlabel('Input')
plt.ylabel('Output')
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(color='gray', linestyle='--', linewidth=0.5)
plt.legend()
plt.show()

生成圖像如下:
在這里插入圖片描述

5.1 優點

  • Leaky ReLU 在負數輸入上有一個小的斜率,可以避免神經元“死亡”問題。

5.2 缺點

  • 盡管 Leaky ReLU 解決了某些問題,但并非總是最佳選擇。在某些情況下,其他激活函數,如 Parametric ReLU 或者 Exponential Linear Unit (ELU),可能表現更好。

6、PReLU 函數

參數整流線性單元(Parametric Rectified linear unit,PReLU),用來解決 ReLU 帶來的神經元壞死的問題。公式如下:

在這里插入圖片描述
或者
在這里插入圖片描述

其中,α 不是固定的超參數,通常初始化為一個小的正數,通過反向傳播學習。它在輸入小于零時允許一個小的斜率,而不是將其置零。
代碼:

import numpy as np
import matplotlib.pyplot as plt# 定義 PReLU 函數
def prelu(x, alpha=0.01):return np.where(x > 0, x, alpha * x)# 生成一些輸入值
x_values = np.linspace(-5, 5, 200)# 計算 PReLU 函數的輸出值
y_values = prelu(x_values)# 繪制 PReLU 函數的圖像
plt.plot(x_values, y_values, label='PReLU Function')
plt.title('PReLU Activation Function')
plt.xlabel('Input')
plt.ylabel('Output')
plt.axhline(0, color='black',linewidth=0.5)
plt.axvline(0, color='black',linewidth=0.5)
plt.grid(color='gray', linestyle='--', linewidth=0.5)
plt.legend()
plt.show()

生成圖像如下:
在這里插入圖片描述

區別:Leaky ReLU 和 PReLU 在解決激活函數中的問題(如死亡神經元)上有一些相似之處,但 PReLU 提供了更多的靈活性。

7、ELU 函數

指數線性單元(ELU):具有 ReLU 的優勢,沒有 Dead ReLU 問題,輸出均值接近0,實際上 PReLU 和 Leaky ReLU 都有這一優點。有負數飽和區域,從而對噪聲有一些魯棒性。可以看做是介于 ReLU 和 Leaky ReLU 之間的一個函數。當然,這個函數也需要計算 exp,從而計算量上更大一些。公式如下:
在這里插入圖片描述

代碼:

import numpy as np
import matplotlib.pyplot as plt# 定義 ELU 函數
def elu(x, alpha=1.0):return np.where(x > 0, x, alpha * (np.exp(x) - 1))# 生成一些輸入值
x_values = np.linspace(-5, 5, 200)# 計算 ELU 函數的輸出值
y_values = elu(x_values)# 繪制 ELU 函數的圖像
plt.plot(x_values, y_values, label='ELU Function')
plt.title('ELU Activation Function')
plt.xlabel('Input')
plt.ylabel('Output')
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(color='gray', linestyle='--', linewidth=0.5)
plt.legend()
plt.show()

生成圖像如下:
在這里插入圖片描述

搭建神經網絡,應該如何選擇激活函數?

  • 如果搭建的神經網絡的層數不多,優先考慮 sigmoid、tanh、relu 函數,這些都是可以的,如果搭建的網絡層數較多,選擇不當會造成梯度消失的問題,此時一般不宜選擇sigmoid、tanh激活函數,最好選擇 relu 激活函數。
  • 在二分類問題中,網絡的最后一層適合使用sigmoid激活函數;而多分類任務中,網絡的最后一層使用softmax激活函數。

總結

ReLU(Rectified Linear Unit):
優勢: 計算簡單,且在許多情況下表現良好。它將負數部分置為零,有助于網絡稀疏性,有利于反向傳播。
注意事項: 對于一些極端情況,可能存在“死神經元”問題,即某些神經元在訓練過程中永遠不會被激活,導致無法更新權重。

Sigmoid 函數:
優勢: 將輸出限制在 (0, 1) 范圍內,適用于二元分類問題。
注意事項: 容易發生梯度消失的問題,尤其是在深層網絡中,導致梯度較小的權重無法有效地更新。

Tanh 函數:
優勢: 類似于 Sigmoid,但輸出范圍在 (-1, 1)。對于中心化的數據,Tanh 可能更適合。
注意事項: 仍然存在梯度消失的問題。

Softmax 函數:
優勢: 用于多類別分類問題,將輸出轉化為概率分布。
注意事項: 對于二元分類問題,通常使用 Sigmoid 而不是 Softmax。

Leaky ReLU:
優勢: 在 ReLU 的基礎上解決了死神經元問題,允許小于零的斜率。
注意事項: 仍然可能存在一些負數輸出。

Parametric ReLU (PReLU):
優勢: 允許負數部分有可學習的參數。
注意事項: 需要更多的計算資源。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163527.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163527.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mongo DB -- aggregate分組查詢后字段展示

一、分組查詢 在mongoDB中可以使用aggregate中的$group操作對集合中的文檔進行分組,但是查詢后的數據不顯示其他字段,只顯示分組字段 aggregate進行分組示例 db.collection.aggregate([{$group: {_id: "$field"}},]) 查詢后顯示 展開只顯示兩個字段 二、顯示所有字段…

APM工具skywalking部署

一 整體架構 整個架構,分成上、下、左、右四部分: 上部分 Agent :負責從應用中,收集鏈路信息,發送給 SkyWalking OAP 服務器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 數據信息。而我們目前采用的是&…

Rust - cargo項目里多個二進制binary crate的編譯運行

目錄 foo - Cargo.toml - src - - main.rs - - bin - - - other-bin.rs將除默認入口文件外待作為二進制crate處理的文件放在src/bin目錄下 方法一: 命令行增加配置項 --bin xxx cargo run --bin foo // 注意! 這里是包名,不是main cargo run --bin o…

SQL基礎理論篇(九):存儲過程

文章目錄 簡介存儲過程的形式定義一個存儲過程使用delimiter定義語句結束符存儲過程中的三種參數類型流控制語句 存儲過程的優缺點參考文獻 簡介 存儲過程Stored Procedure,SQL中的另一個重要應用。 前面說的視圖,只能勉強跟編程中的函數相似&#xff…

MySQL -- JDBC

1、JDBC是什么: 是SUN公司制定的一套接口(interface)。接口都有調用者和實現者。面向接口調用、面向接口寫實現類,這都屬于面向接口編程。 2、在使用JDBC的六個步驟: 1.注冊驅動(告訴Java程序,即將連接的是哪個品牌…

業務系統上云后,如何滿足員工移動辦公快速訪問業務系統的需求?

在企業業務上云的大趨勢下,SaaS應用、云端辦公協同工具等多種遠程辦公應用系統開始大規模普及,企業員工可以隨時隨地訪問云上業務數據。然而現實情況卻十分“打臉”,企業隨時隨地要訪問云上業務的需求越迫切,問題就越大。由于多種…

算法通關村第十二關|白銀|字符串經典基礎面試題

1.反轉問題 1.1 反轉字符串 原題&#xff1a;力扣344. 要求原地修改。 public void reverseString(char[] s) {if (s null || s.length() 0) {return;}int n s.length;for (int left 0, right n - 1; left < right; left, right--) {char temp s[left];s[left] s…

小程序訂閱消息

wx.requestSubscribeMessage({tmplIds: [2IdqlWrqSbjAurzIuW8imeK-ftS8gbhYdZ0icdE],success(res) {console.log(res);// 處理用戶授權結果},fail(err) {console.error(err);// 處理授權請求失敗}});

白楊SEO:2B企業營銷是什么?當下主流的短視頻直播平臺有哪些?企業營銷要做短視頻直播選哪個平臺更好?

今天白楊SEO就正式來講講2B企業營銷選擇哪個短視頻直播平臺更好&#xff1f; 圖片在公眾號&#xff1a;白楊SEO上看。 文章大綱提前看&#xff1a; 1、先說說2B企業營銷是什么&#xff1f; 2、當下主流的短視頻直播平臺有哪些&#xff1f; 3、2B企業營銷要做短視頻直播選哪…

重磅!1區、60年老牌期刊被踢?共5本被剔除!11月SCIE/SSCI期刊目錄更新!

期刊動態&#xff1a;2023年11月SCI、SSCI期刊目錄更新 2023年11月20日&#xff0c;科睿唯安更新了WOS期刊目錄&#xff0c;繼上次10月WOS期刊目錄剔除7本SCIE&SSCI期刊之后&#xff0c;此次11月更新又有5本期刊發生變動&#xff0c;其中有4本SCIE期刊被剔除&#xff0c;1…

Postgresql根據兩表相同字段更新其中一個表的其他數據

有兩個表 table1&#xff08;id,pcode,pname,type&#xff09; 初始數據只有id、pcode&#xff0c;pname、type為空table2&#xff08;id,pcode,pname,type&#xff09; 根據table1和table的相同字段pcode&#xff0c;用table2的數據更新table1的pname和type字段。 例如&…

微信運營神器:從群發到批量添加,讓你的微信營銷更輕松

在這個數字化時代&#xff0c;微信已經成為了我們生活中不可或缺的一部分。對于許多企業和個人來說&#xff0c;微信營銷也是非常重要的一部分。但是&#xff0c;微信營銷并不是一件容易的事情&#xff0c;需要花費大量的時間和精力。為了解決這個問題&#xff0c;今天我們將向…

Linux本地MinIO存儲服務遠程調用上傳文件

&#x1f525;博客主頁&#xff1a; 小羊失眠啦. &#x1f3a5;系列專欄&#xff1a;《C語言》 《數據結構》 《Linux》《Cpolar》 ??感謝大家點贊&#x1f44d;收藏?評論?? 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;…

淘寶返利APP草柴如何綁定淘寶賬號?

草柴APP是一款淘寶、天貓、京東大額優惠券領取及購物返利省錢工具。通過草柴APP綁定淘寶賬號&#xff0c;可領取淘寶大額內部隱藏優惠券&#xff0c;領取成功再購物可享券后價優惠&#xff0c;確認收貨后可獲得淘寶返利。 淘寶返利APP草柴如何綁定淘寶賬號&#xff1f; 1、手…

Docker 快速搭建 Gitlab 服務

linux環境&#xff1a; 使用 vim 編輯 hosts 文件&#xff1a; vim /etc/hosts按 I 進入編輯模式&#xff0c;在文件末行追加上虛擬機的 IP 和要設置的域名&#xff1a; 192.168.1.17 gitlab.kunwu.toplwindows環境&#xff1a; Windows 系統的 hosts 文件位于 C:\Windows\S…

萬賓科技智能井蓋傳感器效果,特點有哪些?

現在城市發展越來越好&#xff0c;對基礎設施的改造越來越多&#xff0c;比如修路搭橋、整改生態等都是為民服務的好工程。平時走在路上我們享受著平整的路面&#xff0c;井然有序的交通也為我們帶來很大的方便。但是一個又一個的井蓋看起來無關緊要&#xff0c;實際上如果路上…

Doris的編譯與安裝(二)

安裝 Doris&#xff0c;需要先通過源碼編譯&#xff0c;主要有兩種方式&#xff1a; 使用 Docker 開發鏡像編譯&#xff08;推薦&#xff09;、直接編譯。 直接編譯的方式&#xff0c;可以參考官網&#xff1a;https://doris.apache.org/zh-CN/installing/compilation.html …

投標文件的注意事項

一、檢查標書 1.1有時候標書需要從別的地方復制黏貼文件&#xff0c;記住復制內容可以&#xff0c;但是不要復制“落款和時間”的格式&#xff0c;落款和時間的格式借鑒你的招標文件中給響應文件格式的落款和時間&#xff0c;切記&#xff01; 1.2檢查標書是否有空頁&#xf…

數據科學導論——數據預處理

第1關:引言-根深之樹不怯風折,泉深之水不會涸竭 第2關:數據清理-查漏補缺 import numpy as np import pandas as pd import matplotlib.pyplot as plt def student():train = pd.read_csv(Task1/diabetes_null.csv, na_values=[#NAME?])train[Insulin] = train[Insulin].f…

maxwell采集數據到kafka報錯

問題&#xff1a; 啟動maxwell后出現數據更新后就出現以下報錯。 13:29:14,727 ERROR MaxwellKafkaProducer - TimeoutException Position[BinlogPosition[binlog.000002:12215591], lastHeartbeat1700717043797] -- maxWellData: medical:consultation:[(id,212)] 13:29:14,7…