張宇豪,關(guān) 昕
(華北計(jì)算技術(shù)研究所,北京 100083)
深度神經(jīng)網(wǎng)絡(luò)在圖像處理[1]、語(yǔ)音識(shí)別[2]、自然語(yǔ)言處理[3]、醫(yī)療診斷[4]等領(lǐng)域取得了巨大成功。但其也存在一些安全隱患,在安全性要求高的系統(tǒng)中,神經(jīng)網(wǎng)絡(luò)的微小錯(cuò)誤可能造成嚴(yán)重后果,因此對(duì)其進(jìn)行測(cè)試顯得尤為重要。
神經(jīng)網(wǎng)絡(luò)是由數(shù)據(jù)驅(qū)動(dòng),大多數(shù)傳統(tǒng)的軟件測(cè)試方法不適用于神經(jīng)網(wǎng)絡(luò)測(cè)試,需要根據(jù)神經(jīng)網(wǎng)絡(luò)特性研究新的測(cè)試方法。目前針對(duì)神經(jīng)網(wǎng)絡(luò)測(cè)試的研究已經(jīng)取得一定進(jìn)展,相關(guān)學(xué)者提出了面向神經(jīng)網(wǎng)絡(luò)的覆蓋準(zhǔn)則以及對(duì)應(yīng)的測(cè)試方法。這些方法通過(guò)最大化神經(jīng)元覆蓋率,找到最佳測(cè)試樣本,進(jìn)而發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)的錯(cuò)誤行為。文獻(xiàn)[5]提出了一個(gè)面向深度學(xué)習(xí)系統(tǒng)的白盒測(cè)試框架DeepXplore。文獻(xiàn)[6]提出了第一個(gè)差異模糊測(cè)試框架DLFuzz,通過(guò)最大化神經(jīng)元覆蓋率,并生成對(duì)抗性樣本,發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)中的異常行為。文獻(xiàn)[7]提出了第一個(gè)用于神經(jīng)網(wǎng)絡(luò)的模糊測(cè)試框架TensorFuzz,可以發(fā)現(xiàn)模型中的數(shù)值型錯(cuò)誤。文獻(xiàn)[8]提出了基于覆蓋的模糊測(cè)試框架DeepHunter,用于檢測(cè)神經(jīng)網(wǎng)絡(luò)的缺陷。覆蓋度量指標(biāo)是用于衡量測(cè)試充分性的準(zhǔn)則。傳統(tǒng)軟件測(cè)試在代碼級(jí)別[9]和模型級(jí)別[10]分別定義了許多覆蓋度量指標(biāo)。而神經(jīng)網(wǎng)絡(luò)的特殊結(jié)構(gòu)導(dǎo)致傳統(tǒng)覆蓋指標(biāo)無(wú)法應(yīng)用于神經(jīng)網(wǎng)絡(luò)測(cè)試中[11],如語(yǔ)句覆蓋在測(cè)試中可以很容易達(dá)到100%。根據(jù)神經(jīng)網(wǎng)絡(luò)的內(nèi)部邏輯,文獻(xiàn)[5]首次提出了神經(jīng)元覆蓋作為覆蓋指標(biāo),它指的是神經(jīng)網(wǎng)絡(luò)中激活神經(jīng)元的比例。文獻(xiàn)[12]借鑒 MC/DC標(biāo)準(zhǔn)的思想提出了基于符號(hào)變化、值變化的覆蓋指標(biāo)。文獻(xiàn)[13]在神經(jīng)元覆蓋的基礎(chǔ)上提出了一組多粒度覆蓋指標(biāo)。文獻(xiàn)[7]使用神經(jīng)元的激活值構(gòu)成的激活向量作為覆蓋指標(biāo)。這些指標(biāo)從不同角度反應(yīng)了神經(jīng)網(wǎng)絡(luò)的內(nèi)部狀態(tài)。
由于模糊測(cè)試具有自動(dòng)化程度高,不依賴程序源碼等特點(diǎn),模糊測(cè)試是目前測(cè)試神經(jīng)網(wǎng)絡(luò)的重要方法之一。但是在現(xiàn)有神經(jīng)網(wǎng)絡(luò)模糊測(cè)試方法中,對(duì)測(cè)試樣本進(jìn)行變異往往采用隨機(jī)變異策略,導(dǎo)致生成的測(cè)試樣本質(zhì)量不高,很難實(shí)現(xiàn)高覆蓋率。針對(duì)這一問(wèn)題,本文使用強(qiáng)化學(xué)習(xí)指導(dǎo)變異策略選擇過(guò)程,通過(guò)設(shè)計(jì)合理的獎(jiǎng)勵(lì)規(guī)則,使得模糊器在進(jìn)行樣本變異時(shí),向神經(jīng)元覆蓋率最大化的方向進(jìn)行,找到覆蓋率更高的變異策略。并以此設(shè)計(jì)了一種面向神經(jīng)網(wǎng)絡(luò)系統(tǒng)的模糊測(cè)試方法。
模糊測(cè)試是軟件測(cè)試中最常用的方法之一。其核心思想是通過(guò)生成隨機(jī)、不合法的測(cè)試用例,在有限的時(shí)間內(nèi)盡可能多地覆蓋目標(biāo)程序的代碼路徑或執(zhí)行路徑,發(fā)現(xiàn)程序中的潛在漏洞。典型的模糊測(cè)試過(guò)程如圖1所示,從種子庫(kù)中根據(jù)優(yōu)先級(jí)選擇一個(gè)種子輸入,通過(guò)變異選擇器選擇變異策略,由變異器執(zhí)行變異生成變異樣本。在此之后,使用變異樣本運(yùn)行待測(cè)試程序。如果變異樣本產(chǎn)生新覆蓋則將變異樣本保存在最佳測(cè)試樣本池中。同時(shí),它還可以跟蹤執(zhí)行的細(xì)節(jié),例如執(zhí)行路徑和異常報(bào)告。
圖1 基于覆蓋的模糊測(cè)試過(guò)程
目前,模糊測(cè)試技術(shù)在人工智能領(lǐng)域得到了廣泛研究。通過(guò)對(duì)模糊測(cè)試[15]進(jìn)行適應(yīng)性改造,可以將其應(yīng)用于神經(jīng)網(wǎng)絡(luò)測(cè)試中,將目標(biāo)傳統(tǒng)程序映射為神經(jīng)網(wǎng)絡(luò)、模糊測(cè)試的種子映射神經(jīng)網(wǎng)絡(luò)的輸入、覆蓋反饋映射為神經(jīng)元覆蓋。但目前面向神經(jīng)網(wǎng)絡(luò)的模糊測(cè)試方法仍然不夠完善,制定合適的覆蓋標(biāo)準(zhǔn)和有效的變異策略仍是當(dāng)前研究重點(diǎn)。
強(qiáng)化學(xué)習(xí)[16]是一種機(jī)器學(xué)習(xí)方法,旨在讓智能體與環(huán)境進(jìn)行交互,從中學(xué)習(xí)如何采取動(dòng)作來(lái)最大化獎(jiǎng)勵(lì)。強(qiáng)化學(xué)習(xí)的基本架構(gòu)如圖2所示,由智能體、環(huán)境、動(dòng)作、獎(jiǎng)勵(lì)組成,其基本思想是,智能體從環(huán)境中感知狀態(tài),然后采取動(dòng)作來(lái)影響環(huán)境,并從環(huán)境中獲得獎(jiǎng)勵(lì)或懲罰。在不斷與環(huán)境交互的過(guò)程中,智能體通過(guò)學(xué)習(xí)來(lái)改善自己的決策策略,從而使它能夠更好地完成任務(wù)。強(qiáng)化學(xué)習(xí)技術(shù)在很多領(lǐng)域被廣泛應(yīng)用,如自動(dòng)駕駛[17]、多智能體系統(tǒng)[18]、醫(yī)療保健[19]、游戲[20]等。
圖2 強(qiáng)化學(xué)習(xí)基本架構(gòu)
馬爾可夫決策過(guò)程是描述強(qiáng)化學(xué)習(xí)問(wèn)題的數(shù)學(xué)框架,其為將模糊測(cè)試形式化為強(qiáng)化學(xué)習(xí)問(wèn)題提供了基礎(chǔ)。馬爾可夫性質(zhì)是指在一個(gè)隨機(jī)過(guò)程中,未來(lái)的狀態(tài)只依賴于當(dāng)前狀態(tài),而不受過(guò)去狀態(tài)的影響。在該過(guò)程中,智能體能夠基于此刻的狀態(tài)來(lái)選擇一個(gè)動(dòng)作執(zhí)行,并接收來(lái)自環(huán)境的反饋,如獎(jiǎng)勵(lì)和執(zhí)行動(dòng)作后的下一個(gè)時(shí)刻的狀態(tài)。智能體的主要目標(biāo)是尋找一種最優(yōu)策略,以最大化未來(lái)的期望回報(bào),即智能體希望通過(guò)選擇最佳的動(dòng)作序列來(lái)實(shí)現(xiàn)長(zhǎng)期的最大累積獎(jiǎng)勵(lì)。
在模糊測(cè)試中,每一次生成新樣本的過(guò)程就相當(dāng)于一次與環(huán)境的交互,這個(gè)過(guò)程可以看做是一個(gè)在有限狀態(tài)和動(dòng)作空間中的序列決策問(wèn)題。通過(guò)將該過(guò)程形式化為強(qiáng)化學(xué)習(xí)問(wèn)題,使得智能體能夠不斷學(xué)習(xí)并優(yōu)化它的變異選擇策略。經(jīng)過(guò)不斷地試錯(cuò)和更新,智能體可以逐步學(xué)習(xí)到一個(gè)最優(yōu)變異策略,指導(dǎo)生成更高質(zhì)量的新樣本。
將強(qiáng)化學(xué)習(xí)過(guò)程形式化為一個(gè)有限馬爾可夫決策過(guò)程,如公式(1):
MDP=(S,A,P,R)
(1)
其中:S表示一個(gè)有限狀態(tài)集、A表示一個(gè)有限動(dòng)作集、P表示智能體在狀態(tài)st下執(zhí)行動(dòng)作at后轉(zhuǎn)移到st+1的轉(zhuǎn)移概率函數(shù)、R表示在狀態(tài)st下采取行動(dòng)at的獎(jiǎng)勵(lì)。策略π是一個(gè)當(dāng)前狀態(tài)st要選擇的動(dòng)作at的映射函數(shù)。在執(zhí)行動(dòng)作后,狀態(tài)變?yōu)閟t+1,并反饋相應(yīng)的獎(jiǎng)勵(lì)rt+1。強(qiáng)化學(xué)習(xí)的目標(biāo)就是最大化累積獎(jiǎng)勵(lì)R。
在強(qiáng)化學(xué)習(xí)問(wèn)題中,狀態(tài)、動(dòng)作和獎(jiǎng)勵(lì)是3個(gè)關(guān)鍵的元素。將強(qiáng)化學(xué)習(xí)算法應(yīng)用于神經(jīng)網(wǎng)絡(luò)模糊測(cè)試中,需要將傳統(tǒng)的模糊測(cè)試過(guò)程抽象建模為強(qiáng)化學(xué)習(xí)算法可解的問(wèn)題,即從中抽取動(dòng)作、狀態(tài)和獎(jiǎng)勵(lì)3個(gè)元素[21]。以下主要介紹如何定于動(dòng)作、狀態(tài)和獎(jiǎng)勵(lì)3個(gè)元素。
2.1.1 環(huán)境狀態(tài)
在強(qiáng)化學(xué)習(xí)中,狀態(tài)表示智能體可以獲得的當(dāng)前環(huán)境的有效特征,智能體依據(jù)當(dāng)前環(huán)境狀態(tài)來(lái)智能地選擇下一步的動(dòng)作,以達(dá)到特定的目標(biāo)。而在模糊測(cè)試中,變異器以一種策略對(duì)不同的測(cè)試樣本進(jìn)行變異,從而生成具有高質(zhì)量的新樣本。所以在模糊測(cè)試中,環(huán)境狀態(tài)應(yīng)該定義為測(cè)試樣本,初始測(cè)試樣本做為初始環(huán)境狀態(tài)st,在選擇一個(gè)變異動(dòng)作a后,生成的變異樣本為新的環(huán)境狀態(tài)st+1。具體以測(cè)試樣本圖像的矩陣形式來(lái)表示對(duì)應(yīng)狀態(tài)s。
2.1.2 變異動(dòng)作
模糊測(cè)試的一個(gè)核心步驟就是對(duì)樣本進(jìn)行變異,生成能覆蓋更多路徑的新樣本。對(duì)應(yīng)到強(qiáng)化學(xué)習(xí)中,智能體選擇的動(dòng)作為變異操作,強(qiáng)化學(xué)習(xí)模型根據(jù)當(dāng)前環(huán)境和策略選擇合適的動(dòng)作。因此動(dòng)作空間由變異操作組成。通過(guò)對(duì)常用圖像變異方法進(jìn)行總結(jié),選擇如表1所示的8種方法作為變異動(dòng)作空間A,這些變異方法在計(jì)算機(jī)視覺(jué)領(lǐng)域應(yīng)用廣泛,與此同時(shí)也可以使圖像語(yǔ)義損失最小化[22]。
表1 變異動(dòng)作空間
需要強(qiáng)調(diào)的是,每次變異需要確保生成的變異樣本語(yǔ)義不發(fā)生改變,一旦變異樣本語(yǔ)義發(fā)生改變,即使產(chǎn)生了新覆蓋,也沒(méi)有任何意義。為了確保變異生成的樣本不會(huì)偏離初始樣本的語(yǔ)義,每個(gè)樣本的變異動(dòng)作只選取一次仿射變換,同時(shí)使用公式(2)約束像素變換。這種方法起到限制修改像素的數(shù)量和修改像素的絕對(duì)值的作用。如果修改的像素?cái)?shù)量非常少,則變化程度可以很高;如果修改的像素?cái)?shù)量非常多,則對(duì)應(yīng)的變化程度應(yīng)該更低[8]。
(2)
該式由L0距離和L∞距離組成,L0表示被修改的像素?cái)?shù)量,L∞表示像素修改的最大值。其中s和s′分別表示原始輸入和變異輸入,α和β分別表示修改像素?cái)?shù)量的比例和限制像素修改值比例,size(s)表示圖像i的像素?cái)?shù)。如果被修改像素的數(shù)量非常少,則假設(shè)它語(yǔ)義不發(fā)生改變,L∞的值不受限制。如果被修改的像素?cái)?shù)量非常大,則限制最大改變值為β×255。
2.1.3 獎(jiǎng)勵(lì)反饋
獎(jiǎng)勵(lì)反饋是指智能體在環(huán)境中采取特定行動(dòng)后所獲得的反饋信號(hào)。正面獎(jiǎng)勵(lì)信號(hào)通常表示智能體采取的行動(dòng)是增益行為,而負(fù)面獎(jiǎng)勵(lì)信號(hào)表示行為有害。這些獎(jiǎng)勵(lì)反饋可以直接指導(dǎo)智能體選擇行動(dòng),以此最大化未來(lái)獎(jiǎng)勵(lì),進(jìn)而幫助智能體采取最佳的行動(dòng)策略。在傳統(tǒng)的模糊測(cè)試中,通常將是否觸發(fā)異常的程序狀態(tài)來(lái)衡量測(cè)試的好壞。但觸發(fā)異常狀態(tài)往往需要大量時(shí)間,難以及時(shí)調(diào)整變異策略。為了解決該問(wèn)題,可以用覆蓋率指標(biāo)衡量測(cè)試的好壞。通常具備高覆蓋率的樣本可以充分探索神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)空間,進(jìn)而有更高的概率觸發(fā)神經(jīng)網(wǎng)絡(luò)的異常行為。在神經(jīng)網(wǎng)絡(luò)模糊測(cè)試中,將測(cè)試樣本輸入目標(biāo)網(wǎng)絡(luò)并獲取神經(jīng)元覆蓋率反饋,若覆蓋率增加,則認(rèn)為當(dāng)前樣本質(zhì)量較高,強(qiáng)化學(xué)習(xí)算法根據(jù)覆蓋率增益來(lái)更新變異策略。神經(jīng)元覆蓋率的增益作為強(qiáng)化學(xué)習(xí)的獎(jiǎng)勵(lì)反饋R計(jì)算方法,如公式(3)所示:
(3)
其中:C_current表示當(dāng)前樣本的覆蓋率,C_previous表示先前樣本的覆蓋率,C_target表示目標(biāo)覆蓋率,通常設(shè)為1。如果當(dāng)前樣本覆蓋率相比之前有所增加,則認(rèn)為該變異策略是有效的。
本文使用D3QN(Dueling Double Deep Q Network)強(qiáng)化學(xué)習(xí)算法來(lái)求解問(wèn)題。它通過(guò)借鑒Double DQN[23]和Dueling DQN[25]兩種算法的優(yōu)點(diǎn),在DQN(Deep Q-Network)算法的基礎(chǔ)上進(jìn)行改進(jìn)。它使用Double DQN算法的損失函數(shù),減少過(guò)高估計(jì)的風(fēng)險(xiǎn),提高學(xué)習(xí)的穩(wěn)定性;使用Dueling DQN 算法的網(wǎng)絡(luò)結(jié)構(gòu),加速收斂。其余流程和DQN算法一致。D3QN算法在解決本文定義的連續(xù)狀態(tài)、離散動(dòng)作的問(wèn)題時(shí),可以發(fā)揮更好的作用。
D3QN算法是一種將深度學(xué)習(xí)和Q學(xué)習(xí)算法相結(jié)合的強(qiáng)化學(xué)習(xí)方法。它使用深度神經(jīng)網(wǎng)絡(luò)擬合動(dòng)作價(jià)值函數(shù)Q(s,α;θ),從而輸出當(dāng)前狀態(tài)下每個(gè)動(dòng)作對(duì)應(yīng)的Q值。隨后使用ε-greed策略,在動(dòng)作選擇時(shí),可以以概率ε選擇一個(gè)隨機(jī)動(dòng)作,或者以1-ε的概率選擇當(dāng)前價(jià)值網(wǎng)絡(luò)計(jì)算的最大Q值對(duì)應(yīng)的動(dòng)作,如公式(4)所示。在訓(xùn)練初期,往往將ε設(shè)置為較大的值,使智能體盡可能多的進(jìn)行探索,避免陷入局部最優(yōu)解。隨著訓(xùn)練的進(jìn)行,該算法會(huì)逐漸降低ε的值,如從1逐漸減小至0,這表示當(dāng)前預(yù)測(cè)結(jié)果的可靠性大大提升。隨著這個(gè)過(guò)程不斷進(jìn)行,預(yù)測(cè)結(jié)果會(huì)逐漸收斂,形成一個(gè)最優(yōu)策略。
(4)
同時(shí)在智能體與環(huán)境的交互過(guò)程中會(huì)產(chǎn)生一系列經(jīng)驗(yàn)序列(s,α,r,s′),將其保存在經(jīng)驗(yàn)回放池中作為訓(xùn)練樣本,每次訓(xùn)練時(shí)從經(jīng)驗(yàn)回放池中隨機(jī)抽取小批量的數(shù)據(jù)進(jìn)行計(jì)算。經(jīng)驗(yàn)回放機(jī)制通過(guò)隨機(jī)抽樣歷史經(jīng)驗(yàn)數(shù)據(jù),避免使用關(guān)聯(lián)數(shù)據(jù)直接進(jìn)行訓(xùn)練,降低了訓(xùn)練樣本的相關(guān)性,提高了結(jié)果的可靠性。
D3QN對(duì)損失函數(shù)進(jìn)行了改進(jìn)。在DQN算法中對(duì)經(jīng)驗(yàn)回放池進(jìn)行隨機(jī)采樣,通過(guò)損失函數(shù)L(θ)的最小化來(lái)更新參數(shù)θ,從而逐步逼近最優(yōu)的動(dòng)作價(jià)值函數(shù)。L(θ)如式(6)所示,而DQN算法往往選取最大動(dòng)作價(jià)值來(lái)近似,這會(huì)導(dǎo)致過(guò)高估計(jì)問(wèn)題。
(5)
L(θ)=E[(y-Q(s,α,θ))2]
(6)
為了解決DQN算法的過(guò)高估計(jì)問(wèn)題。D3QN使用兩個(gè)獨(dú)立的Q網(wǎng)絡(luò):一個(gè)價(jià)值網(wǎng)絡(luò)和一個(gè)目標(biāo)網(wǎng)絡(luò)。目標(biāo)網(wǎng)絡(luò)用于輸出能夠獲得最大Q值的動(dòng)作,而價(jià)值網(wǎng)絡(luò)用于評(píng)估這個(gè)動(dòng)作的Q值,生成目標(biāo)值y′,其公式見(jiàn)式(7)。這種分離使得更新過(guò)程更加穩(wěn)定,降低了過(guò)高估計(jì)的風(fēng)險(xiǎn)。
(7)
D3QN算法還對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行優(yōu)化,提高了動(dòng)作價(jià)值函數(shù)Q(s,α;θ)的準(zhǔn)確性。其網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。相比于傳統(tǒng)結(jié)構(gòu),在該網(wǎng)絡(luò)結(jié)構(gòu)中,隱藏層后多了一個(gè)新的結(jié)構(gòu)。即狀態(tài)經(jīng)隱藏層處理后分解為兩個(gè)分支。一個(gè)用于學(xué)習(xí)狀態(tài)值函數(shù)V(s),另一個(gè)用于學(xué)習(xí)優(yōu)勢(shì)函數(shù)Ads(s,α),如式(8)所示。最后將狀態(tài)值函數(shù)V(s)和優(yōu)勢(shì)函數(shù)A(s,α)使用式(9)進(jìn)行組合以計(jì)算Q值。其中V(s)用來(lái)估計(jì)在狀態(tài)s下采取任意行動(dòng)的期望回報(bào)。A(s,α) 用來(lái)估計(jì)采取動(dòng)作α相對(duì)于其他可能動(dòng)作的優(yōu)勢(shì)。正優(yōu)勢(shì)函數(shù)的動(dòng)作通常對(duì)應(yīng)更可靠和穩(wěn)定的決策,選擇這樣的動(dòng)作有望在大多數(shù)情況下獲得正獎(jiǎng)勵(lì)反饋。提高決策的穩(wěn)定性,并加速訓(xùn)練收斂過(guò)程。
(8)
圖3 強(qiáng)化學(xué)習(xí)算法的網(wǎng)絡(luò)結(jié)構(gòu)
Q(s,α)=V(s)+Adv(s,α)
(9)
本文提出的面向神經(jīng)網(wǎng)絡(luò)的模糊測(cè)試方法的總體框架如圖4所示,分為模糊測(cè)試模塊和強(qiáng)化學(xué)習(xí)模塊。其中模糊測(cè)試模塊由初始測(cè)試樣本種子庫(kù),種子優(yōu)先級(jí)選擇,變異選擇器,覆蓋分析器組成。在測(cè)試過(guò)程中,根據(jù)種子優(yōu)先級(jí)選擇從初始測(cè)試樣本種子庫(kù)選擇合適的樣本,其次變異選擇器根據(jù)強(qiáng)化學(xué)習(xí)的訓(xùn)練策略對(duì)種子進(jìn)行變異,生成變異樣本。將變異樣本輸入神經(jīng)網(wǎng)絡(luò),統(tǒng)計(jì)每一層神經(jīng)元的輸出值來(lái)計(jì)算覆蓋率,若覆蓋率提高,則將該樣本擴(kuò)充到最佳測(cè)試用例集中。該樣本可以再次被選中進(jìn)行變異,不斷重復(fù)該過(guò)程直到滿足結(jié)束條件。在過(guò)程中最關(guān)鍵的組件是變異選擇器,通過(guò)強(qiáng)化學(xué)習(xí)算法訓(xùn)練的最佳變異策略,變異選擇器可以生成高質(zhì)量的變異樣本,為整個(gè)測(cè)試提供支撐。
圖4 整體框架
3.2.1 種子優(yōu)先級(jí)選擇
模糊測(cè)試需要從初始樣本種子庫(kù)中迭代地選擇種子,用于生成后續(xù)的測(cè)試樣本。如何選擇種子直接影響了后續(xù)樣本變異的效率。本文根據(jù)種子被選擇的次數(shù)設(shè)置種子的選擇概率,被選擇的次數(shù)越少對(duì)應(yīng)概率越高,同時(shí)當(dāng)種子被選擇的次數(shù)達(dá)到一定數(shù)量后,該種子的選擇概率將被設(shè)置成一個(gè)較小值。
該策略的基本思想是優(yōu)先選擇較少被選擇的種子。新生成的變異種子由于獲得了更高的覆蓋率,被視為高質(zhì)量種子,因此具有更高的選擇概率。同時(shí),當(dāng)某個(gè)種子被選擇的次數(shù)達(dá)到一定數(shù)量后,該種子的選擇概率會(huì)變?yōu)橐粋€(gè)固定的小概率值,防止某些種子在測(cè)試過(guò)程中反復(fù)被選中,從而浪費(fèi)資源。
3.2.2 變異選擇器
變異選擇器根據(jù)強(qiáng)化學(xué)習(xí)的最優(yōu)策略對(duì)樣本進(jìn)行變異。本文采用的變異方法分別是像素變換和仿射變換。其中像素變換包括對(duì)比度變換、亮度變換、噪聲變換、模糊變換。仿射變換包括平移變換、縮放變換、旋轉(zhuǎn)變換、反射變換。變異選擇器根據(jù)最優(yōu)變異策略可以組合這些變異方法,實(shí)現(xiàn)不同級(jí)別的變異,以產(chǎn)生更多樣化的測(cè)試樣本。
相較于傳統(tǒng)的變異選擇器的隨機(jī)變異策略,該變異選擇器加入了強(qiáng)化學(xué)習(xí)方法,利用神經(jīng)元覆蓋率的增加作為反饋信息,得到最佳變異策略。不同于傳統(tǒng)模糊器的盲目性和隨機(jī)性。通過(guò)強(qiáng)化學(xué)習(xí)算法指導(dǎo)變異選擇器可以更好地選擇種子變異方法,使變異后的種子能最大程度地增加覆蓋率或引發(fā)更多的行為錯(cuò)誤。
3.2.3 覆蓋分析器
在模糊測(cè)試中,覆蓋分析器是用來(lái)分析程序執(zhí)行過(guò)程中的覆蓋情況。通過(guò)分析覆蓋信息,可以評(píng)估測(cè)試用例的有效性和發(fā)現(xiàn)潛在問(wèn)題的能力,有助于確定測(cè)試是否足夠全面和有效。覆蓋分析器的結(jié)果可以用于指導(dǎo)進(jìn)一步的測(cè)試樣本變異策略,以增加覆蓋率。一種沒(méi)有任何覆蓋引導(dǎo)的模糊器會(huì)盲目地對(duì)種子進(jìn)行變異操作,不知道生成的測(cè)試輸入是否可用。這樣的模糊器經(jīng)常會(huì)保留那些不帶來(lái)新的有用信息的種子,顯著降低了模糊測(cè)試的有效性。本文選擇了4種不同的準(zhǔn)則作為不同的反饋。這些準(zhǔn)則可以有效表示神經(jīng)網(wǎng)絡(luò)的內(nèi)部狀態(tài)。
1)神經(jīng)元覆蓋(NC):
神經(jīng)元覆蓋[5]度量神經(jīng)網(wǎng)絡(luò)中激活神經(jīng)元的比例。神經(jīng)元覆蓋將神經(jīng)元的狀態(tài)分成激活和非激活兩部分。給定一個(gè)輸入,如果它的輸出值高于預(yù)設(shè)的閾值,神經(jīng)元就會(huì)被激活。如公式(10)所示:
(10)
2)K多段神經(jīng)元覆蓋(KMNC):
K多段神經(jīng)元覆蓋[13]度量神經(jīng)網(wǎng)絡(luò)中一組神經(jīng)元覆蓋其上下界范圍的程度。給定一個(gè)神經(jīng)元n和輸出的上下界,將上下界劃分為k個(gè)部分。如果神經(jīng)元輸出在某一段,則認(rèn)為該段被覆蓋。如公式(11)所示:
(11)
3)神經(jīng)元邊界覆蓋(NBC):
神經(jīng)元邊界覆蓋[13]度量神經(jīng)元主功能范圍之外的邊緣區(qū)域被覆蓋的程度。給定一個(gè)輸入x,若φ(x,n)值超過(guò)上下邊界,則表明邊緣區(qū)域被覆蓋。其上下邊界公式為:
UpperCornerNeuron=
{n∈N|?x∈T:φ(x,n)∈(highn,+∞)}
(12)
LowerCornerNeuron=
{n∈N|?X∈T:φ(x,n)∈(-∞,lown)}
(13)
神經(jīng)元邊界覆蓋公式為:
NBCov(T)=
(14)
4)強(qiáng)神經(jīng)元覆蓋(SNAC):
強(qiáng)神經(jīng)元覆蓋[13]度量神經(jīng)元的上界邊角區(qū)域的覆蓋程度。
(15)
強(qiáng)化學(xué)習(xí)模塊基于D3QN算法進(jìn)行訓(xùn)練學(xué)習(xí)最佳變異策略,指導(dǎo)變異測(cè)試樣本生成。該模塊根據(jù)輸入樣本選擇變異操作,生成新樣本傳入神經(jīng)網(wǎng)絡(luò),利用獎(jiǎng)勵(lì)反饋更新變異策略,該過(guò)程如圖5所示。
圖5 強(qiáng)化學(xué)習(xí)算法訓(xùn)練流程
首先把神經(jīng)網(wǎng)絡(luò)、初始樣本池作為輸入,隨機(jī)初始化價(jià)值網(wǎng)絡(luò)的參數(shù)θ和目標(biāo)網(wǎng)絡(luò)的參數(shù)θ=θ′,并根據(jù)參數(shù)初始化兩個(gè)網(wǎng)絡(luò)。在一個(gè)新回合中,從初始樣本池中隨機(jī)選取一個(gè)樣本作為初始環(huán)境狀態(tài)s,根據(jù)價(jià)值網(wǎng)絡(luò)選擇變異動(dòng)作α,基于變異動(dòng)作α對(duì)樣本進(jìn)行變異生成新樣本并將其輸入到神經(jīng)網(wǎng)絡(luò)中執(zhí)行。在執(zhí)行完畢后,返回覆蓋率獎(jiǎng)勵(lì)r并得到新的環(huán)境狀態(tài)s′,同時(shí)將該四元組(s,α,r,s′)存儲(chǔ)到經(jīng)驗(yàn)重放池D中。在進(jìn)行訓(xùn)練時(shí),從經(jīng)驗(yàn)重放池中隨機(jī)采樣得到N個(gè)四元組數(shù)據(jù)(s,α,r,s′),使用目標(biāo)網(wǎng)絡(luò)計(jì)算損失函數(shù)L(θ′),通過(guò)最小化L(θ′)更新參數(shù)θ′。通過(guò)梯度下降更新價(jià)值網(wǎng)絡(luò)參數(shù),每隔一定步數(shù)將目標(biāo)網(wǎng)絡(luò)的參數(shù)更新為目前價(jià)值網(wǎng)絡(luò)的參數(shù)值。一個(gè)回合的終止條件是,當(dāng)生成樣本出現(xiàn)識(shí)別錯(cuò)誤或不滿足式(2)函數(shù)關(guān)系時(shí),則停止學(xué)習(xí),通過(guò)不斷學(xué)習(xí)最終得到一種最優(yōu)策略,它能夠智能地選擇變異動(dòng)作以最大化獎(jiǎng)勵(lì)。
本文選擇了兩個(gè)流行的公開數(shù)據(jù)集MINST[26]和CIFAR-10[27]作為實(shí)驗(yàn)數(shù)據(jù)集。MNIST是一個(gè)用于手寫數(shù)字圖像識(shí)別的數(shù)據(jù)集,其中6萬(wàn)張圖像作為訓(xùn)練集,1萬(wàn)張圖像作為測(cè)試集,分為10類(即從0到9的手寫數(shù)字)。每個(gè)MNIST圖像是一個(gè)尺寸為28×28×1的單通道圖像。
CIFAR-10是一個(gè)用于圖像分類的圖像集合,其中5萬(wàn)張圖像作為訓(xùn)練集,1萬(wàn)張圖像作為測(cè)試集,分為10個(gè)不同類別。每個(gè)CIFAR-10圖像是一個(gè)尺寸為32×32×3的三通道彩色RGB圖像。由于CIFAR-10數(shù)據(jù)集更大、復(fù)雜性更高,CIFAR-10的分類任務(wù)通常比MNIST的分類任務(wù)更難。
本文將分別采用LeNet1、LeNet4、LeNet5在MNIST數(shù)據(jù)集上進(jìn)行手寫數(shù)字分類任務(wù),采用VGG16在CIFAR-10上進(jìn)行圖像分類任務(wù)。神經(jīng)網(wǎng)絡(luò)模型的具體參數(shù)如表2所示。
表2 神經(jīng)網(wǎng)絡(luò)模型
本實(shí)驗(yàn)從等價(jià)類原則出發(fā),選取如表3所示的4種不同粒度的神經(jīng)元覆蓋度量指標(biāo)。分別是神經(jīng)元覆蓋(NC)、k-多段神經(jīng)元覆蓋(KMNC)、神經(jīng)元邊界覆蓋(NBC)、強(qiáng)神經(jīng)元激活覆蓋(SNAC)。這些指標(biāo)的粒度不同,反應(yīng)神經(jīng)網(wǎng)絡(luò)內(nèi)部狀態(tài)也不同,選取這4個(gè)指標(biāo),可以有效檢驗(yàn)本文方法的效果。具體描述見(jiàn)3.2.3節(jié)。
表3 評(píng)價(jià)指標(biāo)
DeepHunter是一個(gè)自動(dòng)模糊測(cè)試框架,用于尋找神經(jīng)網(wǎng)絡(luò)模型的潛在缺陷。DeepHunter提出了蛻變變異的概念,即圖像語(yǔ)義在種子變異過(guò)程中保持不變的性質(zhì)。該技術(shù)通過(guò)8種圖像變異策略變異種子,并利用多個(gè)覆蓋度量指標(biāo)作為反饋,從不同角度指導(dǎo)測(cè)試用例生成。同時(shí)該技術(shù)提出了隨機(jī)選擇和概率選擇兩個(gè)種子選擇策略,提高了模糊測(cè)試揭示故障和探索模型內(nèi)部狀態(tài)的有效性與效率。DeepHunter的有效性和效率在3個(gè)流行的數(shù)據(jù)集和7個(gè)具有不同復(fù)雜性的模型上得到了驗(yàn)證。
Tensorfuzz是一個(gè)基于覆蓋引導(dǎo)的模糊測(cè)試方法。該技術(shù)提出了一種激活向量的覆蓋準(zhǔn)則,并使用最近鄰算法計(jì)算測(cè)試過(guò)程中的覆蓋率。在Tensorfuzz中,由覆蓋信息指導(dǎo)神經(jīng)網(wǎng)絡(luò)的初始樣本進(jìn)行變異,進(jìn)而完成神經(jīng)網(wǎng)絡(luò)測(cè)試。
在本實(shí)驗(yàn)中,將神經(jīng)元覆蓋中神經(jīng)元激活閾值設(shè)置為0.5。對(duì)于K多段神經(jīng)元覆蓋,設(shè)k=1 000,這表示每個(gè)神經(jīng)元的激活值對(duì)應(yīng)主函數(shù)區(qū)間分為1 000段。對(duì)于神經(jīng)元邊界覆蓋和強(qiáng)神經(jīng)元激活覆蓋,將訓(xùn)練中遇到的最小激活值l設(shè)置為下限,最大激活值u設(shè)為上限,δ是神經(jīng)元輸出值的標(biāo)準(zhǔn)差。具體如表4所示,這些是原始研究[13]中推薦的設(shè)置。
表4 參數(shù)設(shè)計(jì)
實(shí)驗(yàn)的目標(biāo)是證明本文所提出的方法能夠生成優(yōu)秀的測(cè)試樣本,提高不同粒度下的神經(jīng)元覆蓋率。在實(shí)驗(yàn)中,采用了本文提出的方法以及兩個(gè)對(duì)比方法,在兩個(gè)不同數(shù)據(jù)集上,分別針對(duì)四種不同的神經(jīng)網(wǎng)絡(luò)進(jìn)行了測(cè)試。在LeNet模型中將執(zhí)行1 000個(gè)測(cè)試樣本作為終止條件,在VGG模型中將執(zhí)行500個(gè)測(cè)試樣本作為終止條件,得到在神經(jīng)元覆蓋(NC)、K-多段神經(jīng)元覆蓋(KMNC)、神經(jīng)元邊界覆蓋(NBC)、強(qiáng)神經(jīng)元激活覆蓋(SNBC)這 4種覆蓋度量準(zhǔn)則下的覆蓋率。具體的測(cè)試結(jié)果如表5所示。
表5 不同方法達(dá)到的覆蓋率峰值
表5總結(jié)了初始樣本對(duì)應(yīng)的覆蓋率以及DeepHunter、Tensorfuzz和本文方法在不同模型下達(dá)到的覆蓋率。相比于初始樣本的覆蓋率,本文方法在不同模型下的所有覆蓋率指標(biāo)均得到了提升。相比于Tensorfuzz,本文方法在LeNet和VGG16模型下覆蓋率均取得了較大提升。相比于DeepHunter,本文方法在使用LeNet模型的KMNC、SNAC和NBC指標(biāo)中都獲得了更高的覆蓋率,在VGG16模型上同樣可以獲得更高的覆蓋率,在LeNet1模型中本文方法實(shí)現(xiàn)的NC指標(biāo)提升不高。
在LeNet 1的NC實(shí)驗(yàn)中,本文方法提升覆蓋率效果不佳。這是因?yàn)樯窠?jīng)元覆蓋的閾值設(shè)計(jì)使得在小尺度模型上很難覆蓋深度狀態(tài),覆蓋率提升閾值出現(xiàn)的時(shí)間更早,從而很難找到覆蓋率增加的樣本,使得獎(jiǎng)勵(lì)反饋機(jī)制失效,最終變異策略變成了隨機(jī)變異。
在KMNC上,本文方法可以穩(wěn)定提高覆蓋率。這是因?yàn)镵MNC這種小粒度測(cè)試指標(biāo)可以為系統(tǒng)提供更多的反饋,從而更好地指導(dǎo)學(xué)習(xí)變異策略。
在SBNC和NBC上初始覆蓋率就比較低是因?yàn)镾BNC和NBC主要關(guān)注邊界區(qū)域的神經(jīng)元,即激活值超過(guò)主邊界區(qū)域的神經(jīng)元。而神經(jīng)元激活值超過(guò)主邊界區(qū)域的情況相對(duì)較少,因此覆蓋率不高,但是經(jīng)過(guò)變異,也可以提升覆蓋率。
綜上所述,本文方法根據(jù)強(qiáng)化學(xué)習(xí)算法生成最優(yōu)變異策略,使其指導(dǎo)生成的樣本可以獲得更高的神經(jīng)元覆蓋率,驗(yàn)證了本文方法是一種有效的變異策略優(yōu)化方法。
本文的主要研究?jī)?nèi)容是基于強(qiáng)化學(xué)習(xí)算法對(duì)神經(jīng)網(wǎng)絡(luò)模糊測(cè)試中的測(cè)試樣本變異環(huán)節(jié)進(jìn)行優(yōu)化,將神經(jīng)網(wǎng)絡(luò)模糊測(cè)試建模為一個(gè)馬爾可夫決策過(guò)程,定義了適用于神經(jīng)網(wǎng)絡(luò)模糊測(cè)試的環(huán)境狀態(tài)、獎(jiǎng)勵(lì)反饋、變異動(dòng)作,并通過(guò)強(qiáng)化學(xué)習(xí)算法學(xué)習(xí)一個(gè)最佳變異策略,指導(dǎo)樣本變異過(guò)程,生成最佳變異樣本。與隨機(jī)變異相比,本文提出的方法可以更快地推動(dòng)樣本向覆蓋率更高的方向變異。通過(guò)實(shí)驗(yàn)表明,本文的方法可以生成高質(zhì)量測(cè)試樣本,提高測(cè)試覆蓋率。在未來(lái)的研究中,將利用現(xiàn)有的變異策略,提高測(cè)試前期生成樣本的質(zhì)量;設(shè)計(jì)更加有效的強(qiáng)化學(xué)習(xí)模型和參數(shù),提高其性能。