深度學習是一種特殊的機器學習,它可以獲得高性能也十分靈活。它可以用概念組成的網狀層級結構來表示這個世界,每一個概念更簡單的概念相連,抽象的概念通過沒那么抽象的概念計算。
“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.”
a. 什么是機器學習?
通常,為了實現人工智能,我們會使用機器學習。我們有幾種用於機器學習的算法。例如:
-
Find-S
-
決策樹(Decision trees)
-
隨機森林(Random forests)
-
人工神經網絡(Artificial Neural Networks)
通常,有3類學習算法:
-
有監督機器學習算法進行預測。此外,該算法在分配給數據點的值標簽中搜索模式。
-
無監督機器學習算法:沒有標簽與數據關聯。並且,這些 ML 算法將數據組成簇。此外,他需要描述其結構,並使復雜的數據看起來簡單且能有條理的分析。
-
增強機器學習算法:我們使用這些算法選擇動作。並且,我們能看到它基於每個數據點。一段時間后,算法改變策略來更好地學習。
b.什么是深度學習?
任何深度神經網絡都將包含以下三層:
-
輸入層
-
隱藏層
-
輸出層
我們可以說深度學習是機器學習領域的最新術語。這是實現機器學習的一種方式。
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 的,需要大量的數據,而傳統的機器學習算法通常不需要;
-
深度學習本質上可以看作一個特征學習器,在無需另構特征情況下,傳統的機器學習算法已經能夠勝任日常的任務;
- 如無必要,勿增實體。能夠簡單的模型解決的,不必要上深度學習算法,殺雞焉用牛刀?