# Selu 理論與應用 ###### tags: `Deep Learning` 在這裡我並不是要說明 Selu 是怎麼生出來(畢竟大神也是花了[百頁的論文](https://arxiv.org/abs/1706.02515)才把它生出來的)。這篇只是[李弘毅教授教學](https://www.youtube.com/watch?v=1WPjVpwJ88I)的筆記,簡單介紹 Selu,Selu 的假設,怎麼用Selu才對。 ## 什麼是 Selu 從relu開始,激活函式不斷突破,依序發展為: leaky relu -> elu -> selu。 Selu 的數學式與圖形如下: :::info $a=\begin{equation} \left\{ \begin{array}{**lr**} \lambda z &, z \geq 0 \\ \lambda \alpha (e^z-1) &, z<0 \end{array} \right. \\ \end{equation}$ $\begin{align*} 其中 ,\ & \alpha = 1.67326324235\\ &\lambda = 1.05070098736 \end{align*}$  橫軸為 $z$,縱軸為 $a$ ::: ## Selu 的基本假設 Selu 有兩大基本假設: :::info 1. input ($a_1$~$a_k$) 的 mean $\mu$ = 0, varience $\sigma^2$ = 1。 2. weight($w_1$~$w_k$) 的 mean $\mu$ = 0, varience $\sigma^2$ = 1/$k$。 :::  推論出: ::: info $z$ 的 mean $\mu$ = 0, varience $\sigma^2$ = 1 ::: 再依據中央極限定理假設出: ::: info $z$ 是高斯分佈。 ::: ## Selu 的應用方式 為了正確的使用 Selu 我們必須滿足 Selu 的假設,壞消息是我們並不能保證一次次迭代後 weight 的分佈情形,好消息是我們可以控制一開始的 input 以及 weight。 ### 透過 [sklearn 的 Standardscaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html) 調整input: 作用:去均值和方差歸一化。且是針對每一個特徵維度來做的,而不是針對樣本。 $\ \ \ \ z = (x - \mu ) / \sigma$ 如此一來,新的 input: mean $\mu$ = 0, varience $\sigma^2$ = 1。 範例: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler().fit(x_train) x_train = scaler.transform(x_train) x_test = scaler.transform(x_test) ``` 證明新的 varience $\sigma^2$ = 1 :  ### 透過 [keras 的 lecun_normal initializer](https://keras.io/initializers/#lecun_norma) 初始化 weight: 根據[官方說明](https://keras.io/initializers/#lecun_normal),這種 initialer 會讓樣本分布的中心為 0,標準差($\sigma$)=sqrt(1 / $k$),而 $k$ 正是我們 weight 的數量。 範例: ```python model.add(Dense(64, kernel_initializer='lecun_normal')) ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up