Deep Neural Network
Deep neural network 是一種有較多 hidden layers 的神經網路,它能夠對輸入的資料進行複雜的運算,例如人臉辨識、語音辨識等。在一個 deep neural network 中,會使用到越來越複雜的計算,而且每一層的運算結果都會被 cache 起來給下一層使用,從而逐步把複雜的運算細分成簡單的步驟,有效的加速計算的效率。
Deep neural network 是一種有較多 hidden layers 的神經網路,它能夠對輸入的資料進行複雜的運算,例如人臉辨識、語音辨識等。在一個 deep neural network 中,會使用到越來越複雜的計算,而且每一層的運算結果都會被 cache 起來給下一層使用,從而逐步把複雜的運算細分成簡單的步驟,有效的加速計算的效率。
本文探討了訓練深度學習模型時最常用的兩個觀念,包括調整超參數 (hyperparameter tuning) 以及使用批次正規化 (batch normalization)。文中比較了不同的調整超參數的方法,並列出了調整的區間以及最適當的範圍。文章接著介紹了批次正規化,並說明了在深度學習模型中如何使用批次正規化來加快訓練速度。文中更進一步介紹了 Softmax Regression 以及其 Cost Function 和 Gradient Descent 的用法,並且提及了常見的深度學習框架,以及如何選擇合適的框架以及框架的重要性。
在這個章節,我們會學習到深度學習的「魔法」,而不只是將其作為黑盒子使用。瞭解如何控制性能,並有系統地取得良好的結果:
這個章節會介紹 Neural Network 的概念,並且深入探討為什麼 Deep Learning 正在如此火熱,以及他可以應用在那些資料上。Deep Learning 的應用不只是限於 Structured Data,也可以應用在 Audio、Image 以及 Raw Text 這些 Unstructured Data 上。因此,Deep Learning 可以更有效的分析資料,並得到更加准確的結果。另外, Deep Learning 還受益於三個方面:資料、運算以及演算法。由於資料的數量不斷增加,傳統的學習演算法已經無法能夠滿足應用的需求,而 Deep Learning 則可以透過不斷的擴大網路架構及資料來提升效能。同時,硬體的發展也讓 Deep Learning 的應用可以更加廣泛。
神經網路是為了模擬人類的大腦運作,大腦可以透過一種 learning algorithm 做到聽、說、讀、寫等活動,而神經網路的最小單位為神經元,它可以由 input wires 接收多個輸入,並將處理過的訊息傳送出去透過 output wires。我們可以再加上 bias unit 作為輸入,而處理這些 input 的為 sigmoid (logistic) activation function。當有多層 layer 時,第一層為 input layer,最後一層為 output layer,而中間所有的層統稱為 hidden layer。我們給予 hidden layer 的 nodes 一個名字:activation units,它是經由 input 和 matrix of weights 作用 output 過來的,hypothesis 就是這些 activation units 經由權重矩陣與輸入矩陣相乘後的結果。
這篇文章將介紹如何將 Logistic Regression 抽象化為一個 Neural Network 。我們將以一個 Binary Classification 的問題來說明,藉由 Neural Network 來辨別一張 64x64 的圖片是否是貓。我們會定義一個 Loss Function 來作為 training set 的誤差,並且將所有的 training sets 集合形成 Cost Function,再利用 Gradient Descent 來優化參數,以達到最小化 Cost Function。最後我們會介紹如何利用 Computation Graph 來加速參數的更新,以及 Backpropogation 的運算細節。
神經網路已成為解決從圖像識別到自然語言處理等各種問題的重要工具。 因此,理解與神經網路相關的符號 (notation)、成本函數 (cost function) 和反向傳播算法 (backpropagation algorithm) 對於成功訓練和使用至關重要。 在本文我們還將探索反向傳播算法背後的概念,以便我們能夠更好地理解結果的含義。
神經網路是一種重要的機器學習技術,可以從處理複雜的資料分析問題到處理自然語言的問題,它的基礎是神經元 (neuron),神經元是一種單元,可以接受多個輸入,並通過激活函數 (activation function) 的作用給出輸出。神經網路可以有很多層,每層都有著不同的權重 (weight) 矩陣以及 bias unit,它們可以一起組合起來構成一個 hypothesis 來解決問題。訓練神經網路需要了解神經網路的符號、成本函數與反向傳播算法,這些技術可以幫助我們對神經網路的結果有更深入的了解。
在《Neural Networks and Deep Learning》中,我們將學習深度學習的基礎:瞭解深度學習的主流技術、能夠構建、訓練和應用 fully-connected 的深度神經網路 (DNN)、瞭解如何實現向量化神經網路以及了解神經網路架構的關鍵參數,這也是深度學習必修的第一堂課!
本文介紹了有助於進行深度學習最佳化的算法,包括 Mini-Batch Gradient Descent 以及 Exponentially Weighted Averages。因為 Batch Gradient Descent 對整個 training set 進行一次 gradient descent,每個 iteration 時間較長,訓練過程較慢。Mini-Batch 將 Batch 和 Stochastic Gradient Descent 優點合併,但需要找出適合的 batch size。Exponentially Weighted Averages 是一個用於分析移動平均的算法,可以減緩短期波動,反映長期趨勢。
這篇文章主要介紹如何使用 Vectorization 來加速 Python 的數值運算,以及如何將 Logistic Regression 的 for-loops 轉換成 vectorization,以及如何將 gradient (backpropogation) 也進行向量化。Vectorization 可以大大提高數值運算的速度,甚至可以提高數百倍的速度。因此在編寫程式時,建議在可以使用 vectorization 時就應盡量避免使用 for loop 。
Regularization 是 machine learning 中常見的技術,用於限制模型參數和權重,以減少模型對訓練數據過度擬合的可能性。而當我們將其套用到 Neural Network 上時,也有 Frobenius Norm 以及 Weight Decay 等技術可以做到 regularization。此外,我們也會使用 Dropout Regularization 來避免 Overfitting,而 Data Augmentation 和 Early Stopping 也是可以用來避免 Overfitting 的方法。本文將會詳細解釋這些技術,以及它們彼此之間的關係。
這篇文章涵蓋如何設定一個機器學習應用,包括訓練 / 驗證 / 測試資料集的比例,訓練和測試資料集的分布不同時對結果的影響,以及如何尋找偏差和變異之間的平衡。此外,我們還討論了在大數據深度學習時代,建構更大的神經網路和取得更多資料對於偏差和變異之間的影響。
在本篇文章中,我們將學習關於如何優化 cost function,也就是 gradient descent 方法。我們將學習到 normalize inputs、vanishing / exploding gradient 以及 weight initialization 等方法,以及 gradient checking 的技巧來確保訓練正確性。
Shallow Neural Network 指的是只有幾層 (2 層或以下) 的神經網路 (Neural Network)。它們只有輸入層 (input layer) 和輸出層 (output layer),通常在中間有一層隱藏層 (hidden layer)。它們常用於一些簡單的機器學習任務,例如垃圾郵件分類,激活函數 (activation function) 通常會用 Sigmoid、Tanh 或 ReLU 來替代線性激活函數。激活函數是一種用於增強神經網路計算能力的函數,為了能夠計算 gradient descent (backpropogation),需要知道每個 activation function 的導數為何,比如 Sigmoid、Tanh、ReLU 和 Leaky ReLU,其導數可以用微分技巧來計算。此外,為了避免所有 weight 初始化全部為 0 的問題,我們會使用隨機取值來初始化 weights。