1. 程式人生 > >深度學習VS機器學習——到底什麼區別

深度學習VS機器學習——到底什麼區別

https://baijiahao.baidu.com/s?id=1595509949786067084&wfr=spider&for=pc

一、機器學習

 

首先看看機器學習的定義:

“A computer program is said to learn from experience E with respect to some class of tasksT and performance measureP if its performance at tasks inT, as measured by P, improves with experience E ”(這段話我真的是看了100遍才知道怎麼斷句啊!!(Д))

翻譯過來就是:“一個電腦程式要完成任務(T),如果電腦獲取的關於T的經驗(E)越多就表現(P)得越好,那麼我們就可以說這個程式‘學習’了關於T的經驗。”

簡單來說,就是解釋什麼叫“機器的學習”,如果輸入的經驗越多表現的越好,這就叫“學習”嘛。

這裡有幾個例子:

1.根據身高預測體重:

根據身高預測體重

 

這個so easy,我也不想多解釋了。我們高中都做過這樣的題目,給你一堆點,你做出一條直線儘可能去擬合樣本點,那這個直線就是你“學習”出來的,然後就可以用這個直線去預測未知點了。

2.風暴預測系統:

美國的風暴預測系統

 

我們首先瀏覽所有的歷史風暴資料,從這些大量的資料中學習出某些“模式”,這些“模式”包含了具體的哪些條件可以導致風暴。

比如我們也許可以通過學習歷史資料發現:溫度超過40度,溼度在80-100之間,就容易發生風暴。種種類似的模式。

這裡注意了!“溫度”、“溼度”等等指標,就是機器學習中的“特徵”,而這些特徵都是人工設定好的!就是說,我們在做這樣一個預測系統的時候,首先由專家通過分析哪些“特徵”是重要的,然後機器就通過分析歷史資料中的這些特徵的資料,來找到相應的模式,也就是怎樣的特徵的組合會導致怎樣的結果。

理解上面這一點很重要,因為這是和深度學習的重要區別。

二、深度學習

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

“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.可理解性

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

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

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

 

 

以上就是關於機器學習和深度學習的聯絡和區別了。首先說說感受吧,感覺很多國外的文章,尤其是這樣的類似科普文章寫的真心棒!很好理解,而且解釋的非常詳細,這是很多國內部落格所不能比的。所以建議大家有問題可以多搜搜國外的文章讀一讀,而且其實英文也用的很簡單。