---
# System prepended metadata

title: 'MIT Intro to Deep Learning: Lecture 1'
tags: [course, ' Deep learning']

---

---
tags: course, Deep learning
---

# MIT Intro to Deep Learning: Lecture 1

[Course Link](https://www.youtube.com/watch?v=njKP3FqW3Sk&list=PLtBw6njQRU-rwp5__7C0oIVt26ZgjG9NI&index=1)

## Why Deep learning?

* 現實世界的特徵過多，人類無法一一列出來做處理，這在實際面上是完全不可能的，因此何不如讓電腦自己學習究竟有那些特徵要去學習呢

* using image as example. 
  * 輸入一堆圖片，其中的特徵有分低中高階，如圖 
![](https://i.imgur.com/qqRsfSr.jpg)

* Why Now?
  * pervasive data
  * alog are parallelizable
  * software are convenient
  ![](https://i.imgur.com/AarZTn2.jpg)

---

## The Perceptron: Forward Propagation

* input $x_1...x_m$ , multiply $w_1...w_m$ , add, pass non-linear, become output y

* But this is NOT CORRECT

* Bias的目的在於允許你不管input去就可以把activation function移動到左邊或者右邊，也就是說他並不會被input影響，提供NN在fit範圍上的調整
 
 ![](https://i.imgur.com/uy2R2VQ.jpg)

* 實際上x和w都可以是一串vector


### Activation Fun

* Sigmoid

  * 當你想要輸出一個0到1之間的數值來代表機率的時候很有用

* Others

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


### Importance of Activation Function

* 生活的資料其實都是非線性的

* 分開紅綠點的Example

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


* 這就是NN強大的原因

* 舉了一個2維的example
  * 這是整個model的feature space
  * z代表的是輸入非線性函數之前的數值 (output of dot product)
  * 若z<0則輸出的y(機率)必定小於0.5，反之
![](https://i.imgur.com/lBwx8aR.jpg)
 
---

## Building NN with Perceptrons

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

* How it works?
  * take input 
  * dot product with weight and add bias
  * apply non-linear


* input , hidden , output
  * hidden因為不可直接被觀察到而得名
  * 裡面的參數是學來的

* input和hidden之間有一串W，hidden和output則有另一串W

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

* Code example
  * n和2代表輸出 
![](https://i.imgur.com/pPuzT3p.jpg)


* Extend it to Deep !
![](https://i.imgur.com/6nLPfER.jpg)


## Applying NNs

### Example

* Goal: 預測你能過這堂課的機率
* 2 features
  * 你的修課數量
  * 你花在期末Project上的時間
* Plot on a feature space
![](https://i.imgur.com/rySa6g7.jpg)

* 直接通過一個NN完全行不通 (Predicted vs Acutal差太多)

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

* 為什麼?
  * 沒有經過Training，根本沒學到東西
* How to train it?
  * 為了教模型對錯要定義Loss/Error
  * 當Loss大，模型就知道這是錯的參數，反之
  ![](https://i.imgur.com/a3KMIDC.jpg)

---

### Loss

* 也可稱為目標函數或者是經驗風險
* 這裡把每個單獨loss相加取平均來算出總體loss
![](https://i.imgur.com/ib4i728.jpg)

* 實際上若將這個問題視為二元分類問題，我們會使用softmax Cross-entropy loss來算
![](https://i.imgur.com/WKn7zej.jpg)


* 如果把這個問題視為回歸問題呢?
* 預測的變成是你最後會拿到的分數是幾分
* 不同問題要用不同的loss func, 這裡改為使用MSE
![](https://i.imgur.com/VP8FJnn.jpg)


## Training NNs

* 為了訓練一個好的模型，我們必須知道要如何優化loss

### Loss Optimization

* W* 就是我們想要優化的a set of Weights，而這些優化的W可以使得模型在test set上算出的loss最小
* Test set是我們用來評估模型好壞的資料集
* 在這個例子中，你就是test set
* $J(W)$代表的是loss function
  * 其中的$W$代表的是全部的W，而非單一個 
![](https://i.imgur.com/lCqx5VV.jpg)
* 將這個步驟視覺化將會是下圖這樣
* 隨機初始化一個Weight
* 算出所在點的Gradient
* 往Gradient的反向走
* 重複做直到Convergence (到達loss最低點)
![](https://i.imgur.com/Wr1dwiv.jpg)
---

### GD演算法流程
* $\eta$是Learning rate，之後還會講到
* LR是一個標量(scalar)，表示你每步要走多大步
![](https://i.imgur.com/HvBHqaP.jpg)
* Implementation
![](https://i.imgur.com/o8fek9m.jpg)
* 問題是gradient()是如何算出來的呢? 我們又如何知道哪裡是最好的地方呢?
  * Back propagation 

---

### Back Propagation
* 該如何衡量$w_2$對整體$W$的影響有多大?
![](https://i.imgur.com/nb7spvn.jpg)
* Chain rule
  * 這邊推導了一下Back prop，見影片37分 
![](https://i.imgur.com/x5wPnF7.jpg)
* 在現有的DL框架中都有自動微分幫你做Back prop，不用自己寫。講師這邊認為只要知道怎麼運作就好

---

## Neural Networks in Practice: Optimization

* 實務上如何用back prop去train一個NN呢?
* 由於現實問題總是很複雜，尋找到最佳解非常困難

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

* Learning rate的設定對模型的表現有很大的影響
  * 太大會diverge
  * 太小又會卡在local minimum
![](https://i.imgur.com/zOSNmvN.jpg)

* 如何解決?
![](https://i.imgur.com/wE1FwPB.jpg)

* 建議用adaptive lr
  * lr不再是固定的
  * 可根據gradient大小、學習的速度、特定weight的大小來做調整 
  ![](https://i.imgur.com/CcsEV36.jpg)
  
* All code example  
![](https://i.imgur.com/Uv57SzC.jpg)


---

## Neural Networks in Practice: Mini-batch

* 由於使用Back prop的代價很大, 盡量不要一次input整個data進去Train
* 那就一次取一個，怎麼取？ Randomly!
* From GD to SGD
![](https://i.imgur.com/JfiIalW.jpg)

* 與其全拿或者是一次拿一個來train，不如一次取一個mini-batch來Train
  * 10,20 or 100 maybe

* B is the mini-batch
![](https://i.imgur.com/KnUktHY.jpg)

* 與其一個個取，糾結在一點點的accuracy，不如使用mini-batch
  * 而且mini-batch還有可平行化運算的好處

## Neural Networks in Practice: Overfitting

* overfitting指的是模型無法對沒看過的data做出好預測，只能處理看過的data 
  * unable generalize to new data
  * 模型過於擬合於訓練資料和測試資料，而在驗證資料(沒看過的資料)表現上不好
* underfitting則可能是模型不夠複雜，沒辦法處理這個問題而造成的
![](https://i.imgur.com/dj4MoSc.jpg)


### Regularization

* To deal with overfitting
* 正規化是一個對模型複雜度設下限制的技術
  * 模型變複雜的時候會有更大的懲罰
* To generalize our model to unseen data

#### Regularization 1:Dropout

* 隨機丟neuron

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

####  Regularization 2:Early stopping

* testing data和training data的loss正常來說應該要一起下降/上升
* 若兩者diverse則表示overfitting
* 要在這之前快點stop training
![](https://i.imgur.com/4qJF5r6.jpg)
