導讀:本篇文章主要面向產品、業務、運營人員等任何非技術人員通俗易懂地講解什麼是深度學習和神經網路,二者的聯繫和區別是什麼。無需技術背景也可以有一個比較全面清晰的認識。同時也為為大家講解TensorFlow、Caffe、Pytorch等深度學習框架和目前工業界深度學習應用比較廣的領域。
一、人工智慧、機器學習、深度學習是什麼
1.1 人工智慧是什麼
在介紹深度學習之前,先和大家介紹一下AI和Machine Learning,才能理清AI、Machine Learning、Deep Learning三者之間的關係。
1956年8月,在美國漢諾威小鎮的達特茅斯學院中,幾位科學家在會議上正式提出了「人工智慧」這一概念,這一年也被稱為人工智慧元年。在此之前,人類已經製造出各類各樣的機器如汽車、飛機等,但這些機器都需要經過人來操作使用,無法自己具備操作的能力。科學家探討能不能製造出一個可以像人類大腦的一樣思考的機器,擁有人類的智慧,這就是人工智慧。
同時科學家們也對AI未來的發展暢想了三個階段:
大家在電影上看到的各種AI都是強人工智慧,但目前我們仍處在弱人工智慧階段,什麼時候進入強人工智慧階段未知。強人工智慧階段,機器可以完美媲美人腦,像人類一樣有情感地、批判性地去思考。同時可以快速學習,擁有極強的自學能力。
那麼如何實現人工智慧了,實現人工智慧的方法是什麼了?
1.2 機器學習是什麼
實現人工智慧的方法我們統稱為「機器學習」。同樣是1956年的美國達特茅斯會議上,IBM的工程師Arthur Samuel正式提出了「Machine Learning」這個概念,1956年真的是特殊的一年。
機器學習既是一種實現AI的方法,又是一門研究如何實現AI的學科,你可以理解為和數學、物理一樣的學科。機器學習,簡單來說就是從歷史數據中學習規律,然後將規律應用到未來中。國內大家一致推薦的,南京大學周志華教授的機器學習教材西瓜書裡面如此介紹機器學習。
機器學習是機器從歷史數據中學習規律,來提升系統的某個性能度量。其實人類的行為也是通過學習和模仿得來的,所以我們就希望計算機和人類的學習行為一樣,從歷史數據和行為中學習和模仿,從而實現AI。
簡單點講,大家從小到大都學習過數學,刷過大量的題庫。老師和我們強調什麼?要學會去總結,從之前做過的題目中,總結經驗和方法。總結的經驗和方法,可以理解為就是機器學習產出的模型,然後我們再做數學題利用之前總結的經驗和方法就可以考更高的分。有些人總結完可以考很高的分,說明他總結的經驗和方法是對的,他產出的的模型是一個好模型。
既然有了機器學習這一方法論,科學家們基於這一方法論,慢慢開始提出了各類各樣的演算法和去解決各種「智能」問題。就像在物理學領域,物理學家們提出了各種各樣的定理和公式,不斷地推動著物理學的進步。牛頓的三大定律奠定了經典力學的基礎。而傳統機器學習的決策樹、貝葉斯、聚類演算法等奠定了傳統機器學習的基礎。
1.3 深度學習是什麼
但是隨著研究的不斷深入,傳統機器學習演算法在很多「智能」問題上效果不佳,無法實現真正的「智能」。
就像牛頓三大定律,無法解釋一些天文現象。在1905年,愛因斯坦提出了「相對論」,解釋了之前牛頓三大定律無法解釋的天文現象。同樣2006年,加拿大多倫多大學教授Geoffrey Hinton對傳統的神經網路演算法進行了優化,在此基礎上提出了Deep Neural Network的概念,他們在《Science》上發表了一篇Paper,下面鏈接是那篇文章:http://www.cs.toronto.edu/~hinton/science.pdf
引起了Deep Learning在學術界研究的熱潮。2012年Geoffrey Hinton老爺子的課題組,在參加業界知名的ImageNet圖像識別大賽中,構建的CNN網路AlexNet一舉奪得冠軍,且碾壓第二名(SVM方法)。也正是因為該比賽,Deep Learning引起了工業界的關注,迅速將Deep Learning引進到工業界的應用上。深度學習技術解決了很多傳統機器學習演算法效果不佳的「智能」問題,尤其是圖片識別、語音識別和語義理解等。某種程度上,深度學習就是機器學習領域的相對論。
將人工智慧和機器學習帶到了一個新高度的技術就是:Deep Learning。深度學習是一種機器學習的技術。
同時大家應該聽到過一大堆的「學習」名詞:機器學習、深度學習、強化學習等等。在這裡面機器學習是「爸爸」,是父節點;其他都是它「兒子」,是子節點。AI、Machine Learning和Deep Learning的關係可以通過下圖進行描述。
讓機器實現人工智慧是人類的一個美好願景,而機器學習是實現AI的一種方法論,深度學習是該方法論下一種新的技術,在圖像識別、語義理解和語音識別等領域具有優秀的效果。
那麼深度學習到底是一門什麼技術?「深度」到底代表什麼?
二、深度學習與神經網路
介紹深度學習就必須要介紹神經網路,因為深度學習是基於神經網路演算法的,其實最開始只有神經網路演算法,上文也提到2006年Geoffrey Hinton老爺子提出了Deep Learning,核心還是人工神經網路演算法,換了一個新的叫法,最基本的演算法沒有變。學過生物的都知道神經網路是什麼?下圖是生物神經網路及神經元的基本組成部分。
人類的大腦可以實現如此複雜的計算和記憶,就完全靠900億神經元組成的神經網路。那麼生物神經網路是如何運作的了?可以參照下圖:
通過神經元接收外界信號,達到一定閾值,觸發動作電位,通過突觸釋放神經遞質,可以是興奮或抑制,影響突觸后神經元。通過此實現大腦的計算、記憶、邏輯處理等,進行做出一系列行為等。同時不斷地在不同神經元之間構建新的突觸連接和對現有突觸進行改造,來進行調整。有時候不得不感嘆大自然的鬼斧神工,900億神經元組成的神經網路可以讓大腦實現如此複雜的計算和邏輯處理。
科學家們從生物神經網路的運作機製得到啟發,構建了人工神經網路。其實人類很多的發明都是從自然界模仿得來的,比如飛機和潛艇等。下圖是最經典的MP神經元模型,是1943年由科學家McCulloch和Pitts提出的,他們將神經元的整個工作過程抽象為下述的模型。
- x_1,x_2,x_3,x_n:模擬生物神經網路中來自其他神經元的輸入;
- ω_1,ω_2,ω_3,ω_n:模擬生物神經網路中每個神經元對外接收的突觸強度不同,所以外界接收的輸入乘以一定權重;
- Σ-Sum:模擬生物神經網路中神經元對外接收的信號進行累加匯總;
- Bias:模擬生物神經網路中神經元的一般敏感性。每個神經元的敏感性不同,所以需要一定的偏差來調整匯總值;
- Activation Function:模擬生物神經網路中信號累積到一定程度產生的動作電位,當累積到一定程度就會「激活」動作電位。實際使用時我們一般使用Sigmoid函數;
- Output:模擬生物神經網路中神經元對外釋放的新的信號;
現在我們知道了最簡單的神經元模型了,我們如何使用該模型從歷史數據中進行學習,推導出相關模型了。我們使用上述MP模型學習一個最簡單的二分類模型。
如上圖,為了訓練簡單,我們訓練集裡面只有兩條數據。同時激活函數,我們也是最簡單的激活函數,當φ(∗) > 0時輸出為1,當φ(∗) ≤ 0時輸出為0。然後對於參數的更新規則Updated Rule,我們使用的Sequential Delta learning rule和Back Propagation演算法,該規則和演算法不詳細介紹了,可以理解為就像物理、數學領域一些科學家發現的普適性定理和公式,已經得到了證明,用就完事了。
因為Input只有1個值x_1,所以初始設定參數ω_1,同時還需要一個Bias,我們將Bias設定為ω_0。上述兩個參數,我們需要從歷史數據中學習出來,但是最開始我們需要一個初始值,假設初始值為ω_1 = 2, ω_0 = 1.5 ;然後我們通過不斷地更新迭代最終ω_1和 ω_0 將穩定在兩個固定的值,這就是我們最終通過一個簡單MP模型學習出來的參數。下圖是整個更新迭代學習的過程:
大家可以看到上圖最後一次循環ω已經不再發生變化,說明[0.5,-1]就是最終我們學習出來的固定參數。那麼上述整個過程就是一個通過神經網路MP模型學習的全過程。下圖是最終學習出來的Classifier分類器,我們帶入一個新的數據,就可以進行Class預測了。
2.3 何為「深度」
上文我們已經介紹了人工神經網路經典的MP模型,那麼在深度學習裡面我們使用的是什麼樣的神經網路了,這個」深度「到底指的是什麼了?其實就是如下圖所示的,輸入層和輸出層之間加更多的」Hidden Layer「隱藏層,加的越多越」深「。
最早的MP神經網路實際應用的時候因為訓練速度慢、容易過擬合、經常出現梯度消失以及在網路層次比較少的情況下效果並不比其他演算法更優等原因,實際應用的很少。中間很長一段時間神經網路演算法的研究一直處於停滯狀態。人們也嘗試模擬人腦結構,中間加入更多的層」Hidden Layer「隱藏層,和人腦一樣,輸入到輸出中間要經歷很多層的突觸才會產生最終的Output。加入更多層的網路可以實現更加複雜的運算和邏輯處理,效果也會更好。
但是傳統的訓練方式也就是我Part 2.2裡面介紹的:隨機設定參數的初始值,計算當前網路的輸出,再根據當前輸出和實際Label的差異去更新之前設定的參數,直到收斂。這種訓練方式也叫做Back Propagation方式。Back Propagation方式在層數較多的神經網路訓練上不適用,經常會收斂到局部最優上,而不是整體最優。同時Back Propagation對訓練數據必須要有Label,但實際應用時很多數據都是不存在標籤的,比如人臉。
當人們加入更多的」Hidden Layer「時,如果對所有層同時訓練,計算量太大,根本無法訓練;如果每次訓練一層,偏差就會逐層傳遞,最終訓練出來的結果會嚴重欠擬合(因為深度網路的神經元和參數太多了)。
所以一直到2006年,Geoffrey Hinton老爺子提出了一種新的解決方案:無監督預訓練對權值進行初始化+有監督訓練微調。
歸納一下Deep Learning與傳統的神經網路演算法最大的三點不同就是:
- 訓練數據:傳統的神經網路演算法必須使用有Label的數據,但是Deep Learning下不需要;
- 訓練方式不同:傳統使用的是Back Propagation演算法,但是Deep Learning使用自下上升非監督學習,再結合自頂向下的監督學習的方式。對於監督學習和非監督學習概念不清楚的讀者可以閱讀我上文引用的強化學習文章,裡面有詳細介紹。
- 層數不同:傳統的神經網路演算法只有2-3層,再多層訓練效果可能就不會再有比較大的提升,甚至會衰減。同時訓練時間更長,甚至無法完成訓練。但是Deep Learning可以有非常多層的「Hidden Layer」,並且效果很好。
不管怎麼樣Deep Learning也還是在傳統神經網路演算法基礎上演變而來的,它還是一種基於神經網路的演算法。
三、深度學習框架
大家了解了深度學習和神經網路以後,相信大家也經常聽到如下的英文單詞:Tensorflow、Caffe、Pytorch等,這些都是做什麼的了。Tensorflow是Google旗下的開源軟體庫,裡面含有深度學習的各類標準演算法API和數據集等,Pytorch是Facebook旗下的開源機器學習庫,也包含了大量的深度學習標準演算法API和數據集等。Caffe是賈揚清大神在UC Berkeley讀博士時開發的深度學習框架,2018年時併入到了Pytorch中。
因為深度學習發展至今,很多演算法都已經是通用的,而且得到過驗證的了。
那麼有些公司就希望將一些標準演算法一次性開發好,封裝起來,後面再使用時直接調用引入即可,不需要再寫一遍。就像大家小時候學習英文一樣,英文字典有牛津版本的,也有朗文版本的。對於收錄的英文單詞,英文單詞如何使用,如何造句等,已經有了標準的用法。我們只需要查閱這些字典即可,而Tensorflow、Caffe、Pytorch做的其實也就是計算機屆的牛津、朗文英文大詞典。國內百度目前也有自己的深度學習框架Paddle-Paddle。
目前一般是學術界用Pytorch較多,Pytorch更適合新手入門,上手快。工業界用Tensorflow較多,更適合工業界的落地和部署等。
四、深度學習在工業界主要應用領域
目前深度學習應用最廣泛的就是傳統機器學習演算法解決不了的領域或者是效果不佳的領域:視覺、自然語言和語音識別領域。當樣本數量少的時候,傳統機器學習演算法還可以通過一些結構化特徵組合在一起然後區分出來。
比如區分汽車和摩托車,可以通過輪子數量。但對於人臉,千萬張人臉相似的太多,已經完全無法通過鼻子、頭髮、眼睛這些簡單的特徵組合進行區分了。需要探索更多更複雜的特徵,組合在一起才能將千萬張人臉區分開來。
所以這時候就需要Deep Learning構建多層神經網路,探索組合更多的特徵,才能識別區分千萬級別甚至億萬級別的人臉。這在傳統神經網路演算法和機器學習演算法是完全實現不了的。
當然實現上述功能,也是因為現階段有了更多的數據可以進行訓練,同時有了更好的算力可以快速完成訓練。傳統的CPU進行訓練,可能訓練幾個月都訓練不出來結果。GPU的出現和改進加速了上述訓練過程。
目前應用最廣的一些領域:
- CV:計算機視覺領域。隨處可見的人臉識別、物體識別和文字識別OCR。廣泛應用於安防領域,同時零售行業也在通過CV技術實現線下門店的數字化。目前國內頭部公司就是CV四小龍:商湯、曠視、雲從、依圖;
- NLP:自然語言處理領域。目前整體的NLP技術還是不夠成熟,無法實現人們設想的機器人可以完全智能對話,機器人目前只能做一些簡單的信息提取和檢索整合的事情。NLP目前也是最難做的,同樣一句話可能會有不同種意思。人有時都很難理解,更何況機器。目前國內頭部公司主要是百度和達觀;
- ASR:語音識別領域。目前國內獨一檔就是科大訊飛,尤其是能夠做到很多地方方言的精準識別。語音識別目前主要主要用在語音客服上,有時候大家接到的推銷電話其實背後都是電話機器人打的。電話機器人能夠完全和用戶進行對話,一定程度上也需要NLP的技術,因為它需要理解用戶的意思。
- Autopilot:自動駕駛其實也是CV的衍生領域,目前世界上做自動駕駛最好的其實還是汽車公司比如特斯拉。因為沒有車,自動駕駛想獲得訓練數據都很困難。沒有車,自動駕駛技術想實驗都跑不通。目前國內百度差不多算第一檔。
- 推薦:傳統的推薦都是用GBDT+LR模型來做的,目前深度學習在推薦領域也得到了廣泛的應用,下面是深度學習在美團點評里搜索推薦的應用可以閱讀一下。