白話版,聊聊“深度學(xué)習(xí)”
點(diǎn)擊下方卡片,關(guān)注“新機(jī)器視覺”公眾號
重磅干貨,第一時(shí)間送達(dá)
來源:浪潮服務(wù)器
1956年,達(dá)特茅斯會議,“人工智能”概念被首次提出。他們夢想著用當(dāng)時(shí)剛剛出現(xiàn)的計(jì)算機(jī)來構(gòu)造復(fù)雜的、擁有與人類智慧同樣特性的機(jī)器。
?
發(fā)展至今,人工智能可以劃分為兩類:弱人工智能和強(qiáng)人工智能。前者讓機(jī)器具備觀察和感知的能力,能做到一定程度的理解和推理;而強(qiáng)人工智能是讓機(jī)器獲得自適應(yīng)能力,解決一些從沒遇到過的問題。這里的“智能”從何而來?人工智能又如何取得突破?要從一種實(shí)現(xiàn)人工智能的方法——機(jī)器學(xué)習(xí)說起。
白話版走心解讀:從發(fā)展階段來看,我們目前還處于弱人工智能階段。幸運(yùn)的是,似乎還不用擔(dān)心人工智能是不是會把人類打趴在地;不幸的是,那些落地的人工智能應(yīng)用已經(jīng)出現(xiàn)了各種弊端和不足。所以我們現(xiàn)在更需要做的,可能不是恐懼機(jī)器會變成我們,而是如何讓機(jī)器更理解我們。

什么是機(jī)器學(xué)習(xí)?
與傳統(tǒng)的為解決特定任務(wù)、硬編碼的軟件程序不同,機(jī)器學(xué)習(xí)是用大量的數(shù)據(jù)來“訓(xùn)練”,通過各種算法從數(shù)據(jù)中學(xué)習(xí)如何完成任務(wù)。
白話版走心解讀:在人工智能的研究上,“貓”一直是熱門明星,所以我們就用“識別貓咪”來解釋一下機(jī)器學(xué)習(xí)。假設(shè)要構(gòu)建一個(gè)識別貓的程序:傳統(tǒng)上如果想讓計(jì)算機(jī)識別,需要輸入一串指令,例如貓長著毛茸茸的毛、頂著一對三角形的耳朵等,然后計(jì)算機(jī)根據(jù)這些指令執(zhí)行下去。但如果我們對程序展示一只老虎的照片,程序可能會沙雕……

除此外,傳統(tǒng)方式要制定全部所需規(guī)則,而且過程中必然會涉及到一些困難的概念,比如對毛茸茸的定義。因此更好的方式是讓機(jī)器自學(xué)。為計(jì)算機(jī)提供大量貓的照片,隨著實(shí)驗(yàn)增加,系統(tǒng)會不斷學(xué)習(xí)更新,最終能準(zhǔn)確地判斷出哪些是貓,哪些不是。
這里有三個(gè)重要信息:1. “機(jī)器學(xué)習(xí)”是“模擬、延伸和擴(kuò)展人的智能”的一條路徑,是人工智能的一個(gè)子集;2. “機(jī)器學(xué)習(xí)”要基于大量數(shù)據(jù),也就是說它的“智能”是用大量數(shù)據(jù)喂出來的;(敲黑板!??!這個(gè)后面會用到)3. 正是因?yàn)橐幚砗A繑?shù)據(jù),所以大數(shù)據(jù)技術(shù)尤為重要,而“機(jī)器學(xué)習(xí)”只是大數(shù)據(jù)技術(shù)上的一個(gè)應(yīng)用。
?
雖然傳統(tǒng)的機(jī)器學(xué)習(xí)算法在指紋識別、人臉檢測等領(lǐng)域的應(yīng)用基本達(dá)到了商業(yè)化要求,但“再進(jìn)一步”卻很艱難,直到深度學(xué)習(xí)算法的出現(xiàn)。

什么是深度學(xué)習(xí)?
深度學(xué)習(xí)(Deep Learning)屬于機(jī)器學(xué)習(xí)的子類,是目前最熱的機(jī)器學(xué)習(xí)方法,但它并不意味著是機(jī)器學(xué)習(xí)的終點(diǎn)。它的靈感來源于人類大腦的工作方式,是利用深度神經(jīng)網(wǎng)絡(luò)來解決特征表達(dá)的一種學(xué)習(xí)過程。深度神經(jīng)網(wǎng)絡(luò)本身并非是一個(gè)全新概念,可理解為包含多個(gè)隱含層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。
白話版走心解讀:我們來看看深度學(xué)習(xí)是如何工作的。以人臉識別為栗子。如果是傳統(tǒng)機(jī)器學(xué)習(xí),首先要確定相應(yīng)的“面部特征”作為機(jī)器學(xué)習(xí)的特征(眼睛、鼻子等等),以此來對對象進(jìn)行分類識別。而深度學(xué)習(xí)能自動找出這個(gè)分類問題所需要的重要特征。它是如何做到的?讓機(jī)器深度學(xué)習(xí),總共分三步:1. 確定出哪些邊和角跟識別出人臉關(guān)系最大;2. 根據(jù)上一步找出的很多小元素(邊、角等)構(gòu)建層級網(wǎng)絡(luò),找出它們之間的各種組合;3. 在構(gòu)建層級網(wǎng)絡(luò)之后,就可以確定哪些組合可以識別人臉。來個(gè)示意。?

第一步,輸入的是Raw Data,就是原始數(shù)據(jù),這個(gè)機(jī)器是沒法理解的。于是,深度學(xué)習(xí)首先盡可能找到與這個(gè)頭像相關(guān)的各種邊,這些邊就是底層的特征(Low-level features);然后下一步,對這些底層特征進(jìn)行組合,就可以看到鼻子、眼睛、耳朵等,它們是中間層特征(Mid-level features);最后,對鼻子、眼睛等進(jìn)行組合,就可以組成各種各樣的頭像,也就是高層特征(High-level features)。這個(gè)時(shí)候,它就可以識別出各種人的頭像了。

機(jī)器學(xué)習(xí)和深度學(xué)習(xí)有哪些維度的不同?
機(jī)器學(xué)習(xí)是一種實(shí)現(xiàn)人工智能的方法,深度學(xué)習(xí)是一種實(shí)現(xiàn)機(jī)器學(xué)習(xí)的技術(shù)。一個(gè)同心圓就可以展現(xiàn)出它們的關(guān)系。

具體不同大致有以下幾點(diǎn)。
?
1. 數(shù)據(jù)依賴。隨著數(shù)據(jù)量的增加,二者的表現(xiàn)有很大區(qū)別。深度學(xué)習(xí)適合處理大數(shù)據(jù),而數(shù)據(jù)量比較小的時(shí)候,用傳統(tǒng)機(jī)器學(xué)習(xí)方法也許更合適。

2. 硬件依賴。深度學(xué)習(xí)十分地依賴于高端的硬件設(shè)施,因?yàn)橛?jì)算量實(shí)在太大。它會涉及很多矩陣運(yùn)算,因此很多深度學(xué)習(xí)都要求有GPU(專門為矩陣運(yùn)算而設(shè)計(jì)的)參與運(yùn)算。
?
3. 特征工程。簡單講就是在訓(xùn)練一個(gè)模型的時(shí)候,需要首先確定哪些特征。在機(jī)器學(xué)習(xí)方法中,幾乎所有特征都需要人為確認(rèn)后,再進(jìn)行手工特征編碼。而深度學(xué)習(xí)試圖自己從數(shù)據(jù)中學(xué)習(xí)特征。
?
4. 解決問題的方式。(重點(diǎn)?。?/span>解決問題時(shí),機(jī)器學(xué)習(xí)通常先把問題分成幾塊,一個(gè)個(gè)地解決好之后,再重新組合。但是深度學(xué)習(xí)是一次性、端到端地解決。
白話版走心解讀:舉個(gè)栗子。

我們設(shè)定任務(wù)是識別出圖片上有哪些物體,并找出它們的位置。機(jī)器學(xué)習(xí)的做法是把問題分兩步:發(fā)現(xiàn)物體和識別物體。但深度學(xué)習(xí)不同,它可以直接把對應(yīng)物體識別出來,同時(shí)還能標(biāo)明對應(yīng)物體名字。這個(gè)好處就是,實(shí)時(shí)性。
5. 運(yùn)行時(shí)間。深度學(xué)習(xí)需要花大量時(shí)間來訓(xùn)練,因?yàn)橛刑鄥?shù)要去學(xué)習(xí)。機(jī)器學(xué)習(xí)一般幾秒鐘最多幾小時(shí)就可以訓(xùn)練好。但深度學(xué)習(xí)訓(xùn)練出的模型優(yōu)勢就在于,在預(yù)測任務(wù)上運(yùn)行非???。也是剛剛提到的實(shí)時(shí)物體檢測。
?

深度學(xué)習(xí)前加個(gè)“分布式”,又是怎么回事?
面對越來越復(fù)雜的任務(wù),數(shù)據(jù)和深度學(xué)習(xí)模型的規(guī)模都變得日益龐大。當(dāng)訓(xùn)練數(shù)據(jù)詞表增大到成百上千萬時(shí),如果不做任何剪枝處理,深度學(xué)習(xí)模型可能會擁有上百億、甚至是幾千億個(gè)參數(shù)。
為了提高深度學(xué)習(xí)模型的訓(xùn)練效率,分布式訓(xùn)練出現(xiàn)了——即同時(shí)利用多個(gè)工作節(jié)點(diǎn),分布式地、高效地訓(xùn)練出性能優(yōu)良的神經(jīng)網(wǎng)絡(luò)模型。
?
目前主要有兩種并行化/分布式訓(xùn)練方法:數(shù)據(jù)并行化和模型并行化。
數(shù)據(jù)并行化里,不同的機(jī)器有同一個(gè)模型的多個(gè)副本,每個(gè)機(jī)器分配到數(shù)據(jù)的一部分,然后將所有機(jī)器的計(jì)算結(jié)果按照某種方式合并;模型并行化里,分布式系統(tǒng)中的不同機(jī)器負(fù)責(zé)單個(gè)網(wǎng)絡(luò)模型的不同部分。比如,神經(jīng)網(wǎng)絡(luò)模型的不同網(wǎng)絡(luò)層被分配到不同機(jī)器。
白話版走心解讀:“并行化”顧名思義,就是一起并肩工作。酷暑正當(dāng),我們就用制作棒冰舉栗子。先說數(shù)據(jù)并行化。工廠A要在一天內(nèi)做50000支棒冰,為了更高效完成,這個(gè)任務(wù)被分給了100個(gè)車間,當(dāng)然開工前需要大家進(jìn)行培訓(xùn),確保每個(gè)人都了解了棒冰的制作過程。這里的“車間”就是機(jī)器,“50000支”就是數(shù)據(jù),“培訓(xùn)資料”就是模型。
同理,模型并行化就是這樣。同樣是50000支棒冰,但其中10000支生產(chǎn)簡單,其余40000支工藝復(fù)雜。于是車間里兩位師傅分別扛起了這兩部分任務(wù),分頭進(jìn)行?!?0000支”就是數(shù)據(jù),“師傅”就是GPU,生產(chǎn)工藝就是“模型”,不同工藝就相當(dāng)于不同的網(wǎng)絡(luò)層。
本文僅做學(xué)術(shù)分享,如有侵權(quán),請聯(lián)系刪文。
