Semua jawaban di sini bagus, tetapi, untuk beberapa alasan, sejauh ini tidak ada yang dikatakan mengapa efek ini tidak mengejutkan Anda. Saya akan mengisi yang kosong.
Biarkan saya mulai dengan satu persyaratan yang sangat penting untuk ini untuk bekerja: penyerang harus tahu arsitektur jaringan saraf (jumlah lapisan, ukuran setiap lapisan, dll). Selain itu, dalam semua kasus yang saya periksa sendiri, penyerang tahu snapshot dari model yang digunakan dalam produksi, yaitu semua bobot. Dengan kata lain, "kode sumber" dari jaringan bukanlah rahasia.
Anda tidak dapat menipu jaringan saraf jika Anda memperlakukannya seperti kotak hitam. Dan Anda tidak dapat menggunakan kembali gambar bodoh yang sama untuk jaringan yang berbeda. Bahkan, Anda harus "melatih" jaringan target sendiri, dan di sini dengan pelatihan yang saya maksud adalah berlari maju dan melewati backprop, tetapi secara khusus dibuat untuk tujuan lain.
Mengapa ini bekerja sama sekali?
Sekarang, inilah intuisinya. Gambar berdimensi sangat tinggi: bahkan ruang gambar berwarna berukuran 32x32 berukuran kecil 3 * 32 * 32 = 3072
. Tetapi set data pelatihan relatif kecil dan berisi gambar nyata, yang semuanya memiliki beberapa struktur dan sifat statistik yang bagus (misalnya kelancaran warna). Jadi set data pelatihan terletak pada bermacam-macam kecil ruang gambar yang sangat besar ini.
Jaringan konvolusional bekerja sangat baik pada manifold ini, tetapi pada dasarnya, tidak tahu apa-apa tentang sisa ruang. Klasifikasi titik di luar manifold hanyalah ekstrapolasi linier berdasarkan pada poin di dalam manifold. Tidak mengherankan bahwa beberapa poin tertentu diekstrapolasi secara tidak benar. Penyerang hanya perlu cara untuk menavigasi ke titik terdekat dari titik-titik ini.
Contoh
Biarkan saya memberi Anda contoh nyata bagaimana menipu jaringan saraf. Untuk membuatnya ringkas, saya akan menggunakan jaringan regresi logistik yang sangat sederhana dengan satu nonlinier (sigmoid). Dibutuhkan input 10 dimensi x
, menghitung angka tunggal p=sigmoid(W.dot(x))
, yang merupakan probabilitas kelas 1 (dibandingkan kelas 0).
Misalkan Anda tahu W=(-1, -1, 1, -1, 1, -1, 1, 1, -1, 1)
dan mulai dengan input x=(2, -1, 3, -2, 2, 2, 1, -4, 5, 1)
. Forward pass memberi sigmoid(W.dot(x))=0.0474
atau 95% probabilitas yaitu x
kelas 0 contoh.
Kami ingin menemukan contoh lain y
, yang sangat dekat x
tetapi diklasifikasikan oleh jaringan sebagai 1. Perhatikan x
10-dimensi, jadi kami memiliki kebebasan untuk mendorong 10 nilai, yang banyak.
Karena W[0]=-1
negatif, lebih baik memiliki yang kecil y[0]
untuk memberikan kontribusi total yang y[0]*W[0]
kecil. Karena itu, mari kita buat y[0]=x[0]-0.5=1.5
. Demikian juga, W[2]=1
positif, jadi lebih baik untuk meningkatkan y[2]
untuk membuat y[2]*W[2]
yang lebih besar: y[2]=x[2]+0.5=3.5
. Dan seterusnya.
Hasilnya adalah y=(1.5, -1.5, 3.5, -2.5, 2.5, 1.5, 1.5, -3.5, 4.5, 1.5)
, dan sigmoid(W.dot(y))=0.88
. Dengan satu perubahan ini kami meningkatkan probabilitas kelas 1 dari 5% menjadi 88%!
Generalisasi
Jika Anda melihat dengan teliti contoh sebelumnya, Anda akan melihat bahwa saya tahu persis bagaimana cara men-tweak x
untuk memindahkannya ke kelas target, karena saya tahu gradien jaringan. Apa yang saya lakukan sebenarnya adalah backpropagation , tetapi sehubungan dengan data, bukan bobot.
Secara umum, penyerang mulai dengan distribusi target (0, 0, ..., 1, 0, ..., 0)
(nol di mana-mana, kecuali untuk kelas yang ingin dicapai), backpropagate ke data dan membuat langkah kecil ke arah itu. Status jaringan tidak diperbarui.
Sekarang harus jelas bahwa itu adalah fitur umum dari jaringan umpan-maju yang menangani banyak data kecil, tidak peduli seberapa dalam atau sifat data (gambar, audio, video atau teks).
Ramuan
Cara paling sederhana untuk mencegah sistem agar tidak dibodohi adalah dengan menggunakan ansambel jaringan saraf, yaitu sistem yang mengumpulkan suara dari beberapa jaringan pada setiap permintaan. Jauh lebih sulit untuk melakukan backpropagate sehubungan dengan beberapa jaringan secara bersamaan. Penyerang mungkin mencoba melakukannya secara berurutan, satu jaringan pada satu waktu, tetapi pembaruan untuk satu jaringan mungkin dengan mudah mengacaukan hasil yang diperoleh untuk jaringan lain. Semakin banyak jaringan yang digunakan, serangan menjadi semakin kompleks.
Kemungkinan lain adalah untuk memperlancar input sebelum meneruskannya ke jaringan.
Penggunaan positif dari ide yang sama
Anda seharusnya tidak berpikir bahwa backpropagation ke gambar hanya memiliki aplikasi negatif. Teknik yang sangat mirip, yang disebut dekonvolusi , digunakan untuk visualisasi dan pemahaman yang lebih baik tentang apa yang telah dipelajari neuron.
Teknik ini memungkinkan mensintesis suatu gambar yang menyebabkan neuron tertentu terbakar, pada dasarnya melihat secara visual "apa yang dicari neuron", yang secara umum membuat jaringan saraf convolutional lebih mudah ditafsirkan.