王少暉, 莫建文
(桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林 541004)
圖像描述能夠使計(jì)算機(jī)生成與圖像內(nèi)容對(duì)應(yīng)的描述性語(yǔ)句,這種計(jì)算機(jī)“視說(shuō)能力”倍受研究人員青睞。20世紀(jì)90年代就有了相關(guān)的研究[1],由于當(dāng)時(shí)計(jì)算機(jī)計(jì)算能力的局限性,該技術(shù)的研究與發(fā)展受到了限制。近年來(lái),計(jì)算機(jī)的計(jì)算能力得到飛躍的提升,圖像描述的研究得到有力支持,再次成為研究熱點(diǎn)。
隨著神經(jīng)網(wǎng)絡(luò)在許多領(lǐng)域取得卓越成果,研究人員將卷積神經(jīng)網(wǎng)絡(luò)[2](convolutional neural networks,簡(jiǎn)稱CNNs)和循環(huán)神經(jīng)網(wǎng)絡(luò)[3](recurrent neural networks,簡(jiǎn)稱RNNs)引入到圖像描述任務(wù)中,實(shí)現(xiàn)了圖像語(yǔ)義特征的提取和語(yǔ)義特征語(yǔ)句的構(gòu)建,這種基于神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)模型簡(jiǎn)稱為CNN-RNN模型。Mao等[4]最先采用CNN-RNN模型,其中CNN子網(wǎng)負(fù)責(zé)圖像的特征提取,RNN子網(wǎng)將CNN子網(wǎng)提取的特征作為輔助信息生成語(yǔ)句,值得一提的是該方法中RNN子網(wǎng)僅是傳統(tǒng)的RNN。Vinyals等[5]提出的方法中使用長(zhǎng)短期記憶網(wǎng)絡(luò)[6](long short-term memory,簡(jiǎn)稱LSTM)代替RNN來(lái)生成語(yǔ)句,訓(xùn)練網(wǎng)絡(luò)時(shí)出現(xiàn)的梯度消失和爆炸[7]狀況得到了改善。Karpathy等[8]在RNN子網(wǎng)中采用了一種改進(jìn)的LSTM,稱為雙向長(zhǎng)短期記憶網(wǎng)絡(luò)[9](bi-directional long short-term memory,簡(jiǎn)稱BLSTM),并通過(guò)該網(wǎng)絡(luò)構(gòu)建了更緊密的映射關(guān)系。Wang等[10]借助斯坦福句法分析器將語(yǔ)句分解為結(jié)構(gòu)和屬性,用2個(gè)LSTM組成RNN子網(wǎng)分別生成結(jié)構(gòu)和屬性,根據(jù)先驗(yàn)知識(shí)得到描述性語(yǔ)句。為了使圖像描述更快地生成語(yǔ)句和更高效地利用計(jì)算機(jī)資源,針對(duì)LSTM中采用3個(gè)門分別控制信息的傳遞方式過(guò)于復(fù)雜的問(wèn)題,在Vinyals等[5]的方法中引入門控循環(huán)單元,提出一種基于門控循環(huán)單元的圖像描述方法。
LSTM的內(nèi)部結(jié)構(gòu)如圖1所示。
圖1 LSTM的內(nèi)部結(jié)構(gòu)
LSTM內(nèi)部結(jié)構(gòu)有單元狀態(tài)c和狀態(tài)h兩個(gè)隱含狀態(tài),遺忘門、輸入門、輸出門3個(gè)門。LSTM的內(nèi)部運(yùn)算為3個(gè)門對(duì)信息的處理。
1)假設(shè)當(dāng)前LSTM處于t時(shí)刻且輸入為xt,前一時(shí)刻單元狀態(tài)ct-1的信息保留,遺忘門讀入當(dāng)前輸入xt和前一時(shí)刻隱含狀態(tài)ht-1,通過(guò)計(jì)算得到ft∈[0,1],ft控制單元狀態(tài)ct-1信息保留程度,即
ft=σ(Wf[ht-1,xt]+bf)。
ft=1時(shí)表示信息完全保留,ft=0時(shí)表示信息完全丟棄,σ(·)為Sigmoid激活函數(shù),保證了輸出為0~1的實(shí)數(shù)。
2)輸入xt,保留前一時(shí)刻隱含狀態(tài)ht-1的信息,輸入門讀入當(dāng)前輸入xt和前一時(shí)刻隱含狀態(tài)ht-1,通過(guò)計(jì)算得到it,it∈[0,1],it通過(guò)對(duì)輸入xt和前一時(shí)刻隱含狀態(tài)ht-1的新表示形式gt進(jìn)行操作來(lái)控制輸入xt和前一時(shí)刻隱含狀態(tài)ht-1的信息保留程度,即
it=σ(Wi[ht-1,xt]+bi),
gt=δ(Wg[ht-1,xt]+bg),
其中δ(·)為Tanh函數(shù)。
3)更新單元狀態(tài)ct-1,將遺忘門操作后的單元狀態(tài)ct-1與輸入門操作后的gt相加得到t時(shí)刻單元狀態(tài)ct,
ct=ftct-1+itgt。
4)輸出門讀入當(dāng)前輸入xt和前一時(shí)刻隱含狀態(tài)ht-1,通過(guò)計(jì)算得到ot∈[0,1],ot對(duì)經(jīng)δ轉(zhuǎn)換的當(dāng)前時(shí)刻單元狀態(tài)ct進(jìn)行保留操作,得到LSTM的t時(shí)刻輸出ht,
ot=σ(Wo[ht-1,xt]+bo),
ht=otδ(ct)。
LSTM的門結(jié)構(gòu)減緩了梯度消失或爆炸,但也增加了RNN子網(wǎng)的時(shí)間復(fù)雜度和空間復(fù)雜度。通過(guò)3個(gè)門逐一對(duì)信息的處理增加了計(jì)算量,各自的權(quán)重和偏置需要占用更多的計(jì)算機(jī)資源。
門控循環(huán)單元[11](gated recurrent unit,簡(jiǎn)稱GRU)的內(nèi)部結(jié)構(gòu)如圖2所示。
圖2 GRU的內(nèi)部結(jié)構(gòu)
從圖2可看出,僅需計(jì)算隱含狀態(tài)h和復(fù)位門、更新門。
1)當(dāng)t時(shí)刻的輸入xt傳入GRU時(shí),首先保留前一時(shí)刻隱含狀態(tài)ht-1轉(zhuǎn)換為候選信息前的信息,復(fù)位門讀入當(dāng)前輸入xt和前一時(shí)刻隱含狀態(tài)ht-1進(jìn)行計(jì)算得到的rt∈[0,1],rt控制前一時(shí)刻隱含狀態(tài)ht-1的信息保留程度,即
rt=σ(Wr[ht-1,xt]+br)。
zt=σ(Wz[ht-1,xt]+bz),
其中δ(·)為Tanh函數(shù)。
3)對(duì)前一時(shí)刻隱含狀態(tài)ht-1進(jìn)行更新,更新門的輸出zt減1后,將前一時(shí)刻隱含狀態(tài)ht-1控制后的結(jié)果與更新門保留操作后的候選信息ht相加,得到GRU的t時(shí)刻輸出ht,
循環(huán)神經(jīng)網(wǎng)絡(luò)中,運(yùn)算量主要集中在各個(gè)門權(quán)重矩陣與輸入的乘法上,因此在計(jì)算時(shí)間復(fù)雜度時(shí)將門的運(yùn)算量記為N,則LSTM的時(shí)間復(fù)雜度為4N,GRU的時(shí)間復(fù)雜度為3N。占用存儲(chǔ)空間的參數(shù)主要是由隱含狀態(tài)和門的權(quán)重、偏置組成,隱含狀態(tài)參數(shù)個(gè)數(shù)與門總的參數(shù)個(gè)數(shù)相近,因此在計(jì)算空間復(fù)雜度時(shí)將隱含狀態(tài)和門的空間復(fù)雜度記為S,則LSTM的空間復(fù)雜度為5S,GRU的時(shí)間復(fù)雜度為3S。
在LSTM與GRU的內(nèi)部結(jié)構(gòu)、運(yùn)算過(guò)程分析和復(fù)雜度比較中,顯然GRU的內(nèi)部結(jié)構(gòu)更為簡(jiǎn)潔,運(yùn)算過(guò)程更為高效,復(fù)雜度更有優(yōu)勢(shì),因此GRU可以有效地優(yōu)化內(nèi)部運(yùn)算過(guò)程,減少RNN子網(wǎng)的網(wǎng)絡(luò)參數(shù)。通常,網(wǎng)絡(luò)在運(yùn)行時(shí)需要將參數(shù)加載到內(nèi)存中,因此減少參數(shù)個(gè)數(shù)會(huì)使網(wǎng)絡(luò)占用的內(nèi)存相應(yīng)減少??紤]到GRU的這些優(yōu)點(diǎn),引入GRU作為RNN子網(wǎng)的循環(huán)神經(jīng)網(wǎng)絡(luò),通過(guò)優(yōu)化RNN子網(wǎng)來(lái)提高網(wǎng)絡(luò)的實(shí)時(shí)性,減少網(wǎng)絡(luò)消耗的計(jì)算機(jī)資源。為了突顯方法的有效性,在Vinyals等[5]的方法基礎(chǔ)上進(jìn)行改進(jìn),設(shè)計(jì)了基于門控循環(huán)單元的圖像描述網(wǎng)絡(luò)。
基于門控循環(huán)單元的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。CNN子網(wǎng)與Vinyals等[5]的方法相同,使用的是Google研究團(tuán)隊(duì)提出的Inception v3,而RNN子網(wǎng)與Vinyals等[5]的方法不同,使用的是GRU這種循環(huán)神經(jīng)網(wǎng)絡(luò)。
圖3 基于門控循環(huán)單元的網(wǎng)絡(luò)結(jié)構(gòu)
網(wǎng)絡(luò)的運(yùn)算過(guò)程分為2步:
1)CNN子網(wǎng)將待描述的圖像I經(jīng)前向傳播生成圖像語(yǔ)義特征向量Ie。
Ie=CNN(I),h0=GRU(Ie,0),
其中:I為輸入圖像;CNN(·)為CNN的前向傳播計(jì)算;Ie為輸入圖像I經(jīng)CNN前向傳播計(jì)算后生成的圖像語(yǔ)義特征向量;GRU(·)為GRU的前向傳播計(jì)算;h0為0時(shí)刻隱含狀態(tài);E為詞嵌入矩陣;W、b分別為輸出層的權(quán)重、偏置;t=1,2,…,n。
網(wǎng)絡(luò)訓(xùn)練時(shí),CNN子網(wǎng)將圖像作為輸入樣本,將圖像對(duì)應(yīng)的語(yǔ)句標(biāo)簽P作為監(jiān)督信號(hào),則損失函數(shù)為
網(wǎng)絡(luò)驗(yàn)證時(shí),采用主流的MSCOCO數(shù)據(jù)集進(jìn)行網(wǎng)絡(luò)訓(xùn)練和測(cè)試[12]。網(wǎng)絡(luò)性能的衡量采用BLEU、METEOR、ROUGE和CIDEr這4種評(píng)估方式,其中BLEU由B@1、B@2、B@3和B@4組成。
為了更好地比較性能,采用與NIC[5]相同的訓(xùn)練方式和超參數(shù)設(shè)置。訓(xùn)練完成后,生成的示例如圖4所示。從圖4可看出,本方法生成的描述性語(yǔ)句能夠簡(jiǎn)潔地反映出圖像內(nèi)容。
圖4 本方法生成的示例
客觀性能評(píng)估方面,將本方法(inception v3+GRU)與Deep VS、m-RNN、NIC(inception v3+LSTM)在MSCOCO測(cè)試集上進(jìn)行比較,得到性能評(píng)價(jià)如表1所示。
表1 4種方法在MSCOCO數(shù)據(jù)集上的性能評(píng)價(jià)
從表1可看出,本方法在7種評(píng)估方式中的評(píng)分比Deep VS、m-RNN有明顯優(yōu)勢(shì);與NIC(改進(jìn)前的方法)在小數(shù)點(diǎn)后一位依然保持一致,因此這2種方法整體生成的語(yǔ)句質(zhì)量相差甚微,實(shí)際上,在訓(xùn)練時(shí)這2種方法的收斂情況并無(wú)顯著區(qū)別,具體收斂情況如圖5所示。
圖5 2種方法的收斂情況
從圖5可看出,在10×105次迭代中2種方法得到的曲線基本重合,即收斂情況相當(dāng),本方法與NIC[5]方法在生成語(yǔ)句的整體質(zhì)量及其收斂情況無(wú)法分出高低,但在生成語(yǔ)句時(shí)消耗的時(shí)間以及占用的計(jì)算機(jī)資源存在明顯差異,本方法中RNN子網(wǎng)生成語(yǔ)句時(shí)消耗的時(shí)間和占用的內(nèi)存均少于NIC方法。2種方法在不同模式下RNN子網(wǎng)生成語(yǔ)句消耗的時(shí)間如圖6所示。
圖6 2種方法中RNN子網(wǎng)消耗的時(shí)間
從圖6可看出,2種方法都遠(yuǎn)遠(yuǎn)超過(guò)了各自CPU模式所消耗的時(shí)間,本方法無(wú)論在CPU模式下還是GPU模式下RNN子網(wǎng)生成語(yǔ)句消耗的時(shí)間都更少。2種方法RNN子網(wǎng)生成語(yǔ)句的平均時(shí)間和參數(shù)個(gè)數(shù)如表2所示。
表2 2種方法RNN子網(wǎng)生成語(yǔ)句的平均時(shí)間和參數(shù)個(gè)數(shù)
從表2可看出,CPU模式下,本方法RNN子網(wǎng)生成語(yǔ)句的平均時(shí)間比NIC方法減少了0.03 s,占NIC方法平均時(shí)間的3.15%;GPU模式下,本方法RNN子網(wǎng)生成語(yǔ)句的平均時(shí)間比NIC方法減少了0.01 s,占NIC方法平均時(shí)間的2.5%;參數(shù)個(gè)數(shù)方面,本方法減少了25%,通過(guò)參數(shù)個(gè)數(shù)的大幅度減少,使得網(wǎng)絡(luò)運(yùn)行時(shí)占用的內(nèi)存相應(yīng)地減少。
將門控循環(huán)單元引入圖像描述任務(wù)中,提出了一種基于門控循環(huán)單元的圖像描述方法。該方法有效地解決了RNN子網(wǎng)生成語(yǔ)句時(shí)消耗時(shí)間較長(zhǎng)和網(wǎng)絡(luò)運(yùn)行時(shí)占用的內(nèi)存較大的問(wèn)題。在生成語(yǔ)句的性能評(píng)估中,本方法生成的語(yǔ)句質(zhì)量仍然保持原方法的水平,且生成語(yǔ)句消耗的時(shí)間顯著減少,其中CPU模式下僅需0.92 s,GPU模式下僅需0.39 s;同時(shí),通過(guò)減少RNN子網(wǎng)大約77萬(wàn)個(gè)參數(shù)的方式,使得網(wǎng)絡(luò)運(yùn)行時(shí)占用的內(nèi)存更小。