這篇教程是翻譯paolo galeone寫的卷積自編碼分析教程,作者已經授權翻譯,這是原文。卷積操作符會對輸入訊號進行濾波操作,以便提取其內容的一部分。在傳統的方法中,自編碼沒有考慮到訊號可以被看做是和其他訊號的和。相反,卷積自編碼就是使用卷積操作來做訊號的疊加之和。他們對一組簡單的輸入訊號進行編碼,然後對這些訊號再進行重新建模。
在一般連續狀態,卷積被定義為兩個函式(訊號)被反轉和移位之後的乘積的積分:
作為結果,卷積操作會產生乙個新的函式(訊號)。卷積滿**換操作,因此:
在一般的 n 維空間輸入,自編碼可以被用來訓練解碼(編碼)。實際上,自編碼通常用於對二維的,有限和離散輸入訊號進行特徵提取,比如數字影象。
在二維離散空間,卷積操作可以被定義如下:
因為影象的範圍有限,所以該公式可以變為:
其中:對於圖1所示,單個卷積核操作在輸入影象i的每個位置(i, j)進行卷積操作。
從圖2可以很容易的看出,卷積操作的結果取決於卷積核的值。根據不同的卷積核設定,每個卷積核可以用於不同的影象處理任務,比如去噪,模糊處理等等....
離散二維卷積操作有兩個附加引數:水平和垂直移動步數。它們是在執行單個卷積步驟之後,沿著影象i的各個維度跳過的畫素的數量。通常,水平和垂直移動步數是相等的,它們被標記為s。
對於乙個正方形的影象iw = ih(這是為了簡單描述,如果要擴充到一般的矩陣影象,非常方便),以步數2k+1,進行二維的離散卷積操作之後,我們可以得到如下的影象o:
到目前為止,我們已經利用了單個卷積核對影象進行灰度級(單通道)操作的情況。如果輸入影象具有多個通道,即d個通道,那麼卷積運算元沿著每乙個通道都要進行操作。
一般規則下,乙個卷積核的輸出通道數必須和輸入影象的通道數一樣。所以可以概括為,離散二維的卷積是將訊號進行堆疊處理。
長方體完全可以由三元組(w, h, d)來表示,其中:
很明顯,乙個灰度影象可以看做是深度 d = 1 的長方體,而rgb影象可以看做是深度 d = 3 的長方體。
乙個卷積核也可以看做是乙個具有深度 d 的卷積核。特別地,我們可以將影象和濾波器視為單通道影象/濾波器的集合(與順序無關)。
如果我們考慮影象的深度,那麼以前的卷積公式可以概括為:
在影象上進行卷積之後,得到的結果稱為啟用圖(activation map)。啟用圖是深度 d = 1 的長方體。
可能聽起來很奇怪,在乙個三維影象上的卷積得到的結果是乙個二維的結果。實際上,對於具有深度 d 的輸入訊號,卷積核執行精確的 d 個離散的二維卷積操作。所產生的d個二維的啟用圖,之後將這d個啟用圖進行處理,從而得到乙個二維的卷積結果。以這種方式,所得到的啟用圖 o 的每個單位 (i, j) 包含的資訊是提取該位置所有資訊的結果。
直觀地來說,可以將該操作認為是將輸入的rgb通道轉換成乙個單通道進行輸出。
卷積自編碼(cae)從不同的角度來定義濾波器的任務:而不像平時我們遇到的那些工程上的卷積濾波器,它們的作用就是讓模型學習到最佳濾波器,從而使得重構誤差最小。然後,這些訓練好的濾波器就可以被使用到任何其他的計算機視覺任務。
目前利用卷積核進行無監督學習的最先進工具就是卷積自編碼(cae)。一旦這些卷積核被訓練學習之後,它們將被應用到任何的輸入資料去進行特徵提取。然後,這些特徵就可以被用於任何的任務,例如分類問題。
cae是卷積神經網路(cnn)的一種型別:cnn和cae之間最主要的區別在於前者是進行端到端的學習濾波器,並且將提取的特徵進行組合從而用來分類。事實上,cnn通常被稱為是一種監督學習。相反,後者通常被用來訓練從輸入資料中提取特徵,從而重構輸入資料。
由於它們的卷積性質,不管輸入資料的維度是多大,cae產生的啟用圖的數量都是相同的。因此,cae完全忽略了二維影象本身的結構,而是作為了乙個通用特徵提取器。事實上,在自編碼(ae)中,影象必須被展開成單個向量,並且網路對輸入向量的神經元個數有一定的約束。換句話說,ae迫使每個特徵是全域性的(即,跨越整個視野),所以它的引數中是存在冗餘的,而cae不是。
很容易理解,單個卷積濾波器不能學會提取影象的各種各樣的模式。為此,每個卷積層是由 n 個(超引數)卷積核組成的,每個卷積核的深度是 d ,其中 d 表示輸入資料的通道數。
因此,每個具有深度 d 的輸入資料
和一組 n 個卷積核
之間進行的卷積操作,從而產生一組 n 個啟用圖,或者等價的特徵圖。當然,最後產生的特徵圖的通道數還是 n ,具體如下:
為了提高網路的泛化能力,每個卷積都會被非線性函式 a 啟用,以這種方式訓練,得到的網路可以學習輸入資料的一些非線性特性:
其中,bm^(1) 表示第 m 個特徵圖的偏差,引入術語 zm 是對 ae 中保持相同的變數名稱。
所產生的啟用圖是對輸入資料 i 進行的乙個重新編碼,使其可以在低維空間表示。重構好之後的資料維度並不是原來 o 的維度,但是引數的數量是從om 中學習來的,換句話說,這些引數就是 cae 需要學習的引數。
由於我們的目標是從所產生的特徵圖中對輸入資料 i 進行重構。因此我們需要乙個解碼操作。卷積自編碼是乙個完全的卷積網路,因此我們的解碼操作可以進行再次卷積。
細心的讀者可能認為卷積操作減少了輸出的空間範圍,因此不可能使用卷積來重建具有相同輸入空間範圍的資訊。
這是完全正確的,但是我們可以使用輸入填充來解決這個問題。如果我們用零向輸入資料 i 進行填充,則經過第乙個卷積之後的結果具有比輸入資料 i 大的空間範圍,經過第二個卷積之後就可以產生具有和原始空間 i 相同的空間範圍了。
因此,我們想要輸入填充的零是這樣的:
從公式1可以看出,我們想要對 i 填充 2(2k+1)-2 個零(每乙個邊填充 (2k+1) -1 個),以這種方式,卷積編碼將產生資料的寬度和高度等於:
所產生的 n 個特徵圖 zm = 1, ..., n 將被用作解碼器的輸入,以便從該壓縮的資訊中重建輸入影象 i 。
事實上,解碼卷積的超引數是由編碼框架確定的:
因此,重構的影象 i_ 是特徵圖的維度 z = ^n 和該卷積濾波器 f(2) 之間的進行卷積的結果。
根據前面計算的零進行填充,那麼導致解碼卷積之後產生的維度是:
我們的目標是使得輸入的維度等於輸出的維度,然後可以用任何的損失函式來進行計算,例如 mse:
自編碼與變分自編碼
神經網路的本質是資訊壓縮特徵提取,神經網路公式h w x 做內積,所以神經網路是個相關性判斷 研究ai頂級公司研究損失。無監督學習是在沒有資料標籤的情況下,尋找資料特徵。但是無監督學習的標籤是自身,自監督學習,是無監督學習的一種特殊情況,他是將資料切分n塊,然後用各個塊來 其他塊。弱監督學習,是將無...
tensorflow實現卷積與反卷積自編碼框架
從dcgan中了解到了反卷積的操作,所以我本來打算能通過卷積操作作為編碼器將一幀影象轉換為乙個20維的向量,而後再通過反卷積實現解碼功能從而達到影象恢復效果,先把程式貼上,後續有空再調整網路層數和引數吧 from tensorflow.examples.tutorials.mnist import ...
自編碼演算法
自編碼神經網路是一種無監督學習演算法,它使用了反向傳播演算法,並讓目標值等於輸入值,它是一種盡可能復現輸入訊號的神經網路。為了實現這種復現,自動編碼器就必須捕捉可以代表輸入資料的最重要的因素,就像pca那樣,找到可以代表原資訊的主要成分。一 autoencoder演算法的思路 1 給定無標籤資料,用...