深度學習到底有多深?

dicksonjyl560101發表於2019-07-17



現在搞AI的公司,不管用什麼樣的演算法,都想讓自己跟深度學習扯上點關係,因為這樣好像顯得逼格夠高。目前比較前沿的語音互動、計算機視覺等,就連神壇的Alpha Go的演算法都是用深度學習。那究竟深度學習是什麼?到底有多強大?要怎麼實現?本文就跟大家一起討論下。

在看接下來的內容之前,如果對機器學習還不瞭解的同學,可以先看下這篇 ——介紹了機器學習的整體框架,機器學習的步驟,深度學習與機器學習的關係,還有比較詳細的介紹了為什麼會需要人工神經網路。看完以上的文章再來討論今天的內容可能會更容易理解。

好了,我們言歸正傳。

以下就是我們本次需要談論的內容:

 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. 定義網路架構

在定義網路架構時,需要考慮幾個問題:

  1. 輸入是什麼?
  2. 輸出是什麼?
  3. 選擇多少層網路?
  4. 每一層有多少個神經元?
  5. 層與層之間要怎麼連線的?

如何選擇輸入、輸出?

以手寫數字辨識為例說明:

假設我們要辨識一張畫素是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. 找出最優模型(求出最優解)

假設我們的總誤差是一條如上圖的曲線,那我們要怎麼找到她的最小值呢?

求最小值,常見的方法是梯度下降。什麼是梯度下降呢?

類比例子:

假設你現在在大山的某處,你的目標是要到達山的最低谷處,那你需要做事情有兩步:

  1. 根據當前位置,選擇一個向低處的方向。
  2. 根據選擇的方向,走一段距離,再停下來選擇方向。

不斷的重複以上的兩步,最終你可能走到山的最底處。

這裡有兩個需要注意的點:

  • 你根據什麼來選擇方向?
  • 你走多長距離再停下來選擇方向?如果你選擇的距離很小的話,那可能不知道走到猴年馬月你才能走到最低,但是如果你選擇的距離很長的話,有可能你走了最低點還不知道。

那梯度下降也是用同樣的思想來找到最小值的,分兩步:

  1. 選方向:在誤差函式曲線上,隨機取一個點,然後求導,根據導數的正負,決定移動的方向。
  2. 選擇步長:學習率的引數決定步長。

具體梯度下降是怎麼實現的,可以參考這篇文章 《機器學習之線性迴歸》 ,有講到梯度下降的方法,在此就不展開講了。

當然梯度下降只是求解最小值最常用的方法而已,還有其他求最小值的方法,比如:標準函式法等,感興趣的同學可以去了解下。

4. 深度學習的典型代表

在深度學習領域有兩個典型的代表:卷積神經網路、迴圈神經網路。

  • 卷積神經網路被廣泛的應用在計算機視覺領域,比如說強大的AlphaGo就有用到卷積神經網路實現。
  • 迴圈神經網路則被廣泛的應用在語音識別處理領域,比如說百度翻譯、網路音樂生產等。

具體卷積神經網路和迴圈神經網路是什麼?具體的結構是怎樣的?又是怎麼執行的?都應用在哪些產品上?我會寫兩篇文章分別單獨介紹,感興趣的同學可以持續關注。

04 深度學習的優缺點和麵臨的困境

優點

深度學習能讓計算機自動學習出模式特徵,並將特徵學習的特徵融入到建模的過程中,從而減少了人為設計特徵造成的不完備性。而目前有些深度學習,已經達到了超越現有演算法的識別或分類效能。

缺點

  • 需要大資料支撐,才能達到高精度。
  • 由於深度學習中圖模型比較複雜,導致演算法的時間複雜度急劇提升,需要更好的硬體支援。因此,只有一些經濟實力比較強大的科研機構或企業,才能夠用深度學習來做一些前沿而實用的應用。

面臨挑戰

Marcus 在 2018 年對深度學習 的作用、侷限性和本質進行了重要的回顧。他強烈指出了 DL 方法的侷限性——即需要更多的資料,容量有限,不能處理層次結構,無法進行開放式推理,不能充分透明,不能與先驗知識整合,不能區分因果關係。

他還提到,DL 假設了一個穩定的世界,以近似方法實現,工程化很困難,並且存在著過度炒作的潛在風險。

Marcus 認為:DL 需要重新概念化,並在非監督學習、符號操作和混合模型中尋找可能性,從認知科學和心理學中獲得見解,並迎接更大膽的挑戰。

好了,關於深度學習的介紹就到此結束了,如有錯漏歡迎批評指正。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2650764/,如需轉載,請註明出處,否則將追究法律責任。

相關文章