當前位置:
首頁 > 知識 > 從零到一:帶你認識深度學習!

從零到一:帶你認識深度學習!

作者:Zied Haj-Yahia

翻譯:張玲

校對:丁楠雅

本文約2500字,建議閱讀15分鐘

本文為你簡要介紹深度學習的基本構成、模型優化的幾種方式和模型訓練的一些最佳實踐。

一年多來,我在LinkedIn、Medium和Arxiv上閱讀了不少深度學習相關文章和研究論文。當我幾周之前開始麻省理工學院6.S191深度學習在線課程(這裡是課程網站的鏈接)以後,我決定寫下這一系列的文章來加深我對深度學習的結構化理解。

我將發布以下4個課程:

深度學習簡介

基於神經網路的序列建模

計算機視覺中的深度學習-卷積神經網路

深度生成模型

對於每門課程,我將概述主要概念,並根據以前的閱讀資料以及我在統計學和機器學習方面的背景增加更多的細節和解釋。

從第2課程開始,我還將為每一課的開源數據集添加一個應用程序。

好的,讓我們開始吧!

深度學習簡介

背景

傳統的機器學習模型在處理結構化數據方面一直非常強大,並且已經被企業廣泛用於信用評分、客戶流失預測、消費者定位等。

這些模型的成功很大程度上取決於特徵工程階段的性能:我們越接近業務,從結構化數據中提取相關知識越多,模型就越強大。

當涉及到非結構化數據(圖像、文本、語音、視頻)時,手動特徵工程是耗時的、脆弱的,而且在實踐中是不可擴展的,這就是神經網路因其可以從原始數據中自動發現特徵或者分類所需要的表示而越來越受歡迎的原因。它取代手動特徵工程,允許一台機器既能學習特徵又能利用這些特徵執行特定的任務。

硬體(GPU)和軟體(與AI相關的高級模型/研究)的進步也提升了神經網路的學習效果。

基本架構

深度學習的基本組成部分是感知器,它是神經網路中的單個神經元。

給定一組有限的m個輸入(例如,m個單詞或m個像素),我們將每個輸入乘以一個權重,然後對輸入的加權組合進行求和,並添加一個偏差,最後將它們輸入非線性激活函數,輸出。

偏差會向輸入空間添加另一個維度。因此,在輸入全零向量的情況下,激活函數依然提供輸出。它在某種程度上是輸出的一部分,與輸入無關。

激活函數的目的是將非線性引入網路。實際上,無論輸入分布如何,線性激活函數都會產生線性決策。非線性使我們能夠更好地逼近任意複雜的函數,這裡有一些常見的激活函數示例:

深度神經網路只是組合多個感知器(隱藏層),以產生輸出。

現在,我們已經了解了深度神經網路的基本架構,讓我們看看它如何用於給定的任務。

訓練神經網路

比方說,對於一組X射線圖像,我們需要模型來自動區分病人與正常人。

為此,機器學習模型需要像人一樣通過觀察病人和正常人的圖像來學會區分這兩類圖像。因此,它們自動理解可以更好地描述每類圖像的模式,這就是我們所說的訓練階段。

具體地說,模式是一些輸入(圖像、部分圖像或其他模式)的加權組合。因此,訓練階段只不過是我們估計模型權重(也稱為參數)的階段。

當談論估計時,談論的是我們必須優化的目標函數。構建這個函數,應該最好地反映訓練階段的性能。當涉及到預測任務時,這個目標函數通常稱為損失函數,度量不正確的預測所產生的成本。當模型預測非常接近真實輸出的東西時,損失函數非常低,反之亦然。

在存在輸入數據的情況下,我們計算經驗損失(分類的二元交叉熵損失和回歸的均方差損失)來度量整個數據集上的總損失。

由於損失是網路權重的函數,我們的任務是找到實現最低損失的權重集:

如果只有兩個權重,我們可以繪製下面的損失函數圖。我們想要做的是找出這種損失的最小值,從而找出損失達到最小值時的權重值。

為了最小化損失函數,我們可以應用梯度下降演算法:

首先,我們隨機選擇權重的初始p向量(例如,遵循正態分布)。

然後,我們計算初始p向量中損失函數的梯度。

梯度方向指示的是使損失函數最大化的方向。 因此,我們在梯度的反方向上邁出了一小步,使用此更新規則相應地更新權重值:

我們不斷移動,直至收斂達到這張圖的最低點(局部最小值)。

注意:

在更新規則中,是學習率,決定著我們在梯度反方向上移動步伐的大小。它的選擇非常重要,因為現代神經網路的架構是非常非凸的。如果學習率太低,模型可能陷入局部最小值;如果學習率太大,模型則可能發散。可以採用自適應學習率來調整梯度每次迭代時的學習率。有關更詳細的說明,請閱讀Sebastian Ruder對梯度下降優化演算法的概述。

為了計算給定向量的損失函數的梯度,我們使用反向傳播。考慮上面的簡單神經網路絡,它包含一個隱含層和一個輸出層。想要計算與每個參數有關的損失函數的梯度,首先,應用鏈規則,因為。然後,再次應用鏈規則來將梯度反向傳播給前一層。出於同樣的原因,我們可以這樣做,因為(隱藏狀態)僅取決於輸入。因此,反向傳播包括使用來自後面層的梯度對網路中每個權重重複這樣的過程。

神經網路實踐

在存在大數據集的情況下,關於每個權重的梯度計算可能非常昂貴(考慮反向傳播中的鏈規則)。為此,我們可以計算數據子集(小批量)的梯度,將其作為真實梯度的估計值。它能給出比僅隨機進行一次觀察的隨機梯度下降(SGD)更準確的梯度估計值,而且比使用全部數據進行梯度計算的方式要快。每次迭代使用小批量梯度計算,可以快速訓練模型,特別是當我們使用不同的線程(GPU)時。我們可以並行計算每個迭代:每個權重和梯度的批處理在單獨的線程中計算。然後,收集計算以完成迭代。

和任何其他「經典」機器學習演算法一樣,神經網路可能面臨過度擬合的問題。理想情況下,在機器學習中,我們希望構建這樣的模型:能夠從訓練數據中學習問題描述,而且也能夠很好地概括看不見的測試數據。正則化是一種限制優化問題、避免產生複雜模型(即避免記憶數據)的方法。當談論正則化時,我們通常會討論Dropout。它在訓練階段隨機丟棄(丟棄,即將相關激活設置為0)某些隱藏神經元或者在有可能過度擬合的情況下提前結束訓練過程。為此,我們計算相對於訓練迭代次數的訓練和測試階段的損失。當測試階段的損失函數開始增加時,我們停止學習。

總結

第一篇文章是對深度學習的介紹,可歸納為3個要點:

首先,我們了解了深度學習的基本組成部分,即感知器。

然後,我們學會了將這些感知器組合在一起以組成更複雜的層次模型,並學會了如何使用反向傳播和梯度下降從數學上來優化這些模型。

最後,我們已經看到了在現實生活中訓練這些模型的一些實際挑戰,以及一些最佳實踐,如自適應學習,批處理和避免過度擬合的正則化。

下一篇文章將是關於神經網路的序列建模。我們將學習如何模擬序列,重點關注遞歸神經網路(RNN)及其短期記憶和長期短期記憶(LSTM)以及它們在多個時間步長內跟蹤信息的能力。

敬請關注!

原文標題:

Introduction to Deep Learning

https://www.kdnuggets.com/2018/09/introduction-deep-learning.html

譯者簡介

張玲,在崗數據分析師,計算機碩士畢業。從事數據工作,需要重塑自我的勇氣,也需要終生學習的毅力。但我依舊熱愛它的嚴謹,痴迷它的藝術。數據海洋一望無境,數據工作充滿挑戰。感謝數據派THU提供如此專業的平台,希望在這裡能和最專業的你們共同進步!

轉載須知

如需轉載,請在開篇顯著位置註明作者和出處(轉自:數據派THU ID:DatapiTHU),並在文章結尾放置數據派醒目二維碼。有原創標識文章,請發送【文章名稱-待授權公眾號名稱及ID】至聯繫郵箱,申請白名單授權並按要求編輯。

發布後請將鏈接反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 數據派THU 的精彩文章:

教你在Python中實現潛在語義分析

TAG:數據派THU |