如果您之前閱讀過無監(jiān)督學(xué)習(xí)技術(shù),您可能會(huì)遇到“自動(dòng)編碼器”一詞。自編碼器是開發(fā)無監(jiān)督學(xué)習(xí)模型的主要方式之一。然而,究竟什么是自動(dòng)編碼器?
簡(jiǎn)而言之,自動(dòng)編碼器通過接收數(shù)據(jù)、壓縮和編碼數(shù)據(jù),然后從編碼表示中重構(gòu)數(shù)據(jù)來進(jìn)行操作。對(duì)模型進(jìn)行訓(xùn)練,直到損失最小化并且盡可能接近地再現(xiàn)數(shù)據(jù)。通過這個(gè)過程,自動(dòng)編碼器可以學(xué)習(xí)數(shù)據(jù)的重要特征。雖然這是對(duì)自動(dòng)編碼器的快速定義,但仔細(xì)研究自動(dòng)編碼器并更好地了解它們的功能將是有益的。本文將努力揭開自編碼器的神秘面紗,解釋自編碼器的架構(gòu)及其應(yīng)用。
什么是自動(dòng)編碼器?
自編碼器是神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)由多個(gè)層組成,自動(dòng)編碼器的定義方面是輸入層包含與輸出層一樣多的信息。輸入層和輸出層具有完全相同數(shù)量的單元的原因是自動(dòng)編碼器旨在復(fù)制輸入數(shù)據(jù)。它在分析數(shù)據(jù)并以無監(jiān)督方式重建數(shù)據(jù)后輸出數(shù)據(jù)副本。
通過自動(dòng)編碼器移動(dòng)的數(shù)據(jù)不僅僅是從輸入直接映射到輸出,這意味著網(wǎng)絡(luò)不只是復(fù)制輸入數(shù)據(jù)。自動(dòng)編碼器包含三個(gè)組件:壓縮數(shù)據(jù)的編碼(輸入)部分、處理壓縮數(shù)據(jù)(或瓶頸)的組件和解碼器(輸出)部分。當(dāng)數(shù)據(jù)被輸入自動(dòng)編碼器時(shí),它會(huì)被編碼,然后壓縮到更小的尺寸。然后對(duì)網(wǎng)絡(luò)進(jìn)行編碼/壓縮數(shù)據(jù)的訓(xùn)練,并輸出該數(shù)據(jù)的重建。
那么為什么要訓(xùn)練一個(gè)網(wǎng)絡(luò)來重建提供給它的數(shù)據(jù)呢?原因是網(wǎng)絡(luò)學(xué)習(xí)了輸入數(shù)據(jù)的“本質(zhì)”或最重要的特征。訓(xùn)練完網(wǎng)絡(luò)后,可以創(chuàng)建一個(gè)模型來合成相似的數(shù)據(jù),并添加或減去某些目標(biāo)特征。例如,您可以在顆粒狀圖像上訓(xùn)練自動(dòng)編碼器,然后使用經(jīng)過訓(xùn)練的模型從圖像中去除顆粒/噪聲。
自動(dòng)編碼器架構(gòu)
讓我們看一下自動(dòng)編碼器的架構(gòu)。我們將在這里討論自動(dòng)編碼器的主要架構(gòu)。我們將在下面的部分中討論這種通用架構(gòu)的變體。
照片:Michela Massi 來自 Wikimedia Commons
如前所述,自動(dòng)編碼器基本上可以分為三個(gè)不同的組件:編碼器、瓶頸和解碼器。
自編碼器的編碼器部分通常是一個(gè)前饋、密集連接的網(wǎng)絡(luò)。編碼層的目的是獲取輸入數(shù)據(jù)并將其壓縮為潛在空間表示,生成具有降維的數(shù)據(jù)的新表示。
代碼層或瓶頸處理數(shù)據(jù)的壓縮表示。瓶頸代碼經(jīng)過精心設(shè)計(jì),以確定觀察數(shù)據(jù)中最相關(guān)的部分,或者以另一種方式表示對(duì)數(shù)據(jù)重建最重要的數(shù)據(jù)特征。這里的目標(biāo)是確定數(shù)據(jù)的哪些方面需要保留,哪些可以丟棄。瓶頸代碼需要平衡兩個(gè)不同的考慮:表示大?。ū硎镜木o湊程度)和變量/特征相關(guān)性。瓶頸對(duì)網(wǎng)絡(luò)的權(quán)重和偏差執(zhí)行逐元素激活。瓶頸層有時(shí)也稱為潛在表示或潛在變量。
解碼器層負(fù)責(zé)獲取壓縮數(shù)據(jù)并將其轉(zhuǎn)換回與原始未更改數(shù)據(jù)具有相同維度的表示。轉(zhuǎn)換是使用編碼器創(chuàng)建的潛在空間表示完成的。
自編碼器最基本的架構(gòu)是前饋架構(gòu),其結(jié)構(gòu)很像多層感知器中使用的單層感知器。與常規(guī)的前饋神經(jīng)網(wǎng)絡(luò)非常相似,自動(dòng)編碼器是通過使用反向傳播來訓(xùn)練的。
自動(dòng)編碼器的屬性
有各種類型的自動(dòng)編碼器,但它們都具有將它們結(jié)合在一起的某些屬性。
自動(dòng)編碼器自動(dòng)學(xué)習(xí)。它們不需要標(biāo)簽,如果提供足夠的數(shù)據(jù),很容易讓自動(dòng)編碼器在特定類型的輸入數(shù)據(jù)上達(dá)到高性能。
自動(dòng)編碼器是特定于數(shù)據(jù)的。這意味著他們只能壓縮與自動(dòng)編碼器已經(jīng)訓(xùn)練過的數(shù)據(jù)高度相似的數(shù)據(jù)。自動(dòng)編碼器也是有損的,這意味著模型的輸出與輸入數(shù)據(jù)相比會(huì)下降。
在設(shè)計(jì)自動(dòng)編碼器時(shí),機(jī)器學(xué)習(xí)工程師需要注意四個(gè)不同的模型超參數(shù):代碼大小、層數(shù)、每層節(jié)點(diǎn)和損失函數(shù)。
代碼大小決定了有多少節(jié)點(diǎn)開始網(wǎng)絡(luò)的中間部分,更少的節(jié)點(diǎn)壓縮更多的數(shù)據(jù)。在深度自動(dòng)編碼器中,雖然層數(shù)可以是工程師認(rèn)為合適的任何數(shù)量,但隨著編碼器的繼續(xù),層中的節(jié)點(diǎn)數(shù)應(yīng)該減少。同時(shí),解碼器的情況正好相反,這意味著隨著解碼器層接近最后一層,每層的節(jié)點(diǎn)數(shù)應(yīng)該增加。最后,自動(dòng)編碼器的損失函數(shù)通常是二元交叉熵或均方誤差。二進(jìn)制交叉熵適用于數(shù)據(jù)輸入值在 0 – 1 范圍內(nèi)的情況。
自動(dòng)編碼器類型
如上所述,存在經(jīng)典自動(dòng)編碼器架構(gòu)的變體。讓我們來看看不同的自動(dòng)編碼器架構(gòu)。
疏
照片:Michela Massi 來自 Wikimedia Commons,CC BY SA 4.0
雖然自動(dòng)編碼器通常具有通過減少節(jié)點(diǎn)來壓縮數(shù)據(jù)的瓶頸,但稀疏自動(dòng)編碼器是該典型操作格式的替代方案。在稀疏網(wǎng)絡(luò)中,隱藏層保持與編碼器和解碼器層相同的大小。相反,給定層內(nèi)的激活會(huì)受到懲罰,設(shè)置它以便損失函數(shù)更好地捕捉輸入數(shù)據(jù)的統(tǒng)計(jì)特征。換句話說,雖然稀疏自動(dòng)編碼器的隱藏層比傳統(tǒng)的自動(dòng)編碼器有更多的單元,但在任何給定時(shí)間只有一定百分比的單元是活動(dòng)的。最有影響的激活函數(shù)被保留,其他的被忽略,這個(gè)約束有助于網(wǎng)絡(luò)確定輸入數(shù)據(jù)中最顯著的特征。
收縮的
收縮自動(dòng)編碼器旨在抵御數(shù)據(jù)中的微小變化,保持?jǐn)?shù)據(jù)的一致表示。這是通過對(duì)損失函數(shù)施加懲罰來實(shí)現(xiàn)的。這種正則化技術(shù)基于雅可比矩陣的 Frobenius 范數(shù),用于輸入編碼器激活。這種正則化技術(shù)的效果是模型被迫構(gòu)建一個(gè)編碼,其中相似的輸入將具有相似的編碼。
卷積
卷積自動(dòng)編碼器通過將數(shù)據(jù)分成多個(gè)小節(jié),然后將這些小節(jié)轉(zhuǎn)換為簡(jiǎn)單的信號(hào)來對(duì)輸入數(shù)據(jù)進(jìn)行編碼,這些簡(jiǎn)單的信號(hào)相加在一起以創(chuàng)建數(shù)據(jù)的新表示。與卷積神經(jīng)網(wǎng)絡(luò)類似,卷積自動(dòng)編碼器專門研究圖像數(shù)據(jù)的學(xué)習(xí),它使用一個(gè)過濾器,逐段移動(dòng)到整個(gè)圖像。編碼層生成的編碼可用于重建圖像、反映圖像或修改圖像的幾何形狀。一旦網(wǎng)絡(luò)學(xué)習(xí)了過濾器,就可以在任何足夠相似的輸入上使用它們來提取圖像的特征。
去噪
照片:MAL 來自 Wikimedia Commons,CC BY SA 3.0
去噪自動(dòng)編碼器將噪聲引入編碼,導(dǎo)致編碼是原始輸入數(shù)據(jù)的損壞版本。這個(gè)損壞的數(shù)據(jù)版本用于訓(xùn)練模型,但損失函數(shù)將輸出值與原始輸入進(jìn)行比較,而不是損壞的輸入。目標(biāo)是網(wǎng)絡(luò)將能夠復(fù)制圖像的原始、未損壞版本。通過將損壞的數(shù)據(jù)與原始數(shù)據(jù)進(jìn)行比較,網(wǎng)絡(luò)可以了解數(shù)據(jù)的哪些特征最重要,哪些特征不重要/損壞。換句話說,為了讓模型對(duì)損壞的圖像進(jìn)行去噪,它必須提取圖像數(shù)據(jù)的重要特征。
變分
變分自動(dòng)編碼器通過對(duì)數(shù)據(jù)的潛在變量如何分布做出假設(shè)來運(yùn)行。變分自動(dòng)編碼器為訓(xùn)練圖像/潛在屬性的不同特征生成概率分布。訓(xùn)練時(shí),編碼器為輸入圖像的不同特征創(chuàng)建潛在分布。
因?yàn)樵撃P蛯⑻卣骰驁D像學(xué)習(xí)為高斯分布而不是離散值,所以它能夠用于生成新圖像。對(duì)高斯分布進(jìn)行采樣以創(chuàng)建一個(gè)向量,該向量被輸入解碼網(wǎng)絡(luò),解碼網(wǎng)絡(luò)根據(jù)該樣本向量渲染圖像。本質(zhì)上,該模型學(xué)習(xí)了訓(xùn)練圖像的共同特征,并為它們分配了它們發(fā)生的概率。然后可以使用概率分布對(duì)圖像進(jìn)行逆向工程,生成與原始訓(xùn)練圖像相似的新圖像。
在訓(xùn)練網(wǎng)絡(luò)時(shí),對(duì)編碼數(shù)據(jù)進(jìn)行分析,識(shí)別模型輸出兩個(gè)向量,得出圖像的均值和標(biāo)準(zhǔn)差?;谶@些值創(chuàng)建分布。這是針對(duì)不同的潛在狀態(tài)完成的。然后解碼器從相應(yīng)的分布中抽取隨機(jī)樣本,并使用它們來重建網(wǎng)絡(luò)的初始輸入。
自動(dòng)編碼器應(yīng)用
自動(dòng)編碼器可用于多種應(yīng)用,但它們通常用于降維、數(shù)據(jù)去噪、特征提取、圖像生成、序列到序列預(yù)測(cè)和推薦系統(tǒng)等任務(wù)。
數(shù)據(jù)去噪是使用自動(dòng)編碼器從圖像中去除顆粒/噪聲。同樣,自動(dòng)編碼器可用于修復(fù)其他類型的圖像損壞,例如模糊圖像或圖像缺失部分。降維可以幫助高容量網(wǎng)絡(luò)學(xué)習(xí)圖像的有用特征,這意味著自動(dòng)編碼器可用于增強(qiáng)其他類型神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。使用自動(dòng)編碼器進(jìn)行特征提取也是如此,因?yàn)樽詣?dòng)編碼器可用于識(shí)別其他訓(xùn)練數(shù)據(jù)集的特征以訓(xùn)練其他模型。
在圖像生成方面,自動(dòng)編碼器可用于生成虛假的人類圖像或動(dòng)畫角色,這在設(shè)計(jì)人臉識(shí)別系統(tǒng)或動(dòng)畫的某些方面具有應(yīng)用。
序列到序列預(yù)測(cè)模型可用于確定數(shù)據(jù)的時(shí)間結(jié)構(gòu),這意味著即使在序列中也可以使用自動(dòng)編碼器生成下一個(gè)。因此,可以使用自動(dòng)編碼器來生成視頻。最后,深度自動(dòng)編碼器可用于通過拾取與用戶興趣相關(guān)的模式來創(chuàng)建推薦系統(tǒng),編碼器分析用戶參與數(shù)據(jù),解碼器創(chuàng)建適合已建立模式的推薦。