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