


摘要:本文先介紹監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)的概念,然后分析自編碼器的特點和結(jié)構(gòu),并設(shè)計自編碼網(wǎng)絡(luò)的結(jié)構(gòu),最后通過MNIST數(shù)據(jù)集對自編碼網(wǎng)絡(luò)進(jìn)行訓(xùn)練和結(jié)果分析。運行結(jié)果表明,自編碼器是深度學(xué)習(xí)中的一種非常重要的無監(jiān)督學(xué)習(xí)方法,能夠從大量無標(biāo)簽的數(shù)據(jù)中自動學(xué)習(xí),得到蘊含在數(shù)據(jù)中的有效特征
關(guān)鍵詞:自編碼;深度學(xué)習(xí);無監(jiān)督學(xué)習(xí)
中圖分類號:TP183:文獻(xiàn)標(biāo)識碼:A
0 引言
深度學(xué)習(xí)領(lǐng)域主要有兩種訓(xùn)練模式:一種是監(jiān)督學(xué)習(xí),即不僅有樣本,還有對應(yīng)的標(biāo)簽;另一種是非監(jiān)督學(xué)習(xí),即只有樣本沒有標(biāo)簽。對于監(jiān)督學(xué)習(xí)的訓(xùn)練任務(wù)來說,為已有樣本準(zhǔn)備對應(yīng)的標(biāo)簽是一項很繁重的工作,因此,非監(jiān)督學(xué)習(xí)就顯得簡單的多,因為如果能讓網(wǎng)絡(luò)直接使用樣本進(jìn)行訓(xùn)練而不需要再準(zhǔn)備標(biāo)簽,是更高效的事情。
本文接下來介紹的自編碼器是深度學(xué)習(xí)中的一種非常重要的無監(jiān)督學(xué)習(xí)方法,能夠從大量無標(biāo)簽的數(shù)據(jù)中自動學(xué)習(xí),得到蘊含在數(shù)據(jù)中的有效特征[1]。
1自編碼器的特點
人平時看一幅圖像,并不是象電腦那樣去逐個去掃描,一般是看一眼就大致能得到所需要的信息,比如圖像的大小,形狀、色彩和特征等。自編碼器也有類似這樣的功能,它是非監(jiān)督學(xué)習(xí)領(lǐng)域的一種,可以自動地從無標(biāo)注的原始數(shù)據(jù)中學(xué)習(xí)到特征,是一種以重構(gòu)輸入信號為目標(biāo)的神經(jīng)網(wǎng)絡(luò),它可以得出比原始數(shù)據(jù)更好的特征描述,具有較強(qiáng)的特征學(xué)習(xí)能力,通常在深度學(xué)習(xí)中常用自編碼網(wǎng)絡(luò)生成的特征來取代原始數(shù)據(jù),以得到更好的特征提取效果。
2 自編碼器的結(jié)構(gòu)
自編碼器(Auto-Encoder,AE)網(wǎng)絡(luò)是輸入等于輸出的一種深度學(xué)習(xí)無監(jiān)督學(xué)習(xí)網(wǎng)絡(luò),最基本的模型可以是三層的神經(jīng)網(wǎng)絡(luò),即輸入層、隱藏層和輸出層。其中,輸入層的樣本在訓(xùn)練中會充當(dāng)輸出層的標(biāo)簽角色。也就是說,自編碼網(wǎng)絡(luò)是一種盡可能復(fù)現(xiàn)輸入信號的神經(jīng)網(wǎng)絡(luò)。具體的網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1所示。
上圖中,從輸入到中間狀態(tài)的過程叫做編碼,從中間狀態(tài)再回到輸出的過程叫做解碼。訓(xùn)練后的自編碼器可以在隱藏層得到代表輸入數(shù)據(jù)的特征,類似于PCA算法(主成分分析),即找到可以代表原信息的主要成分。
自編碼器要求輸出盡可能等于輸入,并且其隱藏層必須滿足一定的稀疏性,這是通過將隱藏層中的神經(jīng)元個數(shù)比前一層神經(jīng)元個數(shù)少的方式來實現(xiàn)其稀疏效果的。相當(dāng)于隱藏層對輸入進(jìn)行了壓縮,并在輸出層中進(jìn)行解壓縮。盡管整個過程中會有信息的丟失,但通過對模型的優(yōu)化能使丟失的信息盡可能減少,從而最大化地保留其主要特征。其實自編碼器和PCA比較類似,如果激活函數(shù)不使用Sigmoid,而是使用線性函數(shù),那么就成了PCA模型。
從以上分析得出,自編碼器是一種無監(jiān)督的學(xué)習(xí)算法,主要用于數(shù)據(jù)的降維或者特征的抽取,
3 自編碼器的設(shè)計思想及代碼實現(xiàn)
本節(jié)我們將通過一個提取圖片特征并利用提取的特征還原圖片的實例來說明自編碼器的應(yīng)用及代碼實現(xiàn)效果。
3.1 設(shè)計思想
自編碼器可以看作是對輸入數(shù)據(jù)的壓縮編碼,將高維的原始數(shù)據(jù)用低維的向量表示,使壓縮后的低維向量能保留輸入數(shù)據(jù)的典型特征,從而能夠較為方便地恢復(fù)原始數(shù)據(jù)[2]。這里需要注意的是,在對數(shù)據(jù)進(jìn)行編碼和解碼時,使用的是同一個參數(shù)矩陣W。衡量W的訓(xùn)練效果方法是,編碼后的數(shù)據(jù)能夠較為容易地通過解碼恢復(fù)成原始數(shù)據(jù),我們則認(rèn)為W較好的保留了數(shù)據(jù)信息。
3.2 MNIST數(shù)據(jù)集介紹
本文采用MNIST數(shù)據(jù)集是一個手寫數(shù)字的數(shù)據(jù)庫,它有60000個28*28像素的訓(xùn)練樣本集和10000個28*28像素的測試樣本集。樣本中包含了各個訓(xùn)練數(shù)據(jù)和相應(yīng)的標(biāo)簽,其中標(biāo)簽集包含了0,1,2,3,4,5,6,7,8,9一共10個分類數(shù)據(jù)[3]。
3.3 創(chuàng)建自編碼網(wǎng)絡(luò)
下面通過構(gòu)建一個六層的自編碼網(wǎng)絡(luò),將MNIST數(shù)據(jù)集中的數(shù)字特征進(jìn)行提取,再通過自編碼器把這些特征重建MNIST數(shù)據(jù)集。
(1)加載MNIST數(shù)據(jù)集,提取所有數(shù)據(jù),把數(shù)據(jù)分為訓(xùn)練和測試兩個數(shù)據(jù)集,分別是50000和10000條,不設(shè)定訓(xùn)練集和測試集標(biāo)簽。
(2)定義自編碼網(wǎng)絡(luò)結(jié)構(gòu)
本文采用一個六層的深度學(xué)習(xí)自編碼網(wǎng)絡(luò),先把28*28的原始數(shù)據(jù)轉(zhuǎn)換展平成784的一維數(shù)據(jù)作為輸入數(shù)據(jù),通過第二層降維到256,然后再降到128,最后再以同樣的方式經(jīng)過128,再經(jīng)過256,最后還原成784的圖片并輸出結(jié)果進(jìn)行對比。網(wǎng)絡(luò)結(jié)構(gòu)變化如表1所示。
(3)訓(xùn)練網(wǎng)絡(luò)
設(shè)置訓(xùn)練的參數(shù),epochs=20,batch_size=256,learnning_rate=0.01。然后定義編碼和解碼函數(shù),損失函數(shù)采用均方差,優(yōu)化器采用RMSP。編碼和解碼的部分核心代碼如下:
# 編碼
def encoder(x):
layer_1=tf.nn.sigmoid(tf.add(tf.matmul(x,weights['encoder_h1']),
biases['encoder_b1']))
layer_2=tf.nn.sigmoid(tf.add(tf.matmul(layer_1,
weights['encoder_h2']),biases['encoder_b2']))
return layer_2
# 解碼
def decoder(x):
layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']),biases['decoder_b1']))
layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1,
weights['decoder_h2']),biases['decoder_b2']))
return layer_2
#輸出的節(jié)點
encoder_out = encoder(x)
pred = decoder(encoder_out)
# 損失函數(shù)為平方差
cost = tf.reduce_mean(tf.pow(y - pred, 2))
optimizer
= tf.train.RMSPropOptimizer(learning_rate).minimize(cost)
(4)測試模型
通過MNIST數(shù)據(jù)集中的測試集測試訓(xùn)練后的模型準(zhǔn)確度,訓(xùn)練結(jié)果如下所示。
Epoch: 0001 cost= 0.191340700
Epoch: 0006 cost= 0.119541861
Epoch: 0011 cost= 0.102257006
Epoch: 0016 cost= 0.094441280
訓(xùn)練完成!
Accuracy: 1.0
從上述信息可以得到,經(jīng)過20個epochs訓(xùn)練后的效果非常好,準(zhǔn)確率達(dá)到了100%。
(5)圖像還原
接下來我們抽取部分還原圖片的信息進(jìn)行顯示,結(jié)果如圖2所示,其中第一行顯示的內(nèi)容為輸入圖片,第二行顯示的內(nèi)容為輸出圖片。
4 總結(jié)
該文首先介紹傳統(tǒng)自編碼器的特點與基本結(jié)構(gòu),分析自編碼器的一般處理框架。然后,通過MNIST數(shù)據(jù)集進(jìn)行自編碼器的編程訓(xùn)練、測試和結(jié)果輸出。從運行的結(jié)果來看,該網(wǎng)絡(luò)能比較好的進(jìn)行了圖片的還原。說明在深度學(xué)習(xí)中用自編碼網(wǎng)絡(luò)生成的特征來取代原始數(shù)據(jù),可以取得較好的特征提取效果。
參考文獻(xiàn)
[1] 袁非牛,章琳,史勁亭等.自編碼神經(jīng)網(wǎng)絡(luò)理論及應(yīng)用綜述[J],計算機(jī)學(xué)報,2019(01).
[2] 苗宇宏等.基于深度卷積自編碼網(wǎng)絡(luò)的圖像融合[J],計算機(jī)應(yīng)用研究,2020(6).
[3] 王曉華. TensorFlow 2.0卷積神經(jīng)網(wǎng)絡(luò)實戰(zhàn) [M]. 清華大學(xué)出版社出版社,2020
作者簡介:翟高粵,男,1975.11,廣西欽州,漢,碩士,副教授,研究方向:軟件理論,人工智能。