
Temukan cara mengelabui CNN dengan gambar yang tidak terduga, seperti kucing yang sebenarnya adalah ikan mas! Pelajari cara menghasilkan musuh untuk convolutional neural network (CNN) dengan artikel informatif ini.
AI telah ada di mana-mana dalam kehidupan kita sehari-hari, dengan banyak aplikasi yang dikembangkan untuk mengotomatiskan pekerjaan manual. Hal ini pasti meningkatkan persaingan untuk pekerjaan di pasar. Akibat persaingan yang ketat ini, banyak lulusan muda yang terus-menerus ditolak karena berbeda.
Salah satu lulusan tersebut adalah Robert. Dia adalah seorang pemuda yang tinggal di rumah satu kamar mencari pekerjaan. Robert telah melakukan kesalahan dalam tekniknya. Dia memasuki dunia AI lebih lambat dari teman-teman satu angkatannya. Sementara banyak temannya melakukan magang di berbagai perusahaan, Robert mulai belajar tentang jaringan Neural, hutan acak, dll.
Waktu berlalu, dan sudah waktunya untuk musim penempatan universitasnya. Dia terus melamar ke banyak perusahaan. Namun, dia selalu ditolak. Merasa kecewa, dia mulai menggunakan peluang di luar kampus.
Suatu hari dia pulang ke rumah setelah wawancara. Dalam perjalanan pulang, dia melihat seekor kucing di dalam kotak kardus sedang mengerang. Dia melihat kucing itu, yang benar-benar kurus. Itu hampir tidak memiliki daging. Dia merasa sedih untuk kucing malang itu dan memutuskan untuk memeliharanya.
Setelah beberapa hari, dia mengetahui bahwa dia diharuskan membayar pajak untuk memelihara hewan peliharaan di rumahnya. Dia mulai mengkhawatirkan biaya karena dia hidup dengan fasilitas minimum.
Dia meneliti cara-cara untuk menghindari membayar pajak. Oleh karena itu, dia menelusuri web untuk mencari ide. Satu situs web mencantumkan tarif pajak untuk berbagai jenis hewan. Dia menemukan dari artikel bahwa tidak ada pajak untuk memelihara ikan mas.
Beruntung baginya, pemerintahnya baru-baru ini meluncurkan proses pendaftaran otomatis. Dia memeriksa proses pendaftaran dan menemukan bahwa dia perlu mengirimkan gambar kucing ke dalam aplikasi. Sebuah model kemudian akan menganalisis gambar tersebut dan menentukan jumlah pajak yang tepat untuk dibebankan.
Karena itu, dia mulai membuat rencana. Namun, dia tidak tahu apakah manusia mengawasi identifikasi. Oleh karena itu, ia harus memanipulasi gambar tersebut agar model mengenalinya sebagai ikan mas, tetapi manusia masih dapat menemukannya sebagai kucing.
Jika terjadi kesalahan, dia bisa menyalahkan modelnya. Menjadi pemula di ML, dia mulai mempelajari ML permusuhan.
Sambil menyelidiki hal ini, ia juga mencoba mendapatkan informasi mengenai model tersebut. Dia menemukan bahwa perusahaan kota setempat menggunakan model resnet50 terlatih untuk mengklasifikasikan gambar. Untungnya, model ini telah tersedia secara luas untuk semua orang selama bertahun-tahun.
Resnet50 adalah model dengan kedalaman 50 lapisan. Ini memiliki blok modul konvolusional, diikuti oleh lapisan linier yang mengarah ke keluaran. Itu dilatih pada kumpulan data ImageNet. Kumpulan data ini berisi jutaan gambar dari berbagai kategori. Gambar berikut adalah kumpulan transformasi singkat yang dialami gambar masukan sebelum menghasilkan vektor probabilitas keluaran.
Gambar di atas mengilustrasikan kompleksitas perhitungan dalam jaringan saraf yang dirancang untuk mengklasifikasikan gambar ke dalam kategori yang berbeda. Dibutuhkan gambar dengan bentuk (3.224.224) sebagai masukan. Setelah semua perhitungan, larik (1.1000) muncul, yang berisi probabilitas gambar milik kelas masing-masing.
Dengan informasi ini, dia mulai mengerjakan rencananya. Dia mengambil gambar kucingnya dan kemudian memverifikasi kelas tempat kucingnya diklasifikasikan. Setelah menyelesaikan pra-pemrosesan dan transformasi yang diperlukan, dia memuat model resnet50 dari subpaket torchvision.models.
dari torchvision.models impor resnet50
#mengimpor model
model = resnet50(dilatih sebelumnya=benar)
#beralih ke mode inferensi.
model.eval()
#menguji gambar.
pred=model(tensor_kucing)
cetak(imagenet_classes[pred.max(dim=1)[1].item()])
Dalam cuplikan di atas, imagenet_classes adalah file JSON yang berisi indeks ke pemetaan kelas dari kumpulan data ImageNet. Dia melihat output dari model.
Output asli dari model terbaru
Setelah memastikan semuanya beres, dia mulai mengerjakan proyeknya. Dia membagi seluruh pekerjaan menjadi dua bagian:
Untuk mengganggu model agar tidak mengidentifikasi kucing sebagai kucing. Arahkan model untuk mengidentifikasi kucingnya sebagai ikan mas.
Bagian-1: Mendapatkan model untuk salah mengklasifikasikan.
Nah, sekarang dia memverifikasi fungsionalitas modelnya. Dia tercengang, “Apa cara yang mungkin untuk menghindari model mendeteksi gambar sebagai kucing?”
Ada banyak cara di mana dia bisa melakukan itu. Dia bingung. Merasa bingung, ia meminta pendapat temannya..
“Ada banyak cara yang bisa kita lakukan. Namun, pendekatan yang paling sederhana adalah dengan menambahkan noise pada gambar.”
Temannya menjelaskan sebagai berikut,
“Satu-satunya yang dilihat model adalah matriks angka. Itu membuat beberapa perhitungan menggunakan entri dari matriks. Jika kita sedikit memanipulasi angka, kita dapat menemukan cara untuk memanipulasi hasilnya.” “Namun, kami perlu memastikan bahwa gambar tersebut masih terlihat seperti aslinya di mata manusia. Jadi, mari kita batasi manipulasi ke suatu rentang. Ucapkan (ϵ, –ϵ). “
Setelah mendapat arahan, Robert kembali ke kamarnya dan mulai membuat kode.
Jadi, pada dasarnya, dia mencoba mengubah entri array dengan jumlah yang sedikit, yaitu, manipulasi harus berada dalam rentang ( ϵ, — ϵ) di mana ϵ adalah nilai kecil. Tapi kebisingan apa yang harus kita gunakan untuk memanipulasi perhitungan ini?
Oke. Dia telah menemukan arah. Dia perlu memanipulasi nilai array sehingga nilai probabilitas akhir bisa dimanipulasi. Namun model juga tidak boleh mendeteksi semua kucing sebagai ikan mas. Oleh karena itu, perubahan harus menit.
Ini cuplikan kode di PyTorch yang dia gunakan.
# Menginisialisasi derau dan menyetel pengoptimal untuk memperbarui derau pada setiap iterasi. kebisingan = torch.zeros_like(tensor_kucing, membutuhkan_grad=True) opt = optim.SGD([noise]lr=1e-1)
# Mengatur rentang manipulasi.
epsilon = 2./255
# Memperbarui kebisingan secara iteratif, untuk meningkatkan nilai kerugian.
untuk t dalam rentang (30):
pred = model(norm(cat_tensor + delta))
kerugian = -nn.CrossEntropyLoss()(pred, obor.LongTensor([341]))
#print untuk setiap 5 iterasi.
jika t% 5 == 0:
cetak(t, rugi.item())
# Hapus gradien
opt.zero_grad()
#backprop
rugi.mundur()
opt.langkah()
#batasi rentang manipulasi
delta.data.clamp_(-epsilon, epsilon)
Dia mendapatkan tren berikut dalam nilai kerugian dengan kode di atas.
Tren peningkatan nilai kerugian setiap lima epoch.
Terakhir, probabilitas sebenarnya dari kelas asli, “kucing”, untuk gambar yang dimanipulasi adalah 1,49*10–8. Sedangkan probabilitas prediksi untuk citra asli adalah ~0,996. Berikut ini adalah gambar dari noise akhir:
Kebisingan ditambahkan ke gambar untuk menjadikannya musuh.
Dia melihat hasilnya. Model tersebut kini memprediksi kucingnya sebagai chihuahua. Itu memiliki probabilitas 0,99998.
Bagian-2: Memaksa model untuk mendeteksi gambar sebagai ikan mas.
Dia mengerti apa yang perlu dia lakukan dengan melihat kode sebelumnya. Dia hanya perlu memanipulasi fungsi kerugian. Jika dia melakukan itu, maka pekerjaannya akan selesai.
“Bagaimana saya harus memanipulasi kerugian?” pikir Robert. Sebelumnya, dia hanya mencoba memperbesar kesalahan antara prediksi dan target semula. Setelah beberapa menit, dia menemukan bahwa dia juga harus meminimalkan kesalahan antara prediksi model dan label target untuk “ikan mas”.
Oleh karena itu, dia sedikit mengubah langkah pengoptimalan.
rugi = (-nn.CrossEntropyLoss()(pred, obor.LongTensor([248])) + nn.CrossEntropyLoss()(pred, torch.LongTensor([1])))
Dia melatih model dengan fungsi kerugian baru. Setelah berlatih selama 30 zaman, dia tidak puas dengan hasilnya. Oleh karena itu, dia berlatih untuk jumlah zaman yang lebih signifikan.
Sekarang, dia melihat hasil akhirnya:
max_class = pred.max(dim=1)[1].item() print(“Predicted class: “, imagenet_classes[max_class]) print(“Prediksi probabilitas:”, nn.Softmax(dim=1)(pred)[0,max_class].barang())
Yang memberikan output:
Kelas prediksi: ikan mas Probabilitas prediksi: 0,9999934434890747
Setelah melihat hasilnya, dia puas. Perlahan ia menjadi penasaran. Dia ingin melihat apakah noise yang ditambahkan ke gambar memiliki pola. Oleh karena itu, dia memplot kebisingan menggunakan plt.imshow.
Berikut penampakan kebisingannya:
Kebisingan untuk memanipulasi pengenalan.
Dia tidak memperhatikan pola tertentu yang telanjang di mata manusia. Dia ingin menyelidiki lebih lanjut. Namun, dia ingat bahwa dia hanya punya waktu sehari sebelum didenda karena tidak mendaftarkan hewan peliharaannya. Oleh karena itu, dia akhirnya memutuskan untuk mundur selangkah, membandingkan gambar yang dimanipulasi dengan gambar aslinya dan akhirnya mengirimkannya.
Asli vs Dimanipulasi. Perbandingan kedua gambar tersebut.
Dia menghela napas lega. Dia tidak melihat perbedaan antara dua gambar. Namun, dia dipenuhi dengan rasa takut dan rasa bersalah. Dia tidak ingin mendapat masalah. Satu-satunya pikiran yang tersisa di benaknya adalah, “Apa yang harus saya lakukan jika saya ketahuan?”
Setelah banyak berpikir selama sehari, saat itu adalah sore jam 4 sore di hari terakhir. Dia dengan enggan mengisi semua detail lamarannya dan mengunggah gambarnya. Namun, tepat sebelum dia mengklik kirim, dia mendapat telepon.
Dalam kasus normal, dia tidak akan mengangkat telepon. Namun, dia meragukan kebetulan yang aneh itu. Dia perlahan mengangkat panggilan itu.
“Selamat Robert. Kami menyambut Anda untuk bergabung dengan tim kami.” Suara wanita berdengung melalui speaker.
“Tim? Bolehkah saya tahu tentang apa ini?
“Ini tentang peran Insinyur ML yang Anda wawancarai bulan lalu. Saya telah mengirimkan rincian paket Anda dan surat maksud penawaran. Bisakah Anda menandatanganinya dan mengirimi saya surat konfirmasi?
“…” Dia bingung. Setelah ditolak oleh banyak perusahaan, dia akhirnya mengantongi pekerjaan. Dia tidak percaya.
“Robert?”
“Oh. Ya. Terima kasih banyak atas panggilannya. Saya akan segera mengirimkan salinan yang ditandatangani.” Robert menjawab dengan cepat dan memutuskan panggilan.
Dia berteriak dalam kebahagiaan. Setelah duduk, dia melihat layar komputernya. Dia tertawa selama beberapa detik, mengunggah gambar asli alih-alih yang dimanipulasi, dan mengirimkan lamaran.
Setelah mengirimkannya, dia memikirkan tentang apa yang telah dia lakukan selama beberapa hari terakhir. Dia tiba-tiba merasa malu dengan cara berpikirnya. “Mengapa saya berpikir seperti itu? Dunia bahkan tidak berputar di sekitarku. “
Dia ingin menangis ketika mengingat pikirannya tentang tertangkap basah dan cerita-cerita konyol lainnya yang dia bangun. Kisah ini adalah sesuatu yang tidak akan pernah dia bagikan dengan siapa pun. Menjernihkan pikirannya, dia perlahan berjalan keluar dari kamarnya, bersemangat tentang masa depan.
Ini adalah contoh singkat dan sederhana untuk menghasilkan contoh permusuhan. Saya awalnya tidak ingin mencoba pendekatan berbasis cerita ini sampai saya menjadi lebih baik dalam menulis. Tapi saya harus mulai dari suatu tempat. Saya harap Anda menemukan itu menyenangkan. Saya tahu bahwa Robert bukanlah karakter yang jelas dan sempurna. Saya ingin melakukannya dengan cara yang lebih baik juga. Tapi saya pikir karakter dan pengaturan masa depan saya akan sedikit lebih baik.
Ada teknik yang jauh lebih canggih yang memberikan hasil yang lebih baik dan tersembunyi. Pendekatan yang menggunakan metode berbeda seperti injeksi kesalahan, yang bergantung pada kesalahan yang melekat pada perangkat keras, dll. Bidang pembelajaran Mesin Adversarial meningkat pesat, dan kepentingannya akan terus meningkat seiring waktu karena semakin banyak perusahaan mencoba menggabungkan model ML dalam produk mereka.
Terima kasih telah membaca artikel ini sampai akhir. Kamu yang terbaik! Nantikan untuk mendapatkan pembaruan baru tentang artikel terbaru saya. Jangan ragu untuk berkomentar dengan saran dan pendapat Anda di bagian komentar. Semoga bertemu denganmu lagi! ✌️