算法工程師修仙之路:Keras(二)

深度學習基礎

什麼是深度學習


深度學習之前:機器學習簡史

  • 深度學習不一定總是解決問題的正確工具:
    • 有時沒有足夠的數據,深度學習不適用;
    • 有時用其他算法可以更好地解決問題。

概率建模

  • 概率建模(probabilistic modeling)是統計學原理在數據分析中的應用。它是最早的機器學習形式之一,至今仍在廣泛使用。其中最有名的算法之一就是樸素貝葉斯算法。

  • 樸素貝葉斯是一類基於應用貝葉斯定理的機器學習分類器,它假設輸入數據的特徵都是獨立的。 這是一個很強的假設,或者說“樸素的”假設,其名稱正來源於此。

  • 另一個密切相關的模型是 logistic 迴歸(logistic regression,簡稱 logreg),它有時被認爲是現代機器學習的“hello world”。logreg 是一種分類算法,而不是迴歸算法。

早期神經網絡

  • 貝爾實驗室於1989年第一次成功實現了神經網絡的實踐應用,當時 Yann LeCun 將卷積神經網絡的早期思想與反向傳播算法相結合,並將其應用於手寫數字分類問題,由此得到名爲 LeNet 的網絡,在 20 世紀 90 年代被美國郵政署採用,用於自動讀取信封上的郵政編碼。

核方法

  • 核方法(kernel method)是一組分類算法,其中最有名的就是支持向量機(SVM,support vector machine)。

  • SVM 的目標是通過在屬於兩個不同類別的兩組數據點之間找到良好決策邊界(decision boundary)來解決分類問題。

    • 決策邊界可以看作一條直線或一個平面,將訓練數據劃分爲兩塊空間,分別對應於兩個類別。
    • 對於新數據點的分類,你只需判斷它位於決策邊界的哪一側。
  • SVM 通過兩步來尋找決策邊界:

    • 將數據映射到一個新的高維表示,這時決策邊界可以用一個超平面來表示(如果數據是二維的,那麼超平面就是一條直線);
    • 儘量讓超平面與每個類別最近的數據點之間的距離最大化,從而計算出良好決策邊界(分割超平面),這一步叫作間隔最大化(maximizing the margin)。這樣決策邊界可以很好地推廣到訓練數據集之外的新樣本。
  • 核方法

    • 將數據映射到高維表示從而使分類問題簡化,這一技巧可能聽起來很不錯,但在實踐中通常是難以計算的。這時就需要用到核技巧(kernel trick,核方法正是因這一核心思想而得名)。
    • 其基本思想是:要想在新的表示空間中找到良好的決策超平面,你不需要在新空間中直接計算點的座標,只需要在新空間中計算點對之間的距離,而利用核函數(kernel function)可以高效地完成這種計算。
    • 核函數是一個在計算上能夠實現的操作,將原始空間中的任意兩點映射爲這兩點在目標表示空間中的距離,完全避免了對新表示進行直接計算。
    • 核函數通常是人爲選擇的,而不是從數據中學到的——對於 SVM 來說,只有分割超平面是通過學習得到的。
  • SVM的優點與缺點

    • SVM 剛剛出現時,在簡單的分類問題上表現出了最好的性能。當時只有少數機器學習方法得到大量的理論支持,並且適合用於嚴肅的數學分析,因而非常易於理解和解釋, SVM 就是其中之一。
    • SVM 很難擴展到大型數據集,並且在圖像分類等感知問題上的效果也不好。
    • SVM是一種比較淺層的方法,因此要想將其應用於感知問題,首先需要手動提取出有用的表示(這叫作特徵工程),這一步驟很難,而且不穩定。

決策樹、隨機森林與梯度提升機

  • 決策樹(decision tree)是類似於流程圖的結構,可以對輸入數據點進行分類或根據給定輸入來預測輸出值。

  • 隨機森林(random forest)算法引入了一種健壯且實用的決策樹學習方法,即首先構建許多決策樹,然後將它們的輸出集成在一起。隨機森林適用於各種各樣的問題,對於任何淺層的機器學習任務來說,它幾乎總是第二好的算法。

  • 梯度提升機(gradient boosting machine)

    • 梯度提升機是將弱預測模型(通常是決策樹)集成的機器學習技術。
    • 它使用了梯度提升方法,通過迭代地訓練新模型來專門解決之前模型的弱點,從而改進任何機器學習模型的效果。
    • 將梯度提升技術應用於決策樹時,得到的模型與隨機森林具有相似的性質,但在絕大多數情況下效果都比隨機森林要好,它可能是目前處理非感知數據最好的算法。

深度學習有何不同

  • 深度學習發展得如此迅速,主要原因在於它在很多問題上都表現出更好的性能。但這並不是唯一的原因。深度學習還讓解決問題變得更加簡單,因爲它將特徵工程完全自動化,而這曾經是機器學習工作流程中最關鍵的一步。

  • 先前的機器學習技術(淺層學習)僅包含將輸入數據變換到一兩個連續的表示空間,通常使用簡單的變換,比如高維非線性投影(SVM)或決策樹。但這些技術通常無法得到複雜問題所需要的精確表示。因此,人們必須竭盡全力讓初始輸入數據更適合用這些方法處理,也必須手動爲數據設計好的表示層。這叫作特徵工程。

  • 利用深度學習,你可以一次性學習所有特徵,而無須自己手動設計。這極大地簡化了機器學習工作流程,通常將複雜的多階段流程替換爲一個簡單的、端到端的深度學習模型。

  • 在實踐中,如果連續應用淺層學習方法,其收益會隨着層數增加迅速降低,因爲三層模型中最優的第一表示層並不是單層或雙層模型中最優的第一表示層。

  • 深度學習的變革性在於,模型可以在同一時間共同學習所有表示層,而不是依次連續學習(這被稱爲貪婪學習)。通過共同的特徵學習,一旦模型修改某個內部特徵,所有依賴於該特徵的其他特徵都會相應地自動調節適應,無須人爲干預。

  • 一切都由單一反饋信號來監督:模型中的每一處變化都是爲了最終目標服務。這種方法比貪婪地疊加淺層模型更加強大,因爲它可以通過將複雜、抽象的表示拆解爲很多箇中間空間(層)來學習這些表示,每個中間空間僅僅是前一個空間的簡單變換。

  • 深度學習從數據中進行學習時有兩個基本特徵:

    • 通過漸進的、逐層的方式形成越來越複雜的表示;
    • 對中間這些漸進的表示共同進行學習,每一層的變化都需要同時考慮上下兩層的需要。
  • Kaggle 上主要有兩大方法:梯度提升機和深度學習。

    • 梯度提升機用於處理結構化數據的問題,而深度學習則用於圖像分類等感知問題。
    • 梯度提升機用於淺層學習問題,深度學習用於感知問題。
    • 使用前一種方法的人幾乎都使用優秀的 XGBoost 庫,它同時支持數據科學最流行的兩種語言:Python 和 R。
    • 使用深度學習的 Kaggle 參賽者則大多使用 Keras 庫,因爲它易於使用,非常靈活,並且支持 Python。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章