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