最近幾個(gè)月都在研究課題組組長接的區(qū)塊鏈安全項(xiàng)目的一個(gè)子課題——區(qū)塊鏈安全風(fēng)險(xiǎn)評(píng)估,雖說是風(fēng)險(xiǎn)評(píng)估,但目前我們研究比較多的還是區(qū)塊鏈的漏洞檢測(cè)。區(qū)塊鏈這個(gè)領(lǐng)域的研究其實(shí)一直都在進(jìn)行,但使用的都是形式化驗(yàn)證、符號(hào)執(zhí)行、模糊測(cè)試等傳統(tǒng)檢測(cè)方法,因此我們打算結(jié)合深度學(xué)習(xí)做點(diǎn)工作。我搭建了一個(gè)簡易的CNN+LSTM多分類模型(詳見文章《CNN+LSTM:智能合約漏洞檢測(cè)》),并通過算法利用已知漏洞的分類結(jié)果來檢測(cè)未知漏洞,然而這種方法不太嚴(yán)謹(jǐn),因?yàn)楹罄m(xù)算法會(huì)將已知漏洞和未知漏洞雜糅在一起,導(dǎo)致該模型最終也只能判別未知漏洞。我認(rèn)為一個(gè)深度學(xué)習(xí)模型同時(shí)區(qū)分已知類別和未知類別是有可能的,所以這兩天一直在網(wǎng)上尋找資料,發(fā)現(xiàn)這個(gè)領(lǐng)域其實(shí)已經(jīng)有團(tuán)隊(duì)在研究了,只是這種方案的實(shí)現(xiàn)難度還是比較高的,畢竟深度學(xué)習(xí)每個(gè)領(lǐng)域的研究成果到目前為止也只是滄海一粟。下面我將以通俗易懂的定義給大家科普一下Few-shot learning、Zero-shot learning和Open set recognition。
Few-shot learning
小樣本學(xué)習(xí),簡單理解就是利用小數(shù)量的訓(xùn)練樣本便可以達(dá)到高準(zhǔn)確率的檢測(cè)結(jié)果,相較而言以前的深度學(xué)習(xí)模型,無論是監(jiān)督學(xué)習(xí)還是無監(jiān)督學(xué)習(xí),都需要大量的正負(fù)樣本作訓(xùn)練集。下圖展示了Few-shot learning完整過程所需的數(shù)據(jù),包括Training Set、Support Set和Query。Training Set指訓(xùn)練集,這里的訓(xùn)練集與傳統(tǒng)深度學(xué)習(xí)模型使用的訓(xùn)練集并無差別,只是數(shù)據(jù)量可以相對(duì)少一些;Support Set指支撐集,支撐集的類別與訓(xùn)練集的類別不一樣,同時(shí)每個(gè)類別提供的樣本數(shù)量可以很少,甚至等于1(如圖),這便是小樣本學(xué)習(xí)名稱的由來;Query指查詢條件(即需要分類的輸入數(shù)據(jù)),支撐集和查詢條件同時(shí)作為測(cè)試過程的輸入,模型通過比較查詢條件和支撐集便可以進(jìn)行分類。
舉個(gè)例子,訓(xùn)練集有Husky、Elephant、Tiger、Macaw和Car五種類別,支撐集有Fox、Squirrel、Rabbit、Hamster、Otter和Beaver六種類別,訓(xùn)練集和支撐集的類別完全不一樣,注意,訓(xùn)練后的模型只能區(qū)分支撐集里的類別,因?yàn)樵撃P蛯W(xué)習(xí)的是如何區(qū)分兩個(gè)圖片中的物體(即比較相似度)。接著進(jìn)入測(cè)試過程,我們提供Query條件,比如是一張兔子的圖片,此時(shí)模型會(huì)比較Query的圖片與支撐集每個(gè)類別的圖片并得到各自的相似度,最終相似度最大的即為正確類別。

Zero-shot learning
零樣本學(xué)習(xí),簡單理解就是把Few-shot learning模型中的Support Set去掉,只保留訓(xùn)練集和查詢條件,但需要額外補(bǔ)充一個(gè)待分類的類別描述。即利用訓(xùn)練集數(shù)據(jù)訓(xùn)練模型,使得模型能夠?qū)y(cè)試集的對(duì)象進(jìn)行分類,但是訓(xùn)練集類別和測(cè)試集類別之間沒有交集;期間需要借助類別的描述,來建立訓(xùn)練集和測(cè)試集之間的聯(lián)系,從而使得模型有效。舉個(gè)例子(如圖),訓(xùn)練集包括horse、donkey、hyena、tiger、penguin、panda六個(gè)類別,這六個(gè)類別中每兩個(gè)類別有一些相同特征,比如tiger和hyena都有條紋,模型訓(xùn)練完后便會(huì)將這些特征量化。測(cè)試集只有斑馬這一個(gè)類別,因此也只有一個(gè)類別描述——Zebra Descriptions(horse-like,stripe,black&white),每個(gè)描述會(huì)包含幾個(gè)特征,此時(shí)當(dāng)我們輸入斑馬的圖片時(shí),模型會(huì)把圖片與測(cè)試集中所有的類別描述一一比對(duì),符合描述所有特征的即為正確分類。

Open set recognition
開集識(shí)別。傳統(tǒng)的模型包括以上兩種模型都是閉集識(shí)別,即模型知道所有的類別,Zero-shot learning模型中即使訓(xùn)練集和測(cè)試集都沒有斑馬類別的樣本,但測(cè)試集中包含了斑馬類別的描述,這是有用的屬性信息。然而開集識(shí)別要實(shí)現(xiàn)的是訓(xùn)練集和測(cè)試集的類別可以有一樣,也可以有不一樣的,但模型最終能在不提供任何輔助信息的情況下區(qū)分出已知類別,同時(shí)也能分辨出未知類別并作相應(yīng)處理。下圖是這個(gè)領(lǐng)域某篇論文中對(duì)深度學(xué)習(xí)使用數(shù)據(jù)的定義與分類。
KKCs:具有明確標(biāo)簽的正訓(xùn)練樣本(對(duì)其他KKCs為負(fù)樣本),包含相應(yīng)的伴隨信息(語義和屬性信息等)的類別
KUCs:被標(biāo)記為負(fù)樣本,不必要被劃分為一個(gè)具體的類別
UKCs:訓(xùn)練時(shí)沒有可用的樣本,但是有可用的伴隨信息(語義和屬性信息等)
UUCs:訓(xùn)練時(shí)沒有可用樣本,也沒有伴隨信息(語義和屬性信息等)
傳統(tǒng)分類只考慮KKCs;Zero-shot learning關(guān)注識(shí)別UKCs;Few-shot?learning看作是Zero-shot learning的擴(kuò)展,訓(xùn)練時(shí)有有限數(shù)量的UKCs;開集識(shí)別訓(xùn)練時(shí)只有KKCs,測(cè)試時(shí)有UUCs,需要準(zhǔn)確分類KKCs同時(shí)需要正確的策略拒絕UUCs。

由于Zero-shot learning和Few-shot?learning兩個(gè)領(lǐng)域是2015年左右提出的,因此發(fā)展速度還比較快,也有一些比較成熟的模型了,但Open set recognition是2020年之后才提出來的,雖然有一些算法已經(jīng)開始出現(xiàn),終究還是處于起步階段,所以我期望看到開集識(shí)別有更成熟的方案被提出,我也會(huì)持續(xù)關(guān)注。關(guān)于自己課題組的項(xiàng)目,我只能說盡力走好每一步吧,實(shí)在沒有解決的方法那只能在輸入模型之前先用他人的方案過濾掉已知漏洞的數(shù)據(jù)。