[徵文] Self-Normalizing Neural Networks

看板DataScience作者 (MXNet)時間6年前 (2018/07/09 01:02), 編輯推噓14(1404)
留言18則, 14人參與, 6年前最新討論串1/4 (看更多)
既然都報名了,所以就讀了。 以下會用我自己的理解、用比較口頭的敘述,若用字不精確、還請見諒。 ---- arXiv: https://arxiv.org/abs/1706.02515 I. Abstract Deep Learning 中有兩個很成功的 model,CNNs 在 vision 上、RNNs 在 NLP tasks 上。 那麼傳統的 Feed-forward NN (以下稱 FNNs) 的 Deep Learning 成功故事卻極少。 FNN 表現好的狀況都是 shallow (對比於其他兩個 deep model) 的, 裡面的 abstract representation 沒辦法做得 high-level,因爲 shallow。 本篇提出 self-normalizing neural networks (SNNs) 的方法, 讓 FNNs 有能力做出 high-level abstract representation 的能力。 這個 SNNs 你只要躺著用,每一層 layer 的 output 都會自動收斂到 mean = 0, variance = 1 ,對比其他 normalization 方法是需要主動去 做 normalization 操作的(筆者註:像是 batch norm 你要導入額外的參數 γ 跟 β,而且是需要學習的參數,所以 SNNs 也太爽了吧,躺著用) 本篇 proposed 這個 SNNs 使用的 activation function 是 "scaled exponential linear units" (SELUs),這個 activation function 有 self-normalizing 的特性。這篇用 Banach fixed-point theorem (筆者註:?) 證明,SNNs 把 layer output 收斂到 mean = 0, var = 1 的能力,而且是能夠 抵抗 noise 跟有的沒的 perturbations。 SNNs 的收斂性帶來以下好處: 1) 網路能夠變 deep 2) 能夠導入 strong regularization scheme (筆者註:e.g. dropout 像是 noise term) 3) learning 的穩定性高 即使在尚未把網路收斂到 var = 1 的狀況,本篇證明這個 var 是有上下界的,因此 不會出現 gradient exploding 或 vanishing 的狀況。 本篇火力展示: 1) 121 tasks from the UCI machine learning repository 2) drug discovery benchmarks 3) astronomy tasks with standard FNNs 本篇有 code: https://github.com/bioinf-jku/SNNs II. Introduction 這裡前兩段在講 CNN、RNN 成功的故事,麻煩各位有興趣自行閱讀,裡面就是大量的 citation。 在 training deep 的 CNN 方面,有 batch normalization、layer normalization、 weight normlization。但是這些 normlization 的技術會受到來自 SGD、 stochastic regularization (e.g. dropout) 等的干擾。 CNN 與 RNN 的 model 因為有 weight sharing 的關係,training 過程中受到的干擾 比較少,而且整個 model 比較穩定。而這些干擾對 FNNs 就影響很大, 如 figure 1 所示。本篇認為 FNNs 因為對干擾很敏感,而比 CNN、RNN 不好訓練。 SNNs 則夠 robust 去抵抗這些干擾,如 Figure 1 所示。 III. Self-normalizing Neural Networks (SNNs) 先定義一堆符號: 1) actvation function f 2) weight matrix W 兩個 layer 中間的 weight matrix 3) activations in lower layer x 就是兩個 layer 之間,前面的 layer 的 output 4) input z = Wx 後面 layer 的會拿到 乘完 weight matrix 的東西 5) activation in higher layer y = f(z) 後面 layer 的 output 6) activations 的 mean μ = E(x_i) ~ μ = E(y_i) 7) activation 的 variance (註:這裡的 notation 是 $nu$) ν = Var(x_i) ~ ν = Var(y_i) 8) weight vector 的 mean 為 ω 9) weight vector 的 var 為 τ 10) g 是個 function,代表兩個 layer 之間 mean 跟 variance 的關係。 ~ ~ g(μ, ν) = (μ, ν) batch normalization、layer normalization 或 weight normalization 則是去確保這個 g function 會把東西 mapping 到 predefined values, 通常是 (0, 1)。 Definition 1: 我們稱一個網路是 self-normalizing 需滿足以下條件。 它的每一個 activations y 必須有一個 mapping g: Ω→Ω, 而且這個 g 擁有一個好的 fixed point (ω, τ)。 Ω定義成 Ω = { (μ, ν) | μ ∈ [μ_min, μ_max], ν ∈ [ν_min, ν_max]}g(Ω) ⊆ᆪ[。 當 g 被多次重複的 apply 到 ΩΩ裡面的每個點,會收斂到 fixed point (ω, τ)。 Definition 1 筆者註 這裡我們的 g function 就是 normalization 的手段。 數學上的 fixed point 定義成 g(ω, τ) = (ω, τ), 即不管怎麼 apply mapping,其結果不動的點。 這個 fixed point 是由 layer 中間 weight vector 的 mean 跟 var 組成。 如果整個 networks 的 activations (就是每個 layer 的 y)的 mean and var 都在 predefined intervals 裡面,那麼我們會說整個網路被 normalized 了。 現在我們單看兩個 layer 之間的 activations x and y, 如果 x 的 mean 跟 var 值域已經在 predefined intervals 那麼 y 的 mean 跟 var 也會在 predefined intervals。 因此我們的 normalization 有 transitive 的特性,橫跨整個網路。 最後,如果 g 被 iteratively apply,這些 mean 跟 var 會收斂到 fixed point。 SSNs 能夠使 activations x 的 nomalization propagating 到整個網路。 每個 layer 的 fixed point (ω, τ) 可以一樣,也可以不同,沒限制。 建構一個 SNNs 的網路: 其實就是針對 g function 做設計,那麼要從兩個地方下手,互相搭配 1) 精心設計的 activation function 2) weight matrix 的 initialization function 先來講第一種 approach,本篇提出了 "scaled exponential linear units" (SELU) 來達成 FNNs 的 self-normalizing。見本文 equation 2 selu(x) = λ( x > 0 ? x : (αe^x - α) ) 我們研究過其他 activation function,以下皆不能作出 SNNs: ReLUs, sigmoid, tanh, leaky ReLUs 都不適用。 在設計這個 activation function 有以下幾個要點: 1) function 的值域要包含正負,好讓我們控制 mean 2) 要有 saturation regions,即微分接近 0 的區域 (筆者註: 像是 sigmoid 的兩邊,對於 大 跟 很大 的 x 的 output 都是趨近 1), 這樣才能吸收 variance 過大的狀況 3) 要有斜率大於 1 的 regions,來處理 vaiarnce 過小的狀況 4) 是個 continuous curve 根據這些要點,我們 proposed 的 SELU 的 λ 的選擇上要大於 1 。 g function 的推導: 前面我們已經選出了我們的 activation function f(x) = selu(x) 那麼 gf 之間的關係就很明確了。透過 z 把整件事情連起來。推導在 paper 的 equation 3 ~ 5。 詳細的推導這裡不敘述了。 這裡做了些假設在 z 上面,只要整個隱藏層的 node 數量夠多, Deep Learning 中上百個 node 很常見,那麼 z 的 distribution, 根據中央極限定理,會形成一個 normal distribution,文中是用 normal dist. 下去推導的。 對 fixed point (0, 1) 的討論: 假設我們的 weight matrix 已經 normalized 出 ω = 0, τ = 1。 也就是 fixed point (μ ,ν) = (0, 1)。 現在我們把這個 μν 帶入上一段寫出來的 equation 4 跟 5,可以解出我們 selu(x) 裡面的參數 α 約為 1.6733 與 λ 約為 1.0507 筆者註:底下還有些對於這個 fixed point 選擇的證明,使 g 是個 contraction mapping,即這個 mapping stable 會收斂。 fixed point 對 unnormalized weights 的討論: 在網路 training 的過程中,weight vector 可能被更新了,然後就不 normalized 了。 而在我們採用上一段得出的兩個參數 α, λ 的狀況下, 如果 weight vector 的 mean 跟 var (ω, τ) 夠接近 (0, 1), 這個 g function 的 fixed point 儘管不是 (0, 1), 但也會很接近 (0, 1)。 而且這段接下來講述各種不同的 variance ν的狀況,全部的證明都附在 appendix。 簡單來說,這裡證明了 SNNs 的 g 的 fixed point 在 unnormalized weights 的狀況下是存在的。 而且對於各種 ν 過大或過小的狀況都能夠處理,而能防止網路的更新上的 gradient exploding 或是 vanishing。證明就麻煩各位有興趣自行研讀了。 筆者註:所以大家在 init 完 weights 後,即使 training 過程中的 weights 不 normalized 也沒關係。我們的 g 夠厲害。 weight initialization: 基本上就是你能夠作出 ω = 0, τ = 1 的方法都可以,本篇提了幾個: uniform distribution、truncated Gaussian distribution,還有一篇 前人的 MSRA initialization 都有相似的效果。 "Alpha-dropout" 本篇提出一個新的 dropout 技術,來用在 SNNs 中。 這個 Alpha-drouput 會隨機把 output 改成 -λα(在使用 SELU 的狀況下), 而能夠維持 activations 的 mean 跟 variance 不變。 在我們的經驗中 dropout rate 設定成 0.05 或 0.1 有不錯的效果。 III. 實驗 在這個 section 中,跑了些不同的 normalization 技術的比較, 這個部分就麻煩各位有興趣再來讀這裡的表格了。 IV. 結論 我們的 SNNs 讓 FNNs 能夠在 training 上大躍進。而且在越 deep 效果越好。 解決了 gradient exploding 跟 vanishing 的問題。 ---- 個人心得: 大概花了兩天來寫這個 post,就不管有沒有符合徵文標準的字數了。 大家覺得有學到點啥比較重要。 而有些個人的理解與見解已經混在文中了。 要不我們也來提出個啥 SNNs 的 activation function 就叫 PTT 好了? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.73.135 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1531069344.A.95A.html

07/09 02:44, 6年前 , 1F
推同校
07/09 02:44, 1F

07/09 06:16, 6年前 , 2F
校友推
07/09 06:16, 2F

07/09 07:26, 6年前 , 3F
未看完先推 改天有時間一次補完 感謝心得
07/09 07:26, 3F

07/09 09:59, 6年前 , 4F
推個 話說之前處理個問題用SeLU結果差用BN不少
07/09 09:59, 4F

07/09 11:20, 6年前 , 5F
用過SELU的就知道,有的時候RELU換SELU反而會變差
07/09 11:20, 5F

07/09 11:27, 6年前 , 6F
我覺得看 data,我自己用 ReLU 在時間序列上效果不好
07/09 11:27, 6F

07/09 12:00, 6年前 , 7F
07/09 12:00, 7F

07/09 12:08, 6年前 , 8F
推參與活動
07/09 12:08, 8F

07/09 12:14, 6年前 , 9F
07/09 12:14, 9F

07/09 13:03, 6年前 , 10F
推活動首po
07/09 13:03, 10F

07/09 13:24, 6年前 , 11F
07/09 13:24, 11F

07/09 13:34, 6年前 , 12F
借問一下 那把selu用在convolution layer也有normalize的
07/09 13:34, 12F

07/09 13:35, 6年前 , 13F
效果嗎?
07/09 13:35, 13F

07/09 18:56, 6年前 , 14F
Selu 會變差常常是因為你忘了normalize你的input
07/09 18:56, 14F

07/10 01:52, 6年前 , 15F
忘記normalize input就像有沒有忘記加分號一樣了吧XD
07/10 01:52, 15F

07/10 01:52, 6年前 , 16F
沒normalize input通常結果就直接爆的可能性比較高
07/10 01:52, 16F

07/23 14:31, 6年前 , 17F
小弟認爲你整篇po文寫成英文會比現在這樣好讀。但還是
07/23 14:31, 17F

07/23 14:31, 6年前 , 18F
推個首po
07/23 14:31, 18F
文章代碼(AID): #1RGaEWbQ (DataScience)
文章代碼(AID): #1RGaEWbQ (DataScience)