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

自編碼器與生成對抗網路

網路學會「想像」的兩種方式:先把資料擠過一個瓶頸,直到只剩下精華;再讓一個造假者和一個偵探彼此較量,直到贗品看起來像真的。本文帶你認識自編碼器、習得的嵌入,以及生成器與判別器之間的博弈。

從分類到創造

在本階梯到目前為止,你遇到的網路在精神上都是「判別器」:輸入一張影像,輸出一個標籤。一個卷積網路看到一張照片,說「貓」。這非常有用,但它只是智慧的一半。另一半是「生成」——在沒有特定輸入的情況下,產出某種看似合理的東西:一張從未存在過的臉,一句從未被寫出的話。本文講的,正是深度網路學會做這件事的兩種最早、也最有啟發性的方式。

兩者共享一個安靜卻激進的想法,你已經以[[representation-learning|表示學習]]的名義見過它:網路不是被告知哪些特徵重要,而是自己發現資料的一種緊湊內部描述。於是「生成」就成了把這種描述「倒著跑」的藝術——把一段短碼還原成一個完整、豐富的樣本。自編碼器透過重建來學習這段碼;GAN 則透過競爭來學習它。

自編碼器:在擠壓中學習

[[autoencoder|自編碼器]]是一種被訓練去把輸入複製成輸出的網路——這聽起來毫無意義,直到你看見其中的玄機。它的中間是一層狹窄的層,即「瓶頸」,遠小於輸入。前半部分,即[[encoder-decoder|編碼器]],把輸入壓縮成那段緊湊的碼;後半部分,即「解碼器」,再把這段碼展開還原成重建結果。由於瓶頸太小,無法記住一切,網路被迫只保留重要的部分,丟棄其餘。

訓練訊號美得出奇地簡單:一個重建[[loss-function|損失]],衡量輸出偏離原始輸入有多遠,並用普通的梯度下降來最小化它。不需要標籤——輸入「本身」就是目標。這使自編碼器成為自監督學習的一個乾淨範例:它從未標註的原始資料裡,給自己出作業。

x       --> [ encoder ] --> z   (the code: small)
z       --> [ decoder ] --> x'  (reconstruction)
loss = distance(x, x')          (push x' toward x)
四行寫盡整個自編碼器:編碼成小碼 z,再解碼回來,並懲罰兩者之間的差距。

中間那段碼有個你會不斷遇到的名字:[[embedding|嵌入]]。它是一個短向量——也許用 32 個數字代表一張 784 像素的影像——在那裡,「距離即相似度」。兩個相似的輸入彼此靠近;不相似的則相距甚遠。這正是讓詞嵌入把「國王」放在「王后」附近的同一個把戲,也正因如此,編碼器一旦訓練好,本身就可以作為下游任務的特徵提取器,獨立地發揮價值。

自編碼器有許多共享這副骨架的變體。「去噪」自編碼器被餵入一個被破壞的輸入,要求它重建出乾淨的那個,這迫使它去學習結構,而不是照搬像素。而當編碼器和解碼器是互為鏡像的卷積堆疊時,你就得到了U-Net的形狀——它後來成了現代擴散影像生成器內部的主力。這證明這個樸素的想法並沒有退休,而是升了職。

GAN:造假者與偵探

[[generative-adversarial-network|生成對抗網路]],簡稱 GAN,走了一條通往生成的完全不同的路——不是重建,而是一場競賽。想像兩個網路鎖在一場決鬥裡。「生成器」是造假者:它拿一個隨機雜訊向量,試圖畫出一張以假亂真的影像。「判別器」是偵探:它被展示真假混雜的影像,必須把每一張判定為真或假。

它們彼此對抗著訓練。每當偵探抓住一張贗品,這次失敗就被反向傳播回造假者,教它下次更好地騙過偵探。每當造假者矇混過關,偵探就磨利自己的眼力。兩者都沒有一個固定的目標去照抄——生成器從不直接看到任何一張真圖;它「唯一」的學習訊號,就是判別器的判決。兩者步調一致地共同進步,這是一場軍備競賽——當它奏效時,會把贗品推向以假亂真的程度。

  1. 從資料集中取一批真實樣本,並讓生成器從隨機雜訊中產出一批贗品。
  2. 訓練判別器把真的判為真、假的判為假——這是一個普通的分類器步驟。
  3. 接著凍結判別器,訓練生成器去做出能讓判別器判為真的贗品——把目標反過來。
  4. 重複。隨著雙方相互適應,生成的樣本慢慢從雜訊走向逼真。

留意它與自編碼器的共同點和被翻轉之處。兩者都構建了一個類似「解碼器」的網路,把一段小碼變成完整的樣本。但自編碼器透過要求忠實重建來學習它的碼,而 GAN 從不重建任何東西——它純粹從一個隨藝術家一同變聰明的評論家所施加的壓力中學習。正是這種對抗壓力,賦予了 GAN 樣本那種著名的清晰銳利,而自編碼器的重建往往會顯得模糊。

為什麼 GAN 如此難訓練

這裡是這個領域太常略過的誠實之處。GAN 不是在把一個損失推向某個唯一的底部;它是兩個網路在追逐一個由對方控制的「移動靶」。這使訓練成為一種微妙的平衡術,而非平滑的下降。如果判別器太快變得太強,它會以十足的把握拒絕每一張贗品,生成器收不到有用的梯度,學習就停滯了。如果生成器跑到了前面,它又會鑽偵探的盲區的空子。

最臭名昭著的失敗是模式坍塌:生成器發現某一張影像(或極少數幾張)能可靠地騙過偵探,於是就一遍又一遍地只產出那一張。它的贗品很逼真,卻毫無多樣性——它找到了一條廉價的捷徑,而不是學會整個資料分布。一大堆工程技巧(梯度懲罰、謹慎的學習率、替代的損失形式)能馴服這些問題,但一個第一次就訓練得乾淨俐落的 GAN,是例外,而非常態。

它的位置,以及之後發生了什麼

從大約 2014 到 2020 年,GAN 是影像生成無可爭議的王者,製造出那些填滿「這個人不存在」演示頁面的、詭異逼真的人臉。但有一點值得看清:這頂王冠基本上已經易主。擴散模型——透過學習逆轉一個逐步加雜訊的過程來生成——如今能產出更多樣、更可控的影像,訓練也穩定得多,你聽說過的大多數文字生成影像系統都由它驅動。GAN 在看重速度的場景裡仍被使用(它一次前向傳播就能生成),但這個領域已經向前走了。

那為什麼還要學它們?因為這些「想法」比那個架構活得更久。自編碼器「瓶頸—解碼」的骨架,是擴散模型的脊梁,也是大語言模型壓縮文字的方式。對抗的想法——讓一個網路對抗一個習得的評論家——在現代 AI 中四處重現:從某些影像和音訊模型加上一個銳化損失,到基於偏好的微調讓模型對抗一個獎勵評論家。把「造假者與偵探」這場博弈弄懂一次,之後一打系統都會瞬間豁然開朗。

在你結束本階梯時,請抓住一條主線。你遇到的每一種架構——卷積網路、循環網路、自編碼器、GAN——其實都是對同一個問題的不同回答:「一個網路該是什麼形狀,才能自己學到正確的內部表示?」下一階梯將把影像和序列拋在身後,去認識那個把這個問題回答得如此有力、以至於吞下了整個領域的架構——但你現在已經握住了辨識與生成這兩半,而它之後的一切都建立在這兩半之上。