嚴曉明
1(福建師范大學 數學與信息學院,福州 350117)
2(數字福建環境監測物聯網實驗室,福州 350117)
變分自編碼器Variational AutoEncoder (VAE)[1]通過編碼器部分學習樣本集分布的期望和方差,提取樣本的統計學特征;通過生成器部分還原樣本,并且能生成與原樣本類似的新樣本.和自編碼器AutoEncoder對比,VAE 提取出的特征反映了原始數據集每個樣本的高斯分布特性,隱變量從單一的向量形式變成了高斯分布的期望和方差,從不易解讀的數值變成用高斯分布的形式描述.
在無監督學習的領域,近年來國內外學者對變分自編碼器改進和應用進行了大量研究:Fabiu 將VAE和RNN 模型結合,提出了變分循環自動編碼器VRAE,用于提取時間序列的概率特征,提高RNN 的訓練效率[2];鄭欣悅等人用VAE 提取出的特征再結合注意力機制模型,用于小樣本圖像的分類,得到了更好的準確率[3];曾旭禹等人用VAE 提取數據集的分布特征,再結合概率矩陣分解方法增加推薦系統中不同物品的評分數據,增加了推薦精度[4];Xie 等人提出的Deep Embedded Clustering (DEC)[5]通過收斂樣本集基于質心的soft assignment 和輔助目標分布的KL 距離來實現聚類,在MNIST 數據集上的聚類準確率達到了84.3%.DEC 的聚類準確率較高,但由于用到了堆疊自編碼器來進行特征表示,缺少生成能力,不能生成新樣本.
這些對變分自編碼器的改進和應用都直接利用隱變量進行后續的學習,這對隱變量是否能最大程度地提取到數據集的特征就顯得十分重要.傳統變分自編碼器將樣本數據直接作為輸入,對于非圖像的樣本,這樣做直截了當,而對于圖像數據來說,樣本所表達信息的結構比較復雜,如果直接將圖像樣本展平后作為輸入數據,VAE 中全連接結構不能完全解讀圖像所表達的信息,得到的隱變量就需要更多的全連接層去學習圖像樣本,在數值上也會出現一定程度的偏差.本文提出了一種用卷積結構處理樣本集,再由變分自編碼器實現聚類的方法.由于卷積層中的卷積核對圖像數據中的線條,邊緣,形狀等特征進行提取,降低了VAE 編碼器理解圖像的難度.實驗結果表明,用VAE 聚類時采用本文卷積優化后的圖像樣本,和原始樣本直接輸入比較,聚類準確率提高20%左右,VAE 中解碼器生成的樣本更加穩定,生成樣本的質量也得到較大的提升.
變分自編碼器的損失函數由用來還原樣本的重構損失以及保持樣本多樣性的KL 散度損失兩部分組成.對于原始樣本集X=VAE通過最小化重構損失使得生成的樣本集接近原始樣本集,這和自編碼器還原樣本的方法是類似的.Kingma在文獻[1]中給出了公式:


當從隱層所表示的正態分布中采樣時,由于方差的存在,使得每次采樣的結果并不總是一個確定的值,這使得VAE 有了生成能力.隱層特征中的方差不為0,那么每次從隱特征所表示的分布中采樣到的結果不都是期望,間接確保了生成器的生成能力.Kingma 在文獻[1]中指出,最小化KL 散度損失kl_loss使得編碼器得到的正態分布接近先驗的標準正態分布,即:

變分自編碼器實現聚類操作時在損失函數中加入類別損失category_loss并進行最小化.首先要根據數據集的類別總數設置類別集合Y={y1,y2,···,yk}.這里把類別值看成是分布p(yi),在VAE 模型結構中,增加一個類別編碼器q(yi|xi),類別編碼器是一個從原始樣本集的每個樣本中得到該樣本類別的神經網絡,把類別編碼器擬合出的條件概率分布q(yj|xj)和 分布p(yi)之間求出它們的KL散度:

由蒙特卡洛模擬法,可得:

其中,yj~q(yj|xj).
最后可以得出類別損失函數為:

在式(6)中,p(yj)是原始樣本集中類別的先驗分布,由于類別總數是一個確定值,可以將其看成是均勻分布,則式(6)的后半部分的值為一個常數.最后的類別損失函數可以簡化成:

樣本集為圖像時,傳統的VAE 將樣本展平成一維數組,作為輸入數據.展平操作后,樣本中鄰近像素點點之間的順序被重新排列,導致這些點之間原本存在的信息被打亂,對后續的學習不利.本文在VAE 的編碼器前加入多個卷積網絡,對圖像樣本先進行卷積操作,將卷積的結果作為編碼器的輸入,同時在解碼器后加入相應的反卷積操作,還原成圖像.
在圖像處理領域,卷積操作應用廣泛,在很多深度學習模型[6–8]中用到了卷積操作,通過不同的卷積核對圖像中的邊緣,形狀等信息進行處理,取得了不錯的效果.在傳統的VAE 前加入多個卷積網絡,用不同的卷積核對圖像中的特征進行預處理后,再作為VAE 的輸入,與采用直接將圖像作為輸入數據比較,卷積后的圖像數據中包含了更多隱藏在圖像中的不易識別到的信息,有利于編碼器對圖像分布特征的提取.本文卷積優化的VAE 聚類模型如圖1所示.

圖1 帶卷積優化的VAE 聚類模型
圖1中實線矩形表示數據,矩形的高度表示了數據維度的大小,虛線矩形為網絡模型.Con_Layer1 是一個卷積層,包括一個卷積層,一個激活層和一個池化層,輸入數據為原始的樣本;卷積層Con_Layer2 的輸入數據為Con_Layer1 的輸出結果,和Con_Layer1 不同的是,這一層的卷積核的大小和數量發生了改變.最后將兩個卷積層的結果進行拼接,作為VAE 編碼器的輸入數據,用不同的卷積核來分析樣本圖像,能最大限度地將圖像數據中的特征加以描述,卷積核參數共享也能大大降低卷積網絡需要優化的參數數量.當數據集中樣本圖像長寬較大或通道數較多時,還可以把這兩個卷積層變成多層的卷積網絡,卷積核參數,激活函數和池化參數也可以適當調整.
圖1中的中間數據表示解碼器得到的數據,其維度和拼接后數據相同,按Con_Layer1 卷積網絡所得到的維度截取后,作為與Con_Layer1 對應的反卷積層TranCon_Layer1 的輸入數據,還原生成樣本.
圖1中類別編碼器是一個多層神經網絡,最后一層用Softmax 多分類器求得每個樣本的類別,類別總數為原始樣本集中的樣本總類別數.求得的類別根據公式7 計算類別損失,加入到損失函數中,參與總損失的梯度優化,不參與隱層的采樣.
本文提出的卷積優化的變分自編碼器聚類算法步驟如算法1.

算法1.卷積優化的變分自編碼器聚類算法1)計算數據集的多卷積層拼接數據.2)構造全連接網絡,根據公式7 求得樣本的類別損失.x(i)μ(i)logσ2(i)category_loss 3)構造兩個全連接網絡,擬合樣本 所屬高斯分布的均值 和方差.kl_loss 4)根據式(3)求.5)從3)得到的高斯分布中采樣,構造全連接網絡根據式(2)計算.lossloss reconstruction_loss 6)令總損失 為2),4),5)步中3 個損失之和,應用梯度下降最小化.7)返回2),直到達到指定的迭代次數.8)通過反卷積操作得到指定的生成樣本,并計算聚類準確率.
本文選取手寫數字數據集MNIST[9]和服飾圖像數據集Fashion_MNIST[10]展開實驗.MNIST 數據集包含10 個類別的手寫數字圖像;Fashion_MNIST 數據集中樣本總類別數也為10,包含了外套,包,短靴,牛仔褲等不同服飾,與MNIST 數據集中的手寫數字比較,Fashion_MNIST 數據集中的服飾有著更復雜的描述對象,也包含了更多形狀,邊緣等信息.兩個數據集的圖像的大小和樣本數都相同,分別為28×28 和70 000 個,適合作為驗證本文算法使用.實驗環境的計算機配置為:Intel i7 CPU,8 GB 內存,Windows 10 操作系統,語言環境為Python.
本文實驗中,將隱層的期望和方差的維數設為可調的參數s,這兩個向量的維度相同,測試期望和方差的維數大小對聚類正確率以及生成樣本質量的影響.將Con_Layer1 和Con_Layer2 都設置為可調卷積層數的卷積網絡,層數由參數n指定,卷積網絡Con_Layer1中所有卷積層的其他參數均相同:卷積核16 個,大小為3×3,步長為1,采用零填充的方法,激活函數為ReLU,采用2×2 的最大池化;卷積網絡Con_Layer2 的卷積核調整為32 個,大小為5×5,其它的參數都和卷積網絡Con_Layer1 相同.出于代碼實現上的考慮,通過對層數n值的改變,能方便地實現卷積網絡中卷積層數的變化而其它的參數不作修改,這樣的實現方法在VGG16 模型中取得了不錯的表現.由于公式3 在計算kl_loss時包含有方差的對數形式,實驗中隱層擬合的正態分布的方差更換為方差的對數形式,由于對數函數值存在負數,編碼器的全連接網絡沒有加上激活函數,層數設為1.本實驗中為了驗證編碼器全連接層神經元總數對實驗效果的影響,將其設為可調的參數m.兩個數據集中的70 000 個樣本,訓練集均設為60 000 個樣本,其余的樣本作為測試集.實驗中迭代次數均設為50.實驗結果如表1所示.

表1 實驗結果
表1中編碼器全連接層中神經元總數m和卷積網絡中卷積層的層數n僅列出最好情況下的取值.從表1中可以看出,對于MNIST 數據集,隨著隱層變量維數的增加,達到最佳效果的卷積網絡中的卷積層數也隨之變少,這是由于隨著正態分布維數的增加,編碼器能更好地擬合樣本的分布特征,此時卷積網絡可以用較少的層數對圖像進行卷積操作;與此同時,由于拼接后的輸入數據將原始樣本中的信息充分地展現,編碼器中的全連接層要用更多的神經元個數進行擬合,最后得到的聚類準確率也會上升.當隱層變量維數為50,卷積網絡中卷積層的層數為1,編碼器神經元個數在512 時,VAE 的聚類正確率就達到峰值94%左右,較文獻[6]中DEC 算法的84.3%的聚類正確率有較大的提升;隱層維數大于60 后,則出現了過擬合,聚類正確率開始下降.
傳統的變分自編碼器對MNIST 數據集的聚類實驗中,在隱層維數為10,編碼器神經元總數為100 時就達到了聚類準確率為75%的峰值.對比這個結果,本文提出的經過卷積優化的變分自編碼器方法用多個卷積網絡對圖像樣本的卷積操作后再進行拼接,能在最大程度上將圖像中的邊緣及形狀等信息通過不同卷積核進行提取,增大了輸入數據的維度,比原始樣本展平的方式更適合于自編碼器的學習,聚類準確率得到了較大程度的提高,效果明顯.同時隨著拼接后輸入數據維度的增大,式(2)計算所有樣本各個維度值的均方誤差之和也增大,在表1中損失函數的結果值隨之增加.
Fashion_MNIST 和MNIST 的圖像有著同樣的長寬值,但是圖像中的服飾比手寫數字的面積大,即樣本中的非零元的個數多于MNIST,導致了當實驗中設置了相同參數的情況下,其總損失值更大,這也是該數據集的聚類準確率小于MNIST 數據集的主要原因.卷積網絡對該數據集中圖像樣本的處理需要更多的卷積層數,在實驗中,隱層變量維度為60,兩個卷積網絡的卷積層數為5,編碼器的神經元總數為512 時,獲得了最好的聚類正確率68%,隨后也出現了過擬合的情況.傳統的變分自編碼器對Fashion_MNIST 數據集的聚類實驗中,在隱層維數為25,編碼器神經元總數為200 時就達到了聚類準確率為55% 的峰值,在服飾數據集上,本文方法也得到了更好的聚類準確率.
對比兩個數據集的實驗,取得最好結果時VAE 隱層維度都在50 至60 之間,從表1中也可以看到對Fashion_MNIST 數據集達到最佳效果的隱層維度比MNIST 數據集多了10 維.多元高斯分布能描述更復雜樣本分布,但是隱層維度不能通過無限增大的方式來取得更好的分布結果,這是由于高斯分布的維度每增加一維,分布的高度就為原分布高度的當隱層維度增大到一定數值時,高斯分布的效果和均勻分布接近,已經失去了隱層變量的意義.也就是說當隱層維度越來越大時,隱層所表示的分布的高度更趨于0,由于方差越來越小,VAE 失去了生成能力.
不同卷積核的兩個卷積網絡對輸入數據的處理不僅使得聚類準確率得到明顯的提升,同時也提高了變分自編碼器生成樣本的多樣性.圖2是Fashion_MNIST數據集在隱層維數為60,卷積網絡的層數為5 時,本文方法與傳統的變分自編碼器對于包(Bag)這個類別在樣本多樣性上的對比,圖3和圖4是相同參數下的短袖(T-shirt)長靴(Ankle boot)的對比,這3 個圖中左邊均為傳統的變分編碼器的結果,右邊為本文改進VAE在指定參數下的結果.
圖2中傳統的VAE 生成樣本中的包基本維持了四邊形的線條,在包的大小,四邊形的兩側稍有變化;而本文改進的VAE 方法中的包變化樣式更豐富并且不改變包類別的特征,對包的提手部分的變化情況也多于傳統的VAE.圖3中右側樣本在短袖袖口處的變化多于左側,并且在短袖下擺的寬度以及整件短袖大小的變化優于傳統VAE 的生成樣本.從圖4中可以看出,傳統VAE 在長靴樣本的多樣性上體現在長靴的鞋跟的長短,鞋幫的粗細和鞋面的弧度上,這幾個特征在本文VAE 方法所生成的樣本中更加明顯,并且右側樣本在保持長靴類別的前提下,在鞋子的形狀和邊緣上有更多的變化.對服飾數據集的實驗中,其他類別的樣本也同樣體現了本文方法在生成樣本多樣性上的提升.

圖2 傳統VAE 與改進VAE 在包類別上多樣性對比

圖3 傳統VAE 與改進VAE 在短袖類別上多樣性對比

圖4 傳統VAE 與改進VAE 在長靴類別上多樣性對比
本文提出了用多個卷積網絡優化變分自編碼器實現聚類的方法,通過隱層變量的維數和卷積網絡層數的調整,在對MNIST 和Fashion_MNIST 數據集的實驗結果表明,該方法與傳統變分自編碼比較,聚類準確率得到了明顯提高,增加了變分自編碼器生成樣本的多樣性,生成的圖像質量更好.