深度學習到底有多深?
http://www.woshipm.com/ai/2585485.html
現在搞AI的公司,不管用什麼樣的演算法,都想讓自己跟深度學習扯上點關係,因為這樣好像顯得逼格夠高。目前比較前沿的語音互動、計算機視覺等,就連神壇的Alpha Go的演算法都是用深度學習。那究竟深度學習是什麼?到底有多強大?要怎麼實現?本文就跟大家一起討論下。
在看接下來的內容之前,如果對機器學習還不瞭解的同學,可以先看下這篇 《想入門AI,機器學習你知多少了?》 ——介紹了機器學習的整體框架,機器學習的步驟,深度學習與機器學習的關係,還有比較詳細的介紹了為什麼會需要人工神經網路。看完以上的文章再來討論今天的內容可能會更容易理解。
好了,我們言歸正傳。
以下就是我們本次需要談論的內容:
01 深度學習一些有趣的應用
1. Face 2 Face
Face2Face是史丹佛大學等學生做的一款應用軟體,這套系統能夠利用人臉捕捉技術,讓你說話的聲音、表情、動作,投射到視訊中的另一個人臉色。
如上圖所示,左上角是特蘭普演講的視訊,左下角是模仿者在說話,經過系統處理後,特蘭普的表情和聲音就變成了模仿者的表情和聲音。(大家可以搜下網上的視訊,挺有意思的)
2. 靈魂畫家
這個大家可能也見過,就是在原來的圖片上,加上了另外一個圖片的風格特點。
如上圖所示,一張蒙娜麗莎的畫,加上了梵高畫的特徵,就變成了如右邊所示的圖片。
3. AlphaGo
這個大家就更熟悉了,2016年3月,AlphaGo與圍棋世界冠軍棋手李世石進行圍棋人機大戰,以4比1的總比分獲勝。
通過上面的例子大家可以看到,深度學習的應用非常的廣泛,小到很有趣的表情投影,大到圍棋人機大戰。也就是說深度學習的空間很廣,想做一個深度學習的產品也不是我們想象中的那麼深奧,但是要想做得特別強大還是會有很多困難的。
那深度學習究竟是什麼,接下來就和大家詳細討論下。
02 什麼才是深度學習?
在講深度學習之前,我們先要知道什麼是神經網路,而在講神經網路之前,我們還得先知道什麼是神經元。
1. 神經元
假設設定函式:Z(x)=W1X1 + W2X2 + W3X3 +…+WnXn + b,(是不是很眼熟,跟我們之前說到的線性方程很相識,不知道這個由來的話,再次建議先看下前面提到的文章)。
則神經元的表示如下:
每一個神經元就是一個邏輯迴歸演算法。什麼是邏輯迴歸演算法,可以參考這篇文章《 機器學習之邏輯迴歸》 ,在此就不展開講了。
2. 神經網路
多個神經元相互連線就組成了神經網路,每個神經元都通過接收前一層網路傳遞來的資訊,經過處理後,再傳遞給下一層。
按結構來分,神經網路由:輸入層、隱藏層和輸出層組成。
- 輸入層:即原始的特徵輸入。
- 隱藏層:除輸入層和輸出層外,其他的就是隱藏層。
- 輸出層:後面不再接其他神經元。
3. 深度學習和神經網路的關係
定義: 有多層網路結構的神經網路,我們就說是深度學習。
那有多少層才算是深度學習呢?
現在也沒有一個官方的定義,有的人說3層,有的人說5層才算深度網路,多的高達上百層,反正大家都說自己是在做深度學習,這樣看起來會比較高大尚點。
模組化: 深度學習有一個非常重要的思想就是模組化。
那什麼是模組化思想呢?
就像我們玩搭積木,一堆積木可以搭成各種各樣形狀的東西,而深度學習的每一層都是一個元件,可以供其他層靈活呼叫。
下面用一個例子說明:
假設我們要做一個影象識別,區分出4類人群:長頭髮的女生、短頭髮的女生、長頭髮的男生、短頭髮的男生。
非模組化的思路:
要設計4個基礎的分類器:長髮女、短髮女、長髮男、短髮男,然後就需要找4型別這樣的圖片去訓練機器。但現實中的問題可能是長頭髮的男生會比較少,因此訓練出來的效果可能就不是很好。
模組化的思路:
我們可以先訓練好兩個基礎模型:區分男女的分類器、區分長短頭髮的分類器,這樣我們就可以有足夠好的資料去訓練好這兩個分類器。
然後,在下一層區分長髮女、短髮女、長髮男、短髮男的分類器中,我們就可以直接呼叫前面的模組的輸出組合了。
模組化的好處:
- 充分利用資料,比較少的資料就可以訓練出比較好的模型。
- 訓練時間短,拆分一個模組一個模組的訓練的效率要比一坨訓練高。
- 靈活呼叫,訓練好一個模組的時候,可以供多個地方共有引數。
03 深度學習需要怎麼做?
其實這三步跟我們之前討論的線性迴歸的差不多,先定義好模型,然後定義出代價函式,最後用資料訓練,找出最優的引數。主要的不同點是在第一步,怎麼定義網路架構。
1. 定義網路架構
在定義網路架構時,需要考慮幾個問題:
- 輸入是什麼?
- 輸出是什麼?
- 選擇多少層網路?
- 每一層有多少個神經元?
- 層與層之間要怎麼連線的?
如何選擇輸入、輸出?
以手寫數字辨識為例說明:
假設我們要辨識一張畫素是16*16=256的手寫數字圖片,那每一個畫素點就是一個特徵變數X,因此輸入就是:X1、X2、X3、X4、…、X256。輸出就是0-9十個數字的概率,然後根據概率最大是那個數字預測結果。
上圖,分別輸出了是數字0-9的概率,而是2的概率最大是0.9,因此機器覺得,這個數字就是2。
如何選擇網路架構?
最常見的就是全連線,通過訓練再逐步把引數為0的剔除掉。再厲害點的話就是,讓機器自己去學習然後決定用多少層,怎麼去連線。
實現同一個功能,可能網路架構的選擇可以是不一樣,沒有一個唯一的標準。
2. 定義什麼是最好的(定義代價函式)
在第一步搭建好神經網路架構之後,接下來要做的事情就是確定最優的引數。
如上圖所示,我們要確定一個模型,就是確定每個神經元紅框內這些引數的值。
我們在模型輸入一個資料,就會得到一個預測值,假設預測值與真實值的誤差為L,那輸入所有訓練資料的誤差就是:總L=L1 + L2 + L3 + L4 + … + Ln。
備註:上圖的X1不是指單個特徵詳細,而是指輸入的第一張圖片,每張圖片都有256個特徵向量值。
當總誤差最小時(總L最小時),得到的引數就是我們認為最好的引數,因此這就是我們定義什麼是最好的。
3. 找出最優模型(求出最優解)
假設我們的總誤差是一條如上圖的曲線,那我們要怎麼找到她的最小值呢?
求最小值,常見的方法是梯度下降。什麼是梯度下降呢?
類比例子:
假設你現在在大山的某處,你的目標是要到達山的最低谷處,那你需要做事情有兩步:
- 根據當前位置,選擇一個向低處的方向。
- 根據選擇的方向,走一段距離,再停下來選擇方向。
不斷的重複以上的兩步,最終你可能走到山的最底處。
這裡有兩個需要注意的點:
- 你根據什麼來選擇方向?
- 你走多長距離再停下來選擇方向?如果你選擇的距離很小的話,那可能不知道走到猴年馬月你才能走到最低,但是如果你選擇的距離很長的話,有可能你走了最低點還不知道。
那梯度下降也是用同樣的思想來找到最小值的,分兩步:
- 選方向:在誤差函式曲線上,隨機取一個點,然後求導,根據導數的正負,決定移動的方向。
- 選擇步長:學習率的引數決定步長。
具體梯度下降是怎麼實現的,可以參考這篇文章 《機器學習之線性迴歸》 ,有講到梯度下降的方法,在此就不展開講了。
當然梯度下降只是求解最小值最常用的方法而已,還有其他求最小值的方法,比如:標準函式法等,感興趣的同學可以去了解下。
4. 深度學習的典型代表
在深度學習領域有兩個典型的代表:卷積神經網路、迴圈神經網路。
- 卷積神經網路被廣泛的應用在計算機視覺領域,比如說強大的AlphaGo就有用到卷積神經網路實現。
- 迴圈神經網路則被廣泛的應用在語音識別處理領域,比如說百度翻譯、網路音樂生產等。
具體卷積神經網路和迴圈神經網路是什麼?具體的結構是怎樣的?又是怎麼執行的?都應用在哪些產品上?我會寫兩篇文章分別單獨介紹,感興趣的同學可以持續關注。
04 深度學習的優缺點和麵臨的困境
優點
深度學習能讓計算機自動學習出模式特徵,並將特徵學習的特徵融入到建模的過程中,從而減少了人為設計特徵造成的不完備性。而目前有些深度學習,已經達到了超越現有演算法的識別或分類效能。
缺點
- 需要大資料支撐,才能達到高精度。
- 由於深度學習中圖模型比較複雜,導致演算法的時間複雜度急劇提升,需要更好的硬體支援。因此,只有一些經濟實力比較強大的科研機構或企業,才能夠用深度學習來做一些前沿而實用的應用。
面臨挑戰
Marcus 在 2018 年對深度學習 的作用、侷限性和本質進行了重要的回顧。他強烈指出了 DL 方法的侷限性——即需要更多的資料,容量有限,不能處理層次結構,無法進行開放式推理,不能充分透明,不能與先驗知識整合,不能區分因果關係。
他還提到,DL 假設了一個穩定的世界,以近似方法實現,工程化很困難,並且存在著過度炒作的潛在風險。
Marcus 認為:DL 需要重新概念化,並在非監督學習、符號操作和混合模型中尋找可能性,從認知科學和心理學中獲得見解,並迎接更大膽的挑戰。
好了,關於深度學習的介紹就到此結束了,如有錯漏歡迎批評指正。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2650764/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TensorFlow、Keras、CNTK...到底哪種深度學習框架更好用?Keras深度學習框架
- 深度學習可解釋性差到底是什麼意思?深度學習
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 深度學習及深度強化學習研修深度學習強化學習
- 深度學習學習框架深度學習框架
- ####深度學習深度學習
- 深度學習深度學習
- 深度 學習
- 深度學習及深度強化學習應用深度學習強化學習
- 讀懂深度學習,走進“深度學習+”階段深度學習
- 深度學習——學習目錄——學習中……深度學習
- 深度學習模型深度學習模型
- Python深度學習Python深度學習
- 深度學習引言深度學習
- MySQL深度學習MySql深度學習
- 深度學習-LSTM深度學習
- 深度學習《CycleGAN》深度學習
- 深度學習《StarGAN》深度學習
- 深度學習《patchGAN》深度學習
- 機器學習&深度學習之路機器學習深度學習
- 深度學習學習7步驟深度學習
- 【讀書1】【2017】MATLAB與深度學習——深度學習(2)Matlab深度學習
- 深度學習很難?一文讀懂深度學習!深度學習
- 機器學習&深度學習 操作tips機器學習深度學習
- 機器學習是深度學習之母機器學習深度學習
- 深度學習框架Pytorch學習筆記深度學習框架PyTorch筆記
- 【深度學習】深度學習md筆記總結第1篇:深度學習課程,要求【附程式碼文件】深度學習筆記
- 深度學習工程模板深度學習
- python深度學習(一)Python深度學習
- 《DEEP LEARNING·深度學習》深度學習
- 深度學習0:前言深度學習
- 蛋白質深度學習深度學習
- 深度學習基礎深度學習
- 深度學習(Deep Learning)深度學習
- 實時深度學習深度學習
- 深度學習《Photo Editing》深度學習
- 拯救深度學習:標註資料不足下的深度學習方法深度學習
- 【深度學習】大牛的《深度學習》筆記,Deep Learning速成教程深度學習筆記