自編碼機 AutoEncoder (AE) 是深度學習裡面的一種非監督式學習演算法。雖說是非監督式學習,但是實際上我們在做 Training 的時候一樣會提供給神經網路一個 Ground Truth 的答案,一樣會去算它的 Loss、Gradient descent、Backpropagation 一整套這樣。我想有人看到這可能就不服氣啦~ 那憑什麼它可以算是非監督式學習演算法? 其實 Trick 就出現在我們給它的 Ground Truth 上,在訓練 AE 的時候有別於訓練其他類神經網路需要使用人工的方式來對資料進行標記做為 Ground Truth,AE 則是直接使用資料本身來當它的 Ground Truth。ㄜ... 乍聽之下 484 覺得哪裡怪怪的? 這樣訓練完成之後不就變成你餵什麼資料給網路它就吐什麼出來而已嗎? 到底能幹嘛~? 話雖如此沒錯,但神奇的事就發生在它的結構設計上!就如封面圖所示 AE 的輸入與輸出會呈現出一個鏡像對稱的結構,網路的正中間會有一個瓶頸(bottleneck)的設計。這樣當資料傳遞到網路中最壓縮層(most compression layer)也就是瓶頸處時,必然有大量的資訊會遺失;然而網路的後半部卻又能用從瓶頸處得到得少量資訊來還原出原始資料。如果你仔細想想,這是不是特別像資訊工程裡面資料失真壓縮與解壓縮的過程? 於是前半部的網路我們就能把它想像成是一個編碼器(Encoder);後半部的網路自然就是我們的解碼器(Decoder),而整個網路其實就是自動在做一個編碼與解碼的動作,故得名自編碼機(AutoEncoder)。 講到這邊我們大概知道了它名子的由來,但好像還不知道它到底能幹嘛齁~ 如果你沒有辦法很直覺地想出這個模型是要來幹啥用的,那是因為它並不是用來做常見的回歸(Regression)或分類(Classification)任務,但仍有其它很廣泛的用途。像是我們可以利用這個看似簡單實則神奇的結構來實現資料降維(Dimension Reduction)或者是特徵提取(Feature Extraction) 等,主要的 idea 是從結構上來看,你 Input layer 的資料維度一定是比 Most compression layer 來的高,而 Most compression layer 的資料既然能被 Decoder 給還原成原始資料,那就代表那一層保留下來的是維度較低的核心資訊,可以有效的用來代替原始資料。 其實降低資料維度這件事,在資料科學領域裡面也是非常重要的一件事,因為當今天你要處理的資料維度太高的時候,也會容易引發維度災難(Curse of Dimensionality);或者當今天你想要做個資料視覺化給你的主管們看看的時候,我們也是需要把高維度的資料降到低維度才有辦法用視覺化的方式展現。舉個例來說,如果我今天想觀察 MNIST 手寫辨識的資料分布長怎樣,我就可以利用 MNIST 的資料訓練一個 AE,訓練完畢後再利用它的 Encoder 來做資料降維:
如果不知道 MNIST 是什麼的,可以參考 Jason 之前寫的這一篇:
【深度學習】Hello Deep Learning! 使用 DNN 實作 MNIST 另外,本篇實作用 MNIST dataset 配合 AutoEncoder 做資料降維的【程式碼】 不過說到資料降維,我想多數人優先想到的可能還是 PCA 主成分分析啦~ 畢竟是最經典的資料降維方法,Interview 會考那種!至於 PCA 是什麼 Jason 改天有空再另外寫一篇來好好說說吧!但如果你要問 PCA 跟 AE 哪個效果更好? 那我會說 Case by Case,說穿了 AE 就是一種 Deep Learning (DL) 的演算法,它跟所有 DL 的方法一樣,都需仰賴大量的數據來支撐,如果你今天因為數據不足連 model 都 train 不好了,然後用這個沒 train 好的 model 去做降維的效果很好反而才奇怪吧? 但如果有充足的數據 AE 做出來的效果普遍是比 PCA 還好。 除了資料降維以外,AE 還演變出很多新的變種與新的玩法,像是有可以用來去除影像中雜訊的 Denoising AutoEncoder (DAE),或者是可以用來生成新影像的 Variational Autoencoder (VAE),還有可以用來得到稀疏高維特徵的 Sparse AutoEncoder (SAE),甚至我們還可以利用 AE 對雜訊不敏感這個特點拿它來做異常檢測(Anomaly Detection)!大致上的概念是我們拿 "正常" 的資料來訓練 AE ,這樣 AE 就可以很好的還原 "正常" 資料,但是今天如果餵了一筆 "異常" 的資料進去 AE 會表現得很爛,沒辦法有效還原 "異常" 資料,透過計算資料的重建誤差就可以有效的來實現異常偵測。然後你還可以整合 GAN 的概念進去搭配使用,也就是 GANomaly。 然後不得不說用 AE 來做異常檢測的效果挺好的! Jason 之前為了示範給同學看 AE 是可以拿來做異常偵測的,就拿一個國內某銀行信用卡詐欺偵測的比賽 dataset 跑了一遍,基本上就是資料整理了一下然後直接餵 AE 沒有用到其他什麼很厲害或複雜的技巧,出來的 F1 Score 就有 0.58 了,當時第一名的分數大約也 0.6多吧~ 不過 Jason 後來就懶得搞那個了,畢竟還有學校跟工作要兩頭燒,到 deadline 那天想當前幾名那分數至少也要衝到 0.7-0.8 以上吧!如果遇到變態一點的,那可能都要想辦法做到 0.85+ 吧~ ㄜ.. 好像扯了有一點遠 xD 那關於 AutoEncoder 的介紹就寫到這邊,我們下一篇再見 :")
3 評論
Jason Chen
9/19/2023 09:45:44
Sure, 記得 citation 出處就好。
回覆
許博云
1/4/2024 16:04:31
想要跟您請教圖的授權 謝謝
回覆
發表回覆。 |
Jason Chen人不光是生來就擁有一切,而是靠他從學習中得到的一切來造就自己。- 歌德 文章分類
全部
封存檔
九月 2023
|