JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

為什麼叫「深度」?表示學習

「深度」這個詞不是行銷——它指的是一層層疊起來、用特徵再造特徵的結構。本篇講清楚:讓網絡自己去發現表示,而不是靠人手工設計,正是那次改變整個領域的轉折。

「深度」到底是什麼意思

你已經知道,神經網絡不過是一層層簡單單元把數字往前傳,再靠反向傳播訓練來降低損失。那為什麼要給「多疊幾層」起個專門的名字?「深度」無非是說,從輸入到答案之間有*很多*層——不是兩三層,而是幾十、幾百層。但深度本身並不是關鍵。關鍵是這些多出來的層,究竟是*用來做什麼*的。

每一層都拿下面那層產出的描述,把它改寫成一個更有用的描述。像素層餵給邊緣層;邊緣層餵給一個留意角點和紋理的層;那一層又餵給一個對眼睛、車輪起反應的層;而靠近頂端的某處,坐著一個其單元含義是「這是貓」或「這是車」的層。換句話說,深度就是一條不斷*重新描述*的流水線。這種一層疊一層、層層重新描述的過程,正是這個領域所說的分層表示學習

老辦法:手工設計特徵

先退一步,看看在這一切之前機器學習是怎麼做的。一個學習算法需要把每個樣本描述成一串數字——也就是它的特徵。幾十年來,寫這些數字的是*人*。要識別人臉,工程師會親手編寫邊緣檢測器,再寫角點檢測器,再用一套巧妙的配方把它們組合起來。這門手藝有個名字,叫特徵工程,而它幾乎就是工作的全部——一個項目往往有八成的精力,都花在真正開始學習之前去發明好特徵上。

它確實管用,但有天花板。手工設計的特徵編碼的是*我們*認為重要的東西,而我們常常想錯、想漏——一個在正面照片上調好的人臉檢測器,遇到歪著的頭就垮了。更糟的是,這門手藝無法遷移:為人臉辛苦造出來的特徵,對診斷胸部X光片或轉寫語音毫無幫助。每換一個新問題,就意味著手工設計要從頭再來一遍。

深度學習下的賭注,正好是把這件事徹底反過來。不再由人提供特徵、模型只去擬合最後一步,而是讓模型把*特徵也一起學出來*——從數據裡自己發現哪些中間描述是有用的。這就是更寬泛的那個理念,表示學習:表示不再是餵給系統的東西,而是訓練的產物。

一座從數據中學出來的特徵層級

接下來是最讓人滿意的部分:當你端到端地訓練一個深度視覺模型時,第一節裡那座層級會*自己浮現出來*。沒有人去告訴第三層要檢測角點;反向傳播只是發現,類似角點的圖案對最終任務有用,於是權重就沉澱成了角點檢測器。去探查一個訓練好的卷積網絡,你真的能看見這一點——靠前的層對邊緣和色塊亮起,中間的層對紋理和簡單部件亮起,靠後的層對完整物體亮起。

為什麼要一座*層級*,而不是把所有特徵攤成平平的一大堆?因為世界是可組合的。車輪由弧線構成;汽車由車輪、車窗和車身構成;弧線由邊緣構成。分層的模型正好映照這種結構:它把廉價的低層部件複用起來,去搭建昂貴的高層部件,因此不必把每一輛車都從零記一遍——它用自己已經認得的零件,組合出「汽車」。正是這種複用,使得深度可以比寬度高效得多。

# what a deep classifier learns, conceptually
x       = raw_pixels                  # given to us
h1 = layer1(x)    # edges, color blobs      \
h2 = layer2(h1)   # corners, textures        |  LEARNED,
h3 = layer3(h2)   # eyes, wheels, parts      |  not hand-coded
h4 = layer4(h3)   # whole objects           /
y  = classify(h4) # "cat" / "car" / ...   # the only easy part
只有 x 是給定的;每一個 h 層都是網絡為自己發現出來的表示。

而且這些學出來的表示*確實能*遷移,這是過去手工搭的特徵做不到的。在數百萬張日常照片上訓練一個網絡,它前中段的層會學到邊緣、紋理與形狀,這些遠遠超出原始任務的範圍都有用——你可以把它們當作起點,去做醫學掃描或衛星影像。這種對已學特徵的複用,正是遷移學習背後的引擎,也是「學習表示而非手工編碼」在實踐上最重要的後果之一。

端到端學習:一個損失,貫穿到底

第三個大想法,把前兩個綁到了一起。在老的流水線裡,每個環節——這邊做特徵,那邊做分類器——都是分開搭建、分開調的,誰也不知道下一環節需要什麼。端到端學習把這條流水線壓縮成一個可微分的整體系統,從原始輸入一直訓練到最終答案,對著*同一個*損失。反向傳播把誤差一路送回每一層,於是那些負責找特徵的層,是為你最終真正在意的那件事而被優化的。

這之所以要緊,是因為分開調的各個環節,可能各自局部都不錯,卻在接縫處嚴重錯配——特徵看上去合理,偏偏把分類器最需要的那條線索丟掉了。讓所有部件對著同一個目標訓練,能讓整條鏈條共同自適應:前面的層會學到那些真正幫到後面層的特徵,因為評判它們好壞的,只有最終結果這一項,別無其他。

為什麼它改變了一切——老實說

想冷靜地看,就回想一下苦澀的教訓:幾十年來,依靠通用學習加上更多計算的方法,一次又一次超越了那些建立在人工知識之上的方法。學出來的表示,正是這一規律的現身——給一個靈活的模型足夠的數據和算力,它往往會找出比我們手工設計還要好的特徵。這就是「深度」為何接管了這個領域如此之大一片版圖,老老實實的核心原因。

但要把炒作壓住。深度不是魔法,也不總是答案。在小數據集或表格數據上,一棵樸素的梯度提升樹常常就能打敗深度網絡。學出來的特徵可能脆弱、可能帶偏見——模型可能抓住某家醫院掃描儀的浮水印、而不是疾病本身,這是數據順手塞給它的一條捷徑。而且「自己學特徵」從來不等於「不需要人」:仍然得有人去選數據、選架構、選損失、定義什麼算成功——正是這些選擇,決定了網絡最終把注意力放在了哪裡。

所以從這篇裡帶走一句話:深度學習的本質,是端到端地學習一座*表示的層級*,而不是手工搭建特徵。這一級台階接下來的內容,就是要把這個想法變得真正可訓練——為圖像內置正確結構的卷積網絡、面向序列的循環網絡,以及那些工程技巧(dropout、歸一化、殘差連接),它們讓這座層級能真正地長得很深,而不至於散架。