您的位置 首页 kreess

自動編碼器(AutoEncoder)簡介

註:本文翻譯自博客《Introduction to Autoencoders》。在本教程結束時,您將對自動編碼器的基本原理有深入的瞭解,熟悉不同的類型,並瞭解它們的實際應用

註:本文翻譯自博客《Introduction to Autoencoders》。

在本教程結束時,您將對自動編碼器的基本原理有深入的瞭解,熟悉不同的類型,並瞭解它們的實際應用。

為瞭加深對自動編碼器及其要解決的問題的理解,讓我們考慮一個發生在繁華的時尚城中心的故事。想象一個房間裡擺滿瞭你所有的衣服——牛仔褲、毛衣、靴子和各種款式的夾克。你的時尚顧問Alex對找到你需要的單品需要多長時間變得不耐煩瞭。為瞭克服這一挑戰,Alex提出瞭一個明智的策略。

圖 1:一張圖片,展示瞭一個裝滿服裝的壁櫥,作為自動編碼器概念的類比(使用deepai text2img生成器工具生成的圖像)。

Alex建議將你的衣服整理成一個無盡、無限寬、高的衣櫃。然後,當您請求特定的物品時,您隻需告知 Alex 它的位置,他們就會使用可靠的縫紉機從頭開始縫制該物品。您很快就會意識到,將相似的物品彼此靠近排列是至關重要的,這樣Alex就可以僅根據它們的位置準確地重新創建它們。

經過幾周的微調和調整壁櫥的佈置,你和Alex建立瞭對其結構的相互理解。現在,您隻需通知 Alex 任何服裝的位置,Alex就可以無可挑剔地復制它!

這一成就讓你想知道:如果你在無限的壁櫥裡給Alex一個空位會怎樣?令人驚訝的是,Alex設法創造瞭前所未有的全新服裝!盡管該過程有不完美之處,但您現在擁有制作新奇服裝的無限可能性。隻需要在巨大的壁櫥裡選擇一個空間,讓Alex用縫紉機創造奇跡。

考慮到故事類比,現在讓我們對自動編碼器有一個技術理解。

什麼是自動編碼器?

自動編碼器是一種人工神經網絡,用於無監督學習任務(即,沒有類標簽或標記數據),例如降維、特征提取和數據壓縮。他們尋求:

● 接受一組輸入數據(即輸入);● 在內部將輸入數據壓縮為潛在空間表示(即壓縮和量化輸入的單個向量);● 從這個潛在表示(即輸出)重建輸入數據。

自動編碼器由以下兩個主要組件組成:

● 編碼器(Encoder):編碼器將輸入數據壓縮為稱為潛在空間或代碼的低維表示形式。這種潛在空間通常稱為嵌入(Embedding),旨在保留盡可能多的信息,允許解碼器以高精度重建數據。如果我們將輸入數據表示為x ,將編碼器表示為 E,則輸出潛在空間s表示為s=E(x) 。

● 解碼器(Decoder):解碼器通過接受潛在空間表示s來重建原始輸入數據。如果我們將解碼器函數表示為D ,將檢測器的輸出表示為o ,那麼我們可以將解碼器表示為 o=D(s)。

碼器和解碼器通常由一個或多個層組成,這些層可以是完全連接的、卷積的或循環的,具體取決於輸入數據的性質和自動編碼器的架構。

通過使用我們的數學符號,自動編碼器的整個訓練過程可以編寫如下:o=D(E(x))

圖 2 展示瞭自動編碼器的基本架構:

圖2:自動編碼器的架構(來自 Hubens, “Deep Inside: Autoencoders,” Towards Data Science, 2018)。

在此示例中,您可以觀察到以下步驟:

● 我們在自動編碼器中輸入一個數字。● 編碼器子網生成數字4的潛在表示,其維數比輸入小得多。● 解碼器子網使用潛在表示重建原始數字。

因此,您可以將自動編碼器視為旨在重建其輸入的網絡!

自動編碼器如何實現高質量的重建?

自動編碼器旨在減少解碼器端原始數據和重建數據之間的差異或損失,旨在盡可能準確地重新創建輸入。這種損失函數通常被稱為重建誤差。用於自動編碼器的最常見損失函數是均方誤差 (MSE:mean squared error) 或二進制交叉熵 (BCE:binary cross-entropy ),具體取決於輸入數據的性質。

重溫故事

還記得上面的類比故事嗎?讓我們將其與自動編碼器的技術概念聯系起來。在故事中,你扮演編碼器(Encoder),將每件服裝整理到衣櫃內的特定位置,並分配一個編碼(encoding)。與此同時,你的朋友Alex扮演瞭解碼器(Decoder)的角色,在衣櫃中選擇一個位置並嘗試重新創建(或者用技術術語來說)服裝物品(這個過程稱為解碼decoding)。

圖 3 展示瞭潛在空間的可視化以及我們在故事中討論的過程,這與編碼器和解碼器的技術定義一致。在下圖中,您通過將褲子放置在無限壁櫥內的特定位置(在 2D 空間中)來對其進行編碼。然後,Alex使用相同或非常相似的位置重建該項目。

圖 3:壁櫥的潛在空間可視化(來源: Kumar, “Autoencoder vs Variational Autoencoder (VAE): Differences,” Data Analytics, 2023).

自動編碼器的類型

有幾種類型的自動編碼器,每種都有其獨特的屬性和用例。

普通自動編碼器(Vanilla Autoencoder)

圖 4 顯示瞭自動編碼器的最簡單形式,由編碼器和解碼器的一個或多個全連接層組成。它適用於簡單數據,可能難以處理復雜模式。

圖 4:全連接自動編碼器的架構(來源: Amor, “Comprehensive introduction to Autoencoders,” ML Cheat Sheet, 2021).

卷積自動編碼器(CAE:Convolutional Autoencoder)

在編碼器和解碼器中利用卷積層,使其適用於處理圖像數據。通過利用圖像中的空間信息,CAE可以比普通自動編碼器更有效地捕獲復雜的模式和結構,並完成圖像分割等任務,如圖5所示。

圖 5:用於圖像分割的卷積自動編碼器架構(來源: Bandyopadhyay, “Autoencoders in Deep Learning: Tutorial & Use Cases [2023],” V7Labs, 2023

降噪自動編碼器(Denoising Autoencoder)

該自動編碼器旨在消除損壞的輸入數據中的噪聲,如圖6所示。在訓練期間,輸入數據通過添加噪聲故意損壞,而目標仍然是原始的、未損壞的數據。自動編碼器學習從噪聲輸入中重建幹凈的數據,使其可用於圖像去噪和數據預處理任務。

圖 6:去噪自動編碼器處理噪聲圖像,在輸出端生成幹凈的圖像(來源: Denoising Autoencoders with Keras, TensorFlow, and Deep Learning中引用的 Building Autoencoders in Keras

稀疏自動編碼器(Sparse Autoencoder)

這種類型的自動編碼器通過向損失函數添加稀疏性約束來強制潛在空間表示的稀疏性(如圖 7 所示)。此約束鼓勵自動編碼器使用潛在空間中的少量活動神經元來表示輸入數據,從而實現更高效、更穩健的特征提取。

圖 7:稀疏自動編碼器的拓撲結構(來源:Shi, Ji, Zhang, and Miao, “Boosting sparsity-induced autoencoder: A novel sparse feature ensemble learning for image classification,” International Journal of Advanced Robotic Systems, 2019).

變分自動編碼器(VAE:Variational Autoencoder)

圖 8 顯示瞭一個生成模型,該模型在潛在空間中引入瞭概率層,允許對新數據進行采樣和生成。VAE可以從學習到的潛在分佈中生成新的樣本,使其成為圖像生成和風格遷移任務的理想選擇。

圖 8:變分自動編碼器的架構(來源: Yadav, “Variational Autoencoders,” Data-Science-Blog, 2022).

序列間自動編碼器(Sequence-to-Sequence Autoencoder)

這種類型的自動編碼器也稱為循環自動編碼器,在圖 9 所示的編碼器和解碼器中利用循環神經網絡 (RNN) 層(例如,長短期記憶 (LSTM) 或門控循環單元 (GRU))。此體系結構非常適合處理順序數據(例如,時間序列或自然語言處理任務)。

圖 9:序列到序列自動編碼器(來源: Zerveas, “Improving Clinical Predictions through Unsupervised Time Series Representation Learning,” Machine Learning for Health (ML4H) Workshop at NeurIPS, 2018).

這些隻是各種可用自動編碼器架構的幾個示例。每種類型都旨在解決特定的挑戰和應用,通過瞭解其獨特的特性,您可以為您的問題選擇最合適的自動編碼器。

要在 PyTorch 中實現自動編碼器,通常需要為編碼器和解碼器定義兩個單獨的模塊,然後將它們組合到更高級別的模塊中。然後,使用反向傳播和梯度下降來訓練自動編碼器,從而最大限度地減少重建誤差。

總之,自動編碼器是功能強大的神經網絡,在無監督學習中具有多種應用,包括降維、特征提取和數據壓縮。通過使用 PyTorch 等框架瞭解它們的架構、類型和實現,您可以利用它們的功能來解決各種實際問題。

自動編碼器有哪些應用?

自動編碼器在各個領域都有廣泛的應用,包括:

降維

自動編碼器可以通過學習潛在空間中的緊湊而有效的表示來降低輸入數據的維數。這對於可視化、數據壓縮和加速其他機器學習算法很有幫助。

特征學習

自動編碼器可以從輸入數據中學習有意義的特征,這些特征可用於下遊機器學習任務,如分類、聚類或回歸。

異常檢測

通過在普通數據實例上訓練自動編碼器,它可以學習以低錯誤重建這些實例。當呈現異常數據點時,自動編碼器可能會有更高的重建誤差,可用於識別異常值或異常值。

圖像降噪

可以訓練自動編碼器從嘈雜的版本重建幹凈的輸入數據。降噪自動編碼器學習消除噪聲並生成輸入數據的幹凈版本。

圖像修復

如圖 10 所示,自動編碼器可以通過學習數據中的底層結構和模式來填充圖像中缺失或損壞的部分。

圖 10:通過填充缺失像素完成人臉(來源:SymmFCNet)。

生成模型

變分自動編碼器 (VAE) 和其他生成變體可以通過在訓練期間學習數據分佈來生成新的、真實的數據樣本。這對於數據增強或創意應用程序非常有用。

推薦系統

自動編碼器可用於學習推薦系統中用戶和項目的潛在表示,然後可以預測用戶偏好並做出個性化推薦。

序列間學習

自動編碼器可用於序列到序列的任務,例如機器翻譯或文本摘要,方法是調整其架構以處理順序輸入和輸出數據。

圖像分割

自動編碼器也常用於語義分割。一個值得註意的例子是SegNet(圖11),這是一個專為城市道路場景數據集上的像素級多類分割而設計的模型。該模型由劍橋大學計算機視覺小組的研究人員創建。

圖 11:全卷積 SegNet 架構的圖示(來源:SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation).

這些隻是自動編碼器眾多可能應用中的幾個例子。它們的多功能性和適應性使其成為機器學習工具箱中的重要工具。

自動編碼器和GAN有何不同?

模型結構

● 自動編碼器由編碼器和解碼器組成。編碼器將輸入數據壓縮為低維潛在表示形式,而解碼器從潛在表示形式重建輸入數據。● GAN 由生成器和鑒別器組成。生成器從隨機噪聲創建假樣本,鑒別器嘗試區分數據集中的真實樣本和生成器生成的假樣本。

訓練流程

● 自動編碼器使用重建誤差進行訓練,該誤差測量輸入數據和重建數據之間的差異。訓練過程的目的是盡量減少這種誤差。● GAN 在訓練期間使用two-player minimax game。生成器試圖產生判別器無法與真實樣本區分開的樣本,而判別器則試圖提高其區分真假樣本的能力。訓練過程涉及在兩個競爭網絡之間找到平衡。

使用場景

● 自動編碼器主要用於降維、數據壓縮、去噪和表示學習。● GAN 主要用於生成新的、逼真的樣本,通常在圖像領域,但也用於其他數據類型,如文本、音頻等。

雖然自動編碼器和GAN都可以生成新樣本,但它們具有不同的優點和缺點。自動編碼器通常產生更平滑、更連續的輸出,而 GAN 可以生成更真實和多樣化的示例,但可能會出現模式崩潰等問題。兩種模型之間的選擇取決於具體問題和期望的結果。

總結

這篇博文以引人入勝的故事開頭,幫助讀者直觀地掌握自動編碼器的概念。然後,它定義瞭自動編碼器,解釋瞭它們如何通過其獨特的架構實現高質量的重建。重新審視最初的故事,進一步理解對自動編碼器至關重要的潛在空間概念。

然後討論瞭不同類型的自動編碼器,詳細介紹瞭它們的獨特特性和功能。並探索自動編碼器在各個領域的廣泛應用,例如圖像壓縮、去噪和異常檢測。

這篇文章還通過比較它們的架構、訓練過程和使用場景來區分自動編碼器和生成對抗網絡 (GAN)。

在即將到來的教程中,我們將深入研究並繼續利用 Fashion-MNIST 數據集使用 PyTorch 構建卷積自動編碼器。此外,我們將對自動編碼器進行全面的訓練後分析,包括從潛在空間采樣數據點並將這些采樣點重建為圖像。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部