---
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
