Leifeng.com (Genel Hesap: Leifeng.com) AI Teknolojisi İncelemesi Not: Bu makale, "Brother Dow Sizi Güvenliği Öğrenmeye Götürüyor" serisinin üçüncüsüdür.İlk olarak AI Technology Review'de yayınlanmıştır ve izinsiz olarak yeniden basılamaz.
Genel Bakış
Bir önceki makale olan "Tartışmalı Örneklerin Temel Prensipleri" nde, karşıt örnekler üretmenin temel fikrini ortaya koyduk. Genel fikir, beyaz kutu saldırıları ve kara kutu saldırıları olarak ikiye ayrılır. Aradaki fark, kara kutu testinin modeli bir kara kutu olarak ele alması ve yalnızca örneği girmesidir. Tahmin sonuçlarını elde etmek için, beyaz kutu, kara kutu temelinde model parametreleri ve gradyanlar gibi bilgileri de elde edebilir. Bu makale, beyaz kutu saldırılarında ünlü DeepFool algoritmasını tanıtacak.
DeepFool'un temel ilkeleri
"FGSM Algorithm Attacking AI Model" de, FGSM'nin temel ilkelerini tanıttık. İyi bir soru, AI modelini kandırmak için orijinal görüntüde ne kadar değişiklik yapabiliriz? Başka bir deyişle, AI modelini aldatma amacına ulaşmak için orijinal görüntü mümkün olduğunca az nasıl değiştirilir? İlk olarak, orijinal görselde ne gibi değişiklikler yaptığımıza bir bakalım. Orijinal resmimizin x0 dosyası olduğunu ve rakip örneklemin x1 dosyası olduğunu ve orijinal görüntünün vektör olarak kaydedildiğini varsayalım.
#Original görüntü verileri
x0_img = image.load_img (x0_file, target_size = (299, 299))
x0 = image.img_to_array (x0_img)
Aynı şekilde, rakip örnek tarafından oluşturulan görüntü bir vektör olarak kaydedilir.
# Karşıt örnek veriler
x1_img = image.load_img (x1_file, target_size = (299, 299))
x1 = image.img_to_array (x1_img)
Orijinal görüntü ile rakip örnek arasındaki farkı hesaplayın, onu işaretsiz bir bayt türüne dönüştürün ve bir görüntü olarak kaydedin.
# Değişiklik miktarını hesaplayın
d = x1-x0
im = Image.fromarray (d.astype (np.uint8))
im.save (çıkış)
Klasik domuz yavrusu resmimizi orijinal görüntü olarak alarak, efekt aşağıdaki şekilde gösterilmiştir.
FGSM algoritması tarafından oluşturulan yüzleşme örnek görüntüsünün etkisi aşağıdaki şekilde gösterilmektedir.
Karşıt örneklemin orijinal görüntüye göre değişiminin etkisi aşağıdaki şekilde gösterilmektedir.
DeepFool ilk olarak S. Moosavi-Dezfooli, A. Fawzi ve P. Frossard tarafından "DeepFool: derin sinir ağlarını kandırmak için basit ve doğru bir yöntem" de önerildi. Örnek olarak en basit iki sınıflandırma problemini ele alalım: Şekilde gösterildiği gibi, bölütleme düzleminin düz bir çizgi olduğunu ve düz çizginin iki tarafının farklı sınıflandırma sonuçlarına karşılık geldiğini varsayalım.
Belirli bir noktanın sınıflandırma sonucunu değiştirmek istiyorsanız, segmentasyon düzlemini geçmelisiniz. Açıkçası, en kısa hareket mesafesi dikey bölme düzlemini hareket ettirmektir. Doğrusal cebirde, x noktasından Ax + By + C = 0 doğrusuna olan mesafe şu şekilde tanımlanır:
Vektörize edilmiş gösterim mesafesi aşağıdaki gibidir, burada w parametre matrisidir.
Uzantı olarak, ikili sınıflandırma probleminde, bölümleme düzlemi doğrusal olmadığında, hareket mesafesi çok küçük olduğunda bölümleme düzleminin yine de bu noktaya göre doğrusal bir bölümleme düzlemi olarak kabul edilebileceğini varsayıyoruz.Her yinelemede, nokta şu şekildedir: Küçük bir hareket mesafesiyle bölme düzlemine yaklaşmaya devam edin.
Hareket mesafesi küçük olduğu için, w parametre matrisi yerine bu noktanın eğimi kullanılabilir. Çoklu sınıflandırma problemi, iki sınıflandırma problemine benzer, ancak nokta farklı sınıflandırma etiketlerine geçtiğinde, yinelemeli hesaplamada en kısa mesafeli olanın seçilmesi gerekir.
Saldırı görüntüsü tanıma modeli
Saldırı örnekleri oluşturmanın temel ilkelerini tanıtmak için saldıran InceptionV3 modelini örnek olarak alın. Keras'ın bu modeli yerleşiktir, bu yüzden onu doğrudan kullanabiliriz. İlk katmanın girdisi, girdi katmanı olarak doğrudan modelden elde edilir ve son katmanın çıktısı çıktı katmanıdır.
model = inception_v3.InceptionV3
model_input_layer = model.layers.input
model_output_layer = model.layers.output
Sonra domuz yavrusu gibi saldırdığımız resmi yükleyin. Performans nedenlerinden ötürü, NumPy varsayılan değişken atamasının aynı belleğe atıfta bulunacağı burada vurgulanmalıdır, bu nedenle görüntü verilerinin bir kopyasını manuel olarak zorlamak için np.copy kullanmamız gerekir.
img = image.load_img ("../ resim / pig.jpg", target_size = (299, 299))
original_image = image.img_to_array (img)
hacked_image = np.copy (orijinal_resim)
Çıplak gözle kabul edilebilir olanın ötesinde görüntüde aşırı değişikliklerden kaçınmak için bir eşik belirlememiz gerekir.
max_change_above = orijinal_image + 0.01
max_change_below = orijinal_resim-0.01
Daha sonra, en kritik üç işlevi tanımlamamız gerekir.Kayıp işlevini bir ekmek kızartma makinesi olarak tanınma olasılığı olarak tanımlarız. Bu nedenle, maksimum kayıp işlevini sürekli olarak takip etmek için gradyan yükselme algoritmasını kullanmamız gerekir. Objecttypeto_fake değişkeni, karşılık gelen ekmek kızartma makinesini tanımlar. InceptionV3'teki ekmek makinesinin etiketi 859'dur.
object_type_to_fake = 859
Kayıp fonksiyonu ile, karşılık gelen gradyan fonksiyonunu Keras arayüzü üzerinden elde edebiliriz. Son olarak, K. işlevi aracılığıyla bir Keras işlevi örneği elde edilir İşlevin girdi listesi, girdi katmanı ve geçerli eğitim modu veya test modu işareti öğrenme_fazasıdır ve çıktı listesi, kayıp işlevi ve gradyandır. K. function kullanımı için Keras'ın çevrimiçi belgelerini okumanız önerilir.
cost_function = model_output_layer
gradient_function = K.gradients (maliyet_işlevi, model_input_layer)
grab_cost_and_gradients_from_model =
K.function (,
)
Yineleme dışında, DeepFool ve FGSM'nin algoritmaları tamamen aynıdır. Yinelemede, gradyanı NumPy'nin inalg.norm işlevi aracılığıyla işler ve ardından görüntü içeriğini yinelemeli olarak güncelleriz.
r = gradyan * maliyet / güç (np.linalg.norm (gradyanlar), 2)
hacked_image + = r
hacked_image = np.clip (hacked_image, max_change_below, max_change_above)
hacked_image = np.clip (hacked_image, -1.0, 1.0)
Burada, işlev prototipi olan linalg.norm işlevine özel bir giriş gerekir:
x_norm = np.linalg.norm (x, ord = None, axis = None, keepdims = False)
Ord, matrisin normunu temsil eder.
ord = 1, sütun toplamının maksimum değeri, ilk normal biçim
ord = 2, özdeğer bulun ve ardından maksimum özdeğerin karekökünü bulun; ikinci normal biçim aynı zamanda varsayılan değerdir
eksen, işleme türünü temsil eder.
eksen = 1, satır vektörü ile işlem anlamına gelir, çoklu satır vektörlerinin normunu bulun
eksen = 0, sütun vektörüyle işlem anlamına gelir, birden çok sütun vektörünün normunu bulun
eksen = Yok, matris normunu temsil eder.
Mac'imde 2 dakika ve 27 yineleme eğitiminden sonra, yeni bir yerli domuz görüntüsü elde edildi, ancak makine öğrenimi modeli bunu% 86.086 olasılıkla bir ekmek kızartma makinesi olarak tanımladı.
parti: 20 Maliyet: 18.707792%
toplu iş: 21 Maliyet: 26.560178%
toplu iş: 22 Maliyet: 37.765652%
parti: 23 Maliyet: 50.175613%
parti: 24 Maliyet: 65.024394%
parti: 25 Maliyet: 71.812165%
parti: 26 Maliyet: 73.846906%
parti: 27 Maliyet: 86.086935%
DeepFool algoritmasına göre ekmek kızartma makinesi olarak tanımlanan evcil bir domuzun resim efekti aşağıdaki gibidir.
Aşağıdaki şekilde gösterildiği gibi orijinal görüntüye göre değişiklik miktarını hesaplayın, bu açıkça FGSM değişiklik miktarından daha azdır.
Referanslar
S. Moosavi-Dezfooli, A. Fawzi, P. Frossard: DeepFool: Derin sinir ağlarını kandırmak için basit ve doğru bir yöntem. Bilgisayarla Görme ve Örüntü Tanıma (CVPR 16), IEEE, 2016.
Liu Yan, "Web Security Reinforcement Learning and GAN", China Machinery Industry Press