MaDi's Blog

一個紀錄自己在轉職軟體工程師路上的學習小空間

0%

深度學習(Deep Learning)-數學整理

AI主要分為機器學習(Machine Learning)與深度學習(Deep Learning),機器學習的數學整理於前一篇,而深度學習的基本數學整理於此篇,取自於台大大神李弘毅之線上課程,並記錄一些筆記提供給未來的自己做參考。

[Deep Learning]


把多個Logistic Regression前後連接在一起,每個Logistic Regression就稱做neuron,所有neuron形成一個network。

neuron的連接方式決定了這個模型的structure,模型裏頭所有的參數如weight、bias全部集合起來,就是整個network的參數,用θ表示。

整個模型主要分成三個部分:

  1. 輸入層(input layer)

  2. 隱藏層(hidden layer)

  3. 輸出層(output layer)

其中,hidden layer又可以視為是一個feature extractor(特徵提取器)。 而output layer則可以視為是一個Multi-class classifier(多分類器) ,通常用 softmax

決定一個模型的形狀(function set)是由三個元素組成: input dimension、output dimension、network structure

其中,決定network structure是整個deep learning的關鍵點。

所以,在做deep learning的時候,流程分為三步驟:

Step1. Build Neural Network
Step2. Goodness of function
Step3. Pick the best function

Step1. Build Neural Network

決定模型的structure,就決定了function set(model) ,接下來要做的就是從這個function set裏頭找出最好的function,當然也有可能找不到,因為structure設計得太爛

Step2. Goodness of function

定義一個function的好壞,分類問題裏頭,預測值跟真值之間的差值就用cross-entropy(交叉熵)去計算

Step3. Pick the best function

調整參數,使cross-entropy愈低愈好

做法是 把所有data的cross-entropy都做加總,得到一個total loss,接著透過Gradient Descent(梯度下降法)來找一組可以minimize這個total loss的最佳network parameters,用θ’表示

找到之後,這組network parameters對應到的function就是最終訓練好的模型。

[deep learning與machine learning的差異]

簡單來說就是,問題從如何extract features轉換成如何design network structure。

至於要用哪一個,取決於要解決的問題。

舉例來說,在做影像辨識或是語音辨識,因為人類難以表達我們怎麼分辨的,也就是不知道自己如何extract features,更遑論讓機器也學會,因此這個時候design network structure就比extract features來的容易許多。

[Backpropagation 反向傳播]

傳統的network是feedforward前饋式的架構,這個名詞是相對於Backpropagation。

在deep learning裏頭,計算Gradient Descent的微分方法其實就是Backpropagation。

在neuron network裏頭,參數相當龐大,要計算微分是比較費力的,所以如何有效地解微分就是Backpropagation在做的事情。簡單來說,Backpropagation就是一個求微分比較有效率的Gradient Descent。

過程就是chain-rule,詳細推導 參考此篇


[Tips for deep learning]

overfitting是指在訓練過程中表現很好,但測試的時候表現很差

所以在做deep learning的時候,要先檢查模型在訓練過程中是否表現優良,如果好,但是測試卻差才叫overfitting,而不是任何時候看到模型表現差都怪罪於overfitting。

檢查的SOP:

  1. training data上是否表現優良?
    • YES: 下一步就test資料
    • NO:
      • 換新的activation function
        • ReLU、Maxout
      • 調整learning rate
        • Adagrad、RMSProp、Momentum、Adam…
  2. testing data上是否表現優良?
    • YES: 可以apply to實際應用
    • NO:
      • Early Stopping
      • Regularization
      • Dropout

接著,細講每一個步驟:

1. 換新的activation function

主要是為了解決梯度消失(Vanishing gradient) 的問題。

梯度消失(Vanishing gradient):

梯度消失發生的原因是因為sigmoid函式會把大的input,壓縮成小的output。所以愈多層layer,梯度消失的問題愈嚴重。

第一種activation function: ReLU

ReLU在input<0的時候output會等於0,在input>0的時候output=input。

所以當拿掉所有output=0的neuron之後,整個network會變瘦長的linear network,linear的好處是output=input,不會像sigmoid一樣有梯度消失的問題。

第二種activation function: Maxout

行為類似於在每個layer上做max pooling,將原先幾個neuron的input按一定規則分組,再選取最大值作為這組neuron的output。

透過maxout可以產生ReLU,甚至更自由彈性的ReLU。

  1. 調整learning rate
  • Adagrad:
    精神: 考慮不同參數wi在不同方向上的gradient大小,如果gradient比較小,代表比較平坦,則給他較大的learning rate,反之亦然。
    缺點: 現實情況沒有那麼理想,可能平坦陡峭來回出現,必須快速的應對

  • RMSProp:
    精神: learning rate底下除的分母一樣是對所有的gradient進行平方和開根號,但多了一個α來調整對新舊gradient的相信程度。
    缺點: 仍然無法解決卡在local minimum、saddle point、plateau的問題

  • Momentum:
    精神:慣性的概念引入,第二個時間點要走的方向是由第一個時間點移動的方向和gradient的反方向共同決定的。

  • Adam:
    精神: RMSProp+Momentum=Adam

  1. Early Stopping

    訓練過程中total loss會愈來愈小,但training data跟testing data的表現未必相同,所以應該以testing data為準,當testing data的loss最小的時候就停止。
    這裡的testing data指的是validate用途的data,因為testing data是未知的。

  1. Regularization
    詳另一篇

  2. Dropout

    在training的時候,每次update參數之前,都先對每個neuron做取樣(input layer也要),每個neuron都有P%機率被丟棄掉,當某個neuron被丟棄掉,則相連的weight也要丟棄掉。也就是說每次update參數都只保留network的某一部份來做訓練。

    Dropout就是要讓training set上表現差,讓testing set上表現好

    <注意> testing的時候不做dropout

    dropout可以視為是一種終極的ensemble方法,每次training的時候都是拿一個minibatch來做一次update,而每個neuron都是drop或不drop,所以會有很多種組合來訓練。

當network很接近linaer的時候,dropout得到的表現會比較好,而這就是為什麼我們常常會把ReLU、Maxout的network拿來與Dropout配合使用,因為ReLU、Maxout也是接近於linear的。

參考

ML Lecture 6: Brief Introduction of Deep Learning
ML Lecture 7: Backpropagation