【神經網路】RELU 啟用函式及其他相關的函式
轉載自:http://blog.csdn.net/u013146742/article/details/51986575
日常 coding 中,我們會很自然的使用一些啟用函式,比如:sigmoid、ReLU等等。不過好像忘了問自己一(
- 為什麼需要啟用函式?
- 啟用函式都有哪些?都長什麼樣?有哪些優缺點?
- 怎麼選用啟用函式?
本文正是基於這些問題展開的,歡迎批評指正!
(此圖並沒有什麼卵用,純屬為了裝x …)
Why use activation functions?
啟用函式通常有如下一些性質:
-
非線性: 當啟用函式是線性的時候,一個兩層的神經網路就可以逼近基本上所有的函數了。但是,如果啟用函式是恆等啟用函式的時候(即
f ),就不滿足這個性質了,而且如果MLP使用的是恆等啟用函式,那麼其實整個網路跟單層神經網路是等價的。 - 可微性: 當優化方法是基於梯度的時候,這個性質是必須的。
- 單調性: 當啟用函式是單調的時候,單層網路能夠保證是凸函式。
-
f(x)≈x : 當啟用函式滿足這個性質的時候,如果引數的初始化是random的很小的值,那麼神經網路的訓練將會很高效;如果不滿足這個性質,那麼就需要很用心的去設定初始值。 - 輸出值的範圍: 當啟用函式輸出值是 有限 的時候,基於梯度的優化方法會更加 穩定,因為特徵的表示受有限權值的影響更顯著;當啟用函式的輸出是 無限 的時候,模型的訓練會更加高效,不過在這種情況小,一般需要更小的learning rate.
這些性質,也正是我們使用啟用函式的原因!
Activation Functions.
Sigmoid
Sigmoid 是常用的非線性的啟用函式,它的數學形式如下:
正如前一節提到的,它能夠把輸入的連續實值“壓縮”到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 inf=wTx+b ),那麼w 計算出的梯度也會始終都是正的。
當然了,如果你是按batch去訓練,那麼那個batch可能得到不同的訊號,所以這個問題還是可以緩解一下的。因此,非0均值這個問題雖然會產生一些不好的影響,不過跟上面提到的 kill gradients 問題相比還是要好很多的。
tanh
tanh 是上圖中的右圖,可以看出,tanh 跟sigmoid還是很像的,實際上,tanh 是sigmoid的變形:
與 sigmoid 不同的是,tanh 是0均值的。因此,實際應用中,tanh 會比 sigmoid 更好(畢竟去粗取精了嘛)。
ReLU
近年來,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 不同的是:
這裡的
轉載自:http://blog.csdn.net/u013146742/article/details/51986575
日常 coding 中,我們會很自然的使用一些啟用函式,比如:sigmoid、ReLU等等。不過好像忘了問自己一(n)件事:
為什
下圖是ReLU、Leaky ReLU、PReLU和RReLU的比較:
ReLU,對小於0部分,直接置為0;
Leaky ReLU,對小於0部分,進行這樣的轉換:y_i=a_i 1.演算法描述
最近在做AutoEncoder的一些探索,看到2016年的一篇論文,雖然不是最新的,但是思路和方法值得學習。論文原文連結 http://proceedings.mlr.press/v48/xieb16.pdf,論文有感於t-SNE演算法的t-
日常 coding 中,我們會很自然的使用一些啟用函式,比如:sigmoid、ReLU等等。不過好像忘了問自己一(n)件事:
為什麼需要啟用函式?啟用函式都有哪些?都長什麼樣?有哪些優缺點?怎麼選用啟用函式?
本文正是基於這些問題展開的,歡迎批評指正!
(此圖並沒有
常用資料集:
模型們在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
定義及原理:
生成器 (G)generator:接收一個隨機的噪聲z(隨機數),通過這個噪聲生成影象。G的目標就是儘量生成真實的圖片去欺騙判別網路D。
判別器(D) discriminator:對接收的圖片進行真假判別。它的輸入引數是x
轉自:https://mp.weixin.qq.com/s/7DgiXCNBS5vb07WIKTFYRQ
在神經網路中,啟用函式決定來自給定輸入集的節點的輸出,其中非線性啟用函式允許網路複製複雜的非線性行為。正如絕大多數神經網路藉助某種形式的梯度下降進行優化,啟用函式需要是可微分(或者至
導語
在深度神經網路中,通常使用一種叫修正線性單元(Rectified linear unit,ReLU)作為神經元的啟用函式。ReLU起源於神經科學的研究:2001年,Dayan、Abott從生物學角度模擬出了腦神經元接受訊號更精確的啟用模型,如下圖:
其中橫軸是時間(m
首先解釋為什麼要做:
再解釋怎麼做:
從數學上來看,Sigmoid函式對中央區的訊號增益較大,對兩側區的訊號增益小,在訊號的特徵空間對映上,有很好的效果。
在具體應用中,t
不管是傳統的神經網路模型還是時下熱門的深度學習,我們都可以在其中看到啟用函式的影子。所謂啟用函式,就是在神經網路的神經元上執行的函式,負責將神經元的輸入對映到輸出端。常見的啟用函式包括Sigmoid、TanHyperbolic(tanh)、ReLu、 sof
簡述 隨著網際網路的高速發展,A(AI)B(BigData)C(Cloud)已經成為當下的核心發展方向,假如三者深度結合的話,AI是其中最核心的部分。所以如果說在未來社會,每個人都必須要學會程式設計的話,那麼對於程式設計師來說,人工智慧則是他們所必須掌握的技術(科技發展真tm快)。
這篇文章介紹
20180930 在研究調整FCN模型的時候,對啟用函式做更深入地選擇,記錄學習內容
啟用函式(Activation Function),就是在人工神經網路的神經元上執行的函式,負責將神經元的輸入對映到輸出端。
線性啟用函式:最簡單的linear fun
文章導讀:
1.交叉熵損失函式
1.1 交叉熵損失函式介紹
1.2 在MNIST數字分類上使用交叉熵損失函式
1.3 交叉熵的意義以及來歷
1.4 Softmax
2. 過擬合和正則化
2.1 過擬合
2.2 正則化
2.3 為什麼正則化可以減輕
在看tensorflow的時候,發現書中程式碼提到,使用ReLU啟用函式完成去線性化為什麼需要啟用函式去線性化?查了一下quaro,覺得這個回答能看明白(順便問一句,截圖算不算引用??)---------------------------------------------
1 什麼是啟用函式
啟用函式就是一類x到y的對映
目的:是為了引入非線性元素,解決線性模型不能解決的問題。
意義:一個沒有啟用函式的神經網路將只不過是一個線性迴歸模型(Linear regression Model)。它並不能表達複雜的資料分佈。
啟用
1. 安裝
我的作業系統是win10,裝了Anaconda,TensorFlow包是通過pip安裝的,中間沒什麼可說的.具體看TensorFlow官網就可以了. 2. 使用
python neural_style.py --content <content fi 相關推薦
【神經網路】RELU 啟用函式及其他相關的函式
【神經網路】神經元ReLU、Leaky ReLU、PReLU和RReLU的比較
【神經網路】自編碼聚類演算法--DEC (Deep Embedded Clustering)
RELU 啟用函式及其他相關的函式
【神經網路】VGG、ResNet、GoogleLeNet、AlexNet等常用網路程式碼及預訓練模型
【神經網路】神經網路視覺化工具
【神經網路】卷積層輸出大小計算(長、寬、深度)
【神經網路】神經網路架構大全剖析(附原始論文地址)
【神經網路】神經網路加速之量化模型
【神經網路】GAN原理總結,CatGAN
神經網路 從ReLU到Sinc,26種啟用函式視覺化
【轉載】ReLU啟用函式:簡單之美
神經網路中的啟用函式sigmoid、 tanh 、RELU
神經網路中的啟用函式(activation function)-Sigmoid, ReLu, TanHyperbolic(tanh), softmax, softplus
【神經網路入門】用JAVA實現感知器演算法
[深度學習] 神經網路中的啟用函式(Activation function)
【神經網路和深度學習】筆記
為什麼神經網路中需要啟用函式(activation function)?
淺析神經網路中的啟用函式
【神經網路與深度學習】neural-style、chainer-fast-neuralstyle影象風格轉換使用