1. 程式人生 > >【神經網路】RELU 啟用函式及其他相關的函式

【神經網路】RELU 啟用函式及其他相關的函式

轉載自:http://blog.csdn.net/u013146742/article/details/51986575

日常 coding 中,我們會很自然的使用一些啟用函式,比如:sigmoid、ReLU等等。不過好像忘了問自己一(n)件事:

  1. 為什麼需要啟用函式?
  2. 啟用函式都有哪些?都長什麼樣?有哪些優缺點?
  3. 怎麼選用啟用函式?

本文正是基於這些問題展開的,歡迎批評指正!

此處輸入圖片的描述
(此圖並沒有什麼卵用,純屬為了裝x …)

Why use activation functions?

啟用函式通常有如下一些性質:

  • 非線性: 當啟用函式是線性的時候,一個兩層的神經網路就可以逼近基本上所有的函數了。但是,如果啟用函式是恆等啟用函式的時候(即f
    (x)=x
    ),就不滿足這個性質了,而且如果MLP使用的是恆等啟用函式,那麼其實整個網路跟單層神經網路是等價的。
  • 可微性: 當優化方法是基於梯度的時候,這個性質是必須的。
  • 單調性: 當啟用函式是單調的時候,單層網路能夠保證是凸函式。
  • f(x)x: 當啟用函式滿足這個性質的時候,如果引數的初始化是random的很小的值,那麼神經網路的訓練將會很高效;如果不滿足這個性質,那麼就需要很用心的去設定初始值。
  • 輸出值的範圍: 當啟用函式輸出值是 有限 的時候,基於梯度的優化方法會更加 穩定,因為特徵的表示受有限權值的影響更顯著;當啟用函式的輸出是 無限 的時候,模型的訓練會更加高效,不過在這種情況小,一般需要更小的learning rate.

這些性質,也正是我們使用啟用函式的原因!

Activation Functions.

Sigmoid

此處輸入圖片的描述

Sigmoid 是常用的非線性的啟用函式,它的數學形式如下: 

f(x)=11+ex

正如前一節提到的,它能夠把輸入的連續實值“壓縮”到0和1之間。 
特別的,如果是非常大的負數,那麼輸出就是0;如果是非常大的正數,輸出就是1. 
sigmoid 函式曾經被使用的很多,不過近年來,用它的人越來越少了。主要是因為它的一些 缺點:

  • Sigmoids saturate and kill gradients. (saturate 這個詞怎麼翻譯?飽和?)sigmoid 有一個非常致命的缺點,當輸入非常大或者非常小的時候(saturation),這些神經元的梯度是接近於0的,從圖中可以看出梯度的趨勢。所以,你需要尤其注意引數的初始值來儘量避免saturation的情況。如果你的初始值很大的話,大部分神經元可能都會處在saturation的狀態而把gradient kill掉,這會導致網路變的很難學習。
  • Sigmoid 的 output 不是0均值. 這是不可取的,因為這會導致後一層的神經元將得到上一層輸出的非0均值的訊號作為輸入。 
    產生的一個結果就是:如果資料進入神經元的時候是正的(e.g. x>0 elementwise in f=wTx+b),那麼 w 計算出的梯度也會始終都是正的。 
    當然了,如果你是按batch去訓練,那麼那個batch可能得到不同的訊號,所以這個問題還是可以緩解一下的。因此,非0均值這個問題雖然會產生一些不好的影響,不過跟上面提到的 kill gradients 問題相比還是要好很多的。

tanh

tanh 是上圖中的右圖,可以看出,tanh 跟sigmoid還是很像的,實際上,tanh 是sigmoid的變形: 

tanh(x)=2sigmoid(2x)1

與 sigmoid 不同的是,tanh 是0均值的。因此,實際應用中,tanh 會比 sigmoid 更好(畢竟去粗取精了嘛)。

此處輸入圖片的描述

ReLU

近年來,ReLU 變的越來越受歡迎。它的數學表示式如下: 

f(x)=max(0,x)

很顯然,從圖左可以看出,輸入訊號<0時,輸出都是0,>0 的情況下,輸出等於輸入。w 是二維的情況下,使用ReLU之後的效果如下:

此處輸入圖片的描述

ReLU 的優點:

  • Krizhevsky et al. 發現使用 ReLU 得到的SGD的收斂速度會比 sigmoid/tanh 快很多(看右圖)。有人說這是因為它是linear,而且 non-saturating
  • 相比於 sigmoid/tanh,ReLU 只需要一個閾值就可以得到啟用值,而不用去算一大堆複雜的運算。

ReLU 的缺點: 當然 ReLU 也有缺點,就是訓練的時候很”脆弱”,很容易就”die”了. 什麼意思呢?

舉個例子:一個非常大的梯度流過一個 ReLU 神經元,更新過引數之後,這個神經元再也不會對任何資料有啟用現象了。

如果這個情況發生了,那麼這個神經元的梯度就永遠都會是0.

實際操作中,如果你的learning rate 很大,那麼很有可能你網路中的40%的神經元都”dead”了。 
當然,如果你設定了一個合適的較小的learning rate,這個問題發生的情況其實也不會太頻繁。

Leaky-ReLU、P-ReLU、R-ReLU

Leaky ReLUs: 就是用來解決這個 “dying ReLU” 的問題的。與 ReLU 不同的是: 

f(x)=αx(x<0) f(x)=x(x>=0)

這裡的 

相關推薦

神經網路RELU 啟用函式及其相關函式

轉載自:http://blog.csdn.net/u013146742/article/details/51986575 日常 coding 中,我們會很自然的使用一些啟用函式,比如:sigmoid、ReLU等等。不過好像忘了問自己一(n)件事: 為什

神經網路神經元ReLU、Leaky ReLU、PReLU和RReLU的比較

下圖是ReLU、Leaky ReLU、PReLU和RReLU的比較:            ReLU,對小於0部分,直接置為0;     Leaky ReLU,對小於0部分,進行這樣的轉換:y_i=a_i

神經網路自編碼聚類演算法--DEC (Deep Embedded Clustering)

1.演算法描述      最近在做AutoEncoder的一些探索,看到2016年的一篇論文,雖然不是最新的,但是思路和方法值得學習。論文原文連結 http://proceedings.mlr.press/v48/xieb16.pdf,論文有感於t-SNE演算法的t-

RELU 啟用函式及其相關函式

日常 coding 中,我們會很自然的使用一些啟用函式,比如:sigmoid、ReLU等等。不過好像忘了問自己一(n)件事: 為什麼需要啟用函式?啟用函式都有哪些?都長什麼樣?有哪些優缺點?怎麼選用啟用函式? 本文正是基於這些問題展開的,歡迎批評指正! (此圖並沒有

神經網路VGG、ResNet、GoogleLeNet、AlexNet等常用網路程式碼及預訓練模型

常用資料集: 模型們在ImageNet競賽上的top-5錯誤率概況: 常用預訓練模型池: AlexNet資訊如上圖 - 在當時第一次使用了ReLU - 使用了Norm層(在當時還不廣泛) - 訓練資料量增大 - dropout 0.5 - 每批資料

神經網路神經網路視覺化工具

t-SNE  方法:在fc7(倒數第一層fc)提取輸出,並用歐氏距離遠近展示(或聚類)。好的網路可以直觀看到同分類的圖片聚在一起,幾何上易被切割出來。 一個例子: Visualizing Activations 方法:     1. 逆向使用已訓練好的神經網路生成圖

神經網路卷積層輸出大小計算(長、寬、深度)

先定義幾個引數 輸入圖片大小 W×W Filter大小 F×F 步長 S padding的畫素數 P 於是我們可以得出 N = (W − F + 2P )/S+1 輸出圖片大小為 N×N 轉載: 卷積中的特徵圖大小計算方式有兩種,分別是‘VALID’和‘SAM

神經網路神經網路架構大全剖析(附原始論文地址)

隨著新的神經網路架構不時出現,很難跟蹤這些架構。知道所有縮寫(DCIGN,BiLSTM,DCGAN,anyone?)起初可能有點壓倒性。 所以我決定編寫一個包含許多這些體系結構的備忘單。這些大多數是神經網路,有些是完全不同的野獸。雖然所有這些體系結構都是新穎而獨特的,但是當

神經網路神經網路加速之量化模型

1.簡介 量化模型(Quantized Model)是一種模型加速(Model Acceleration)的方法的總稱,主要包括二值化網路(Binary Network)、三值化網路(Ternary Network)、深度壓縮(Deep Compre

神經網路GAN原理總結,CatGAN

定義及原理:            生成器 (G)generator:接收一個隨機的噪聲z(隨機數),通過這個噪聲生成影象。G的目標就是儘量生成真實的圖片去欺騙判別網路D。        判別器(D) discriminator:對接收的圖片進行真假判別。它的輸入引數是x

神經網路ReLU到Sinc,26種啟用函式視覺化

轉自:https://mp.weixin.qq.com/s/7DgiXCNBS5vb07WIKTFYRQ 在神經網路中,啟用函式決定來自給定輸入集的節點的輸出,其中非線性啟用函式允許網路複製複雜的非線性行為。正如絕大多數神經網路藉助某種形式的梯度下降進行優化,啟用函式需要是可微分(或者至

轉載ReLU啟用函式:簡單之美

導語 在深度神經網路中,通常使用一種叫修正線性單元(Rectified linear unit,ReLU)作為神經元的啟用函式。ReLU起源於神經科學的研究:2001年,Dayan、Abott從生物學角度模擬出了腦神經元接受訊號更精確的啟用模型,如下圖: 其中橫軸是時間(m

神經網路中的啟用函式sigmoid、 tanh 、RELU

首先解釋為什麼要做: 再解釋怎麼做: 從數學上來看,Sigmoid函式對中央區的訊號增益較大,對兩側區的訊號增益小,在訊號的特徵空間對映上,有很好的效果。 在具體應用中,t

神經網路中的啟用函式(activation function)-Sigmoid, ReLu, TanHyperbolic(tanh), softmax, softplus

  不管是傳統的神經網路模型還是時下熱門的深度學習,我們都可以在其中看到啟用函式的影子。所謂啟用函式,就是在神經網路的神經元上執行的函式,負責將神經元的輸入對映到輸出端。常見的啟用函式包括Sigmoid、TanHyperbolic(tanh)、ReLu、 sof

神經網路入門用JAVA實現感知器演算法

簡述 隨著網際網路的高速發展,A(AI)B(BigData)C(Cloud)已經成為當下的核心發展方向,假如三者深度結合的話,AI是其中最核心的部分。所以如果說在未來社會,每個人都必須要學會程式設計的話,那麼對於程式設計師來說,人工智慧則是他們所必須掌握的技術(科技發展真tm快)。 這篇文章介紹

[深度學習] 神經網路中的啟用函式(Activation function)

20180930 在研究調整FCN模型的時候,對啟用函式做更深入地選擇,記錄學習內容 啟用函式(Activation Function),就是在人工神經網路的神經元上執行的函式,負責將神經元的輸入對映到輸出端。 線性啟用函式:最簡單的linear fun

神經網路和深度學習筆記

文章導讀: 1.交叉熵損失函式   1.1 交叉熵損失函式介紹   1.2 在MNIST數字分類上使用交叉熵損失函式   1.3 交叉熵的意義以及來歷   1.4 Softmax 2. 過擬合和正則化   2.1 過擬合   2.2 正則化   2.3 為什麼正則化可以減輕

為什麼神經網路中需要啟用函式(activation function)?

在看tensorflow的時候,發現書中程式碼提到,使用ReLU啟用函式完成去線性化為什麼需要啟用函式去線性化?查了一下quaro,覺得這個回答能看明白(順便問一句,截圖算不算引用??)---------------------------------------------

淺析神經網路中的啟用函式

1 什麼是啟用函式 啟用函式就是一類x到y的對映 目的:是為了引入非線性元素,解決線性模型不能解決的問題。 意義:一個沒有啟用函式的神經網路將只不過是一個線性迴歸模型(Linear regression Model)。它並不能表達複雜的資料分佈。 啟用

神經網路與深度學習neural-style、chainer-fast-neuralstyle影象風格轉換使用

1. 安裝  我的作業系統是win10,裝了Anaconda,TensorFlow包是通過pip安裝的,中間沒什麼可說的.具體看TensorFlow官網就可以了. 2. 使用 python neural_style.py --content <content fi