本文以 Deep Learning in a Nutshell: Core Concepts 的架構為主軸, 搭配 Stanford University 教授 Andrew Ng 的 Machine Learning 課程內容, 及 MIT 出版的 Deep Learning 書籍內容, 簡述 Deep Learning 的核心概念.
核心概念
機器學習 (Machine Learning)
機器學習的作法分為 2 大類:
1. 指導式學習 (Supervised Learning)
2. 非指導式學習 (Unsupervised Learning)
目標是要讓 learning algorithm (model) 能夠根據 training set 學習到 hypothesis function \(h\), 使得 \(h(x)\) 能夠盡可能準確地預測 \(y\).
Training set 包含了期望的 output \(y\), 因此稱為 supervised learning.
舉例來說, 給定 1 萬張圖片, 標示每張圖片是否包含人臉, 據此 training model, 讓 model 能夠預測新的圖片是否包含人臉.
舉例來說, 給定 m 組房屋坪數、臥房數、層數、屋齡及其成交價的資料, 對於坪數為 \(x_1\), 臥房數為 \(x_2\), 層數為 \(x_3\), 屋齡為 \(x_4\) 的房屋, 預測其成交價 \(y\).
Training set: m 組房屋坪數、臥房數、層數、屋齡及其成交價的資料在 training 的過程中, 會餵 data 給 model, model 作出預測, 並根據預測的結果和期望的結果的誤差修正 model 的參數, 使得預測能夠越來越準確.
\(x_1\): 坪數
\(x_2\): 臥房數
\(x_3\): 層數
\(x_4\): 屋齡
\(x_1, x_2, x_3, x_4\): features
n: 4 (feature 數為 4)
y: 成交價
在 unsupervised learning 下, 並沒有提供 learning algorithm (model) 期望的答案.
主要的應用是分群 (clustering), 把資料根據變數之間的關聯性進行分群.
舉例來說, 給定 1 萬條新聞, 根據不同的屬性 (財經, 政治, 健康, 娛樂...) 自動進行分類.
特徵工程 (Feature Engineering)
Features 是指輸入給 model 有哪些維度的變數 \(x_1, x_2, ..., x_n\).
Feature engineering 是指, 決定要有哪些 features.
Features 選得越好, 預測的結果會越準確.
但並沒有一定的準則來判斷要放哪些 features 進來是比較好的.
如果不容易判斷應該要放哪些 features 進來, 可採用 feature learning algorithm, 讓 model 自動學習 features.
特徵學習 (Feature Learning)
以 multi-layer neural network 為例, hidden layers 就是自動學習到的 features.
舉例:
第 1 層 hidden layer 學習到的 features: blobs, edges
第 2 層 hidden layer 學習到的 features: noses, eyes, cheeks
第 3 層 hidden layer 學習到的 features: faces
深度學習 (Deep Learning)
Deep learning 的 hidden layers 較多, 當在 input 與 output 之間有複雜的非線性關聯性時, deep learning 可做出更準確的預測.
此外, deep learning 可以偵測到連續的資料之間較長的非線性時間相依性.
基礎概念
邏輯回歸 (logistic regression)
當我們要預測的 y 是 continuous value, 此 learning algorithm 稱之為 regression.
舉例來說, 給定 1 萬組人臉及其年齡的資料. 輸入一張新的人臉, 預測其年齡.當我們要預測的 y 是 discrete value, 此 learning algorithm 稱之為 logistic regression 或 classification.
舉例來說, 給定 1 萬組腫瘤大小及其為良性或惡性的資料. 對於大小為 S 的腫瘤, 預測它是屬於良性或惡性.Logistic regression 採用 sigmoid function 作為 hypothesis function, 把 input 轉換為 0 到 1 之間的值, 可視作 \(y = 1\) 的機率, 用來預測結果是 0 或是 1.
給定 1 萬張包含人, 貓, 狗的圖片. 輸入一張新的圖片, 判斷是人, 貓, 或狗.
Sigmoid function: \( g(z) = \frac{1}{1 + e^{-z}} \)類神經網路 (artificial neural network) 裡的每個 neuron 就是在做 logistic regression.
\( z = \theta^T x \)
\( h_\theta (x) = g( \theta^T x ) = g(z) \)
\(h_\theta (x)\): estimated probability that y = 1 on input x
\( h_{\theta}(x) = P(y=1|x;\theta) \): probability that \(y = 1\), given \(x\), parameterized by \(\theta\)
類神經網路 (artificial neural network)
類神經網路把 input 轉換成第 1 個 layer 的 feature, 再把第 1 個 layer 的 feature 轉換成第 2 個 layer 的 feature, 以此類推, 在最後一個 layer (output layer) 作出預測.
\( a_i^{(j)} \): "activation" of unit \( i \) in layer \( j \)
\( \Theta^{(j)} \): matrix of weights controlling function mapping from layer \( j \) to layer \( j+1 \)
\( a_1^{(2)} = g(\Theta_{10}^{(1)}x_0 + \Theta_{11}^{(1)}x_1 + \Theta_{12}^{(1)}x_2 + \Theta_{13}^{(1)}x_3) \)
\( a_2^{(2)} = g(\Theta_{20}^{(1)}x_0 + \Theta_{21}^{(1)}x_1 + \Theta_{22}^{(1)}x_2 + \Theta_{23}^{(1)}x_3) \)
\( a_3^{(2)} = g(\Theta_{30}^{(1)}x_0 + \Theta_{31}^{(1)}x_1 + \Theta_{32}^{(1)}x_2 + \Theta_{33}^{(1)}x_3) \)
\( h_{\Theta}(x) = a_1^{(3)} = g(\Theta_{10}^{(2)}a_0^{(2)} + \Theta_{11}^{(2)}a_1^{(2)} + \Theta_{12}^{(2)}a_2^{(2)} + \Theta_{13}^{(2)}a_3^{(2)}) \)
原本餵給 model 的 inputs (features) 是 \(x_1, x_2, x_3 \), 而最後是根據 \( a_1^{(2)}, a_2^{(2)}, a_3^{(2)} \) 計算出 \( h_{\Theta}(x) \), 進行預測。
因此本質上等於是 neural network 學習到了新的 features \( a_1^{(2)}, a_2^{(2)}, a_3^{(2)} \), 據此進行預測.
Neural network 藉由 backpropagation algorithm 找出一組 \(\Theta\), 使得預測的結果是夠準確的 (誤差是夠小的).
類神經網路單元 (logistic unit)
\( x =
\begin{bmatrix}
x_0
\\ x_1
\\ x_2
\\ x_3
\end{bmatrix}, \theta =
\begin{bmatrix}
\theta_0
\\ \theta_1
\\ \theta_2
\\ \theta_3
\end{bmatrix} \)
\( \theta \): weights or parameters
\( g(z) = \frac{1}{1 + e^{-z}} \)
\( z = \theta^T x \)
\( h_{\theta}(x) = g( \theta^T x ) = g(z) \)
\( h_{\theta}(x) \): sigmoid (logistic) activation function
捲積深度學習 (Convolutional Deep Learning)
捲積 (Convolution)
Discrete convolution:
\(s(t) = (x * w)(t) = \sum_{a=-\infty}^{\infty}x(a)w(t-a) \)在 machine learning 的應用, input 通常是 multi-dimensional array of data, kernel 通常是 multi-dimensional array of parameters, 這些 multi-dimensional arrays 稱為 tensors.
\(x\): input
\(w\): kernel
\(s\): feature map
若以 2-dimensional image I 作為 input, 並使用 2-dimensional kernel K:
\( S(i, j) = (I * K)(i, j) = \sum_m \sum_n I(m, n) K(i-m, j-n) \)通常, neural network 會實作 cross-correlation (實際上是 convolution without flipping the kernel, 習慣上, 也稱此為 convolution):
\( S(i, j) = (I * K)(i, j) = \sum_m \sum_n I(i+m, j+n) K(m, n) \)舉例:
Input Image:
Kernel (edge detector):
\(\begin{bmatrix}
-1 & -1 & -1 \\
-1 & 8 & -1 \\
-1 & -1 & -1
\end{bmatrix} \)
Feature map:
池化 (Pooling)
Pooling 是把鄰近的幾個 input, 做運算, 可降低資訊量, 同時保留重要的資訊.
以 max pooling 為例, 會把鄰近的 input 取 max, 作為 output.當 input 資訊有平移或旋轉等變化時, pooling 仍可保留其中的特徵 (invariance to local translation).
當我們更在乎資訊是否具有某個特徵, 而不是資訊中的哪個位置完全符合某個特徵, pooling 的 invariance to local translation 的特性是很有幫助的.
捲積神經網路 (Convolutional Neural Network, CNN)
當 neural network 中至少有 1 個 layer 採用 convolution 運算來取代 general matrix multiplication, 這種 neural network 就稱為 Convolutional Network (CNN).
Convolutional layer 的 parameter 可透過學習不斷調整, 使得可以萃取出重要的資訊.
舉例來說, 進行 face detection, 各層 convolutional layer 分別可辨識出: blogs/edges, noses/eyes/cheeks, faces.通常 CNN 會採用多個 convolutional layer, 而各個 layer 會依序萃取出越來越抽象的資訊.
CNN 通常會採用 pooling layer, 如此當 input 資訊有平移或旋轉等變化時, 仍可以辨認出來. Pooling 也有助於降低 memory 的需求及運算量.
延伸閱讀
[NVIDIA Developer Blog] Deep Learning in a Nutshell: Core Concepts, Tim Dettmers
[學習筆記] 機器學習: 邏輯回歸 (Machine learning: Logistic Regression)
[學習筆記] 機器學習: 神經網路的結構 (Machine Learning: Neural Networks: Representation)
[學習筆記] 機器學習: 神經網路的學習 (Machine Learning: Neural Networks: Learning)
[書籍] Deep Learning, Ian Goodfellow, Yoshua Bengio, and Aaron Courville