Bekerja dengan rangkaian saraf: senarai semak untuk penyahpepijatan

Bekerja dengan rangkaian saraf: senarai semak untuk penyahpepijatan

Kod produk perisian pembelajaran mesin selalunya rumit dan agak mengelirukan. Mengesan dan menghapuskan pepijat di dalamnya adalah tugas intensif sumber. Malah yang paling mudah rangkaian neural suapan memerlukan pendekatan yang serius terhadap seni bina rangkaian, permulaan pemberat dan pengoptimuman rangkaian. Kesilapan kecil boleh membawa kepada masalah yang tidak menyenangkan.

Artikel ini adalah tentang algoritma untuk menyahpepijat rangkaian saraf anda.

Skillbox mengesyorkan: Kursus praktikal Pembangun Python dari awal.

Kami mengingatkan: untuk semua pembaca "Habr" - diskaun sebanyak 10 rubel apabila mendaftar dalam mana-mana kursus Skillbox menggunakan kod promosi "Habr".

Algoritma ini terdiri daripada lima peringkat:

  • permulaan yang mudah;
  • pengesahan kerugian;
  • menyemak keputusan perantaraan dan sambungan;
  • diagnostik parameter;
  • kawalan kerja.

Jika sesuatu kelihatan lebih menarik kepada anda daripada yang lain, anda boleh segera melangkau ke bahagian ini.

Permulaan yang mudah

Rangkaian saraf dengan seni bina yang kompleks, penyelarasan dan penjadual kadar pembelajaran adalah lebih sukar untuk dinyahpepijat daripada rangkaian biasa. Kami agak rumit di sini, kerana perkara itu sendiri secara tidak langsung berkaitan dengan penyahpepijatan, tetapi ini masih merupakan cadangan penting.

Permulaan yang mudah ialah mencipta model yang dipermudahkan dan melatihnya pada satu set (titik) data.

Mula-mula kita buat model yang dipermudahkan

Untuk bermula dengan cepat, kami membuat rangkaian kecil dengan satu lapisan tersembunyi dan menyemak sama ada semuanya berfungsi dengan betul. Kemudian kami secara beransur-ansur merumitkan model, menyemak setiap aspek baharu strukturnya (lapisan tambahan, parameter, dll.), dan teruskan.

Kami melatih model pada satu set (titik) data

Sebagai semakan kewarasan pantas untuk projek anda, anda boleh menggunakan satu atau dua titik data latihan untuk mengesahkan sama ada sistem berfungsi dengan betul. Rangkaian saraf mesti menunjukkan ketepatan 100% dalam latihan dan ujian. Jika ini tidak berlaku, maka sama ada model itu terlalu kecil atau anda sudah mempunyai pepijat.

Walaupun semuanya baik-baik saja, sediakan model untuk satu atau lebih zaman sebelum meneruskan.

Penilaian kerugian

Anggaran kerugian ialah cara utama untuk memperhalusi prestasi model. Anda perlu memastikan bahawa kerugian adalah bersesuaian dengan masalah dan bahawa fungsi kehilangan dinilai pada skala yang betul. Jika anda menggunakan lebih daripada satu jenis kerugian, pastikan semuanya dalam susunan yang sama dan diskalakan dengan betul.

Adalah penting untuk memberi perhatian kepada kerugian awal. Semak sejauh mana keputusan sebenar adalah dengan hasil yang dijangkakan jika model bermula dengan tekaan rawak. DALAM Kerja Andrey Karpathy mencadangkan perkara berikut:: β€œPastikan anda mendapat hasil yang anda jangkakan apabila anda bermula dengan sebilangan kecil parameter. Adalah lebih baik untuk segera menyemak kehilangan data (dengan tahap regularisasi ditetapkan kepada sifar). Sebagai contoh, untuk CIFAR-10 dengan pengelas Softmax, kami menjangkakan kerugian awal ialah 2.302 kerana kebarangkalian meresap yang dijangkakan ialah 0,1 untuk setiap kelas (kerana terdapat 10 kelas) dan kehilangan Softmax ialah kemungkinan log negatif bagi kelas yang betul. sebagai βˆ’ ln (0.1) = 2.302.”

Untuk contoh binari, pengiraan yang serupa hanya dibuat untuk setiap kelas. Di sini, sebagai contoh, ialah data: 20% 0 dan 80% 1. Kerugian awal yang dijangkakan ialah sehingga –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Jika keputusan lebih besar daripada 1, ini mungkin menunjukkan bahawa berat rangkaian saraf tidak seimbang dengan betul atau data tidak dinormalisasi.

Menyemak keputusan perantaraan dan sambungan

Untuk menyahpepijat rangkaian saraf, adalah perlu untuk memahami dinamik proses dalam rangkaian dan peranan lapisan perantaraan individu semasa ia disambungkan. Berikut ialah ralat biasa yang mungkin anda hadapi:

  • ungkapan yang salah untuk kemas kini gradle;
  • kemas kini berat tidak digunakan;
  • kecerunan yang meletup.

Jika nilai kecerunan adalah sifar, ini bermakna kadar pembelajaran dalam pengoptimum adalah terlalu perlahan, atau anda menghadapi ungkapan yang salah untuk mengemas kini kecerunan.

Di samping itu, adalah perlu untuk memantau nilai fungsi pengaktifan, berat dan kemas kini setiap lapisan. Contohnya, magnitud kemas kini parameter (berat dan berat sebelah) sepatutnya 1-e3.

Terdapat fenomena yang dipanggil "Dying ReLU" atau "masalah kecerunan yang hilang", apabila neuron ReLU akan mengeluarkan sifar selepas mempelajari nilai bias negatif yang besar untuk pemberatnya. Neuron ini tidak pernah dipecat lagi pada mana-mana titik dalam data.

Anda boleh menggunakan semakan kecerunan untuk mengenal pasti ralat ini dengan menganggarkan kecerunan menggunakan pendekatan berangka. Jika ia hampir dengan kecerunan yang dikira, maka perambatan belakang telah dilaksanakan dengan betul. Untuk membuat semakan kecerunan, lihat sumber hebat ini daripada CS231 di sini ΠΈ di siniSerta pelajaran Andrew Nga mengenai topik ini.

Faizan Sheikh menunjukkan tiga kaedah utama untuk menggambarkan rangkaian saraf:

  • Pendahuluan ialah kaedah mudah yang menunjukkan kepada kita struktur umum model terlatih. Ini termasuk output bentuk atau penapis lapisan individu rangkaian saraf dan parameter dalam setiap lapisan.
  • Berasaskan pengaktifan. Di dalamnya, kami menguraikan pengaktifan neuron individu atau kumpulan neuron untuk memahami fungsinya.
  • Berdasarkan kecerunan. Kaedah ini cenderung untuk memanipulasi kecerunan yang terbentuk daripada hantaran ke hadapan dan ke belakang latihan model (termasuk peta saliency dan peta pengaktifan kelas).

Terdapat beberapa alat berguna untuk menggambarkan pengaktifan dan sambungan lapisan individu, cth. ConX ΠΈ Tensorboard.

Bekerja dengan rangkaian saraf: senarai semak untuk penyahpepijatan

Diagnostik parameter

Rangkaian saraf mempunyai banyak parameter yang berinteraksi antara satu sama lain, yang merumitkan pengoptimuman. Sebenarnya, bahagian ini adalah subjek penyelidikan aktif oleh pakar, jadi cadangan di bawah harus dipertimbangkan hanya sebagai nasihat, titik permulaan untuk membina.

Saiz bungkusan (saiz kelompok) - Jika anda mahu saiz kelompok cukup besar untuk mendapatkan anggaran kecerunan ralat yang tepat, tetapi cukup kecil untuk keturunan kecerunan stokastik (SGD) untuk mengatur rangkaian anda. Saiz kelompok yang kecil akan membawa kepada penumpuan yang cepat disebabkan oleh bunyi semasa proses latihan dan seterusnya kepada kesukaran pengoptimuman. Ini diterangkan dengan lebih terperinci di sini.

Kadar pembelajaran - terlalu rendah akan membawa kepada penumpuan yang perlahan atau risiko tersekat dalam minima tempatan. Pada masa yang sama, kadar pembelajaran yang tinggi akan menyebabkan perbezaan pengoptimuman kerana anda berisiko melompat melalui bahagian dalam tetapi sempit fungsi kehilangan. Cuba gunakan penjadualan kelajuan untuk mengurangkannya semasa melatih rangkaian saraf. Terkini dengan CS231n terdapat bahagian besar khusus untuk masalah ini.

Keratan kecerunanβ€Š β€” memangkas kecerunan parameter semasa perambatan belakang pada nilai maksimum atau norma marginal. Berguna untuk menyelesaikan masalah sebarang kecerunan yang meletup yang mungkin anda hadapi dalam titik tiga.

Normalisasi kelompok - digunakan untuk menormalkan data input setiap lapisan, yang membolehkan kami menyelesaikan masalah anjakan kovariat dalaman. Jika anda menggunakan Dropout dan Batch Norma bersama-sama, lihat artikel ini.

Keturunan kecerunan stokastik (SGD) β€” terdapat beberapa jenis SGD yang menggunakan momentum, kadar pembelajaran adaptif dan kaedah Nesterov. Walau bagaimanapun, tiada satu pun daripada mereka mempunyai kelebihan yang jelas dari segi kecekapan pembelajaran dan generalisasi (butiran di sini).

Regularisasi - adalah penting untuk membina model yang boleh digeneralisasikan, kerana ia menambah penalti untuk kerumitan model atau nilai parameter yang melampau. Ini ialah cara untuk mengurangkan varians model tanpa meningkatkan berat sebelahnya dengan ketara. Lagi maklumat terperinci - di sini.

Untuk menilai sendiri segala-galanya, anda perlu melumpuhkan penyelarasan dan menyemak sendiri kecerunan kehilangan data.

Keciciran adalah kaedah lain untuk memperkemas rangkaian anda untuk mengelakkan kesesakan. Semasa latihan, keciciran dijalankan hanya dengan mengekalkan aktiviti neuron dengan kebarangkalian tertentu p (hiperparameter) atau menetapkannya kepada sifar dalam kes yang bertentangan. Akibatnya, rangkaian mesti menggunakan subset parameter yang berbeza untuk setiap kelompok latihan, yang mengurangkan perubahan dalam parameter tertentu yang menjadi dominan.

Penting: Jika anda menggunakan kedua-dua keciciran dan penormalan kelompok, berhati-hati tentang susunan operasi ini atau bahkan menggunakannya bersama-sama. Semua ini masih aktif dibincangkan dan ditambah. Berikut adalah dua perbincangan penting mengenai topik ini pada Stackoverflow ΠΈ arkib.

Kawalan kerja

Ini mengenai mendokumentasikan aliran kerja dan percubaan. Jika anda tidak mendokumenkan apa-apa, anda mungkin terlupa, contohnya, kadar pembelajaran atau pemberat kelas yang digunakan. Terima kasih kepada kawalan, anda boleh melihat dan menghasilkan semula percubaan sebelumnya dengan mudah. Ini membolehkan anda mengurangkan bilangan percubaan pendua.

Walau bagaimanapun, dokumentasi manual boleh menjadi tugas yang sukar dalam kes jumlah kerja yang besar. Di sinilah alatan seperti Comet.ml datang untuk membantu anda mengelog set data, perubahan kod, sejarah percubaan dan model pengeluaran secara automatik, termasuk maklumat penting tentang model anda (hiperparameter, metrik prestasi model dan maklumat persekitaran).

Rangkaian saraf boleh menjadi sangat sensitif kepada perubahan kecil, dan ini akan membawa kepada penurunan dalam prestasi model. Menjejak dan mendokumentasikan kerja anda ialah langkah pertama yang boleh anda ambil untuk menyeragamkan persekitaran dan pemodelan anda.

Bekerja dengan rangkaian saraf: senarai semak untuk penyahpepijatan

Saya harap catatan ini boleh menjadi titik permulaan untuk anda mula menyahpepijat rangkaian neural anda.

Skillbox mengesyorkan:

Sumber: www.habr.com

Tambah komen