1、什么是潛在空間?
If I have to describe latent space in one sentence, it simply means a representation of compressed data.
如果我必須用一句話來描述潛在空間,它只是意味著壓縮數據的表示。
想象一個像上面所示的手寫數字(0-9)的大型數據庫。相同數字的手寫圖像(即3的圖像)與其他不同數字的圖像(即3s vs. 7s)相比,彼此之間最相似。但我們能訓練一個算法來識別這些相似性嗎?如何訓練?
如果你訓練了一個模型來對數字進行分類,那么你也訓練了這個模型來學習圖像之間的“結構相似性”。事實上,這就是模型如何首先能夠對數字進行分類——通過學習每個數字的特征。
如果這個過程看起來對你來說是“隱藏”的,那是因為它是。Latent,顧名思義就是“隱藏的”。
“潛在空間”的概念很重要,因為它的用途是“深度學習”的核心——學習數據的特征并簡化數據表示以尋找模式。
感興趣嗎?讓我們一點一點地分解潛在空間:
① 為什么我們在機器學習(ML)中壓縮數據?
數據壓縮(Data compression)被定義為使用比原始表示更少的比特對信息進行編碼的過程。這就像獲取一個19D數據點(需要19個值來定義唯一的點)并將所有信息壓縮到一個9D數據點中。
通常情況下,數據在機器學習中被壓縮,以學習有關數據點的重要信息。讓我舉個例子來解釋。
假設我們想訓練一個模型來使用全卷積神經網絡(FCN)對圖像進行分類(即輸出給定數字圖像的數字)。當模型“學習”時,它只是學習每一層的特征(邊、角度等),并將特征組合歸因于特定的輸出。
但每次模型通過一個數據點進行學習時,圖像的維數首先會降低,然后才會最終增加(見下面的編碼器和瓶頸)。當維數降低時,我們認為這是一種有損壓縮。
因為模型需要重建壓縮數據(參見解碼器),它必須學會存儲所有相關信息并忽略噪聲。這就是壓縮的價值——它允許我們去掉任何無關的信息,只關注最重要的特性。
這種“壓縮狀態”是我們數據的潛在空間表示。
② 空間(space)是什么意思?
你可能想知道為什么我們稱它為潛在空間。畢竟,壓縮的數據,乍一看,可能不會引起任何形式的“空間”。
但這里有個相似之處。
在這個相當簡單的例子中,假設我們的原始數據集是尺寸為5×5×1的圖像。我們將我們的潛在空間維度設置為3×1,這意味著我們壓縮的數據點是一個具有3維的向量。
現在,每個壓縮數據點僅由3個數字唯一定義。這意味著我們可以在三維平面上繪制這些數據(一個數字是x,另一個是y,另一個是z)。
這就是我們所指的“空間”。
Whenever we graph points or think of points in latent space, we can imagine them as coordinates in space in which points that are “similar” are closer together on the graph.
每當我們繪制點或考慮潛在空間中的點時,我們可以將它們想象為空間中的坐標,其中“相似”的點在圖上靠的更近。
一個自然出現的問題是,我們如何想象4D點或n維點的空間,甚至是非向量的空間(因為潛在空間表示不需要2或3維向量,而且通常不需要,因為太多的信息回丟失)。
令人不滿意的答案是,我們不能。我們是三維生物,無法理解n維空間(例如n>3)。然而,有一些工具,如t-SNE,可以將我們的高維潛在空間表征轉化為我們可以可視化的表征(2D或3D)。(參見下面可視化潛在空間部分。)
但是你可能會想,什么是“相似”的圖像,為什么降低數據的維數會使相似的圖像在空間上“更接近”?
③ 相似(similar)是什么意思?
如果我們看三張圖片,兩張椅子和一張桌子,我們會很容易地說出這兩張椅子的圖像是最相似的,而桌子和椅子的圖像是最不同的。
但是,是什么讓這兩張椅子的圖像“更相似”呢?椅子具有可區分的特征(即靠背,沒有抽屜,腿之間的連接)。這些都可以被我們的模型通過學習邊、角度等模式來“理解”。
如前所述,這些特征被封裝在數據的潛在空間表示中。
因此,隨著維數的降低,與每張圖像不同的“無關”信息(例如椅子的顏色)從我們的潛在空間表示中“刪除”,因為每張圖像只有最重要的特征存儲在潛在空間表示中。
因此,當我們降低維度時,兩把椅子的表現變得不那么明顯,而更相似。如果我們想象它們在太空中,它們會“更接近”。
請注意,我在整篇文章中提到的“接近度”(“closeness”)度量是一個模棱兩可的術語,而不是確定的歐幾里得距離,因為空間中的距離有多種定義。
?
2、為什么潛在空間很重要?
潛在空間的概念絕對是有趣的。但它是如何使用的呢?我們什么時候用它?最重要的是,為什么?
我們會發現,潛在空間“隱藏”在許多我們最喜歡的圖像處理網絡、生成模型等中。
雖然潛在空間對大多數人來說是隱藏的,但在某些任務中,了解潛在空間不僅是有幫助的,而且是必要的。
① 表示學習(Representation Learning)
數據的潛在空間表示包含了表示原始數據點所需的所有重要信息。
這種表示(representation)必須表示原始數據的特征(features)。
換句話說,模型學習數據特征并簡化其表示以使其更易于分析。
這是表示學習概念的核心,它被定義為一組技術,允許系統從原始數據中發現特征檢測或分類所需的表征(representations)。
在這個用例中,我們的潛在空間表示用于將更復雜形式的原始數據(如圖像、視頻)轉換為更簡單的表示,從而“更便于處理”和分析。
下面列出了表示學習的具體實例——Manifolds。
潛在空間是流形學習(manifold learning)中的一個重要概念,是表示學習的一個分支。
數據科學中的流形(manifolds)可以理解為在某種程度上“相似”的數據組或子集。
這些在高維空間中通常難以察覺或模糊的相似性,一旦我們的數據在潛在空間中被表示出來,就可以被發現。
以下面的“swiss roll”為例。
在3D中,我們知道存在相似數據點的組,但是用高維數據來描繪這樣的組要困難得多。
通過將數據的維度降低到2D,在這種情況下可以被認為是“潛在空間”表示,我們能夠更容易地區分數據集中的流形(相似數據組)。
要了解更多關于流形和流形學習的知識,我推薦以下文章:
- Manifolds in Data Science — A Brief Overview:https://towardsdatascience.com/manifolds-in-data-science-a-brief-overview-2e9dde9437e5
- 2.2. Manifold learning:https://scikit-learn.org/stable/modules/manifold.html?source=post_page-----de5a7c687d8d--------------------------------
② 自動編碼器和生成模型(Autoencoders and Generative Models)
一種常見的深度學習模型是自動編碼器,它可以操縱潛在空間中數據的“接近度”(“closeness”)——一種作為恒等函數(identity function)的神經網絡。換句話說,自動編碼器學會輸出輸入的任何內容。
現在,如果你是這個領域的新手,你可能會想,為什么我們需要一個這樣的模型呢?如果它輸出的只是它自己,那么它似乎毫無用處……
雖然這個推理是有效的,但我們不太關心模型的輸出。我們更關心模型在這個過程中學到了什么。
當我們強迫一個模型成為恒等函數時,我們是在強迫它將所有數據的相關特征存儲在壓縮表示中,以便在壓縮形式中有足夠的信息,這樣模型就可以“準確”地重建它。聽起來是不是很熟悉?應該是這樣,因為這個壓縮表示是我們的潛在空間表示(上圖中的紅色塊)。
我們已經看到了如何在潛在空間中更容易發現模式,因為相似的數據點往往會聚集在一起,但我們還沒有看到如何從這個潛在空間中采樣點來生成“新”數據。
在上面的例子中,我們可以通過對潛在空間進行插值來生成不同的面部結構,并使用我們的模型解碼器將潛在空間表示重建為與原始輸入具有相同尺寸的2D圖像。
什么是潛在空間插值?
假設我已經將前一節的椅子圖像壓縮為以下2D向量,[0.4, 0.5]和[0.45, 0.45]。假設桌子被壓縮到[0.6,0.75]。如果我要對潛在空間進行插值,我會對“椅子”簇和“桌子”簇之間的潛在空間中的點進行采樣。
我們可以將這些采樣的2D向量輸入到模型的解碼器中。瞧!我們得到的“新”圖像看起來像是椅子和桌子之間的變形。“新”加了引號,因為這些生成的圖像在技術上并不獨立于原始數據樣本。
下面是潛在空間中兩種椅子之間線性插值的例子。
圖像生成仍然是一個活躍的研究領域,而潛在空間是一個必須理解的基本概念。請參閱以下文章,了解生成模型的更多用例,以及使用GAN(生成對抗網絡)的潛在空間差值的實際示例,GAN是另一個使用潛在空間表示的生成模型。
- 18 Impressive Applications of Generative Adversarial Networks(GANs):https://machinelearningmastery.com/impressive-applications-of-generative-adversarial-networks/?source=post_page-----de5a7c687d8d--------------------------------
- How to Explore the GAN Latent Space When Generating Faces:https://machinelearningmastery.com/how-to-interpolate-and-perform-vector-arithmetic-with-faces-using-a-generative-adversarial-network/?source=post_page-----de5a7c687d8d--------------------------------
?
3、潛在空間可視化
有關潛在空間可視化的更多信息,我推薦Hackernoon的文章,該文章提供了一個使用t-SNE算法在2D空間中可視化數字圖像之間相似性的實際示例。
- Latent space visualization — Deep Learning bits #2:https://hackernoon.com/latent-space-visualization-deep-learning-bits-2-bd09a46920df?source=post_page-----de5a7c687d8d--------------------------------
?
4、主要收獲
潛在空間只是壓縮數據的一種表示,其中相似的數據點在空間中距離更近。
潛在空間對于學習數據特征和尋找用于分析的更簡單的數據表示非常有用。
我們可以通過分析潛在空間中的數據來理解數據點之間的模式或結構相似性,無論是通過流形還是聚類等。
我們可以在潛在空間中插入數據,并使用我們模型的解碼器來“生成”數據樣本。
我們可以使用t-SNE和LLE等算法來可視化潛在空間,這些算法將潛在空間轉換為2D或3D。
在了解潛在空間的過程中,我被這個“隱藏”但又必不可少的概念所吸引。我希望這篇文章能夠揭開潛在空間表示的神秘面紗,并提供我作為一個新手所渴望的對深度學習的“更深層次的理解”。
?
5、參考資料
- Understanding Latent Space in Machine Learning:https://towardsdatascience.com/understanding-latent-space-in-machine-learning-de5a7c687d8d
- 理解機器學習中的潛在空間:https://zhuanlan.zhihu.com/p/369946876
- Manifolds in Data Science — A Brief Overview:https://towardsdatascience.com/manifolds-in-data-science-a-brief-overview-2e9dde9437e5
- 2.2. Manifold learning:https://scikit-learn.org/stable/modules/manifold.html?source=post_page-----de5a7c687d8d--------------------------------
- 18 Impressive Applications of Generative Adversarial Networks(GANs):https://machinelearningmastery.com/impressive-applications-of-generative-adversarial-networks/?source=post_page-----de5a7c687d8d--------------------------------
- How to Explore the GAN Latent Space When Generating Faces:https://machinelearningmastery.com/how-to-interpolate-and-perform-vector-arithmetic-with-faces-using-a-generative-adversarial-network/?source=post_page-----de5a7c687d8d--------------------------------
- Latent space visualization — Deep Learning bits #2:https://hackernoon.com/latent-space-visualization-deep-learning-bits-2-bd09a46920df?source=post_page-----de5a7c687d8d--------------------------------