1. 程式人生 > >機器學習和深度學習的區別 深度學習的完全取代機器學習嗎

機器學習和深度學習的區別 深度學習的完全取代機器學習嗎

首先看看深度學習的定義:

“Deep learning is a particular kind of machine learning that achieves great power and flexibility by learning to represent the world as nested hierarchy of concepts, with each concept defined in relation to simpler concepts, and more abstract representations computed in terms of less abstract ones.”

我試著翻譯一下:深度學習是一種特殊的機器學習,它可以獲得高效能也十分靈活。它可以用概念組成的網狀層級結構來表示這個世界,每一個概念更簡單的概念相連,抽象的概念通過沒那麼抽象的概念計算。(有沒有大佬幫忙指正一下?)

還是先通過例子說明,大家就慢慢理解了:

1.形狀識別:

我們從一個簡單的例子來看看我們認知層面上是如何區分物體的。比如我們要區分下面的形狀,那個是圓的那個是方的:

我們的眼睛第一件要做的事情,就是看看這個形狀有沒有4條邊。如果有的話,就進一步檢查,這4條邊是不是連在一起,是不是等長的,是不是相連的互相垂直。如果滿足上面這些條件,那麼我們可以判斷,是一個正方形。

從上面的過程可以看出,我們把一個複雜的抽象的問題(形狀),分解成簡單的、不那麼抽象的任務(邊、角、長度...)。深度學習從很大程度上就是做這個工作,把複雜任務層層分解成一個個小任務。

2.識別狗和貓:

如果是傳統機器學習的方法,我們會首先定義一些特徵,如有沒有鬍鬚,耳朵、鼻子、嘴巴的模樣等等。總之,我們首先要確定相應的“面部特徵”作為我們的機器學習的特徵,以此來對我們的物件進行分類識別。

而現在,深度學習的方法則更進一步。深度學習自動地找出這個分類問題所需要的重要特徵!而傳統機器學習則需要我們人工地給出特徵!

我覺得這是兩者最重要的區別。

那麼,深度學習是如何做到這一點的呢?

以這個貓狗識別的例子來說,按照以下步驟:

1●首先確定出有哪些邊和角跟識別出貓狗關係最大;2●然後根據上一步找出的很多小元素(邊、角等)構建層級網路,找出它們之間的各種組合;3●在構建層級網路之後,就可以確定哪些組合可以識別出貓和狗。

這裡我沒找到貓和狗的神經網路圖片,倒是看到人像識別的一個示意圖,覺得挺好的:

人臉識別

可以看到4層,輸入的是Raw Data,就是原始資料,這個機器沒法理解。於是,深度學習首先儘可能找到與這個頭像相關的各種邊,這些邊就是底層的特徵(Low-level features),這就是上面寫的第一步;然後下一步,對這些底層特徵進行組合,就可以看到有鼻子、眼睛、耳朵等等,它們就是中間層特徵(Mid-level features),這就是上面寫的第二步;最後,我們隊鼻子眼睛耳朵等進行組合,就可以組成各種各樣的頭像了,也就是高層特徵(High-level features)這個時候就可以識別出或者分類出各種人的頭像了。

三、對比機器學習和深度學習

上面我們大概瞭解了機器學習和深度學習的工作原理,下面我們從幾個重要的方面來對比兩種技術。

1.資料依賴

隨著資料量的增加,二者的表現有很大區別:

資料量對不同方法表現的影響

可以發現,深度學習適合處理大資料,而資料量比較小的時候,用傳統機器學習方法也許更合適。

2.硬體依賴

深度學習十分地依賴於高階的硬體設施,因為計算量實在太大了!深度學習中涉及很多的矩陣運算,因此很多深度學習都要求有GPU參與運算,因為GPU就是專門為矩陣運算而設計的。相反,普通的機器學習隨便給一臺破電腦就可以跑。

3.特徵工程

特徵工程就是前面的案例裡面講過的,我們在訓練一個模型的時候,需要首先確定有哪些特徵。

在機器學習方法中,幾乎所有的特徵都需要通過行業專家在確定,然後手工就特徵進行編碼。

然而深度學習演算法試圖自己從資料中學習特徵。這也是深度學習十分引人注目的一點,畢竟特徵工程是一項十分繁瑣、耗費很多人力物力的工作,深度學習的出現大大減少了發現特徵的成本。

4.解決問題的方式

在解決問題時,傳統機器學習演算法通常先把問題分成幾塊,一個個地解決好之後,再重新組合起來。但是深度學習則是一次性地、端到端地解決。如下面這個物體識別的例子:

物體識別

如果任務是要識別出圖片上有哪些物體,找出它們的位置。那麼傳統機器學習的做法是把問題分為兩步:發現物體 和 識別物體。首先,我們有幾個物體邊緣的盒型檢測演算法,把所有可能的物體都框出來。然後,再使用物體識別演算法,例如SVM在識別這些物體中分別是什麼。

但是深度學習不同,給它一張圖,它直接給出把對應的物體識別出來,同時還能標明對應物體的名字。這樣就可以做到實時的物體識別。例如YOLO net就可以在視訊中實時識別:

實時檢測

5.執行時間

深度學習需要花大量的時間來訓練,因為有太多的引數需要去學習。頂級的深度學習演算法ResNet需要花兩週的時間訓練。但是機器學習一般幾秒鐘最多幾小時就可以訓練好。

但是深度學習花費這麼大力氣訓練處模型肯定不會白費力氣的,優勢就在於它模型一旦訓練好,在預測任務上面就執行很快。這才能做到我們上面看到的視訊中實時物體檢測。

6.可理解性

最後一點,也是深度學習一個缺點。其實也說不上是缺點吧,那就是深度學習很多時候我們難以理解。一個深層的神經網路,每一層都代表一個特徵,而層數多了,我們也許根本就不知道他們代表的啥特徵,我們就沒法把訓練出來的模型用於對預測任務進行解釋。例如,我們用深度學習方法來批改論文,也許我們訓練出來的模型對論文評分都十分的準確,但是我們無法理解模型到底是啥規則,這樣的話,那些拿了低分的同學找你質問“憑啥我的分這麼低啊?!”,你也啞口無言····因為深度學習模型太複雜,內部的規則很難理解。

但是機器學習不一樣,比如決策樹演算法,就可以明確地把規則給你列出來,每一個規則,每一個特徵,你都可以理解。

但是這不是深度學習的錯,只能說它太牛逼了,人類還不夠聰明,理解不了深度學習的內部的特徵。

自從 MIT Technology Review(麻省理工科技評論) 將 深度學習 列為 2013 年十大科技突破之首。加上今年 Google 的 AlphaGo 與 李世石九段 驚天動地的大戰,AlphaGo 以絕對優勢完勝李世石九段。人工智慧、機器學習、深度學習、強化學習,成為了這幾年計算機行業、網際網路行業最火的技術名詞。

其中,深度學習在影象處理、語音識別領域掀起了前所未有的一場革命。我本人是做影象處理相關的,以 2016 年計算機視覺三大會之一的 Conference on Computer Vision and Pattern Recognition(CVPR) 為例,在 Accept Papers 中,以 “Convolution” 關鍵詞做搜尋,就有 44 篇文章。以 “Deep” 為關鍵詞搜尋,有 96 篇文章:

這裡寫圖片描述

可以說,以 卷積神經網路(CNN)為代表的方法在影象處理領域已經取得了統治地位。同樣的,以 遞迴神經網路(RNN) 在語音處理方面也大放異彩。

但是在深度學習獨領風騷的同時,傳統的機器學習演算法,如 SVM 慢慢不像十多年前那麼火熱了,甚至受冷落了,如在上面 CVPR 2016 年 Accept Papers 頁面中,搜尋 “SVM”,僅僅有 4 篇文章:

這裡寫圖片描述

相比於深度學習,傳統的機器學習演算法難道就此沒落了嗎,還有必要去學習嗎?

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

所以,不禁很多人又這樣的疑問,傳統的機器學習演算法難道就此沒落了嗎?還有必要去學習嗎?

我認為傳統的機器學習演算法不會沒落,非常有必要去學。

機器學習發展了二十多年來,已經滲透到很多領域,如 Robotics, Genome data, Financial markets。

而目前,深度學習佔據統治地位的多數是在計算機視覺領域、自然語言處理領域。而且深度學習是 data driven 的,需要大量的資料,資料是其燃料,沒了燃料,深度學習也巧婦難為無米之炊。如影象分類任務中,就需要大量的標註資料,因為有了 ImageNet 這樣 百萬量級,並帶有標註 的資料,CNN 才能大顯神威。

但是事實上,在實際的問題中,我們可能並不會有海量級別的、帶有標註的資料。如暑假我在廣州參加 CCF ADL70 機器學習研討班的時候,碰到北京的一個藥廠的學友,他們想用機器學習來預測藥物對人的影響。但問題是,他們沒有那麼多的資料,僅僅就幾十例,最多上百例的監督資料。據他們跟我介紹,他們就用的是 MCMC(Markov chain Monte Carlo) 的方法。

又比如說,我在研究我們老師的 正頜手術術後面型三維預測模擬及模擬分析 這個專案的時候,也是樣本數量非常少,需要用這麼少的資料來預測病人在做過正頜手術後面部的變形情況。

以上兩種情況是非常常見的,這時候深度學習演算法就無能為力,因為小資料下深度學習十分的容易 Overfitting

通過上面的兩個例子,我想說的是,在小資料集上,深度學習還取代不了諸如 非線性和線性核 SVM貝葉斯分類器 方法。實際操作來看,SVM 只需要很小的資料就能找到資料之間分類的 超平面,得到很不錯的分類結果。

所以,既然能用 Linear regression、Logistic regression 能解決的問題,那這時候還幹嘛一定要用深度學習演算法呢?況且,機器學習演算法中,常常繞不開的 overfitting 問題,所以根據 奧卡姆剃刀原則如無必要,勿增實體。這時候,能用簡單的模型解決的問題,就不要用複雜的模型。

同樣的,南大周志華老師也認為:即便是大資料,在無需另構特徵的任務上也取代不了其他分類器。本質上,將它看作特徵學習器比較合適。

所以,雖然深度學習發展如火如荼,但是其他機器學習演算法並不會因此而沒落。甚至我認為,結合深度學習,其他機器學習演算法因此還可能獲得新生。我瞭解的,清華大學的朱軍老師正在開發一個結合貝葉斯方法和深度學習方法的機器學習平臺:ZhuSuan(珠算) Project,詳情如下:

這裡寫圖片描述

So,該做一個總結了。深度學習演算法與傳統的機器學習演算法,各有利弊,大致如下:

  • 深度學習是 data driven 的,需要大量的資料,而傳統的機器學習演算法通常不需要;

  • 深度學習本質上可以看作一個特徵學習器,在無需另構特徵情況下,傳統的機器學習演算法已經能夠勝任日常的任務;

  • 如無必要,勿增實體。能夠簡單的模型解決的,不必要上深度學習演算法,殺雞焉用牛刀?