1. 程式人生 > >DeepFool(迷惑深度學習分類模型)測試

DeepFool(迷惑深度學習分類模型)測試

      AI+網路安全是當前網路攻擊與防禦方向比較熱門和前沿的領域。同時網路安全中的漏洞挖掘、入侵檢測、異常流量等傳統任務也已經出現了大量基於深度學習的實現方法。然而當以深度學習為主流的人工智慧應用越來越廣泛之後,陸續又出現了對於人工智慧應用的攻擊,主要分為兩種:一是白盒測試,即深度學習的模型架構和引數都已經的情況下,這種場景的攻擊一般可以進行引數的修改來達到攻擊的效果;二是黑盒測試,即上述情況未知的情況下進行攻擊,這時候採用的攻擊手段主要是對抗樣本,對抗樣本(adversarial examples)這一概念在Szegedy et al. (2014b)中被提出:對輸入樣本故意新增一些人無法察覺的細微的干擾,導致模型以高置信度給出一個錯誤的輸出。對抗樣本現在已經廣泛應用於人臉識別、聲紋識別等相關應用場景。

(一)論文原理      

     本文的DeepFool模型(https://arxiv.org/pdf/1511.04599.pdf)是對抗樣本方法之一,它主要用以生成針對模型的minimal perturbation,且因為生成的是(近似)最小的干擾,所以可以用來估量模型的魯棒性。

     論文中,其原理首先從二分類推導,再進一步推廣到多分類中。

               

                          二分類多分類

即在二分類問題中,超平面是實現分類的基礎 ,那麼要改變某個樣本X0的分類,那麼最小的擾動就是將X0挪到超平面上,這個距離的代價最小。多分類的問題也是類似。

  (二)實驗測試

https://github.com/LTS4/DeepFool/blob/master/Python/test_deepfool.py從這個Pytorch程式碼進行測試,其程式碼寫得非常簡潔,其核心演算法如下:

while k_i == label and loop_i < max_iter:
        pert = np.inf
        fs[0, I[0]].backward(retain_graph=True)
        grad_orig = x.grad.data.cpu().numpy().copy()

        for k in range(1, num_classes):
            zero_gradients(x)

            fs[0, I[k]].backward(retain_graph=True)
            cur_grad = x.grad.data.cpu().numpy().copy()

            # set new w_k and new f_k
            w_k = cur_grad - grad_orig
            f_k = (fs[0, I[k]] - fs[0, I[0]]).data.cpu().numpy()

            pert_k = abs(f_k)/np.linalg.norm(w_k.flatten())

            # determine which w_k to use
            if pert_k < pert:
                pert = pert_k
                w = w_k

        # compute r_i and r_tot
        # Added 1e-4 for numerical stability
        r_i =  (pert+1e-4) * w / np.linalg.norm(w)
        r_tot = np.float32(r_tot + r_i)

        pert_image = image + (1+overshoot)*torch.from_numpy(r_tot)

        x = Variable(pert_image, requires_grad=True)
        fs = net.forward(x)
        k_i = np.argmax(fs.data.cpu().numpy().flatten())

        loop_i += 1

程式碼測試:

(1) 輸入熊貓的照片,得到的結果indri(大狐猴)

(2)大灰狼,擾動之後為:red wolf (紅狼)

(3)野兔,擾動之後為:Angora(安哥拉兔)


從上面可見,這種深度學習模型的應用設計 需要考慮到這種攻擊的情況 。