Deep Learning
這個筆記對應 Coursera 系列課程 Deep Learning。 課程主要由 Andrew Ng 教授主講,是一個非常好的深度學習課程。
這個筆記對應 Coursera 系列課程 Deep Learning。 課程主要由 Andrew Ng 教授主講,是一個非常好的深度學習課程。
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 的應用可以更加廣泛。
這篇文章將介紹如何將 Logistic Regression 抽象化為一個 Neural Network 。我們將以一個 Binary Classification 的問題來說明,藉由 Neural Network 來辨別一張 64x64 的圖片是否是貓。我們會定義一個 Loss Function 來作為 training set 的誤差,並且將所有的 training sets 集合形成 Cost Function,再利用 Gradient Descent 來優化參數,以達到最小化 Cost Function。最後我們會介紹如何利用 Computation Graph 來加速參數的更新,以及 Backpropogation 的運算細節。
本文介紹了 Seq2Seq 模型以及如何使用 Beam Search 的方法來找出最可能的句子,並介紹了如何使用 Length Normalization 來優化 Beam Search。此外,本文也介紹了 Attention Model,它可以改善 Seq2Seq 模型在處理長度較大句子時的記憶力不足,並且可以用在 Machine Translation、Speech Recognition 以及 Trigger Word Detection 等任務上。Attention Model 能夠讓網路像人類一樣去處理句子,在翻譯每一個單字時,注意到正確的原單字。
神經網路是一種重要的機器學習技術,可以從處理複雜的資料分析問題到處理自然語言的問題,它的基礎是神經元 (neuron),神經元是一種單元,可以接受多個輸入,並通過激活函數 (activation function) 的作用給出輸出。神經網路可以有很多層,每層都有著不同的權重 (weight) 矩陣以及 bias unit,它們可以一起組合起來構成一個 hypothesis 來解決問題。訓練神經網路需要了解神經網路的符號、成本函數與反向傳播算法,這些技術可以幫助我們對神經網路的結果有更深入的了解。
在《Neural Networks and Deep Learning》中,我們將學習深度學習的基礎:瞭解深度學習的主流技術、能夠構建、訓練和應用 fully-connected 的深度神經網路 (DNN)、瞭解如何實現向量化神經網路以及了解神經網路架構的關鍵參數,這也是深度學習必修的第一堂課!
本文討論了 NLP 中的 Word Embedding 技術,是一種改良了 one-hot vector 的字詞表示法,將單詞投影到一個高維度空間中的表示方法,讓 model 可以表達出各個字詞之間的關聯性。Word Embeddings 可以使用於 Transfer Learning 來擴大 model 的能力,以及可以執行 Analogy Reasoning 來尋找字詞之間的類似關係。
本文介紹了有助於進行深度學習最佳化的算法,包括 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 。
這個章節會探討了 Recurrent Neural Networks (RNNs) 的概念,介紹了如何使用標示 (notation) 來標記出輸入及輸出,以及如何建立一個字典來對應每個單字。接著會討論使用 RNNs 進行 forward propagation 與 backpropagation through time 的概念。此外,還會介紹 RNN 的 GRU 和 LSTM 模型,以及使用 peephole connection 來擴展 LSTM。還有 BRNN 解決單方向 RNN 無法處理一些問題的問題,和有多個 hidden layers 的 DRNN 可以更有效率的處理 sequence data。
Regularization 是 machine learning 中常見的技術,用於限制模型參數和權重,以減少模型對訓練數據過度擬合的可能性。而當我們將其套用到 Neural Network 上時,也有 Frobenius Norm 以及 Weight Decay 等技術可以做到 regularization。此外,我們也會使用 Dropout Regularization 來避免 Overfitting,而 Data Augmentation 和 Early Stopping 也是可以用來避免 Overfitting 的方法。本文將會詳細解釋這些技術,以及它們彼此之間的關係。
本文主要介紹 Gated Recurrent Unit (GRU) 和 Long Short Term Memory (LSTM) 這兩種 Recurrent Neural Network (RNN) 模型的架構及其原理。GRU 將 basic RNN 的結構加上一個 memory cell 來解決 vanishing gradients 的問題,而 LSTM 則是改進 GRU,將 basic RNN 的結構更進一步加上三個 gates 來解決 vanishing gradients 和 long-term dependency 的問題。此外,也介紹了 Bidirectional RNN (BRNN) 和 Deep RNNs (DRNN),BRNN 能夠雙向處理句子,而 DRNN 則是將 RNN 的 hidden layers 數目增加。
Sequence data 指的是一連串的 data,例如輸入 input 一連串聲音 output 成文字(語音識別),我們要利用 Recurrent Neural Network (循環神經網路) 來建立出 sequence model。
在 Sequence Models 中,我們將會學習如何建立 Natural Language、Audio 或其他 Sequence Data 的模型。由於有 Deep Learning,Sequence Algorithms 才能夠快速進步,其中的專案包括:Speech Recognition、Music Synthesis、Chatbots、Machine Translation、Natural Language Understanding 等等。
這篇文章涵蓋如何設定一個機器學習應用,包括訓練 / 驗證 / 測試資料集的比例,訓練和測試資料集的分布不同時對結果的影響,以及如何尋找偏差和變異之間的平衡。此外,我們還討論了在大數據深度學習時代,建構更大的神經網路和取得更多資料對於偏差和變異之間的影響。
在本篇文章中,我們將學習關於如何優化 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。