Autoencoder/zh

    From Marovi AI
    This page is a translated version of the page Autoencoder and the translation is 100% complete.
    Other languages:
    Article
    Topic area Deep Learning
    Prerequisites Neural Networks, Backpropagation


    概述

    自編碼器是一種經過訓練以通過低容量中間表示重構其輸入的神經網絡。它由一個編碼器和一個解碼器組成,前者將輸入 $ x \in \mathbb{R}^d $ 映射到潛在編碼 $ z \in \mathbb{R}^k $,後者將 $ z $ 映射回重構結果 $ \hat{x} \in \mathbb{R}^d $。通過強制信息穿過瓶頸,網絡被迫在沒有有監督標籤的情況下發現數據中緊湊且結構化的特徵。自編碼器用於表示學習、降維、去噪、異常檢測,也是諸如變分自編碼器和現代擴散模型生成模型的構建模塊。

    自編碼器框架早於深度學習。早在 20 世紀 80 年代,它就在關聯記憶和非線性主成分分析的研究中被討論;在 21 世紀初,它作為一種逐層預訓練技術再次出現,幫助重新激發了人們對深度網絡的興趣。如今,自編碼器最常被端到端地使用,其主要價值在於潛在表示本身,而非重構結果。

    直覺

    一個完美的恆等函數可以重構任何輸入,但它毫無用處:它沒有存儲關於數據結構的任何信息。為了讓編碼器學到有意義的東西,架構或損失必須施加某種約束。常見的策略大致有兩種。

    第一種是欠完備(undercomplete)設定,其中潛在維度 $ k $ 小於輸入維度 $ d $。此時重構要求編碼器發現數據所處的低維流形。第二種是正則化設定,其中 $ k $ 可以與 $ d $ 相當甚至更大,但通過對潛在編碼、權重或輸入施加懲罰,迫使網絡學到有用的特徵。例子包括稀疏性懲罰、對編碼器雅可比矩陣的收縮懲罰以及在訓練時注入噪聲。

    一個有用的心智模型是:編碼器在數據流形上學習一張圖卡,而解碼器學習其逆映射。瓶頸使得這張圖卡在與流形正交的方向上有損,但沿流形方向上保持精確。

    形式化

    設編碼器為 $ f_\theta : \mathbb{R}^d \to \mathbb{R}^k $,參數為 $ \theta $;解碼器$ g_\phi : \mathbb{R}^k \to \mathbb{R}^d $,參數為 $ \phi $。給定數據集 $ \{x_i\}_{i=1}^N $,通過最小化重構損失來學習參數

    $ {\displaystyle \mathcal{L}(\theta, \phi) = \frac{1}{N} \sum_{i=1}^N \ell\big(x_i, g_\phi(f_\theta(x_i))\big),} $

    其中 $ \ell $ 對於連續輸入通常是平方誤差,對於二值或類別輸入則是交叉熵。潛在變量 $ z = f_\theta(x) $ 即模型所提取的表示。

    採用平方損失和權重綁定的線性自編碼器可以恢復主子空間:最優解碼器張成的子空間與數據協方差的前 $ k $特徵向量所張成的子空間相同,儘管各個軸不必與主成分對齊$ f_\theta $$ g_\phi $ 中的非線性使網絡能夠捕捉主成分分析無法表達的彎曲流形。

    訓練與推理

    自編碼器與任何其他前饋網絡一樣,使用隨機梯度下降反向傳播進行訓練。輸入依次經過編碼器解碼器,重構損失是相對於輸入本身計算的,梯度則反向傳回兩個部分。訓練不需要標籤,這使得自編碼器在擁有大量未標註數據的領域中頗具吸引力。

    在推理階段,網絡可以被拆分使用。僅使用編碼器即可作為特徵提取器:下游的分類器或回歸器消費 $ z $ 而不是原始的 $ x $。僅使用解碼器,輸入採樣或插值得到的編碼,即可合成新樣本;不過,普通自編碼器無法在概率意義上保證訓練分布之外的解碼器輸入會產生合理的輸出。這一局限性催生了變分自編碼器,它為潛在空間賦予了顯式的先驗和隨機化的編碼器。

    變體

    去噪自編碼器(denoising)使用噪聲 $ \tilde{x} = x + \epsilon $ 破壞輸入,並要求網絡重構乾淨的 $ x $。目標變為 $ \mathbb{E}_\epsilon \, \ell(x, g_\phi(f_\theta(\tilde{x}))) $。這迫使編碼器將偏離流形的輸入投影回流形上,通常能產生更魯棒的特徵。

    稀疏自編碼器在潛在編碼上加入 L1 懲罰或針對目標激活KL項,使得對任意輸入只有一小部分單元處於激活狀態。其結果是一個特徵字典,其中不同單元專門負責輸入空間的不同部分。近年來,稀疏自編碼器作為大型Transformer模型機制可解釋性研究的工具重新獲得關注,被用於將稠密激活分解為可解釋的特徵。

    收縮自編碼器對編碼器的雅可比矩陣施加 Frobenius 範數懲罰 $ \lVert \partial f_\theta / \partial x \rVert_F^2 $,以鼓勵對輸入小擾動的局部不變性。

    變分自編碼器用分布 $ q_\phi(z \mid x) $ 替換確定性編碼器,並以證據下界作為訓練目標。它們是真正意義上的生成模型,儘管其樣本通常比生成對抗網絡擴散模型的樣本更模糊。

    掩碼自編碼器隨機遮蔽大部分輸入片段,並重構缺失的部分。應用於圖像片段的視覺掩碼自編碼器成為了視覺 Transformer強有力的自監督預訓練目標。[1]

    比較

    自編碼器經常與PCA進行比較。具有平方損失的線性自編碼器在所學子空間的意義上與 PCA 在數學上等價。一旦引入非線性,自編碼器即可捕捉彎曲流形,但訓練更困難,對初始化更敏感,所得表示也不再正交,也不按方差排序。

    與自監督對比方法(通過拉近匹配視圖、推開非匹配視圖來學習)相比,自編碼器通過重構來學習。對比方法通常能產生語義上更具判別性的特徵,而基於重構的方法保留了更多低層細節,且通常更易於擴展。

    在生成建模領域,普通自編碼器並非生成模型:它們沒有定義在 $ z $ 上的分布。變分自編碼器補上了這一部分。擴散模型可以被視為在多個噪聲水平上訓練的去噪自編碼器的層次結構。[2]

    局限性

    重構損失是一種粗粒度的訓練信號。像素級平方誤差對每一個輸出維度一視同仁,因此常常產生模糊的重構,並忽略感知上重要的結構。將損失替換為感知損失或對抗損失可以緩解這一問題,但會增加複雜度。

    普通自編碼器在任何嚴格意義上都不是生成模型。隨機採樣一個編碼並將其解碼可能產生不真實的輸出,因為對潛在分布沒有任何約束。它們也沒有內建機制來解耦各種變化因素;潛在單元往往是多義且糾纏的,這限制了其直接的可解釋性

    最後,如果自編碼器的容量相對於其瓶頸正則化過高,它就可能記住訓練集,通過巧妙的路由方式學到近似恆等映射,而不是有意義的結構。調節容量、瓶頸寬度以及正則化強度至關重要。

    應用

    自編碼器廣泛用於無監督表示學習:編碼器在大型未標註語料上訓練,潛在編碼作為下游較小有監督模型的輸入。它們也是異常檢測的標準工具——對新輸入的高重構誤差意味著該輸入不屬於分布內,常用於圖像和音頻的去噪。在現代系統中,自編碼器經常作為大型生成流水線中的感知壓縮階段出現:例如,潛在擴散模型在預訓練自編碼器壓縮後的潛在空間中訓練擴散過程,而不是直接在像素空間中訓練。[3]

    參考文獻

    1. Template:Cite arxiv
    2. Vincent, P., A connection between score matching and denoising autoencoders, 2011.
    3. Template:Cite arxiv