摘 要:即時(shí)軟件缺陷預(yù)測(cè)技術(shù)可以實(shí)現(xiàn)細(xì)粒度代碼變更的即時(shí)缺陷預(yù)測(cè),對(duì)于提高軟件代碼質(zhì)量和保證軟件可靠性具有重要意義。傳統(tǒng)靜態(tài)軟件缺陷預(yù)測(cè)模型在處理即時(shí)軟件數(shù)據(jù)流時(shí)會(huì)存在“知識(shí)遺忘”的情況,從而導(dǎo)致模型泛化性能較差的問(wèn)題。為此,提出一種基于知識(shí)回放的即時(shí)軟件缺陷預(yù)測(cè)增量模型方法。首先,通過(guò)知識(shí)回放機(jī)制存儲(chǔ)模型參數(shù)和隨機(jī)樣本,實(shí)現(xiàn)對(duì)舊知識(shí)的學(xué)習(xí);其次,使用分布式訓(xùn)練框架在本地設(shè)備上對(duì)即時(shí)軟件數(shù)據(jù)流進(jìn)行增量學(xué)習(xí),通過(guò)重構(gòu)實(shí)現(xiàn)模型的即時(shí)更新;最后采用知識(shí)蒸餾技術(shù),構(gòu)建全局增量預(yù)測(cè)模型。實(shí)驗(yàn)表明,該模型與常見(jiàn)模型算法相比,在保證訓(xùn)練效率的前提下,模型的綜合性能表現(xiàn)較優(yōu)。
關(guān)鍵詞:即時(shí)軟件缺陷預(yù)測(cè); 增量學(xué)習(xí); 知識(shí)回放; 知識(shí)蒸餾
中圖分類號(hào):TP311.5
文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2024)11-032-3420-06
doi: 10.19734/j.issn.1001-3695.2024.03.0085
Using knowledge replay for just-in-time software defectprediction incremental model
Zhang Wenjing1, Li Yong1, 2?, Wang Yue1
(1.College of Computer Science amp; Technology, Xinjiang Normal University, U¨rümqi 830054, China; 2. Key Laboratory of Safety-Critical Software of Ministry amp; Information Technology, Nanjing University of Aeronautics amp; Astronautics, Nanjing 211106, China)
Abstract:Just-in-time software defect prediction technology enables just-in-time defect prediction at the granularity of code changes, which is crucial for improving software code quality and ensuring software reliability. Traditional static software defect prediction models suffer from ‘knowledge forgetting’ when processing just-in-time software data streams, leading to poor model generalization performance. To address this, this paper proposed an incremental model method based on knowledge replay for just-in-time software defect prediction. Firstly, it used the knowledge replay mechanism stores model parameters and random samples to facilitate the learning of old knowledge. Secondly, this paper used a distributed training framework to perform incremental learning on just-in-time software data streams on local devices, achieving real-time model updates through restructuring. Lastly, this paper employed the knowledge distillation technique to construct a global incremental prediction mo-del. Experiments show that this model performs better in terms of comprehensive performance compared to common modeling algorithms while ensuring training efficiency.
Key words:just-in-time software defect prediction; incremental learning; knowledge replay; knowledge distillation
0 引言
軟件質(zhì)量保證是軟件開(kāi)發(fā)的關(guān)鍵目標(biāo),軟件在運(yùn)行中一旦失效可能導(dǎo)致嚴(yán)重后果,有時(shí)甚至是致命的。軟件缺陷預(yù)測(cè)技術(shù)可以提高軟件測(cè)試效率,對(duì)于提升軟件質(zhì)量、保證軟件可靠性至關(guān)重要[1]。即時(shí)軟件缺陷預(yù)測(cè)(just-in-time defect prediction)技術(shù)具有細(xì)粒度、及時(shí)性、易追溯的特點(diǎn),已經(jīng)成為軟件缺陷預(yù)測(cè)領(lǐng)域的研究熱點(diǎn)[2]。
基于傳統(tǒng)機(jī)器學(xué)習(xí)技術(shù)構(gòu)建即時(shí)軟件缺陷預(yù)測(cè)模型時(shí),面對(duì)不斷變更的代碼數(shù)據(jù)流會(huì)導(dǎo)致模型泛化性較差,性能和可信度降低,影響了模型的實(shí)踐應(yīng)用[2]。在面對(duì)即時(shí)軟件數(shù)據(jù)流時(shí),增量學(xué)習(xí)方法帶來(lái)了新的研究思路,該方法通過(guò)直接混合所有新舊類別數(shù)據(jù)對(duì)模型訓(xùn)練,但由于數(shù)據(jù)存儲(chǔ)和計(jì)算能力限制等原因,通常無(wú)法保留所有的舊類別數(shù)據(jù)[3]。
針對(duì)該問(wèn)題,本文提出一種基于知識(shí)回放的即時(shí)軟件缺陷預(yù)測(cè)增量模型(knowledge replay based just-in-time software defect prediction incremental model, KRIM)。KRIM模型首先通過(guò)設(shè)置緩沖池保存舊模型參數(shù)和部分舊數(shù)據(jù),從而實(shí)現(xiàn)對(duì)舊知識(shí)的長(zhǎng)期保留,以此來(lái)防止增量學(xué)習(xí)過(guò)程中引發(fā)的災(zāi)難性遺忘問(wèn)題,確保模型能夠充分利用過(guò)去的經(jīng)驗(yàn)并及時(shí)適應(yīng)新的代碼變更數(shù)據(jù)。其次為解決軟件項(xiàng)目變更數(shù)據(jù)的質(zhì)量和模型并行訓(xùn)練問(wèn)題,KRIM模型采用分布式學(xué)習(xí)框架并行訓(xùn)練多客戶軟件數(shù)據(jù),通過(guò)服務(wù)器聚合多客戶端模型參數(shù)進(jìn)行新數(shù)據(jù)的訓(xùn)練學(xué)習(xí),從而實(shí)現(xiàn)模型的增量更新。最后引入了知識(shí)蒸餾的思想,使得設(shè)備不僅可以從本地?cái)?shù)據(jù)中進(jìn)行學(xué)習(xí),還能從全局模型中獲取軟件缺陷知識(shí),實(shí)現(xiàn)了全局增量模型的構(gòu)建。通過(guò)采用真實(shí)的即時(shí)軟件缺陷預(yù)測(cè)數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),驗(yàn)證了該方法使得模型能夠更好地適應(yīng)新的數(shù)據(jù)變化,提高即時(shí)軟件缺陷預(yù)測(cè)的準(zhǔn)確性和實(shí)用性,相關(guān)算法和結(jié)論為即時(shí)軟件缺陷預(yù)測(cè)提供了新的思路。
1 相關(guān)工作
1.1 即時(shí)軟件缺陷預(yù)測(cè)的模型算法
在即時(shí)軟件缺陷預(yù)測(cè)模型構(gòu)建領(lǐng)域中,模型更新可分為離線和在線兩個(gè)場(chǎng)景。典型的建模方法包括有監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)[4]。傳統(tǒng)的即時(shí)軟件缺陷預(yù)測(cè)側(cè)重于離線場(chǎng)景,依賴于歷史數(shù)據(jù)積累實(shí)現(xiàn)靜態(tài)模型。就有監(jiān)督學(xué)習(xí)而言,Arun等人[5]使用遺傳算法引入合成樣本對(duì)軟件項(xiàng)目數(shù)據(jù)進(jìn)行過(guò)采樣,結(jié)果表明遺傳算法過(guò)采樣方法提高了軟件預(yù)測(cè)性能。Kamei等人[6]的研究表明,選擇合適的數(shù)據(jù),即時(shí)軟件缺陷預(yù)測(cè)模型在跨項(xiàng)目的應(yīng)用中效果更佳。另一方面,Yang等人[7]率先提出了無(wú)監(jiān)督的即時(shí)缺陷預(yù)測(cè)方法,該方法驗(yàn)證了簡(jiǎn)單的無(wú)監(jiān)督模型與復(fù)雜的監(jiān)督模型在即時(shí)軟件缺陷預(yù)測(cè)任務(wù)中的性能,相比簡(jiǎn)單的無(wú)監(jiān)督模型性能較優(yōu)。Fu等人[8]提出將有標(biāo)簽的數(shù)據(jù)特征與Yang等人的無(wú)監(jiān)督方法結(jié)合起來(lái),可以實(shí)現(xiàn)更優(yōu)的預(yù)測(cè)結(jié)果。
然而,在實(shí)際應(yīng)用中,軟件項(xiàng)目通常以數(shù)據(jù)流形式產(chǎn)生,傳統(tǒng)離線模型難以應(yīng)對(duì)實(shí)時(shí)更新的數(shù)據(jù)流。文獻(xiàn)[9]提出在線即時(shí)軟件缺陷預(yù)測(cè)技術(shù),該技術(shù)允許數(shù)據(jù)流按時(shí)間順序進(jìn)入模型進(jìn)行實(shí)時(shí)訓(xùn)練和更新,解決了模型更新和數(shù)據(jù)不足的問(wèn)題。但現(xiàn)有研究未充分考慮如何針對(duì)迭代的軟件數(shù)據(jù)流構(gòu)建即時(shí)軟件缺陷預(yù)測(cè)模型,動(dòng)態(tài)數(shù)據(jù)流的產(chǎn)生可能導(dǎo)致模型無(wú)法高效實(shí)時(shí)訓(xùn)練。
1.2 增量模型構(gòu)建技術(shù)
面對(duì)數(shù)據(jù)流更新不及時(shí)的問(wèn)題,增量學(xué)習(xí)和分布式學(xué)習(xí)框架的發(fā)展為即時(shí)軟件缺陷預(yù)測(cè)提供了新的研究方向。增量學(xué)習(xí)也稱為持續(xù)學(xué)習(xí)或終身學(xué)習(xí),旨在解決動(dòng)態(tài)數(shù)據(jù)流模型訓(xùn)練中的一個(gè)常見(jiàn)缺陷,即災(zāi)難性遺忘[10]。常見(jiàn)的解決方案,可劃分為基于正則化的方法[11,12]、基于回放的方法[13,14]和基于動(dòng)態(tài)架構(gòu)[15]的方法。圖1為增量學(xué)習(xí)的工作流程。
基于正則化的方法是通過(guò)約束新任務(wù)的損失函數(shù)來(lái)鞏固先前的知識(shí)。Li等人[11]提出的LwF方法基于單教師蒸餾思想,將蒸餾損失納入新任務(wù)的損失函數(shù)中。Dhar等人[16]提出LWM(learning without memorizing)方法,該方法在LWF的基礎(chǔ)上考慮了基于注意力特征圖的蒸餾損失?;谡齽t化的另外一個(gè)方法通過(guò)估計(jì)模型參數(shù)重要性來(lái)擴(kuò)展神經(jīng)網(wǎng)絡(luò)的損失函數(shù),如EWC(elastic weight consolidation)[17]、oEWC(online EWC)[18]等方法。
基于回放的方法通過(guò)存儲(chǔ)舊任務(wù)的部分樣本參與新任務(wù)的訓(xùn)練來(lái)克服災(zāi)難性遺忘。Rebuffi等人[13] 提出iCaRL方法,采用Herding技術(shù)選取舊任務(wù)的部分樣本和新任務(wù)的所有樣本構(gòu)建訓(xùn)練集,以避免災(zāi)難性遺忘。Riemer等人[14]提出了經(jīng)驗(yàn)回放(experience replay,ER) 方法將舊任務(wù)的樣本與當(dāng)前任務(wù)樣本結(jié)合進(jìn)行訓(xùn)練。Benjamin等人[19]提出了功能距離正則化(FDR)方法,該方法在經(jīng)驗(yàn)重放基礎(chǔ)上增加正則化損失,來(lái)保存任務(wù)邊界的網(wǎng)絡(luò)響應(yīng)特性。Yan等人[20]提出了SNCL方法,基于ER進(jìn)一步融入了任務(wù)標(biāo)簽和中間層特征的考量,實(shí)現(xiàn)了對(duì)舊任務(wù)經(jīng)驗(yàn)的全面重放。
基于正則化的方法通過(guò)增加額外正則化來(lái)抑制過(guò)往知識(shí)的丟失。然而,這種方法由于模型容量的限制,往往難以在穩(wěn)定性和適應(yīng)性之間達(dá)到平衡,導(dǎo)致對(duì)新數(shù)據(jù)的適應(yīng)性不足,影響模型的預(yù)測(cè)效果。另一方面,基于樣本回放的策略,將舊任務(wù)的樣本納入新任務(wù)訓(xùn)練中,但這種方法需要更多的內(nèi)存和時(shí)間投入并可能引發(fā)數(shù)據(jù)隱私泄露問(wèn)題[21]。
通過(guò)以上文獻(xiàn)綜述,如何在動(dòng)態(tài)數(shù)據(jù)流場(chǎng)景下,對(duì)即時(shí)軟件缺陷預(yù)測(cè)性能和安全性的同步提高是當(dāng)前亟待解決的問(wèn)題。本文提出一種基于知識(shí)回放的增量模型算法。在模型構(gòu)建過(guò)程中,首先引入增量學(xué)習(xí)中的知識(shí)回放方法解決由于動(dòng)態(tài)數(shù)據(jù)流的產(chǎn)生而造成的模型災(zāi)難性遺忘問(wèn)題;其次,結(jié)合聯(lián)邦分布式學(xué)習(xí)框架解決并發(fā)訓(xùn)練模型對(duì)數(shù)據(jù)學(xué)習(xí)不充分與數(shù)據(jù)質(zhì)量難以提高的問(wèn)題;最后,在分布式學(xué)習(xí)框架中采用知識(shí)蒸餾的思想,由服務(wù)器端模型指導(dǎo)客戶端模型的訓(xùn)練,既鞏固了舊知識(shí),同時(shí)為服務(wù)器端構(gòu)建全局增量模型作出了貢獻(xiàn)。
2 基于知識(shí)回放的聯(lián)邦增量模型
為解決即時(shí)軟件缺陷預(yù)測(cè)模型中持續(xù)學(xué)習(xí)和數(shù)據(jù)質(zhì)量的問(wèn)題,本文構(gòu)建基于知識(shí)回放的即時(shí)軟件缺陷預(yù)測(cè)增量模型。專注于迭代產(chǎn)生的軟件數(shù)據(jù)流,使用知識(shí)回放的增量學(xué)習(xí)方法和聯(lián)邦分布式訓(xùn)練方式,通過(guò)克服災(zāi)難性遺忘問(wèn)題,采用服務(wù)器-客戶端的架構(gòu),實(shí)現(xiàn)各設(shè)備端知識(shí)的融合和共享,在客戶端直接進(jìn)行模型參數(shù)的傳輸和合并,實(shí)現(xiàn)參與設(shè)備的安全、透明和平等。在即時(shí)軟件缺陷預(yù)測(cè)中提高了預(yù)測(cè)效率,確保了軟件數(shù)據(jù)的安全。
圖2為本文提出的基于知識(shí)回放的增量模型總體框架。在這個(gè)框架中,首先每個(gè)客戶端都采用基于知識(shí)回放的KR增量模型作為本地模型進(jìn)行操作,其通過(guò)在本地存儲(chǔ)舊數(shù)據(jù)的機(jī)制,即知識(shí)回放池來(lái)平衡和記憶新舊任務(wù),模型在接收新任務(wù)時(shí),通過(guò)回放舊數(shù)據(jù),減少對(duì)舊知識(shí)的遺忘,從而在增量學(xué)習(xí)過(guò)程中實(shí)現(xiàn)新舊知識(shí)的有效整合。其次,分布式增量學(xué)習(xí)的參數(shù)更新算法確保了模型在每一輪訓(xùn)練中,系統(tǒng)會(huì)隨機(jī)選擇一個(gè)客戶端作為聚合節(jié)點(diǎn),其他客戶端執(zhí)行本地更新,并與聚合節(jié)點(diǎn)同步,確保數(shù)據(jù)在各客戶端之間的安全傳輸及模型的連續(xù)更新。最后,服務(wù)器端扮演著指導(dǎo)和監(jiān)督的角色,通過(guò)應(yīng)用模型蒸餾策略來(lái)進(jìn)一步減輕任務(wù)內(nèi)的遺忘問(wèn)題,服務(wù)器端存儲(chǔ)的教師模型將高質(zhì)量的預(yù)測(cè)能力通過(guò)蒸餾過(guò)程傳遞給各客戶端的學(xué)生模型,該方法不僅提升了學(xué)生模型的性能,也保持了模型知識(shí)的一致性和更新的質(zhì)量。
2.1 基于互補(bǔ)學(xué)習(xí)機(jī)制的知識(shí)回放算法
互補(bǔ)學(xué)習(xí)系統(tǒng)(complementary learning system,CLS)[22]理論闡述了人類大腦如何利用新皮質(zhì)進(jìn)行長(zhǎng)期知識(shí)儲(chǔ)存,以及如何利用海馬體進(jìn)行快速學(xué)習(xí)和記憶重放,以防止災(zāi)難性遺忘[23]。在對(duì)知識(shí)回放中舊知識(shí)節(jié)點(diǎn)的重要性等標(biāo)準(zhǔn)確定時(shí),結(jié)合了基于GNN的在線學(xué)習(xí)框架中使用節(jié)點(diǎn)重要性的策略[24]。本節(jié)提出了基于互補(bǔ)學(xué)習(xí)機(jī)制的知識(shí)回放算法(knowledge replay algorithm,KR)。在該算法學(xué)習(xí)新任務(wù)時(shí),模型會(huì)評(píng)估緩沖區(qū)中存儲(chǔ)的舊知識(shí),根據(jù)知識(shí)節(jié)點(diǎn)的重要性、知識(shí)節(jié)點(diǎn)與當(dāng)前任務(wù)的相關(guān)性選擇需要重新演練的知識(shí)節(jié)點(diǎn)。
算法1 知識(shí)回放算法(KR)
輸入:連續(xù)任務(wù)集T={T1,T2,…,Ti,…,TM};重放緩沖區(qū)B;加入緩沖區(qū)B的樣本D;模型參數(shù)fθ。
輸出:緩解前序任務(wù)災(zāi)難性遺忘的模型LM。
while Ti:
獲取訓(xùn)練集Ditr,抽取知識(shí)節(jié)點(diǎn)B
計(jì)算損失函數(shù):L′Ti=(LM,Dtei,E)
篩選有代表性的知識(shí)節(jié)點(diǎn)E=select(Dtri,e)
添加挑選節(jié)點(diǎn)到緩沖區(qū):B=BUE
從任務(wù)隊(duì)列中移除當(dāng)前任務(wù)Ti,即T=T\{Ti}
end while
return LM;
在算法1中,首先從當(dāng)前處理的任務(wù)中訓(xùn)練并提取關(guān)鍵的模型參數(shù),這些參數(shù)攜帶特定任務(wù)的重要信息,能夠作為未來(lái)學(xué)習(xí)過(guò)程的知識(shí)藍(lán)本。然后當(dāng)模型面臨新的學(xué)習(xí)任務(wù)時(shí),該框架不僅重新利用先前保存的模型參數(shù),而且結(jié)合挑選的隨機(jī)樣本,將兩者結(jié)合作為知識(shí)節(jié)點(diǎn)參與新任務(wù)的訓(xùn)練。最后通過(guò)迭代更新機(jī)制對(duì)知識(shí)節(jié)點(diǎn)進(jìn)行持續(xù)更新和優(yōu)化。KR算法允許模型在學(xué)習(xí)新任務(wù)的同時(shí),重新訪問(wèn)并整合之前任務(wù)中的關(guān)鍵信息,確保了學(xué)習(xí)過(guò)程的連續(xù)性和知識(shí)的累積。
具體而言,在學(xué)習(xí)任務(wù)Ti時(shí),獲取其訓(xùn)練集Dtri和測(cè)試集Dtei。隨后,從回放緩沖區(qū)B中選擇示例E (D,fθ)(其中D代表隨機(jī)樣本,fθ為模型訓(xùn)練的參數(shù))。一旦選擇了合適的知識(shí)節(jié)點(diǎn),將當(dāng)前任務(wù)測(cè)試集Dtei和知識(shí)節(jié)點(diǎn)E一起輸入到客戶端模型LM中。在客戶端模型中,采用節(jié)點(diǎn)分類任務(wù)的自然損失函數(shù),即式(1)所示的交叉熵?fù)p失函數(shù),來(lái)度量模型在新任務(wù)上的性能表現(xiàn)。
Lti(LM,E)=-∑(xi,yi)∈D(yilog LM(xi)+(1-yi)log(1-LM(xi)))(1)
其中:測(cè)試集Dtei中的數(shù)量通常大于回放緩沖區(qū)的大小,使用一個(gè)權(quán)重因子β來(lái)平衡Dtei和B的影響,避免模型偏向于特定的數(shù)據(jù)。因此,采用式(2)所示設(shè)置動(dòng)態(tài)權(quán)重因子機(jī)制。
β=|B|/(|Dtri|+|B|)(2)
2.2 分布式增量學(xué)習(xí)的參數(shù)更新算法
為解決數(shù)據(jù)質(zhì)量和模型并發(fā)訓(xùn)練問(wèn)題,本研究采用分布式增量學(xué)習(xí)方法。在此框架中,每個(gè)客戶端使用KR算法進(jìn)行訓(xùn)練,上傳模型參數(shù)和隨機(jī)樣本,而不是原始數(shù)據(jù),以確保數(shù)據(jù)的本地化。允許各客戶端基于新任務(wù)和回放池中的舊知識(shí)進(jìn)行本地更新,優(yōu)化學(xué)習(xí)到的模型參數(shù)。此外,為減少循環(huán)更新造成的訓(xùn)練時(shí)間延長(zhǎng),采用隨機(jī)并發(fā)更新策略。與傳統(tǒng)循環(huán)更新不同的是將每輪通信中的所有客戶端訓(xùn)練的模型聚合到服務(wù)器端。這種方法不僅能增強(qiáng)數(shù)據(jù)質(zhì)量,而且能實(shí)現(xiàn)并發(fā)式的訓(xùn)練。算法2描述了模型更新的過(guò)程。
算法2 分布式增量學(xué)習(xí)算法(FIL)
輸入:客戶端數(shù)量num任務(wù)的通信輪次R;任務(wù)數(shù)T;本地迭代次數(shù)E;每個(gè)客戶端的本地增量任務(wù)流Tk={T1,T2,…,Tg,…,Tnum}(其中1≤klt;num)。
輸出:所有客戶端訓(xùn)練后的局部模型參數(shù)θ1,…,θk,…,θnum。
初始化每個(gè)客戶端局部模型參數(shù)θ1,…,θk,…,θnum
for t = 1 to T do
for r = 1 to R do
隨機(jī)選擇一個(gè)客戶端num′作為聚合節(jié)點(diǎn),其余為對(duì)等節(jié)點(diǎn)。
初始化Δθt=0,對(duì)每個(gè)對(duì)等節(jié)點(diǎn)ki執(zhí)行:
更新參數(shù):Δθk←IncrementalTrain(k,Tk,θk,E)
累加到Δθt:Δθt←Δθt+Δθk
聚合參數(shù):θagg←1sk≤num and k≠num′∑Δθnum′
聚合微調(diào):θ′agg←IncrementalTrain(num′,Tnum′,θagg,E)
聚合節(jié)點(diǎn)θ′agg分發(fā)到所有對(duì)等節(jié)點(diǎn)
end for
end for
2.3 基于知識(shí)蒸餾的模型更新策略
為減輕服務(wù)器端和客戶端的災(zāi)難性遺忘,引入知識(shí)蒸餾進(jìn)行解決。圖3為基于知識(shí)蒸餾的分布式學(xué)習(xí)框架,該框架首先使用了模型上一個(gè)任務(wù)中預(yù)測(cè)出的新數(shù)據(jù)流,并將其輸出視為偽標(biāo)簽來(lái)進(jìn)行知識(shí)蒸餾,即軟預(yù)測(cè),以回顧不可用的數(shù)據(jù)知識(shí)。其次,在學(xué)習(xí)新數(shù)據(jù)流后為鞏固舊知識(shí)階段采用了式(3)所示的蒸餾損失函數(shù)量化并優(yōu)化知識(shí)的傳遞效率。為提高全局增量模型的學(xué)習(xí)能力和充分利用學(xué)習(xí)資源,可以將學(xué)習(xí)新任務(wù)和回顧舊任務(wù)分配給不同的客戶端。
Ldistill=-∑(xi,y^i)∈D(y^ilog LM(xi))(3)
其中:LM是客戶端模型;y^i是由上一個(gè)任務(wù)模型生成的偽標(biāo)簽;D是新任務(wù)的數(shù)據(jù)集。
最后為減輕模型整體任務(wù)內(nèi)遺忘,提出服務(wù)器蒸餾機(jī)制,該機(jī)制首先聚合的全局模型經(jīng)過(guò)微調(diào)以模仿上一輪全局模型和本輪局部模型的輸出,其次應(yīng)用式(4)所示的蒸餾損失函數(shù)在訓(xùn)練中微調(diào)模型,確保全局模型能夠有效地從局部模型中學(xué)習(xí)并保留關(guān)鍵知識(shí)。
Lserver-distill=-∑xi∈D(yprev(xi)log fθglobal(xi)+ylocal(xi)log fθglobal(xi))(4)
其中:yprev和ylocal分別是上一輪全局模型和本輪局部模型的輸出; fθglobal是聚合后的全局增量模型。
3 實(shí)驗(yàn)
3.1 實(shí)驗(yàn)設(shè)置
本文提出基于知識(shí)回放的增量學(xué)習(xí)方法實(shí)現(xiàn)即時(shí)軟件缺陷預(yù)測(cè)任務(wù),使用全連接神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。由于數(shù)據(jù)集存在類不平衡的現(xiàn)象,本實(shí)驗(yàn)采用隨機(jī)森林和隨機(jī)采樣算法結(jié)合處理類不平衡[25]。
實(shí)驗(yàn)在NVIDIA GeForce RTX 3050Ti 4 GB和16 GB內(nèi)存的Windows 11環(huán)境下運(yùn)行,且所有程序均由Python編程語(yǔ)言和PyTorch 2.1.0實(shí)現(xiàn)。本文方法的超參數(shù)設(shè)置為:使用基于最小批的ADAM優(yōu)化器優(yōu)化模型參數(shù),增量模型KRIM使用的最小批大小為32,基于知識(shí)回放方法中的緩沖池最大設(shè)置為100,緩沖池中的模型參數(shù)和樣本數(shù)量m在{20,40,60,80}調(diào)整,學(xué)習(xí)率在{0.01,0.001}調(diào)整。
3.2 實(shí)驗(yàn)數(shù)據(jù)
實(shí)驗(yàn)使用Kamei等人[26]提出的公開(kāi)數(shù)據(jù)集。該數(shù)據(jù)集包含6個(gè)大型開(kāi)源軟件項(xiàng)目。每個(gè)項(xiàng)目相互獨(dú)立,為模擬增量學(xué)習(xí)場(chǎng)景,選取每個(gè)項(xiàng)目的80%作為訓(xùn)練集,剩下的20%作為測(cè)試集。數(shù)據(jù)集的基本信息如表1所示。
3.3 評(píng)價(jià)指標(biāo)
為了評(píng)估預(yù)測(cè)性能,本文采用了即時(shí)軟件缺陷預(yù)測(cè)常用的準(zhǔn)確率、精確度、召回率、F1和AUC度量。即時(shí)軟件缺陷為二分類問(wèn)題,即0和1問(wèn)題。其中1為正例,代表有缺陷,0為負(fù)例,代表無(wú)缺陷。TP(真正例)表示正確預(yù)測(cè)有缺陷變更的數(shù)量,F(xiàn)P(假正例)表示錯(cuò)誤預(yù)測(cè)無(wú)缺陷變更為有缺陷變更,F(xiàn)N(假反例)表示錯(cuò)誤預(yù)測(cè)有缺陷變更為無(wú)缺陷變更,TN(真反例)表示正確預(yù)測(cè)無(wú)缺陷變更的數(shù)量,混淆矩陣如表2所示。
a)準(zhǔn)確率(accuracy),精度。即準(zhǔn)確衡量正確分類的變化(包括缺陷變更和非缺陷變更)的數(shù)量與總變更數(shù)的比值。
accuracy=TP+TNTP+FP+TN+FN(5)
b)精確率(precision),查準(zhǔn)率。即正確預(yù)測(cè)為正類樣本的數(shù)量與所有被預(yù)測(cè)為正類樣本的數(shù)量之間的比率。
precision=TPTP+FP(6)
c)召回率(recall),查全率。即正確預(yù)測(cè)為正類樣本數(shù)量與真實(shí)正類樣本數(shù)量的比值。
recall=TPTP+FP(7)
d)F1-measure。即比較不同項(xiàng)目之間的權(quán)衡,它是precision和recall的加權(quán)調(diào)和平均,當(dāng)F1-measure較高時(shí)說(shuō)明實(shí)驗(yàn)方法比較理想,當(dāng)兩者之一過(guò)小時(shí),F(xiàn)1-measure也會(huì)非常小,進(jìn)而提示模型異常。
F1-measure=2× precision×recallprecision+recall(8)
e)AUC是衡量二分類問(wèn)題的一種性能指標(biāo),是ROC(receiver operating characteristic)曲線下的面積。當(dāng)AUC大于0.5時(shí),模型性能越好,當(dāng)小于等于0.5時(shí),模型性能不佳??紤]到即時(shí)軟件缺陷預(yù)測(cè)數(shù)據(jù)存在嚴(yán)重類不平衡問(wèn)題,AUC不會(huì)受到閾值和類不平衡問(wèn)題的影響,本研究將AUC作為評(píng)價(jià)指標(biāo)。
3.4 實(shí)驗(yàn)分析
3.4.1 不同方法在增量模型下的預(yù)測(cè)性能比較
1)模型算法的有效性對(duì)比
本實(shí)驗(yàn)對(duì)KRIM模型主要組件的有效性進(jìn)行檢驗(yàn)。實(shí)驗(yàn)包括兩種KRIM方法的變種模型:M1,未使用知識(shí)回放的增量模型;M2,使用知識(shí)回放的增量模型。表3給出了兩種變體的性能??梢钥闯?,由于沒(méi)有使用知識(shí)回放策略,僅限新的軟件數(shù)據(jù)流進(jìn)行訓(xùn)練,導(dǎo)致模型遺忘了舊任務(wù)的知識(shí)。
對(duì)比表3可知,M1在數(shù)據(jù)集上的各項(xiàng)指標(biāo)低于M2的各項(xiàng)指標(biāo),特別是使用了知識(shí)回放策略的模型預(yù)測(cè)準(zhǔn)確率比未使用知識(shí)回放策略的模型準(zhǔn)確率提高了0.245。因此,增加知識(shí)回放策略從內(nèi)存緩沖區(qū)中獲取過(guò)往任務(wù)的多個(gè)信息流,即使到了任務(wù)后期,也能保證大部分的舊知識(shí)不被遺忘。
2)模型算法的泛化性驗(yàn)證
為驗(yàn)證KRIM模型在每個(gè)數(shù)據(jù)集上具有普適性,本實(shí)驗(yàn)使用Kamei等人提出的數(shù)據(jù)集,在每個(gè)數(shù)據(jù)集上都進(jìn)行實(shí)驗(yàn)分析。表4為兩種對(duì)比方法和本文方法在AUC性能上的表現(xiàn)情況,從三種方法的定性評(píng)價(jià)可知,iCaRL方法是通過(guò)回放樣本數(shù)據(jù),LwF是添加正則化損失避免災(zāi)難性遺忘。由表4可知,本文方法在每個(gè)數(shù)據(jù)集上的AUC性能均優(yōu)于其余兩個(gè)對(duì)比方法。因此,本文提出的增量模型在所選用的即時(shí)軟件缺陷預(yù)測(cè)數(shù)據(jù)集上均有效,模型的適應(yīng)能力較好。
3)模型算法的穩(wěn)定性評(píng)估
為評(píng)估模型的穩(wěn)定性,設(shè)定了關(guān)鍵超參數(shù),即知識(shí)回放策略中緩沖區(qū)M所暫存的模型數(shù)量m,設(shè)置m∈{20,40,60,80},其他超參數(shù)的取值與3.1節(jié)一致。
本實(shí)驗(yàn)對(duì)基于樣本回放和基于知識(shí)回放采用不同增量數(shù)目時(shí)的準(zhǔn)確率進(jìn)行比較,如圖4所示。從中可以看出,隨著m的增大,KRIM模型準(zhǔn)確率先是提高然后趨于穩(wěn)定,這表明適當(dāng)增加暫存模型數(shù)量有助于提升性能,但超過(guò)某一閾值后收益減小。由圖可知,iCaRL方法在m為20的時(shí)候性能最好,由此可知其在較小數(shù)據(jù)集上更有效,KRIM模型從增量數(shù)目20到40時(shí)準(zhǔn)確率略有下降,但之后穩(wěn)定并在80時(shí)略有上升。表明KRIM模型對(duì)時(shí)間變化的數(shù)據(jù)更為穩(wěn)定,其有望從更大的數(shù)據(jù)集訓(xùn)練中獲益。
3.4.2 KRIM模型與現(xiàn)有主流增量模型的比較
為進(jìn)一步對(duì)比KRIM增量模型在即時(shí)軟件缺陷預(yù)測(cè)上增量效果,本節(jié)選取現(xiàn)有的主流增量模型iCaRL[13]和LwF[11],并在6個(gè)軟件項(xiàng)目數(shù)據(jù)集上進(jìn)行預(yù)測(cè)性能對(duì)比,且在各項(xiàng)指標(biāo)下取6個(gè)數(shù)據(jù)集的均值。iCaRL是基于回放的增量學(xué)習(xí)方法的代表模型,LwF是基于正則化的增量學(xué)習(xí)方法的代表模型。圖5展示了本文方法基于目前增量方法的性能比較,由圖5(c)可知,隨著訓(xùn)練輪數(shù)epoch的增加,模型的精度值一直在顯著上升,且在訓(xùn)練輪次達(dá)到10的時(shí)候,相比其余兩種方法其精度值最高。由圖5(b)(d)可知,模型的預(yù)測(cè)準(zhǔn)確率和F1值變換比較平穩(wěn),但是都是呈現(xiàn)上升趨勢(shì),且總體看其預(yù)測(cè)值高于另外兩種方法。從圖5(e)觀察可知,模型的召回率剛開(kāi)始達(dá)到了最高,雖然隨著epoch的增加在降低,但是前9輪的recall值仍然高于其余兩種方法。特別地,觀察模型在AUC上的表現(xiàn)能力,本文KRIM在整體效果上達(dá)到了最優(yōu)。
3.4.3 KRIM模型與傳統(tǒng)即時(shí)軟件缺陷預(yù)測(cè)模型的比較
為了評(píng)估KRIM在即時(shí)軟件缺陷預(yù)測(cè)的效能,將KRIM與五種傳統(tǒng)即時(shí)缺陷預(yù)測(cè)模型進(jìn)行對(duì)比,采用F1-measure作為評(píng)價(jià)指標(biāo)?;鶞?zhǔn)模型選擇了常見(jiàn)的五種即時(shí)軟件缺陷預(yù)測(cè)模型進(jìn)行了比較,以下是對(duì)基線模型的概述:
a)JITQA[26]。該模型通過(guò)歷史缺陷信息來(lái)預(yù)測(cè)未來(lái)代碼提交的缺陷概率,通過(guò)在多個(gè)大型軟件項(xiàng)目中驗(yàn)證,該模型顯示出高于行業(yè)標(biāo)準(zhǔn)的預(yù)測(cè)精度。
b)Deeper[27]。該模型基于深度學(xué)習(xí)探索代碼變更模式以提高缺陷預(yù)測(cè)的準(zhǔn)確性,其特別適用于處理大規(guī)模代碼庫(kù)。
c)LocalJIT[28]。該模型對(duì)即時(shí)缺陷預(yù)測(cè)的局部與全局模型進(jìn)行對(duì)比,其在實(shí)時(shí)更新的環(huán)境中較為有效,能夠即時(shí)調(diào)整預(yù)測(cè)策略,優(yōu)化性能。
d)DAECNN[29]。該模型將去噪自編碼器與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合進(jìn)行預(yù)測(cè),其在噪聲較多的數(shù)據(jù)集上顯現(xiàn)出了較強(qiáng)的模型魯棒性。
e)RandomForest[30]。該模型關(guān)注即時(shí)軟件缺陷預(yù)測(cè)模型的可解釋性,使開(kāi)發(fā)者能更好地理解和信任模型的決策過(guò)程,其在實(shí)際測(cè)試表現(xiàn)出了優(yōu)異的結(jié)果。
由表5可知,與JITQA相比,KRIM在所有數(shù)據(jù)集上都顯示出了顯著的改進(jìn)。即便與近兩年提出的DAECNN相比,KRIM也在所有數(shù)據(jù)集上展現(xiàn)出更優(yōu)的性能,尤其是在mozilla和platform數(shù)據(jù)集上,其F1-measure均超過(guò)了0.80。然而,在bugzilla和columba數(shù)據(jù)集上,KRIM相較于DAECNN在F1值、精確度等指標(biāo)上表現(xiàn)不佳,這是由于bugzilla和columba數(shù)據(jù)集的數(shù)量較少,從而影響了模型充分訓(xùn)練學(xué)習(xí),舊知識(shí)也無(wú)法進(jìn)行充分利用,進(jìn)一步驗(yàn)證了本文方法在即時(shí)軟件缺陷預(yù)測(cè)領(lǐng)域中的適用性更強(qiáng)。通過(guò)分析表明KRIM在處理大型項(xiàng)目時(shí)具有較高的魯棒性和可靠性。本文方法相較于傳統(tǒng)的RandomForest模型,KRIM在所有數(shù)據(jù)集上都有著更為出色的表現(xiàn),驗(yàn)證了KRIM在即時(shí)軟件缺陷預(yù)測(cè)中的實(shí)用性和有效性。
4 結(jié)束語(yǔ)
本文提出了一種基于知識(shí)回放的增量模型(KRIM)即時(shí)軟件缺陷預(yù)測(cè)方法。該模型首先設(shè)計(jì)知識(shí)回放機(jī)制(KR)實(shí)現(xiàn)對(duì)本地增量任務(wù)數(shù)據(jù)流的持續(xù)學(xué)習(xí)。其次,通過(guò)構(gòu)建分布式增量學(xué)習(xí)框架,在提高數(shù)據(jù)質(zhì)量的同時(shí)對(duì)多客戶端數(shù)據(jù)流進(jìn)行并發(fā)訓(xùn)練。最后,提出的知識(shí)蒸餾解決方案完善了模型的更新機(jī)制。知識(shí)回放與增量學(xué)習(xí)的結(jié)合,使得模型能夠快速適應(yīng)新到來(lái)的數(shù)據(jù)流。通過(guò)在公開(kāi)數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)分析,驗(yàn)證了所提模型在多種數(shù)據(jù)集上與主流增量模型和現(xiàn)有即時(shí)軟件缺陷預(yù)測(cè)模型的有效性。未來(lái)將進(jìn)一步探究模型可解釋性對(duì)預(yù)測(cè)性能的影響,并研究隱私保護(hù)方法在動(dòng)態(tài)數(shù)據(jù)流上的應(yīng)用效果。
參考文獻(xiàn):
[1]Zhao Yunhua, Damevski K, Chen Hui. A systematic survey of just-in-time software defect prediction [J]. ACM Computing Surveys, 2023, 55 (10): 1-35.
[2]蔡亮, 范元瑞, 鄢萌,等. 即時(shí)軟件缺陷預(yù)測(cè)研究進(jìn)展 [J]. 軟件學(xué)報(bào), 2019, 30 (5): 1288-1307. (Cai Liang, Fan Yuanrui, Yan Meng, et al. Just-in-time software defect prediction: literature review [J]. Journal of Software, 2019, 30 (5): 1288-1307.)
[3]Gopalakrishnan S, Singh P R, Fayek H, et al.Knowledge capture and replay for continual learning [C]// Proc of CVF Winter Conference on Applications of Computer Vision. Piscataway, NJ: IEEE Press," 2022: 10-18.
[4]Cabral G G, Minku L L. Towards reliable online just-in-time software defect prediction [J]. IEEE Trans on Software Engineering, 2022, 49 (3): 1342-1358.
[5]Arun C,Lakshmi C. Genetic algorithm-based oversampling approach to prune the class imbalance issue in software defect prediction [J]. Soft Computing, 2022, 26 (23): 12915-12931.
[6]Kamei Y, Fukushima T, McIntosh S, et al.Studying just-in-time defect prediction using cross-project models [J]. Empirical Software Engineering, 2016, 21: 2072-2106.
[7]Yang Yibiao, Zhou Yuming, Liu Jinping, et al.Effort-aware just-in-time defect prediction: simple unsupervised models could be better than supervised models [C]// Proc of the 24th SIGSOFT International Symposium on Foundations of Software Engineering. New York: ACM Press, 2016: 157-168.
[8]Fu Wei, Menzies T. Revisiting unsupervised learning for defect prediction [C]// Proc of the 11th Joint Meeting on Foundations of Software Engineering. New York: ACM Press,2017: 72-83.
[9]Tabassum S,Minku L L, Feng D, et al.An investigation of cross-project learning in online just-in-time software defect prediction [C]// Proc of the 42nd International Conference on Software Engineering. New
York: ACM Press,2020: 554-565.
[10]Thai A, Stojanov S, Rehg I, et al.Does continual learning= catastrophic forgetting [EB/OL].(2021-01-18). https://doi.org/10.48550/arXiv.2101.07295.
[11]Li Zhizhong, Hoiem D. Learning without forgetting [J]. IEEE Trans on Pattern Analysis and Machine Intelligence, 2017, 40 (12): 2935-2947.
[12]Mirzadeh S I, Chaudhry A, Yin D, et al.Wide neural networks forget less catastrophically [C]// Proc of the 39th International Conference on Machine Learning.[S.l.]: PMLR, 2022: 15699-15717.
[13]Rebuffi S A, Kolesnikov A, Sperl G, et al.iCaRL: incremental classifier and representation learning [C]// Proc of IEEE Conference on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE Press, 2017: 5533-5542.
[14]Riemer M, Cases I, Ajemian R, et al.Learning to learn without forgetting by maximizing transfer and minimizing interference [EB/OL]. (2018-10-29). https://arxiv.org/abs/1810.11910.
[15]Nokhwal S, Kumar N. DSS: a diverse sample selection method to preserve knowledge in class-incremental learning [EB/OL]. (2023-12-14). https://arxiv.org/abs/2312.09357.
[16]Dhar P, Singh R V, Peng K C, et al.Learning without memorizing [C]// Proc of CVF Conference on Computer Vision and Pattern Recognition." Piscataway, NJ: IEEE Press, 2019: 5133-5141.
[17]Kirkpatrick J,Pascanu R, Rabinowitz N, et al.Overcoming catastrophic forgetting in neural networks [J]. Proceedings of the National Academy of Sciences, 2017, 114 (13): 3521-3526.
[18]Schwarz J, Czarnecki W, Luketina J, et al.Progress amp; compress: a scalable framework for continual learning [C]// Proc of International Conference on Machine Learning. [S.l]:PMLR, 2018: 4528-4537.
[19]Ben jamin A S, Rolnick D,Kording K. Measuring and regularizing networks in function space [EB/OL]. (2019-06-26). https://arxiv.org/abs/1805.08289.
[20]Yan Qingsen, Gong Dong, Liu Yuhang, et al.Learning Bayesian sparse networks with full experience replay for continual learning [C]// Proc of CVF Conference on Computer Vision and Pattern Recognition.Piscataway, NJ: IEEE Press, 2022: 109-118.
[21]Dayan I, Roth H R, Zhong Aoxiao, et al.Federated learning for predicting clinical outcomes in patients with COVID-19 [J]. Nature Medicine, 2021, 27 (10): 1735-1743.
[22]Arani E, Sarfraz F,Zonooz B. Learning fast, learning slow: a general continual learning method based on complementary learning system [EB/OL]. (2022-05-10). https://arxiv.org/abs/2201.12604.
[23]Shoham N, Avidor T, Keren A, et al.Overcoming forgetting in federated learning on non-IID data [EB/OL]. (2019-10-17). https://arxiv.org/abs/1910.07796.
[24]Wei Di, Gu Yu, Song Yumeng, et al.IncreGNN: incremental graph neural network learning by considering node and parameter importance [C]// Proc of the 27th International Conference on Database Systems for Advanced Applications. Berlin: Springer-Verlag, 2022: 739-746.
[25]Zhang Wenjing, Li Yong, Wen Ming, et al.Comparative study of ensemble learning methods in just-in-time software defect prediction [C]// Proc of the 23rd International Conference on Software Quality, Reliability, and Security Companion." Piscataway, NJ: IEEE Press, 2023: 83-92.
[26]Kamei Y, Shihab E, Adams B, et al.A large-scale empirical study of just-in-time quality assurance [J]. IEEE Trans on Software Engineering, 2012, 39 (6): 757-773.
[27]Yang Xinli, Lo D, Xia Xin, et al.Deep learning for just-in-time defect prediction [C]// Proc of IEEE International Conference on Software Quality, Reliability and Security. Piscataway, NJ: IEEE Press,2015: 17-26.
[28]Yang Xingguang, Yu Huiqun, Fan Guisheng, et al.Local versus global models for just-in-time software defect prediction [J/OL]. Scientific Programming.(2019). https://doi. org/10. 1155/2019/2384706.
[29]Zhu Kun, Zhang Nana, Ying Shi, et al.Within-project and cross-project just-in-time defect prediction based on denoising autoencoder and convolutional neural network [J]. IET Software, 2020, 14 (3): 185-195.
[30]Zheng W Wei, Shen Tianren, Chen Xiang, et al.Interpretability application of the just-in-time software defect prediction model [J]. Journal of Systems and Software, 2022, 188: 111245.