天天看點

自編碼器26頁綜述論文:概念、圖解和應用

機器之心報道

編輯:蛋醬

在這篇新論文中,TOELT LLC 聯合創始人兼首席 AI 科學家 Umberto Michelucci 對自編碼器進行了全面、深入的介紹。

自編碼器26頁綜述論文:概念、圖解和應用

論文連結:https://arxiv.org/pdf/2201.03898.pdf

神經網絡通常用于監督環境。這意味着對于每個訓練觀測值 x_i,都将有一個标簽或期望值 y_i。在訓練過程中,神經網絡模型将學習輸入資料和期望标簽之間的關系。

現在,假設隻有未标記的觀測資料,這意味着隻有由 i = 1,... ,M 的 M 觀測資料組成的訓練資料集 S_T。

在這一資料集中,x_i ∈ R^n,n ∈ N。

1986 年,Rumelhart、Hinton 和 Williams 首次提出了自編碼器(Autoencoder),旨在學習以盡可能低的誤差重建輸入觀測值 x_i。

為什麼要學習重建輸入觀測值?

如果你很難想象這意味着什麼,想象一下由圖檔組成的資料集。自編碼器是一個讓輸出圖像盡可能類似輸入之一的算法。也許你會感到困惑,似乎沒有理由這樣做。為了更好地了解為什麼自編碼器是有用的,我們需要一個更加翔實(雖然還沒有明确)的定義。

自編碼器26頁綜述論文:概念、圖解和應用

圖 1:自動編碼器的一般架構。

為了更好地了解自編碼器,我們需要了解它的經典架構。如下圖 1 所示。自編碼器的主要組成部分有三個:編碼器、潛在特征表示和解碼器。

自編碼器26頁綜述論文:概念、圖解和應用

一般來說,我們希望自編碼器能夠很好地重建輸入。同時,它還應該建立一個有用且有意義的潛在表示 (圖 1 中編碼器部分的輸出)。例如,手寫數字上的潛在特征可以是寫每個數字所需的行數,或者每條線的角度以及它們之間的連接配接方式。

學習如何寫數字不需要學習輸入圖像中每個像素的灰階值。人們也不會通過用灰色值填充像素來學習寫作。在學習的過程中,我們提取基本的資訊,這些資訊可以幫助我們解決問題(例如寫數字)。這種潛在表示法(如何寫出每個數字)對于各種任務(例如可用于分類或聚類的執行個體特征提取)僅僅了解資料集的基本特征都非常有用。

在大多數經典架構中,編碼器和解碼器都是神經網絡(這是本文将詳細讨論的内容) ,因為它們可以很容易地用現有的軟體庫(TensorFlow 或 PyTorch)進行訓練。一般來說,編碼器可以寫成一個函數 g,這個函數取決于一些參數

其中 h_i ∈ R^q (潛在特征表示)是圖 1 中編碼器塊在輸入 x_i 上求值時的輸出。注意 g: R^n R^q。

解碼器(以及用表示的網絡輸出)可以作為潛在特征的第二個通用函數 f 寫入

其中,增加一個「瓶頸(bottleneck)」是通過使潛在特征的次元比輸入的次元更低(通常要低得多)來實作的。這就是本文将詳細讨論的情況。但在研究這種情況之前,需要提到正則化問題。

直覺地說,正則化意味着在潛在特征輸出中加強稀疏性。實作這一點的最簡單方法是在損失函數中加入 l_1 或 l_2 正則項。

前饋自編碼器

前饋自編碼器(Feed-Forward Autoencoder,FFA)是由具有特定結構的密集層組成的神經網絡,如下圖 2 所示:

自編碼器26頁綜述論文:概念、圖解和應用

經典的 FFA 架構層的數量為奇數(盡管不是強制性要求),并且與中間層對稱。通常,第一層有一定數量的神經元 n_1 = n(輸入觀察值 x_i 的大小)。向網絡中心移動時,每一層的神經元數量都會有所下降。中間層通常有最少的神經元。事實上,這一層的神經元數量小于輸入的大小,這是前面提到的「瓶頸」。

在幾乎所有的實際應用中,中間層之後的圖層是中間層之前圖層的鏡像版本。包括中間層在内及之前的所有層構成了所謂的編碼器。如果 FFA 訓練是成功的,結果将是輸入的一個近似值,換句話說是。需要注意的是,解碼器隻需要使用比最初的輸入觀測值 (n) 少得多的特征數 (q) 就可以重構輸入。中間層的輸出也稱為輸入觀測值 x_i 的學習表示。

輸出層的激活函數

在基于神經網絡的自編碼器中,輸出層的激活函數起着特别重要的作用。最常用的函數是 ReLU 和 Sigmoid。

ReLU 激活函數可以假設範圍 [0,∞] 内的所有值。作為餘數,它的公式是 ReLU (x) = max (0,x)。當輸入的觀測值 x_i 假設範圍很廣的正值時,ReLU 是個很好的選擇。如果輸入 x_i 可以假設負值,那麼 ReLU 當然是一個糟糕的選擇,而且恒等函數是一個更好的選擇。

Sigmoid 函數 σ 可以假定所有值的範圍在] 0, 1 [ 。作為餘數,它的公式是

自編碼器26頁綜述論文:概念、圖解和應用

隻有當輸入的觀測值 x_i 都在] 0,1 [範圍内,或者将它們歸一化到這個範圍内,才能使用這個激活函數。在這種情況下,對于輸出層的激活函數來說,Sigmoid 函數是一個不錯的選擇。

損失函數

與任何神經網絡模型一樣,這裡需要一個損失函數來最小化。這個損失函數應該測量輸入 x_i 和輸出 x i 之間的差異有多大:

其中,FFA、 g 和 f 是由全連接配接層獲得的函數。自編碼器廣泛使用兩種損失函數:均方差和二進制交叉熵。它們隻有在滿足特定需求時才能使用。

由于自編碼器試圖解決回歸問題,最常用的損失函數是均方差(MSE):

自編碼器26頁綜述論文:概念、圖解和應用

如果 FFA 輸出層的激活函數是一個 sigmoid 函數,即将神經元輸出限制在 0 到 1 之間,并且輸入特征被标準化為 0 到 1 之間,我們以使用 LCE 表示的二進制交叉熵作為損失函數。

自編碼器26頁綜述論文:概念、圖解和應用

重構誤差

重構誤差 (RE) 是一個度量,它訓示了自編碼器能夠重建輸入觀測值 x_i 的好壞。最典型的 RE 應用是 MSE

自編碼器26頁綜述論文:概念、圖解和應用

這很容易計算出來。在使用自編碼器進行異常檢測時,常常用到 RE。對于重建誤差有一個簡單的直覺解釋。當 RE 值較大時,自編碼器不能很好地重構輸入信号,當 RE 值較小時,重構是成功的。下圖 3 展示了一個自編碼器試圖重建圖像時出現的大大小小的重建錯誤的示例。

自編碼器26頁綜述論文:概念、圖解和應用

在最後一部分,作者還介紹了自編碼器的幾種應用,如降維、分類、去噪和異常檢測,以及應用過程涉及的其他理論方法。更多細節詳見原論文。

繼續閱讀