1. 程式人生 > >乾貨丨一文讀懂深度學習(附學習資源,據說點贊2W+)

乾貨丨一文讀懂深度學習(附學習資源,據說點贊2W+)

0?wx_fmt=gif

文章來源:新智元

0?wx_fmt=jpeg

人工智慧(AI)和機器學習(ML)都屬於目前最熱門的話題。

在日常生活中,AI這個術語我們隨處可見。你或許會從立志高遠的開發者那裡聽說她(他)們想要學習AI。你又或許會從運營者那裡聽到他們想要在他們的的服務中實施AI。但往往這些人中的絕大多數都並不明白什麼是AI。

在你閱讀完這篇文章之後,你將會了解AI和ML的基本知識。而更重要的是,你將會明白深度學習(https://en.wikipedia.org/wiki/Deep_learning),這類最熱門的機器學習,是如何運作的。

這篇教程適用於所有人,所以本文並沒有涉及高階數學。

背景

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

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

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

AI的研究之初,那時的研究人員嘗試著複製人類智慧來完成像玩遊戲這樣特定的任務。他們引入了大量的計算機需要遵守的規則。有了這些規則,計算機就有了一份包含各種可能行動的清單,並基於這些規則作出決定(https://en.wikipedia.org/wiki/Expert_system)

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

ML允許計算機通過自身來學習。這種學習方法得益於現代計算機的強大效能,效能保證了計算機能夠輕鬆處理樣本數巨大的資料集。

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

監督學習(https://en.wikipedia.org/wiki/Supervised_learning)指的是利用已標註資料集進行的學習,該資料中包含輸入和期望輸出。

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

如果AI所生成的輸出是錯誤的(譯者注:與期望輸出不同),它將重新調整計算(注:應該是對公式的引數進行重新計算)。這個過程將會在資料集上迭代執行,直到AI不再犯錯誤。

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

非監督學習(https://en.wikipedia.org/wiki/Unsupervised_learning)

是機器學習應用沒有指定結構的資料集來進行學習的任務。

當你應用非監督學習來訓練AI時,你可以讓AI對資料進行邏輯分類。

電商網站上的行為預測AI便是非監督學習的一個例子。它無法通過擁有輸入和輸出的已標註資料集來進行學習。相反地,它在輸入資料上建立它自己的分類。它將會告訴你哪一種使用者最可能購買差異化的商品。

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

現在你已經準備好去理解什麼是深度學習,以及它是如何運作的。

深度學習是機器學習中的一種方法。在給予它一組輸入後,它使我們能夠訓練AI來預測結果。監督學習和非監督學習都能夠用來訓練AI。

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

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

  • 起飛機場

  • 到達機場

  • 起飛日期

  • 航空公司

神經網路

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

和動物一樣,我們預估系統AI的大腦中有神經元。將它們用圓圈表示。這些神經元在內部都是相互連線的。

640?wx_fmt=pngImage credit: CS231n

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

  • 輸入層

  • 隱藏層

  • 輸出層

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

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

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

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

640?wx_fmt=png

那麼它到底是如何來運算價格預測的呢?

這便是我們將要揭曉的深度學習的奇妙之處了。

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

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

640?wx_fmt=png

Image credit: CodeProject

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

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

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

一點也不復雜,是吧?

訓練神經網路

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

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

  • 你還需要強大的算力

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

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

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

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

如何減小損失函式呢?

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

取而代之地,我們應用一種叫做梯度下降(https://en.wikipedia.org/wiki/Gradient_descent)的技巧。

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

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

640?wx_fmt=pngImage credit: Sebastian Raschka

為了最小化損失函式,你需要多次迭代資料集。這便是需要高算力的原因了。

利用梯度下降更新權重的過程是自動進行的。這便是深度學習的魔力所在!

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

拓展閱讀

神經網路有非常多的種類:用於計算機視覺(https://en.wikipedia.org/wiki/Computer_vision)卷積神經網路(https://en.wikipedia.org/wiki/Convolutional_neural_network)以及應用於自然語言處理(https://en.wikipedia.org/wiki/Natural_language_processing)迴圈神經網路(https://en.wikipedia.org/wiki/Recurrent_neural_network)

如果你想要學習深度學習的技術細節,我建議你參加一個線上課程。

吳恩達(https://medium.com/@andrewng)的深度學習專項課程(https://www.coursera.org/specializations/deep-learning)是當下最好的深度學習課程之一。如果你並不需要一個證書,你便可以免費旁聽這門課程。

小結

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

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

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

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

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

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

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

原文連結:https://medium.freecodecamp.org/want-to-know-how-deep-learning-works-heres-a-quick-guide-for-everyone-1aedeca88076

0?wx_fmt=jpeg