Analisis Sensitivitas dalam Jaringan Saraf Tiruan

14

Mengikuti pertanyaan yang sudah dijawab ( Mengekstraksi bobot penting dari jaringan umpan-maju Satu-Lapisan ) Saya mencari kesimpulan tentang relevansi input dalam jaringan saraf.

Mempertimbangkan jaring yang dalam, di mana merekonstruksi kepentingan input dengan mundur melewati lapisan-lapisan dari simpul keluaran yang menarik mungkin sulit atau memakan waktu, saya bertanya-tanya apakah ada beberapa kerangka teori dalam melakukan analisis sensitivitas untuk jaringan saraf, pada dasarnya sedikit mengubah dan masukan dan pertimbangkan bagaimana simpul ouptut minat berubah.

Apakah ada cara kanonik untuk melakukan semacam analisis sensitivitas dalam jaringan saraf?

Saya akan sangat menyambut beberapa kode Python untuk melakukannya, jika ada

Tommaso Guerrini
sumber

Jawaban:

12

Analisis sensitivitas yang Anda sarankan berhubungan dengan memeriksa turunan parsial dari output sehubungan dengan input. Katakanlah vektor keluaran diberikan oleh , di mana adalah vektor input dan adalah fungsi yang diimplementasikan oleh jaringan. The Jacobian dari output wrt input adalah:yRmy=f(x)xRdf

Jij(x)=xjfi(x)

Jacobian memberikan tingkat perubahan lokal dari setiap output dengan setiap input, sehingga ia memberi tahu kita bagaimana akan berperilaku sebagai respons terhadap gangguan yang sangat kecil. Jika kita mulai dengan input dan menambahkan nilai sangat kecil ke input , kita mengharapkan output ke - meningkat dengan .fxΔjiΔJij(x)

Jika memiliki besar besar, itu berarti bahwa output sensitif terhadap input di sekitar . Karena , secara umum, nonlinier, pengertian sensitivitas ini bergantung pada input; mungkin besar di beberapa daerah dan hampir nol di tempat lain. Jika Anda menginginkan semacam ukuran ringkasan tentang seberapa kuat output bergantung pada input, Anda harus menggabungkan beberapa nilai input. Misalnya, Anda dapat mengambil nilai absolut dari Jacobian, rata-rata atas semua input dalam set pelatihan (yang bertindak sebagai pengganti untuk nilai yang diharapkan dengan distribusi input yang mendasarinya). Tentu saja, ringkasan seperti ini pada akhirnya akan membuang informasi, sehingga bisa menyesatkan dalam beberapa keadaan.Jij(x)ijxf

Anda bisa menggunakan aturan rantai untuk mendapatkan ekspresi untuk Jacobian, mirip dengan bagaimana Anda akan mendapatkan gradien dari fungsi kehilangan wrt parameter untuk digunakan dengan backprop. Anda juga dapat menghitungnya menggunakan diferensiasi otomatis, menggunakan perpustakaan seperti Theano, TensorFlow, dll. Tidak ada banyak alasan untuk melakukan diferensiasi terbatas (yaitu benar-benar mensimulasikan gangguan dan mengukur perubahan dalam output), kecuali fungsi yang diterapkan oleh jaringan Anda tidak dapat dibedakan ( dalam hal ini Jacobian tidak ada).

Sepasang peringatan: Jika input memiliki unit / skala yang berbeda satu sama lain, sensitivitasnya juga akan memiliki unit / skala yang berbeda, dan tidak dapat dibandingkan secara langsung. Membakukan / menskalakan input adalah salah satu solusi yang memungkinkan. Yang juga penting untuk diingat adalah bahwa jenis analisis ini memberi tahu kita tentang model itu sendiri, tetapi belum tentu distribusi yang mendasari yang menghasilkan data. Misalnya, jika dua input berkorelasi, model mungkin berakhir menggunakan yang pertama tetapi bukan yang kedua. Dalam hal ini, kami akan menemukan bahwa sensitivitas tinggi untuk input pertama dan rendah untuk input kedua, tetapi tidak boleh menyimpulkan bahwa input pertama secara inheren lebih penting untuk memprediksi output secara umum.

Artikel ini harus menarik.

pengguna20160
sumber
jawaban bagus dan artikel bagus! jika ada yang tertarik menerapkan metode ini, Anda dapat menemukan implementasi bagus perhitungan jacobian di sini: medium.com/unit8-machine-learning-publication/…
pcko1