獲贊2萬,一文讀懂深度學習
這是一篇Medium上獲得近2萬贊的深度學習入門指南,用圖文為你詳解深度學習中的各個基礎概念。
在我們的日常生活中,幾乎隨處可見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),它是一種模仿動物神經網路行為特徵,進行分散式並行信息處理的演算法數學模型。
Image credit: CS231n
這些神經元又被分為三種層次:
輸入層
隱藏層
輸出層
輸入層接收輸入數據。在本案例中,在輸入層中有4個神經元:起飛機場,到達機場,起飛日期以及航空公司。輸入層將輸入傳遞給第一個隱藏層。
隱藏層針對我們的輸入進行數學運算。創建神經網路的一大難點便是決定隱藏層的層數,以及每層中神經元的個數。
深度學習中的「深度」所指的是擁有多於一層的隱藏層。
輸出層返回的是輸出數據。在本案例中,輸出層返回的是價格預測。
那麼它到底是如何來運算價格預測的呢?這便是我們將要揭曉的深度學習的奇妙之處了。
每兩個神經元之間的連接,都對應著一個權重。該權重決定了輸入值的重要程度。初始的權重會被隨機設定。
當預測機票價格時,起飛日期是決定價格的最重要的因素之一。因此,與起飛日期這個神經元相連的連接將會有更高的權重。
每個神經元都有一個激活函數(https://en.wikipedia.org/wiki/Activation_function)。若沒有數學推導,這些函數十分晦澀難懂。
簡而言之,激活函數的作用之一便是將神經元的結果「標準化」。
一旦一組輸入數據通過了神經網路的所有層,神經網路將會通過輸出層返回輸出數據。
一點也不複雜,是吧?
訓練神經網路
訓練AI是深度學習中最難的部分了。這又是為什麼呢?
你需要一個龐大的數據集
你還需要強大的算力
對於我們的機票價格預估系統,我們需要得到過往的票價數據。由於起始機場和起飛時間擁有大量可能的組合,所以我們需要的是一個非常龐大的票價列表。
為了訓練機票價格預估系統的AI,我們需要將數據集的數據給予該系統,然後將它輸出的結果與數據集的輸出進行比對。因為此時AI仍然沒有受過訓練,所以它的輸出將會是錯誤的。
一旦我們遍歷完了整個數據集,我們便能創造出一個函數,該函數告訴我們AI的輸出和真實輸出到底相差多少。這個函數我們稱為損失函數。
在理想情況下,我們希望我們的損失函數為0,該理想情況指的是AI的輸出和數據集的輸出相等之時。
如何減小損失函數呢?
改變神經元之間的權重。我們可以隨機地改變這些權重直到損失函數足夠小,但是這種方法並不夠高效。
取而代之地,我們應用一種叫做梯度下降的技巧。
梯度下降是一種幫助我們找到函數最小值的技巧。在本案例中,我們尋找損失函數的最小值。
在每次數據集迭代之後,該方法以小增量的方式改變權重。通過計算損失函數在一組確定的權重集合上的導數(梯度),我們便能夠知悉最小值在哪個方向。
為了最小化損失函數,你需要多次迭代數據集。這便是需要高算力的原因了。利用梯度下降更新權重的過程是自動進行的。這便是深度學習的魔力所在!
一旦我們訓練好機票價格預估的AI之後,我們便能夠用它來預測未來的價格了。
小結
1. 深度學習應用神經網路來模仿動物智能。
2. 神經網路中有三個層次的神經元:輸入層、隱藏層以及輸出層。
3. 神經元之間的連接對應一個權重,該權重決定了各輸入數據的重要程度。
4. 神經元中應用一個激活函數來「標準化」神經元輸出的數據。
5. 你需要一個龐大的數據集來訓練神經網路。
6. 在數據集上迭代並與輸出結果相比較,我們將會得到一個損失函數,損失函數能告訴我們AI生成的結果和真實結果相差多少。
7. 在每次數據集的迭代之後,都會利用梯度下降方法調整神經元之間的權重,以減小損失函數。
- 加入AI學院學習 -


※深度學習工程模板:簡化載入數據、構建網路、訓練模型和預測樣本的流程
※重磅!卷積神經網路為什麼能稱霸計算機視覺領域?
TAG:AI講堂 |