--- tags: cs231 --- # Lecture 6: Training Neural Networks, part I ## Activation Functions :::info :bulb: 為什麼要用 Activation Functions? The purpose of an activation function is to add some kind of non-linear property to the function, which is a neural network. Without the activation functions, the neural network could perform only linear mappings from inputs x to the outputs y. ::: :::info :bulb: Activation Functions 有什麼條件? 須選擇可微分之函數,因為在誤差反向傳遞 (Back Propagation) 運算時,需要進行一次微分計算。 :::  ### Sigmoid的優點 1. 容易計算導數的平滑函數 2. 能將數據壓縮到0和1之間,保證數據幅度不會有問題 ### Sigmoid的缺點 1. 容易出現梯度消失 (gradient vanishing) 問題: 當神經網路層數很多的時候,會將很多0到1間的數值相乘,最後這個項就會趨近於 0 ,導致權重的更新十分緩慢 2. 函數輸出不是 zero-centered: 當後面神經元之輸入皆為正數時,對權重值求梯度時,梯度數值恆為正,因此在誤差反向傳遞 (Backpropagation) 的過程中,權重都正方向更新或往負方向更新,導致收斂曲線不平滑,影響模型的收斂速度    3. 指數函數計算量較大,運算較為耗時 ---  ### tanh的優點 1. 函數輸出是 zero-centered ### tanh的缺點 1. 仍然會有梯度消失 (gradient vanishing) 問題 2. 指數函數計算量較大,運算較為耗時 ---  ### ReLU的優點 1. 分段線性性質能有效克服梯度消失的問題: ReLU 函數並不是全區間皆可微分,但是不可微分的部分可以使用 Sub-gradient 進行取代 2. 計算量小(速度約為 sigmoid 和 tanh 的6倍): 只需要判斷輸入是否大於0,無需使用任何指數運算 3. 緩解 overfitting 的問題: ReLU 會使部分神經元的輸出為0,可以讓神經網路變得稀疏, ### ReLU的缺點 1. ReLU 的輸出不是 zero-centered 2. 沒有限制數據幅度: 不會對數據做幅度壓縮,所以數據的幅度會隨著模型層數的增加不斷擴張 3. 可能會有 Dead ReLU Problem: a.初始化權重設定為不能被 activate 的數值 b. Learning rate 太大,導致在訓練過程中參數更新過大,最終權重梯度為 0,神經元即無法再被激活。 :::success :bulb:解決方式: 可採用 Xavier 初始化方法,避免將 learning rate 設置太大或使用 adagrad 等自動調節 learning rate 的演算法。 ::: :::danger :bulb: ReLU真的不會有梯度消失的問題嗎? ReLU 並非完全沒有梯度消失的問題,輸入值若為負數,輸出便為0,導致某些神經元不會被 activate,這是優點也是缺點,雖然能讓整個神經網路訓練速度、計算成本都大幅降低,也能讓整個神經網路更多樣性,但也會造成層數過多時,有很高比例的神經元將會沒有運作,造成跟梯度消失類似的效果。 ::: --- 因此又有 Leaky ReLU 類 (x<0時取一個微小值而非0), maxout (增加激勵函數專用隱藏層,有點暴力) 等方法,或使用 adagrad 等可以調節學習率的演算法。  ### Parametric ReLU的優點 1. 擁有 ReLU 的所有優點 2. 可避免 Dead ReLU Problem: 在 z<0 的地方,不會有某些神經元無法被 activate ### Parametric ReLU的缺點 1. 梯度消失的問題: 若 α 值過小 2. 梯度爆炸的問題: 如果遇到很深的神經網路,碰到極多的權重及連續乘積後,縱使 Leaky (Parametric) ReLU 導數為1或小於1的數,仍有可能造成 :::info :bulb:Activation Functions 這麼多該怎麼選? 最常使用 ReLU,但特別注意初始化權重和 learning rate 的設置,一些變形如 Leaky ReLU, Maxout, ELU 也可以試試,tanh 和 sigmoid 則盡量別用。 ::: :::info :bulb:如何避免梯度消失和爆炸的問題? 1. 可以透過正則化 (Regularization) 和 梯度截斷 (truncated gradient) 來避免梯度爆炸 2. 可以透過 LSTM 門控制機制,來避免梯度消失 3. 可以用ReLU、Leaky ReLU、PReLU、RReLU、Maxout等替代sigmoid函數。 4. 用Batch Normalization 參考來源:https://blog.csdn.net/a1b2c3d4123456/article/details/90718413 ::: :::info :bulb: Normalization 和 Zero-Centered 的差別? 1. Normalization: to "shrink" a numerical distribution in the [0,1] interval. "Normalization" would move the mean away from zero. 2. Zero-Centered: to "shift" the values of the distribution so that its mean is equal to 0. 參考來源:https://datascience.stackexchange.com/questions/54178/what-is-the-difference-between-normalization-and-zero-centering ::: 參考來源: * https://mropengate.blogspot.com/2017/02/deep-learning-role-of-activation.html * http://cvfiasd.pixnet.net/blog/post/275774124-%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92%E6%BF%80%E5%8B%B5%E5%87%BD%E6%95%B8%E4%BB%8B%E7%B4%B9 * https://www.itread01.com/content/1550898141.html * https://liam.page/2018/04/17/zero-centered-active-function/ ## Data Preprocessing :::success :question: 為什麼要做 data preprocessing? - 其實就是一種 feature engineering,根據不同的目的會有不同的作法。本次課程介紹的是 normalization,為了解決若原本資料<font color='red'>全正</font>或<font color='red'>全負,</font>將影響訓練的效率 ::: - 課程中也介紹 PCA, Whitening - PCA:在處理結構化資料時經常使用 PCA 降維,在處理 images 時常拿來去雜訊 - <font color='red'>**before**</font>: - <font color='red'>**after**</font>: - Whitening:圖片的 normalization - 特別的例子 - 可是我看了一下,好像都是對 color channel 做事情耶! - AlexNet -> [paper link](https://www.nvidia.cn/content/tesla/pdf/machine-learning/imagenet-classification-with-deep-convolutional-nn.pdf) - VGGNet -> [paper link](https://arxiv.org/pdf/1409.1556.pdf) ## Weight Initialization :::success :question: 從哪裡開使訓練比較好? ::: - 從 $W = 0$ 開始 - 從 small random numbers 開始 - 從 normal random numbers 開始 - Xavier initialization -> [paper link](http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf) :::info :bulb:可以介紹除了Xavier的其他初始化方法嗎? ::: - He Initialization -> [paper link](https://arxiv.org/pdf/1502.01852.pdf) - [這篇的 code 比較好懂](https://zhuanlan.zhihu.com/p/25110150) - [這篇推導與說明都不錯,也有 code (written by PyTorch)](https://medium.com/@chih.sheng.huang821/深度學習-weight-initialization和batch-normalization-f264c4be37f5) - 其他 initialization - random walk -> [paper link](https://arxiv.org/pdf/1412.6558.pdf) - 還有很多 ## Batch Normalization - Waht is *Batch Normalization* ? - 讓每層輸出的資料都是 normal 分佈,解決 Internal Covariate Shift - 以往都是用降低學習速率來解決 - How to calculate ? - 注意:mean$(\beta)$ 跟 variance$(\gamma)$ 也是要學習的參數之一   - What's the effect of *Batch Normalization* ? - 快速學習(不用為了 Internal Covariate Shift 降低 learning rate) - 不會過度依賴預設值(不會對預設值產生過度反應,因為已經 normalized,當然還是不要設成 **$0$**) - 控制過度學習(減少 Dropout 等必要性) - 參考資料 - [網友上李宏毅課所做的筆記](http://violin-tao.blogspot.com/2018/02/ml-batch-normalization.html) ## Babysitting the Learning Process Step 1: Preprocess the data Step 2: Choose the architecture:  舉例:    確定模型架構及參數是可行的   因為正在學習且朝著正確的方向@@  ## Hyperparameter Optimization Cross-validation strategy  可以調的超參數很多...   請酌參~  ## 問題 | 組別 | <center> 問題 </center>| |:----------------------------:| --------------------- | | 第一組 |<center>報告組</center>| | 第二組 | 1.第21頁右邊的圖可以再詳細解釋一下嗎?<br>2.可以再解釋一下zero-centered嗎?zero-centered會導致什麼結果?zero-centered vs. zero-mean(我看不懂啊啊啊啊啊啊QQQ) | 第三組 | 1. 有zero-centered對於學習通常來說都比較好嗎(因為Relu大家還是很常用壓),是因為收斂速度快嗎?為什麼有0-centered的性質會收斂速度快?</br>2.有Batch Normalization的話,我們還需要care使用什麼激活函數嗎?感覺都train的起來R!</br>3.可以再詳述or舉例什麼時候知道RELU會死嗎 | 第四組 | 1. 為什麼其他激活函數沒有sigmoid的第二個缺點?</br>2. 可以介紹除了Xavier的其他初始化方法嗎?</br>3. 為什麼每一層都要有高斯分佈?| Zero Mean是解決微分不會都是正的或負的 Zero Centered是解決函數值不會都是正的 https://datascience.stackexchange.com/questions/54178/what-is-the-difference-between-normalization-and-zero-centering https://towardsdatascience.com/weight-initialization-techniques-in-neural-networks-26c649eb3b78 
×
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