獲贊2萬,一文讀懂深度學習

七月線上實驗室發表於2018-04-18

這是一篇Medium上獲得近2萬讚的深度學習入門指南,用圖文為你詳解深度學習中的各個基礎概念。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

在我們的日常生活中,幾乎隨處可見AI和機器學習這些術語。但,絕大多數人並不明白什麼是AI。

 

小七希望當你閱讀完這篇文章後,會對AI和ML的基本知識有更多的瞭解和認識。更重要的是明白什麼是深度學習,以及這類最熱門的技術如何運作。

 

背景知識

理解深度學習如何工作的第一步是掌握下列重要術語之間的區別。

 

  • 人工智慧(AI)v.s.機器學習(ML)


人工智慧是對人類智慧在計算機上的複製。

機器學習,指的是機器使用大量資料集而非硬編碼規則來進行學習的能力。


在整個人工智慧發展史上,幾乎一直隨同人工神經網路研究的進展而起起伏伏。近期引發人工智慧新一輪熱潮的深度學習,其名稱中的“深度”某種意義上就是指人工神經網路的層數,深度學習本質上是基於多層人工神經網路的機器學習演算法。 ML允許計算機通過自身來學習。這種學習方法得益於現代計算機的強大效能,效能保證了計算機能夠輕鬆處理樣本數巨大的資料集。

 

  • 監督學習 v.s. 非監督學習

監督學習指的是從標記的訓練資料來推斷一個功能的機器學習任務。訓練資料包括一套訓練示例。在監督學習中,每個例項都是由一個輸入物件(通常為向量)和一個期望的輸出值(也稱為監督訊號)組成。


當你利用監督學習來訓練AI時,你提供給它一份輸入,並告訴它預期的輸出。

 

比如:預測天氣的AI便是監督學習的典型案例之一。它通過學習過往資料來預測未來天氣,其訓練資料擁有輸入(氣壓、溼度、風速)和輸出(溫度)。

 

非監督學習是指根據類別未知(沒有被標記)的訓練樣本/資料來進行學習,以解決模式識別中的各種問題。


無監督學習裡典型例子是聚類。聚類的目的在於把相似的東西聚在一起,而我們並不關心這一類是什麼。因此,一個聚類演算法通常只需要知道如何計算相似度就可以開始工作了。

 

具體來說,電商網站上的行為預測AI就屬於非監督學習。它在輸入資料上建立它自己的分類。它將會告訴你哪一種使用者最可能購買差異化的商品。


深度學習又是如何運作的呢?

現在我們再來了解什麼是深度學習,以及它是如何運作的。


深度學習的概念由Hinton等人於2006年提出。

 

它是機器學習中一種基於對資料進行表徵學習的方法。在給予它一組輸入後,它使我們能夠訓練AI來預測結果。其動機在於建立、模擬人腦進行分析學習的神經網路,它模仿人腦的機制來解釋資料,例如影象、聲音和文字。

 

我們將通過建立一個假設的機票價格預估系統來闡述深度學習是如何運作的。我們將應用監督學習方法來訓練它。

 

我們想要該機票價格預估系統基於下列輸入來進行預測(為了簡潔,我們除去了返程機票):

  • 起飛機場

  • 到達機場

  • 起飛日期

  • 航空公司

 

神經網路

接下來我們將視角轉向AI的“大腦”內部。

 

人工神經網路(Artificial Neural Networks,簡稱ANNs),也簡稱為神經網路(NNs)或稱作連線模型(Connection Model),它是一種模仿動物神經網路行為特徵,進行分散式並行資訊處理的演算法數學模型。 

640?wx_fmt=pngImage credit: CS231n

這些神經元又被分為三種層次:

  • 輸入層

  • 隱藏層

  • 輸出層

 

輸入層接收輸入資料。在本案例中,在輸入層中有4個神經元:起飛機場,到達機場,起飛日期以及航空公司。輸入層將輸入傳遞給第一個隱藏層。

 

隱藏層針對我們的輸入進行數學運算。建立神經網路的一大難點便是決定隱藏層的層數,以及每層中神經元的個數。

 

深度學習中的“深度”所指的是擁有多於一層的隱藏層。

 

輸出層返回的是輸出資料。在本案例中,輸出層返回的是價格預測。

640?wx_fmt=jpeg

那麼它到底是如何來運算價格預測的呢?這便是我們將要揭曉的深度學習的奇妙之處了。

 

每兩個神經元之間的連線,都對應著一個權重。該權重決定了輸入值的重要程度。初始的權重會被隨機設定。

 

當預測機票價格時,起飛日期是決定價格的最重要的因素之一。因此,與起飛日期這個神經元相連的連線將會有更高的權重。

640?wx_fmt=jpeg 每個神經元都有一個啟用函式(https://en.wikipedia.org/wiki/Activation_function)。若沒有數學推導,這些函式十分晦澀難懂。

 

簡而言之,啟用函式的作用之一便是將神經元的結果“標準化”。

 

一旦一組輸入資料通過了神經網路的所有層,神經網路將會通過輸出層返回輸出資料。

 

一點也不復雜,是吧?


訓練神經網路

訓練AI是深度學習中最難的部分了。這又是為什麼呢?

  • 你需要一個龐大的資料集

  • 你還需要強大的算力

 

對於我們的機票價格預估系統,我們需要得到過往的票價資料。由於起始機場和起飛時間擁有大量可能的組合,所以我們需要的是一個非常龐大的票價列表。

 

為了訓練機票價格預估系統的AI,我們需要將資料集的資料給予該系統,然後將它輸出的結果與資料集的輸出進行比對。因為此時AI仍然沒有受過訓練,所以它的輸出將會是錯誤的。

 

一旦我們遍歷完了整個資料集,我們便能創造出一個函式,該函式告訴我們AI的輸出和真實輸出到底相差多少。這個函式我們稱為損失函式。


在理想情況下,我們希望我們的損失函式為0,該理想情況指的是AI的輸出和資料集的輸出相等之時。 

如何減小損失函式呢?

改變神經元之間的權重。我們可以隨機地改變這些權重直到損失函式足夠小,但是這種方法並不夠高效。

 

取而代之地,我們應用一種叫做梯度下降的技巧。

 

梯度下降是一種幫助我們找到函式最小值的技巧。在本案例中,我們尋找損失函式的最小值。

 

在每次資料集迭代之後,該方法以小增量的方式改變權重。通過計算損失函式在一組確定的權重集合上的導數(梯度),我們便能夠知悉最小值在哪個方向。 

640?wx_fmt=jpeg

為了最小化損失函式,你需要多次迭代資料集。這便是需要高算力的原因了。利用梯度下降更新權重的過程是自動進行的。這便是深度學習的魔力所在!

 

一旦我們訓練好機票價格預估的AI之後,我們便能夠用它來預測未來的價格了。


小結

1. 深度學習應用神經網路來模仿動物智慧。

2. 神經網路中有三個層次的神經元:輸入層、隱藏層以及輸出層。

3. 神經元之間的連線對應一個權重,該權重決定了各輸入資料的重要程度。

4. 神經元中應用一個啟用函式來“標準化”神經元輸出的資料。

5. 你需要一個龐大的資料集來訓練神經網路。

6. 在資料集上迭代並與輸出結果相比較,我們將會得到一個損失函式,損失函式能告訴我們AI生成的結果和真實結果相差多少。

7. 在每次資料集的迭代之後,都會利用梯度下降方法調整神經元之間的權重,以減小損失函式。


今日薦課

針對希望深入實戰深度學習的同學,七月線上開設了【深度學習集訓營】,略過Python基礎,從TensorFlow搭建DNN解決問題起步,線下一對一指導、互動,實戰BAT工業專案。

4月24日正式開課,線上線下結合(線下在北京和上海)從頭到尾全部實戰,涵蓋特徵工程、深度學習在計算機視覺和自然語言處理領域中的應用,更有大規模車輛圖片檢索等應用於智慧城市、視訊監控等場景的殺手級專案。

掃描下方二維碼加入課程

640?wx_fmt=png

相關文章