自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文概覽深度學(xué)習(xí)中的激活函數(shù)

開發(fā) 開發(fā)工具 深度學(xué)習(xí)
本文從激活函數(shù)的背景知識(shí)開始介紹,重點(diǎn)講解了不同類型的非線性激活函數(shù):Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish,并詳細(xì)介紹了這些函數(shù)的優(yōu)缺點(diǎn)。

本文介紹了多種激活函數(shù),并且對(duì)比了激活函數(shù)的優(yōu)劣。本文假設(shè)你對(duì)人工神經(jīng)網(wǎng)絡(luò)(AAN)有基本了解,如果沒有,推薦先閱讀機(jī)器之心介紹過的相關(guān)文章:DNN 概述論文:詳解前饋、卷積和循環(huán)神經(jīng)網(wǎng)絡(luò)技術(shù)

1. 什么是激活函數(shù)?

生物神經(jīng)網(wǎng)絡(luò)啟發(fā)了人工神經(jīng)網(wǎng)絡(luò)的發(fā)展。但是,ANN 并非大腦運(yùn)作的近似表示。不過在我們了解為什么在人工神經(jīng)網(wǎng)絡(luò)中使用激活函數(shù)之前,先了解生物神經(jīng)網(wǎng)絡(luò)與激活函數(shù)的相關(guān)性是很有用處的。

典型神經(jīng)元的物理結(jié)構(gòu)包括細(xì)胞體(cell body)、向其他神經(jīng)元發(fā)送信號(hào)的軸突(axon)和接收其他神經(jīng)元發(fā)送的信號(hào)或信息的樹突(dendrites)。

生物神經(jīng)網(wǎng)絡(luò)

上圖中,紅色圓圈代表兩個(gè)神經(jīng)元交流的區(qū)域。神經(jīng)元通過樹突接收來自其他神經(jīng)元的信號(hào)。樹突的權(quán)重叫作突觸權(quán)值(synaptic weight),將和接收的信號(hào)相乘。來自樹突的信號(hào)在細(xì)胞體內(nèi)不斷累積,如果信號(hào)強(qiáng)度超過特定閾值,則神經(jīng)元向軸突傳遞信息。如未超過,則信號(hào)被該神經(jīng)元「殺死」,無法進(jìn)一步傳播。

激活函數(shù)決定是否傳遞信號(hào)。在這種情況下,只需要帶有一個(gè)參數(shù)(閾值)的簡(jiǎn)單階梯函數(shù)?,F(xiàn)在,當(dāng)我們學(xué)習(xí)了一些新的東西(或未學(xué)習(xí)到什么)時(shí),一些神經(jīng)元的閾值和突觸權(quán)值會(huì)發(fā)生改變。這使得神經(jīng)元之間產(chǎn)生新的連接,大腦學(xué)會(huì)新的東西。

讓我們?cè)俅卫斫膺@一概念,不過這次要使用人工神經(jīng)元。

人工神經(jīng)元

上圖中(x_1, ..., x_n)是信號(hào)向量,它和權(quán)重(w_1, ..., w_n)相乘。然后再累加(即求和 + 偏置項(xiàng) b)。最后,激活函數(shù) f 應(yīng)用于累加的總和。

注意:權(quán)重(w_1, ..., w_n)和偏置項(xiàng) b 對(duì)輸入信號(hào)進(jìn)行線性變換。而激活函數(shù)對(duì)該信號(hào)進(jìn)行非線性變換,這使得我們可以任意學(xué)習(xí)輸入和輸出之間的復(fù)雜變換。

過去已經(jīng)出現(xiàn)了很多種函數(shù),但是尋找使神經(jīng)網(wǎng)絡(luò)更好更快學(xué)習(xí)的激活函數(shù)仍然是活躍的研究方向。

2. 神經(jīng)網(wǎng)絡(luò)如何學(xué)習(xí)?

我們有必要對(duì)神經(jīng)網(wǎng)絡(luò)如何學(xué)習(xí)有一個(gè)基本了解。假設(shè)網(wǎng)絡(luò)的期望輸出是 y(標(biāo)注值),但網(wǎng)絡(luò)實(shí)際輸出的是 y'(預(yù)測(cè)值)。預(yù)測(cè)輸出和期望輸出之間的差距(y - y')可以轉(zhuǎn)化成一種度量,即損失函數(shù)(J)。神經(jīng)網(wǎng)絡(luò)犯大量錯(cuò)誤時(shí),損失很高;神經(jīng)網(wǎng)絡(luò)犯錯(cuò)較少時(shí),損失較低。訓(xùn)練目標(biāo)就是找到使訓(xùn)練集上的損失函數(shù)最小化的權(quán)重矩陣和偏置向量。

在下圖中,損失函數(shù)的形狀像一個(gè)碗。在訓(xùn)練過程的任一點(diǎn)上,損失函數(shù)關(guān)于梯度的偏導(dǎo)數(shù)是那個(gè)位置的梯度。沿偏導(dǎo)數(shù)預(yù)測(cè)的方向移動(dòng),就可以到達(dá)谷底,使損失函數(shù)最小化。使用函數(shù)的偏導(dǎo)數(shù)迭代地尋找局部極小值的方法叫作梯度下降。

人工神經(jīng)網(wǎng)絡(luò)中的權(quán)重使用反向傳播的方法進(jìn)行更新。損失函數(shù)關(guān)于梯度的偏導(dǎo)數(shù)也用于更新權(quán)重。從某種意義上來說,神經(jīng)網(wǎng)絡(luò)中的誤差根據(jù)求導(dǎo)的鏈?zhǔn)椒▌t執(zhí)行反向傳播。這通過迭代的方式來實(shí)施,經(jīng)過多次迭代后,損失函數(shù)達(dá)到極小值,其導(dǎo)數(shù)變?yōu)? 0。

我們計(jì)劃在其他文章中介紹反向傳播。這里主要指出的就是訓(xùn)練過程中出現(xiàn)的求導(dǎo)步驟。

3. 激活函數(shù)的類型

線性激活函數(shù):這是一種簡(jiǎn)單的線性函數(shù),公式為:f(x) = x。基本上,輸入到輸出過程中不經(jīng)過修改。

線性激活函數(shù)

線性激活函數(shù)

非線性激活函數(shù):用于分離非線性可分的數(shù)據(jù),是最常用的激活函數(shù)。非線性方程控制輸入到輸出的映射。非線性激活函數(shù)有 Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish 等。下文中將詳細(xì)介紹這些激活函數(shù)。

非線性激活函數(shù)

非線性激活函數(shù)

4. 為什么人工神經(jīng)網(wǎng)絡(luò)需要非線性激活函數(shù)?

神經(jīng)網(wǎng)絡(luò)用于實(shí)現(xiàn)復(fù)雜的函數(shù),非線性激活函數(shù)可以使神經(jīng)網(wǎng)絡(luò)隨意逼近復(fù)雜函數(shù)。沒有激活函數(shù)帶來的非線性,多層神經(jīng)網(wǎng)絡(luò)和單層無異。

現(xiàn)在我們來看一個(gè)簡(jiǎn)單的例子,幫助我們了解為什么沒有非線性,神經(jīng)網(wǎng)絡(luò)甚至無法逼近異或門(XOR gate)、同或門(XNOR gate)等簡(jiǎn)單函數(shù)。下圖是一個(gè)異或門函數(shù)。叉和圈代表了數(shù)據(jù)集的兩個(gè)類別。當(dāng) x_1、x_2 兩個(gè)特征一樣時(shí),類別標(biāo)簽是紅叉;不一樣,就是藍(lán)圈。兩個(gè)紅叉對(duì)于輸入值 (0,0) 和 (1,1) 都有輸出值 0,兩個(gè)藍(lán)圈對(duì)于輸入值 (0,1) 和 (1,0) 都有輸出值 1。

異或門函數(shù)的圖示

異或門函數(shù)的圖示

從上圖中,我們可以看到數(shù)據(jù)點(diǎn)非線性可分。也就是說,我們無法畫出一條直線使藍(lán)圈和紅叉分開來。因此,我們需要一個(gè)非線性決策邊界(non-linear decision boundary)來分離它們。

激活函數(shù)對(duì)于將神經(jīng)網(wǎng)絡(luò)的輸出壓縮進(jìn)特定邊界內(nèi)也非常關(guān)鍵。神經(jīng)元的輸出值可以非常大。該輸出在未經(jīng)修改的情況下饋送至下一層神經(jīng)元時(shí),可以被轉(zhuǎn)換成更大的值,這樣過程就需要極大算力。激活函數(shù)的一個(gè)任務(wù)就是將神經(jīng)元的輸出映射到有界的區(qū)域(如,0 到 1 之間)。

 

了解這些背景知識(shí)之后,我們就可以了解不同類型的激活函數(shù)了。

5. 不同類型的非線性激活函數(shù)

(1) Sigmoid

Sigmoid又叫作 Logistic 激活函數(shù),它將實(shí)數(shù)值壓縮進(jìn) 0 到 1 的區(qū)間內(nèi),還可以在預(yù)測(cè)概率的輸出層中使用。該函數(shù)將大的負(fù)數(shù)轉(zhuǎn)換成 0,將大的正數(shù)轉(zhuǎn)換成 1。數(shù)學(xué)公式為:

Sigmoid

下圖展示了 Sigmoid 函數(shù)及其導(dǎo)數(shù):

 Sigmoid 函數(shù)及其導(dǎo)數(shù)

Sigmoid 激活函數(shù)

Sigmoid 導(dǎo)數(shù)

Sigmoid 導(dǎo)數(shù)

Sigmoid 函數(shù)的三個(gè)主要缺陷:

  1. 梯度消失:注意:Sigmoid 函數(shù)趨近 0 和 1 的時(shí)候變化率會(huì)變得平坦,也就是說,Sigmoid 的梯度趨近于 0。神經(jīng)網(wǎng)絡(luò)使用 Sigmoid 激活函數(shù)進(jìn)行反向傳播時(shí),輸出接近 0 或 1 的神經(jīng)元其梯度趨近于 0。這些神經(jīng)元叫作飽和神經(jīng)元。因此,這些神經(jīng)元的權(quán)重不會(huì)更新。此外,與此類神經(jīng)元相連的神經(jīng)元的權(quán)重也更新得很慢。該問題叫作梯度消失。因此,想象一下,如果一個(gè)大型神經(jīng)網(wǎng)絡(luò)包含 Sigmoid 神經(jīng)元,而其中很多個(gè)都處于飽和狀態(tài),那么該網(wǎng)絡(luò)無法執(zhí)行反向傳播。
  2. 不以零為中心:Sigmoid 輸出不以零為中心的。
  3. 計(jì)算成本高昂:exp() 函數(shù)與其他非線性激活函數(shù)相比,計(jì)算成本高昂。

下一個(gè)要討論的非線性激活函數(shù)解決了 Sigmoid 函數(shù)中值域期望不為 0 的問題。

(2) Tanh

Tanh 激活函數(shù)

Tanh 激活函數(shù)

Tanh 導(dǎo)數(shù)

Tanh 激活函數(shù)又叫作雙曲正切激活函數(shù)(hyperbolic tangent activation function)。與 Sigmoid 函數(shù)類似,Tanh 函數(shù)也使用真值,但 Tanh 函數(shù)將其壓縮至-1 到 1 的區(qū)間內(nèi)。與 Sigmoid 不同,Tanh 函數(shù)的輸出以零為中心,因?yàn)閰^(qū)間在-1 到 1 之間。你可以將 Tanh 函數(shù)想象成兩個(gè) Sigmoid 函數(shù)放在一起。在實(shí)踐中,Tanh 函數(shù)的使用優(yōu)先性高于 Sigmoid 函數(shù)。負(fù)數(shù)輸入被當(dāng)作負(fù)值,零輸入值的映射接近零,正數(shù)輸入被當(dāng)作正值。

唯一的缺點(diǎn)是:Tanh 函數(shù)也會(huì)有梯度消失的問題,因此在飽和時(shí)也會(huì)「殺死」梯度。

為了解決梯度消失問題,我們來討論另一個(gè)非線性激活函數(shù)——修正線性單元(rectified linear unit,ReLU),該函數(shù)明顯優(yōu)于前面兩個(gè)函數(shù),是現(xiàn)在使用最廣泛的函數(shù)。

(3) 修正線性單元(ReLU)

ReLU 激活函數(shù)

ReLU 激活函數(shù)

ReLU 導(dǎo)數(shù)

ReLU 導(dǎo)數(shù)

從上圖可以看到,ReLU 是從底部開始半修正的一種函數(shù)。數(shù)學(xué)公式為:

當(dāng)輸入 x<0 時(shí),輸出為 0,當(dāng) x> 0 時(shí),輸出為 x。該激活函數(shù)使網(wǎng)絡(luò)更快速地收斂。它不會(huì)飽和,即它可以對(duì)抗梯度消失問題,至少在正區(qū)域(x> 0 時(shí))可以這樣,因此神經(jīng)元至少在一半?yún)^(qū)域中不會(huì)把所有零進(jìn)行反向傳播。由于使用了簡(jiǎn)單的閾值化(thresholding),ReLU 計(jì)算效率很高。但是 ReLU 神經(jīng)元也存在一些缺點(diǎn):

  • 不以零為中心:和 Sigmoid 激活函數(shù)類似,ReLU 函數(shù)的輸出不以零為中心。
  • 前向傳導(dǎo)(forward pass)過程中,如果 x < 0,則神經(jīng)元保持非激活狀態(tài),且在后向傳導(dǎo)(backward pass)中「殺死」梯度。這樣權(quán)重?zé)o法得到更新,網(wǎng)絡(luò)無法學(xué)習(xí)。當(dāng) x = 0 時(shí),該點(diǎn)的梯度未定義,但是這個(gè)問題在實(shí)現(xiàn)中得到了解決,通過采用左側(cè)或右側(cè)的梯度的方式。

為了解決 ReLU 激活函數(shù)中的梯度消失問題,當(dāng) x < 0 時(shí),我們使用 Leaky ReLU——該函數(shù)試圖修復(fù) dead ReLU 問題。下面我們就來詳細(xì)了解 Leaky ReLU。

(4) Leaky ReLU

Leaky ReLU 激活函數(shù)

Leaky ReLU 激活函數(shù)

該函數(shù)試圖緩解 dead ReLU 問題。數(shù)學(xué)公式為:

Leaky ReLU 的概念是:當(dāng) x < 0 時(shí),它得到 0.1 的正梯度。該函數(shù)一定程度上緩解了 dead ReLU 問題,但是使用該函數(shù)的結(jié)果并不連貫。盡管它具備 ReLU 激活函數(shù)的所有特征,如計(jì)算高效、快速收斂、在正區(qū)域內(nèi)不會(huì)飽和。

Leaky ReLU 可以得到更多擴(kuò)展。不讓 x 乘常數(shù)項(xiàng),而是讓 x 乘超參數(shù),這看起來比 Leaky ReLU 效果要好。該擴(kuò)展就是 Parametric ReLU。

(5) Parametric ReLU

PReLU 函數(shù)的數(shù)學(xué)公式為:

PReLU 函數(shù)的數(shù)學(xué)公式

其中是超參數(shù)。這里引入了一個(gè)隨機(jī)的超參數(shù),它可以被學(xué)習(xí),因?yàn)槟憧梢詫?duì)它進(jìn)行反向傳播。這使神經(jīng)元能夠選擇負(fù)區(qū)域最好的梯度,有了這種能力,它們可以變成 ReLU 或 Leaky ReLU。

 

總之,最好使用 ReLU,但是你可以使用 Leaky ReLU 或 Parametric ReLU 實(shí)驗(yàn)一下,看看它們是否更適合你的問題。

(6) Swish

Swish 激活函數(shù)

Swish 激活函數(shù)

該函數(shù)又叫作自門控激活函數(shù),它近期由谷歌的研究者發(fā)布,數(shù)學(xué)公式為:

根據(jù)論文(https://arxiv.org/abs/1710.05941v1),Swish 激活函數(shù)的性能優(yōu)于 ReLU 函數(shù)。

根據(jù)上圖,我們可以觀察到在 x 軸的負(fù)區(qū)域曲線的形狀與 ReLU 激活函數(shù)不同,因此,Swish 激活函數(shù)的輸出可能下降,即使在輸入值增大的情況下。大多數(shù)激活函數(shù)是單調(diào)的,即輸入值增大的情況下,輸出值不可能下降。而 Swish 函數(shù)為 0 時(shí)具備單側(cè)有界(one-sided boundedness)的特性,它是平滑、非單調(diào)的。更改一行代碼再來查看它的性能,似乎也挺有意思。

原文:https://www.learnopencv.com/understanding-activation-functions-in-deep-learning/

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】

 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-10-25 19:05:18

深度學(xué)習(xí)語音分離

2017-10-22 06:05:28

語音識(shí)別深度學(xué)習(xí)ASR

2025-04-27 09:59:38

深度學(xué)習(xí)AI人工智能

2017-10-24 11:19:16

深度學(xué)習(xí)機(jī)器學(xué)習(xí)數(shù)據(jù)

2018-07-03 09:12:23

深度學(xué)習(xí)正則化Python

2022-07-06 10:23:13

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2017-03-07 15:13:28

Scala偏函數(shù)函數(shù)

2017-04-26 14:32:24

神經(jīng)網(wǎng)絡(luò)人工智能對(duì)杭樣本

2018-07-20 14:58:16

深度學(xué)習(xí)梯度下降損失函數(shù)

2023-10-23 18:04:42

Rust深度學(xué)習(xí)框架

2019-09-17 08:18:19

HTTP網(wǎng)絡(luò)協(xié)議狀態(tài)碼

2023-05-31 13:32:08

Javalambda函數(shù)

2024-03-01 19:26:22

2018-10-18 11:00:50

人工智能機(jī)器學(xué)習(xí)模型偏差

2021-05-22 23:08:08

深度學(xué)習(xí)函數(shù)算法

2018-08-31 14:51:30

人工智能深度學(xué)習(xí)機(jī)器學(xué)習(xí)

2018-08-08 16:08:45

深度學(xué)習(xí)機(jī)器學(xué)習(xí)NLP

2018-08-16 08:19:30

2019-11-06 17:00:51

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)人工智能

2017-09-10 08:55:07

游戲人工智能深度學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)