深度學(xué)習(xí)到底有多深?
現(xiàn)在搞AI的公司,不管用什么樣的算法,都想讓自己跟深度學(xué)習(xí)扯上點關(guān)系,因為這樣好像顯得逼格夠高。目前比較前沿的語音交互、計算機視覺等,就連神壇的Alpha Go的算法都是用深度學(xué)習(xí)。那究竟深度學(xué)習(xí)是什么?到底有多強大?要怎么實現(xiàn)?本文就跟大家一起討論下。
在看接下來的內(nèi)容之前,如果對機器學(xué)習(xí)還不了解的同學(xué),可以先看下這篇《想入門AI,機器學(xué)習(xí)你知多少了?》——介紹了機器學(xué)習(xí)的整體框架,機器學(xué)習(xí)的步驟,深度學(xué)習(xí)與機器學(xué)習(xí)的關(guān)系,還有比較詳細的介紹了為什么會需要人工神經(jīng)網(wǎng)絡(luò)??赐暌陨系奈恼略賮碛懻摻裉斓膬?nèi)容可能會更容易理解。
好了,我們言歸正傳。
以下就是我們本次需要談?wù)摰膬?nèi)容:
?01 深度學(xué)習(xí)一些有趣的應(yīng)用
1. Face 2 Face
Face2Face是斯坦福大學(xué)等學(xué)生做的一款應(yīng)用軟件,這套系統(tǒng)能夠利用人臉捕捉技術(shù),讓你說話的聲音、表情、動作,投射到視頻中的另一個人臉色。
如上圖所示,左上角是特蘭普演講的視頻,左下角是模仿者在說話,經(jīng)過系統(tǒng)處理后,特蘭普的表情和聲音就變成了模仿者的表情和聲音。(大家可以搜下網(wǎng)上的視頻,挺有意思的)
2. 靈魂畫家
這個大家可能也見過,就是在原來的圖片上,加上了另外一個圖片的風(fēng)格特點。
如上圖所示,一張蒙娜麗莎的畫,加上了梵高畫的特征,就變成了如右邊所示的圖片。
3. AlphaGo
這個大家就更熟悉了,2016年3月,AlphaGo與圍棋世界冠軍棋手李世石進行圍棋人機大戰(zhàn),以4比1的總比分獲勝。
通過上面的例子大家可以看到,深度學(xué)習(xí)的應(yīng)用非常的廣泛,小到很有趣的表情投影,大到圍棋人機大戰(zhàn)。也就是說深度學(xué)習(xí)的空間很廣,想做一個深度學(xué)習(xí)的產(chǎn)品也不是我們想象中的那么深奧,但是要想做得特別強大還是會有很多困難的。
那深度學(xué)習(xí)究竟是什么,接下來就和大家詳細討論下。
02 什么才是深度學(xué)習(xí)?
在講深度學(xué)習(xí)之前,我們先要知道什么是神經(jīng)網(wǎng)絡(luò),而在講神經(jīng)網(wǎng)絡(luò)之前,我們還得先知道什么是神經(jīng)元。
1. 神經(jīng)元
假設(shè)設(shè)置函數(shù):Z(x)=W1X1 + W2X2 + W3X3 +…+WnXn + b,(是不是很眼熟,跟我們之前說到的線性方程很相識,不知道這個由來的話,再次建議先看下前面提到的文章)。
則神經(jīng)元的表示如下:
每一個神經(jīng)元就是一個邏輯回歸算法。什么是邏輯回歸算法,可以參考這篇文章《機器學(xué)習(xí)之邏輯回歸》,在此就不展開講了。
2. 神經(jīng)網(wǎng)絡(luò)
多個神經(jīng)元相互連接就組成了神經(jīng)網(wǎng)絡(luò),每個神經(jīng)元都通過接收前一層網(wǎng)絡(luò)傳遞來的信息,經(jīng)過處理后,再傳遞給下一層。
按結(jié)構(gòu)來分,神經(jīng)網(wǎng)絡(luò)由:輸入層、隱藏層和輸出層組成。
- 輸入層:即原始的特征輸入。
- 隱藏層:除輸入層和輸出層外,其他的就是隱藏層。
- 輸出層:后面不再接其他神經(jīng)元。
3. 深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的關(guān)系
定義:有多層網(wǎng)絡(luò)結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),我們就說是深度學(xué)習(xí)。
那有多少層才算是深度學(xué)習(xí)呢?
現(xiàn)在也沒有一個官方的定義,有的人說3層,有的人說5層才算深度網(wǎng)絡(luò),多的高達上百層,反正大家都說自己是在做深度學(xué)習(xí),這樣看起來會比較高大尚點。
模組化:深度學(xué)習(xí)有一個非常重要的思想就是模組化。
那什么是模組化思想呢?
就像我們玩搭積木,一堆積木可以搭成各種各樣形狀的東西,而深度學(xué)習(xí)的每一層都是一個組件,可以供其他層靈活調(diào)用。
下面用一個例子說明:
假設(shè)我們要做一個圖像識別,區(qū)分出4類人群:長頭發(fā)的女生、短頭發(fā)的女生、長頭發(fā)的男生、短頭發(fā)的男生。
非模組化的思路:
要設(shè)計4個基礎(chǔ)的分類器:長發(fā)女、短發(fā)女、長發(fā)男、短發(fā)男,然后就需要找4類型這樣的圖片去訓(xùn)練機器。但現(xiàn)實中的問題可能是長頭發(fā)的男生會比較少,因此訓(xùn)練出來的效果可能就不是很好。
模組化的思路:
我們可以先訓(xùn)練好兩個基礎(chǔ)模型:區(qū)分男女的分類器、區(qū)分長短頭發(fā)的分類器,這樣我們就可以有足夠好的數(shù)據(jù)去訓(xùn)練好這兩個分類器。
然后,在下一層區(qū)分長發(fā)女、短發(fā)女、長發(fā)男、短發(fā)男的分類器中,我們就可以直接調(diào)用前面的模塊的輸出組合了。
模組化的好處:
- 充分利用數(shù)據(jù),比較少的數(shù)據(jù)就可以訓(xùn)練出比較好的模型。
- 訓(xùn)練時間短,拆分一個模組一個模組的訓(xùn)練的效率要比一坨訓(xùn)練高。
- 靈活調(diào)用,訓(xùn)練好一個模組的時候,可以供多個地方共有參數(shù)。
03 深度學(xué)習(xí)需要怎么做?
其實這三步跟我們之前討論的線性回歸的差不多,先定義好模型,然后定義出代價函數(shù),最后用數(shù)據(jù)訓(xùn)練,找出最優(yōu)的參數(shù)。主要的不同點是在第一步,怎么定義網(wǎng)絡(luò)架構(gòu)。
1. 定義網(wǎng)絡(luò)架構(gòu)
在定義網(wǎng)絡(luò)架構(gòu)時,需要考慮幾個問題:
- 輸入是什么?
- 輸出是什么?
- 選擇多少層網(wǎng)絡(luò)?
- 每一層有多少個神經(jīng)元?
- 層與層之間要怎么連接的?
如何選擇輸入、輸出?
以手寫數(shù)字辨識為例說明:
假設(shè)我們要辨識一張像素是16*16=256的手寫數(shù)字圖片,那每一個像素點就是一個特征變量X,因此輸入就是:X1、X2、X3、X4、…、X256。輸出就是0-9十個數(shù)字的概率,然后根據(jù)概率最大是那個數(shù)字預(yù)測結(jié)果。
上圖,分別輸出了是數(shù)字0-9的概率,而是2的概率最大是0.9,因此機器覺得,這個數(shù)字就是2。
如何選擇網(wǎng)絡(luò)架構(gòu)?
最常見的就是全連接,通過訓(xùn)練再逐步把參數(shù)為0的剔除掉。再厲害點的話就是,讓機器自己去學(xué)習(xí)然后決定用多少層,怎么去連接。
實現(xiàn)同一個功能,可能網(wǎng)絡(luò)架構(gòu)的選擇可以是不一樣,沒有一個唯一的標準。
2. 定義什么是最好的(定義代價函數(shù))
在第一步搭建好神經(jīng)網(wǎng)絡(luò)架構(gòu)之后,接下來要做的事情就是確定最優(yōu)的參數(shù)。
如上圖所示,我們要確定一個模型,就是確定每個神經(jīng)元紅框內(nèi)這些參數(shù)的值。
我們在模型輸入一個數(shù)據(jù),就會得到一個預(yù)測值,假設(shè)預(yù)測值與真實值的誤差為L,那輸入所有訓(xùn)練數(shù)據(jù)的誤差就是:總L=L1 + L2 + L3 + L4 + … + Ln。
備注:上圖的X1不是指單個特征詳細,而是指輸入的第一張圖片,每張圖片都有256個特征向量值。
當(dāng)總誤差最小時(總L最小時),得到的參數(shù)就是我們認為最好的參數(shù),因此這就是我們定義什么是最好的。
3. 找出最優(yōu)模型(求出最優(yōu)解)
假設(shè)我們的總誤差是一條如上圖的曲線,那我們要怎么找到她的最小值呢?
求最小值,常見的方法是梯度下降。什么是梯度下降呢?
類比例子:
假設(shè)你現(xiàn)在在大山的某處,你的目標是要到達山的最低谷處,那你需要做事情有兩步:
- 根據(jù)當(dāng)前位置,選擇一個向低處的方向。
- 根據(jù)選擇的方向,走一段距離,再停下來選擇方向。
不斷的重復(fù)以上的兩步,最終你可能走到山的最底處。
這里有兩個需要注意的點:
- 你根據(jù)什么來選擇方向?
- 你走多長距離再停下來選擇方向?如果你選擇的距離很小的話,那可能不知道走到猴年馬月你才能走到最低,但是如果你選擇的距離很長的話,有可能你走了最低點還不知道。
那梯度下降也是用同樣的思想來找到最小值的,分兩步:
- 選方向:在誤差函數(shù)曲線上,隨機取一個點,然后求導(dǎo),根據(jù)導(dǎo)數(shù)的正負,決定移動的方向。
- 選擇步長:學(xué)習(xí)率的參數(shù)決定步長。
具體梯度下降是怎么實現(xiàn)的,可以參考這篇文章《機器學(xué)習(xí)之線性回歸》,有講到梯度下降的方法,在此就不展開講了。
當(dāng)然梯度下降只是求解最小值最常用的方法而已,還有其他求最小值的方法,比如:標準函數(shù)法等,感興趣的同學(xué)可以去了解下。
4. 深度學(xué)習(xí)的典型代表
在深度學(xué)習(xí)領(lǐng)域有兩個典型的代表:卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)。
- 卷積神經(jīng)網(wǎng)絡(luò)被廣泛的應(yīng)用在計算機視覺領(lǐng)域,比如說強大的AlphaGo就有用到卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)。
- 循環(huán)神經(jīng)網(wǎng)絡(luò)則被廣泛的應(yīng)用在語音識別處理領(lǐng)域,比如說百度翻譯、網(wǎng)絡(luò)音樂生產(chǎn)等。
具體卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)是什么?具體的結(jié)構(gòu)是怎樣的?又是怎么運行的?都應(yīng)用在哪些產(chǎn)品上?我會寫兩篇文章分別單獨介紹,感興趣的同學(xué)可以持續(xù)關(guān)注。
04 深度學(xué)習(xí)的優(yōu)缺點和面臨的困境
優(yōu)點
深度學(xué)習(xí)能讓計算機自動學(xué)習(xí)出模式特征,并將特征學(xué)習(xí)的特征融入到建模的過程中,從而減少了人為設(shè)計特征造成的不完備性。而目前有些深度學(xué)習(xí),已經(jīng)達到了超越現(xiàn)有算法的識別或分類性能。
缺點
- 需要大數(shù)據(jù)支撐,才能達到高精度。
- 由于深度學(xué)習(xí)中圖模型比較復(fù)雜,導(dǎo)致算法的時間復(fù)雜度急劇提升,需要更好的硬件支持。因此,只有一些經(jīng)濟實力比較強大的科研機構(gòu)或企業(yè),才能夠用深度學(xué)習(xí)來做一些前沿而實用的應(yīng)用。
面臨挑戰(zhàn)
Marcus 在 2018 年對深度學(xué)習(xí) 的作用、局限性和本質(zhì)進行了重要的回顧。他強烈指出了 DL 方法的局限性——即需要更多的數(shù)據(jù),容量有限,不能處理層次結(jié)構(gòu),無法進行開放式推理,不能充分透明,不能與先驗知識集成,不能區(qū)分因果關(guān)系。
他還提到,DL 假設(shè)了一個穩(wěn)定的世界,以近似方法實現(xiàn),工程化很困難,并且存在著過度炒作的潛在風(fēng)險。
Marcus 認為:DL 需要重新概念化,并在非監(jiān)督學(xué)習(xí)、符號操作和混合模型中尋找可能性,從認知科學(xué)和心理學(xué)中獲得見解,并迎接更大膽的挑戰(zhàn)。
好了,關(guān)于深度學(xué)習(xí)的介紹就到此結(jié)束了,如有錯漏歡迎批評指正。
本文由 @Jimmy 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
分別輸出了是數(shù)字0-9的概率,而是2的概率最大是0.9,因此機器覺得,這個數(shù)字就是2。
請問0.1是0、0.1是1、0.9是2這些數(shù)值是這樣算出來?
想了解下神經(jīng)網(wǎng)絡(luò)是否有參數(shù)膨脹的問題,如何去解決這部分影響的擬合度
通熟易懂,好評。具體是否講的正確,等我學(xué)習(xí)之后再來交 流一下吧。