Saya melatih jaringan saraf dan kehilangan pelatihan berkurang, tetapi kehilangan validasi tidak, atau berkurang jauh lebih sedikit daripada yang saya harapkan, berdasarkan referensi atau percobaan dengan arsitektur dan data yang sangat mirip. Bagaimana saya bisa memperbaikinya?
Adapun pertanyaan
Apa yang harus saya lakukan ketika jaringan saraf saya tidak belajar?
dimana pertanyaan ini diilhami, pertanyaan ini sengaja dibiarkan umum sehingga pertanyaan lain tentang bagaimana mengurangi kesalahan generalisasi dari jaringan saraf ke tingkat yang telah terbukti dapat dicapai , dapat ditutup sebagai duplikat dari yang ini.
Lihat juga utas khusus di Meta:
neural-networks
deep-learning
DeltaIV
sumber
sumber
Jawaban:
Pertama-tama, mari kita sebutkan apa arti "jaringan saraf saya tidak menggeneralisasi dengan baik" dan apa bedanya dengan mengatakan "jaringan saraf saya tidak berkinerja baik" .
Saat melatih Jaringan Saraf Tiruan, Anda secara konstan mengevaluasinya pada satu set data berlabel yang disebut set pelatihan . Jika model Anda tidak berfungsi dengan baik dan tampaknya tidak belajar dari set pelatihan, Anda belum memiliki masalah generalisasi, sebagai gantinya silakan merujuk ke posting ini . Namun, jika model Anda mencapai kinerja yang memuaskan pada set pelatihan, tetapi tidak dapat melakukan dengan baik pada sebelumnya data yang tak terlihat (misalnya validasi / test set), maka Anda lakukan memiliki masalah generalisasi.
Mengapa model Anda tidak digeneralisasikan dengan benar?
Bagian terpenting adalah memahami mengapa jaringan Anda tidak menggeneralisasi dengan baik. Model Machine Learning berkapasitas tinggi memiliki kemampuan untuk menghafal set pelatihan, yang dapat menyebabkan overfitting .
Overfitting adalah keadaan di mana penduga telah mulai mempelajari set pelatihan dengan sangat baik sehingga telah mulai memodelkan kebisingan dalam sampel pelatihan (di samping semua hubungan yang bermanfaat).
Sebagai contoh, pada gambar di bawah ini kita dapat melihat bagaimana garis biru memiliki pakaian yang jelas.
Tetapi mengapa ini buruk?
Ketika mencoba mengevaluasi model kami pada data baru yang sebelumnya tidak terlihat (yaitu set validasi / tes), kinerja model akan jauh lebih buruk daripada yang kami harapkan.
Bagaimana mencegah overfitting?
Pada awal posting saya menyiratkan bahwa kompleksitas model Anda adalah apa yang sebenarnya menyebabkan overfitting, karena memungkinkan model untuk mengekstrak hubungan yang tidak perlu dari set pelatihan, yang memetakan kebisingan bawaannya. Cara termudah untuk mengurangi overfitting pada dasarnya adalah membatasi kapasitas model Anda. Teknik-teknik ini disebut teknik regularisasi .
Parameter norma hukuman . Ini menambahkan istilah tambahan untuk fungsi pembaruan berat masing-masing model, yang tergantung pada norma parameter. Tujuan istilah ini adalah untuk melawan pembaruan aktual (yaitu membatasi berapa berat setiap pembaruan dapat diperbarui). Ini membuat model lebih kuat untuk pencilan dan kebisingan. Contoh dari regularisasi semacam itu adalah regularisasi L1 dan L2 , yang dapat ditemukan pada regresi Lasso , Ridge dan Elastic Net .
Karena setiap lapisan (yang terhubung penuh) dalam fungsi jaringan saraf mirip dengan regresi linier sederhana, ini digunakan dalam Jaringan Syaraf. Penggunaan yang paling umum adalah mengatur setiap lapisan secara terpisah.
implementasi yang keras .
Berhenti lebih awal . Teknik ini mencoba untuk menghentikan fase pelatihan penduga sebelum waktunya, pada titik di mana ia telah belajar untuk mengekstrak semua hubungan yang bermakna dari data, sebelum mulai memodelkan kebisingannya. Hal ini dilakukan dengan memantau para kerugian validasi (atau metrik validasi yang Anda pilih) dan mengakhiri fase pelatihan ketika metrik ini berhenti meningkatkan . Dengan cara ini kami memberikan estimator waktu yang cukup untuk mempelajari informasi yang bermanfaat tetapi tidak cukup untuk belajar dari kebisingan.
implementasi yang keras .
implementasi yang keras
Cara lain untuk mencegah overfitting, selain membatasi kapasitas model, adalah dengan meningkatkan kualitas data Anda. Pilihan yang paling jelas adalah pencilan / kebisingan , namun dalam praktiknya kegunaannya terbatas. Cara yang lebih umum (terutama dalam tugas yang berhubungan dengan gambar) adalah augmentasi data . Di sini kami mencoba secara acak mengubah contoh pelatihan sehingga walaupun mereka tampak berbeda, mereka menyampaikan informasi semantik yang sama (misalnya membalik-kanan gambar).
Ikhtisar augmentasi data
Saran praktis:
implementasi yang keras
Penggunaan lain dari konsep serupa adalah sebagai berikut: jika tugas Anda tidak memiliki banyak data, tetapi Anda dapat menemukan tugas lain yang serupa, Anda dapat menggunakan transfer belajar untuk mengurangi overfitting. Pertama melatih jaringan Anda untuk tugas yang memiliki dataset yang lebih besar dan kemudian berusaha untuk menyempurnakanmodel ke model yang awalnya Anda inginkan. Pelatihan awal akan, dalam banyak kasus, membuat model Anda lebih kuat untuk overfitting.
sumber
Ada banyak bukti empiris bahwa jaringan saraf yang cukup dalam dapat menghafal label acak pada set data besar (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals, "Memahami pembelajaran yang dalam membutuhkan memikirkan kembali generalisasi"). Jadi pada prinsipnya dengan mendapatkan NN yang cukup besar kita selalu dapat mengurangi kesalahan pelatihan menjadi nilai yang sangat kecil, terbatas dalam praktik dengan akurasi numerik, tidak peduli seberapa tidak berarti tugas itu.
Berbagai hal sangat berbeda untuk kesalahan generalisasi . Kami tidak dapat memastikan bahwa untuk setiap masalah pembelajaran, ada model NN yang dapat dipelajari yang dapat menghasilkan kesalahan generalisasi serendah yang diinginkan. Untuk alasan ini langkah pertama adalah
1. Tetapkan harapan Anda dengan benar
Temukan referensi yang memiliki reputasi baik yang memberitahu Anda bahwa ada arsitektur yang dapat mencapai kesalahan generalisasi yang Anda cari, pada kumpulan data Anda atau pada yang paling mirip yang Anda dapat menemukan referensi. Sebagai contoh, lihat di sini
Apa jaringan saraf convolutional state-of-the-art saat ini?
untuk menemukan kinerja terkini (pada saat jawaban) SOTA (State Of The Art) untuk CNN pada berbagai tugas. Sebaiknya Anda mencoba mereproduksi hasil seperti itu pada set data referensi ini, sebelum Anda berlatih menggunakan set data Anda sendiri, sebagai tes bahwa semua infrastruktur Anda sudah terpasang dengan benar.
2. Pastikan prosedur pelatihan Anda sempurna
Semua cek dijelaskan dalam jawaban pertanyaan
Apa yang harus saya lakukan ketika jaringan saraf saya tidak belajar?
untuk memastikan bahwa prosedur pelatihan Anda baik-baik saja, merupakan prasyarat untuk berhasil mengurangi kesalahan generalisasi (jika NN Anda tidak belajar, itu tidak bisa belajar untuk menggeneralisasi). Cek ini termasuk, di antara hal-hal lain:
3. Cobalah untuk mendapatkan superconvergence
“Super-Konvergensi: Pelatihan Jaringan Neural yang Sangat Cepat Menggunakan Tarif Belajar Besar” oleh Leslie N. Smith dan Nicholay Topin menunjukkan bahwa dalam beberapa kasus kombinasi angka belajar besar dengan metode tingkat pembelajaran siklus Leslie N. Smith bertindak sebagai pengatur , mempercepat konvergensi dengan urutan besarnya dan mengurangi kebutuhan akan regularisasi yang luas. Jadi ini adalah hal yang baik untuk dicoba sebelumnya
4. Pengaturan regularisasi Anda ke MAXXX
Regularisasi sering meningkatkan waktu pelatihan (buruk), meningkatkan kesalahan pelatihan dan mengurangi kesalahan generalisasi (baik), tetapi terlalu banyak regularisasi sebenarnya dapat meningkatkan kedua kesalahan (kurang fit). Karena alasan ini, dan karena peningkatan waktu pelatihan, sering kali lebih baik untuk memperkenalkan berbagai teknik regularisasi satu per satu, setelah Anda berhasil mengatur setelan pelatihan. Perhatikan bahwa regularisasi dengan sendirinya tidak selalu menyiratkan kesalahan generalisasi Anda akan menjadi lebih kecil: model harus memiliki kapasitas yang cukup besar untuk mencapai sifat generalisasi yang baik. Ini sering berarti bahwa Anda memerlukan jaringan yang cukup dalam, sebelum Anda dapat melihat manfaat dari regularisasi.
Metode regularisasi tertua mungkin adalah penghentian dini dan penurunan berat badan. Beberapa yang lain:
5. Pencarian Hyperparameter / arsitektur
Jika tidak ada yang membantu, Anda harus menguji beberapa pengaturan hyperparameter yang berbeda (Bayesian Optimization dapat membantu di sini) atau beberapa perubahan arsitektur yang berbeda (mis. Mungkin dalam arsitektur GAN Anda dan untuk kumpulan data yang sedang Anda kerjakan, norma batch hanya berfungsi di generator, tetapi ketika ditambahkan ke diskriminator juga akan memperburuk keadaan). Pastikan untuk melacak hasil percobaan yang panjang dan membosankan ini di buku catatan yang tertata dengan baik.
PS untuk GAN tidak masuk akal untuk berbicara tentang kesalahan generalisasi: contoh di atas hanya dimaksudkan sebagai indikasi bahwa masih ada banyak alkimia dalam Pembelajaran Jauh, dan hal-hal yang Anda harapkan berfungsi dengan baik, kadang-kadang tidak , atau sebaliknya sesuatu yang berfungsi baik berkali-kali, tiba-tiba jatuh pada Anda untuk kumpulan data baru.
sumber
Daftar teknik regularisasi yang umum digunakan yang pernah saya lihat dalam literatur adalah:
sumber
Saya merasa seperti Djib2011, memberikan poin besar tentang metode otomatis, tetapi mereka tidak benar-benar mengatasi masalah mendasar tentang bagaimana kita tahu jika metode yang digunakan untuk mengurangi overfitting melakukan tugasnya. Jadi sebagai catatan kaki penting untuk jawaban DeltaIV, saya ingin memasukkan ini berdasarkan penelitian terbaru dalam 2 tahun terakhir. Overfitting untuk jaringan saraf bukan hanya tentang model yang terlalu menghafal, tetapi juga tentang ketidakmampuan model untuk mempelajari hal-hal baru atau berurusan dengan anomali.
Mendeteksi Overfitting di Black Box Model: Interpretabilitas suatu model secara langsung terkait dengan seberapa baik Anda bisa memberi tahu kemampuan suatu model untuk menggeneralisasi. Dengan demikian, banyak plot yang dapat ditafsirkan adalah metode untuk mendeteksi overfitting dan dapat memberi tahu Anda seberapa baik metode yang disarankan di atas bekerja. Plot penafsiran secara langsung mendeteksinya terutama jika Anda membandingkan plot validasi dan hasil pengujian. Bab 5 dan 6 dari buku ini tidak diterbitkan, berbicara tentang kemajuan terbaru dalam deteksi bidang overfitting: Interpretable Modeling
Berdasarkan buku ini, saya ingin menyebutkan tiga metode lain untuk mendeteksi dan menghilangkan overfitting, yang mungkin jelas bagi sebagian orang, tetapi saya pribadi menemukan bahwa orang terlalu sering melupakan ini. Jadi saya ingin menekankan mereka jika tidak ada yang keberatan:
Deteksi Pemilihan Fitur : Semakin sedikit parameter dan semakin sedikit fitur yang dimiliki model Anda, semakin baik. Jadi, jika Anda hanya memasukkan yang penting dari 100 juta (mungkin memiliki 75 juta sebagai gantinya), Anda akan memiliki model generalisasi yang lebih baik. Masalahnya adalah banyak jaringan saraf tidak sempurna dalam pemilihan fitur terutama ketika # 2 hadir. Bootstrap atau Boosting pada dasarnya tidak dapat memperbaiki keduanya (hanya versi yang disebut bootstrap liar yang dapat). Dalam istilah yang lebih sederhana, Jika Anda memberi Anda data sampah jaringan neural maka itu akan memberi Anda sampah. (Normalisasi L2 yang disebutkan di atas sangat baik dalam membantu ini)
Deteksi dan Penanganan dengan Anomali: Semakin sedikit "outlier" yang semakin digeneralisasikan model. Dengan "outlier", kami tidak bermaksud hanya outlier dalam data. Pencilan dalam data (seperti yang Anda lihat dengan plot kotak) adalah definisi yang terlalu sempit untuk jaringan saraf. Anda perlu mempertimbangkan juga pencilan dalam kesalahan dalam model, yang disebut sebagai pengaruh, serta anomali lainnya. Jadi mendeteksi anomali sebelum Anda menjalankan jaringan Anda adalah penting. Jaring saraf bisa kuat terhadap satu jenis anomali, tetapi kuat tidak terhadap semua jenis lainnya. Metode Contoh Kontra, metode Kritik, dan metode contoh Adversarial, dan plot Pengaruh sangat bagus untuk membantu Anda menemukan outlier, dan kemudian mencari tahu bagaimana faktor mereka masuk. (Mis. Ubah parameter atau bahkan menghapus beberapa data)
Pengambilan sampel Stratified, Oversampling, dan Undersampling berdasarkan pertimbangan statistik atau etika : Saya berharap saya adalah seorang ahli dalam underampling dan oversampling, tetapi saya tidak tetapi saya tahu tentang pengambilan sampel bertingkat. Mengelompokkan faktor-faktor penting seperti (ras, jenis kelamin, jenis kelamin) dan kemudian melakukan pengambilan sampel bertingkat oleh kelompok sangat penting untuk tidak berpakaian berlebihan ketika orang mempertimbangkan data besar. Saat melakukan deteksi gambar, pengambilan sampel bertingkat dalam kombinasi dengan pengelompokan secara hukum diperlukan di beberapa bidang untuk menghindari diskriminasi ras. Buku yang ditautkan di atas secara singkat berbicara tentang metode untuk melakukan ini.
PS Haruskah saya memasukkan lebih banyak tautan?
sumber