AI入門:DL學習筆記[AI-006]_Brief Introduction of Deep Learning

ChunJen Wang
jimmy-wang
Published in
8 min readMay 12, 2021

本篇文章為個人學習Hung-yi Lee老師ML(2017)課程筆記。

Source: ML Lecture 6: Brief Introduction of Deep Learning

深度學習 Deep Learning

深度學習是AI,也是機器學習。

主要發展

透過圖像辨識(主要技術: CNN)、語意理解(主要技術: RNN),
結合領域專業(domain knowledge)產生出醫學檢測、智慧工廠、聊天機器人、語音助理、酒標辨識等等。

最早的深度學習,其實也是從Perceptron起步,但卻發現單個的模型受限太大,老師舉例卡車與坦克的分類,但實際有人去檢視資料集與模型後,卻發現模型學到的feature根本不是外觀、輪廓,只是因為,卡車在晴天的背景拍下,而坦克在雨天背景拍下,因此模型只學到照片亮暗度!

但後來整合多層結構,疊加為multi-layer,但仍沒有好結果。

直到現今硬體升級,運算效率提升(2009 GPU運算),以及2006年提出 RBM initiazation,將此方法更名為Deep Learning,雖然模型看起來複雜,產出的結果沒有更佳,但卻重新引起大眾對深度學習領域的方法,並進一步改進至今。

GPU出現以後,原本一週的運算時間,可能縮減為一天完成。

深度學習的框架,其實一如過去在Machine Learning的簡易框架:

Source: ML Lecture 6: Brief Introduction of Deep Learning

只是我們定義function的方式改變了。

深度學習之所以深,其原理在最初的疊加就是結合層層的logistic regression,將每一層output出來的結果再進input,反覆學習資料特徵。

Neuron 神經元

每一個神經元,就是一個logistic regression,並擁有一組weight, bias,
權重相當於這個神經元的重要程度。

如何串接神經元?

Fully Connect Feedforward Network

在給定模型參數(weight bias)之前,我們需要先定義框架,以及如何串接,此過程稱為 define a function set,Fully Connect顧名思義就是串接所有神經元。

每一層(layer)的神經元數量可以自訂義,並將跨層的神經元兩兩連接,並串上input與設定好最後一層的layer(就是output層),就完成了Fully Connect的NN。

而後深度學習的技法,就在於:
- 如何串接Layer神經元,是否要關閉 (dropout),是否要做正規化,是否要設計新的 Gate讓 RNN框架的 input/memory/output是否採用(知名範例如LSTM)
- 設計新的 layer(CNN中的 convolution),
- 設定每一層layer的結果是否要經過活化函數(activation function)
- 求得最佳weight組合要採用哪一種優化器(optimizer),讓gradient descent的過程可以更快找到local minimum。
在此僅初步條列個人已知可以設計的做法。
更多的方式,我曾經在網路上找到有人針對stanford, MIT CS課程的筆記,相當值得參考!

知名Deep Learning框架的表現

過去在機器學習技法中,採用同一資料集(ImageNet),準確度(accuracy)都只能達到70%左右的水平,然而從2010年以後,深度學習使用相同的資料(ImageNet),準確度大幅提升到超過80%,並且年年有人提出疊加layer的方式或改進layer中運算的作法。

  • AlexNet (2012) 採用8層layer達到 83.6% accuracy。
  • VGG (2014) 採用19層layer達到 92.7% accuracy。
  • GoogleNet (2014) 採用22層layer達到 93.3% accuracy。
  • Residual Net (2015) 採用152層layer達到 96.4% accuracy。
    (到Residual Net也不採用Fully connect作法!)
Source: ML Lecture 6: Brief Introduction of Deep Learning

而神經網絡就是一連串的神經元運算(weighted sum),每一層layer也通常會加上活化函數(activation function),到最後一層output(通常採softmax作為活化函數)就對應到Y label。

Source: ML Lecture 6: Brief Introduction of Deep Learning

大致就會分為三層結構:

  • Input Layer: 就是手上的資料,可以是時間序列、圖片像素、詞向量等。
  • Hidden Layer: 隱藏層,是類神經網絡變形的框架,CNN、RNN與知名演算法框架大多在此層進行設計。
  • Output Layer: Multi-class Classifer 擷取中間運算好的結果,壓縮為可以對應Y的輸出層(機率vector,長度視Y種類有幾類)。

運算過程則會透過 Gradient Descent求 Hidden Layer的 weighted,
直到求得最佳解(根據loss function,例如分類問題需要計算cross entropy)。

如何找最好的Network Structure?

沒有標準答案,需要透過試錯(Trial and Error)、直覺與經驗來進行設計。
相對於ML專注在feature engineering,深度學習提供另一種作法,是讓人可以專注在調整model結構。

但深度學習解釋性也因為難以說明,而被冠上黑盒子(black box)的惡名。
儘管如此,近年開始有 XAI (expainable AI)出現,XAI領域嘗試解釋深度學習如何萃取資料重要資訊,並進行視覺化的解釋。

Source: ML Lecture 7: Backpropagation

Backpropagation (Forward Pass + Backward Pass)

是深度學習透過Gradient Descent方法對weighted更新的運算過程。
維度極為龐大(millions of parameters)。

採用的演算法為Chain Rule。注意根據路徑對變項偏微分。

Source: ML Lecture 7: Backpropagation

如何找到最佳network?
計算loss function=加總cost。透過偏微分,將問題轉換為找weighted。

Source: ML Lecture 7: Backpropagation

Why Keras?

想像為Tensorflow的API,可以快速建立layer,取得Tensorflow微分過程求最佳解,產出的model也可以進行儲存/讀取。
而根據官方調查Kaggle比賽前五名團隊,這些常勝軍普遍採用Keras。

Soure: Keras官方說明-why Keras? (2019)

Deep Learning 三步驟

  1. define a set of function
    選擇建立模型方式 > 疊加Hidden layer, Output layer 。
    (含convolution, activation, normalization運算過程)
  2. goodness of function
    透過modol.compile決定loss function。
  3. pick the best funcion
    透過model.compile決定optimizer,是gradient descent 運算過程。
    再使用model.fit 代入輸入input(x_train)與輸出output(y_train)。

--

--

ChunJen Wang
jimmy-wang

嗨,歡迎你的到來,我目前在銀行擔任DS。過去曾做過銀行大型專案BA,也曾在轉職科技業DE中踢了鐵板,相信每一個人都有自己要走的路,而努力的過程,可以讓我們離心中理想更接近,如果我的文章能帶給你一些啟發與幫助,別忘了幫我在文章底下按下拍手~^^