---
# System prepended metadata

title: Deep Learning Courses

---

# Deep Learning Courses
## Outline
- basic
    - Gradient Descent
    - Backpropagation
    - CNN
    - Batch Normalization
- advanced
    - RNN
### Gradient Descent
#### Adagrad
根據時間改變learning rate
![](https://i.imgur.com/ztMonkw.png)

#### Stochastic Gradient Descent
每次拿一個example(隨機or按順序)
loss只考慮此example，update參數時，也只考慮此example
而在一般Gradient Descent中，則是考慮所有data的loss
![](https://i.imgur.com/MlGp7Ee.jpg)
#### Feature Scaling
$y=b+w1x1+w2x2$
希望不同feature的scaling是一樣的
![](https://i.imgur.com/66nAtaC.png)

會比較有效率，因為會向著圓心走
![](https://i.imgur.com/1FREzp4.png)

### Backpropagation
#### backward pass
先算完 forward pass
建一個反向的 neural network
![](https://i.imgur.com/Xq4fcKF.png)

### CNN
CNN 是為了簡化，不要使用fully connected, 在一開始便過濾掉一些參數

為什麼可以不用全部的參數做影響處理?

1. 影像處理中第一層layer是判斷某一pattern是否存在，而通常不需看一整張圖，而是看一小區塊即可知道
2. 同一個pattern可能會出現在不同張圖的不同region，不需要以不同neuron用不同參數判斷一樣的東西，而是要求兩個neuron共享同一組參數
3. 以subsampling方式，圖片的影像辨識不會有明顯改變，可以用此概念將影像縮小，減少參數數量  

1.2.由 convolution 處理
![](https://i.imgur.com/25LWvwc.png)
3.由 max pooling 處理

![](https://i.imgur.com/ANqVlj0.jpg)

feature maps的數量不會因為做 repeat convolution 就變成平方數量(幾個filter就會output幾個filter)

###### input->convolution->max pooling->flatten->output

### Batch Normalization
在每一個layer output出的feature做feature scaling，好處是可以使 internal covariate shift 減少一些，learning rate可以設大一點，且有一些對抗overfittiing的效果

batch size若太小，則batch normalization performance效果會很差，因為無法從batch估算整個data的平均

### RNN
會將 hidden layer 的 output 存起來，供給後面的使用
![](https://i.imgur.com/6iEqKEj.png)
因此圖中"Taipei" 的vector一樣，但hidden layer output 可能會不同，因為會被存在memory中的值所影響

分成兩種network
![](https://i.imgur.com/n58bnm7.png)
- Elman network
    把hidden layer的值存起來，下一個時間點再讀出來
- Jordan network
    把整個network output存起來(較好) 因為hidden layer沒有target，不清楚學到了什麼

LSTM(Long short-term memory)
首先會經過一個input gate，若是打開的才能寫入mem，最後也會有個output gate，決定其他neuron 可否從此記憶體把值取出，而還有一個gate是forget gate，決定memory中的值保留與否
所以共四個input一個output

