AI入門:DL學習筆記[AI-006]_Brief Introduction of Deep Learning
本篇文章為個人學習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的簡易框架:
只是我們定義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作法!)
而神經網絡就是一連串的神經元運算(weighted sum),每一層layer也通常會加上活化函數(activation function),到最後一層output(通常採softmax作為活化函數)就對應到Y label。
大致就會分為三層結構:
- 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。注意根據路徑對變項偏微分。
如何找到最佳network?
計算loss function=加總cost。透過偏微分,將問題轉換為找weighted。
Why Keras?
想像為Tensorflow的API,可以快速建立layer,取得Tensorflow微分過程求最佳解,產出的model也可以進行儲存/讀取。
而根據官方調查Kaggle比賽前五名團隊,這些常勝軍普遍採用Keras。
Deep Learning 三步驟
- define a set of function
選擇建立模型方式 > 疊加Hidden layer, Output layer 。
(含convolution, activation, normalization運算過程) - goodness of function
透過modol.compile決定loss function。 - pick the best funcion
透過model.compile決定optimizer,是gradient descent 運算過程。
再使用model.fit 代入輸入input(x_train)與輸出output(y_train)。