Apa yang harus saya lakukan ketika jaringan saraf saya tidak menggeneralisasi dengan baik?

37

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:

Apakah ada pertanyaan umum yang dapat kita arahkan pertanyaannya dari jenis "mengapa jaringan saraf saya tidak menggeneralisasi dengan baik?"

DeltaIV
sumber
4
Jika Anda berencana untuk mengirim jawaban komprehensif Anda sendiri, maka mungkin ide yang baik untuk mengirim Q dan A secara bersamaan (antarmuka pengguna memungkinkan itu). Kalau tidak, Anda mendorong orang lain untuk menulis jawaban dan kami mungkin berakhir dengan beberapa jawaban yang sebagian menduplikasi satu sama lain ... Pokoknya, menantikan jawaban Anda.
Amoeba berkata Reinstate Monica
@amoeba ah, saya tidak tahu itu: UI membuka pop-up ketika saya mencoba menjawab pertanyaan, jadi saya pikir T&J tidak dapat diposting bersama .... Nah, jika seseorang menulis yang lebih baik / lebih jawaban lengkap dari apa yang akan saya tulis, saya hanya akan menghindari menambahkan duplikat.
DeltaIV

Jawaban:

37

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 .

  • Peraturan khusus Jaringan Saraf Tiruan . Beberapa contoh adalah:
    • Putus sekolah . Dropout adalah teknik menarik yang bekerja dengan sangat baik. Dropout diterapkan antara dua lapisan berturut-turut dalam jaringan. Pada setiap iterasi, persentase koneksi yang ditentukan (dipilih secara acak), yang menghubungkan kedua layer, dibuang . Ini menyebabkan lapisan selanjutnya mengandalkan semua koneksinya ke lapisan sebelumnya.
      implementasi yang keras
    • Transfer belajar . Ini terutama digunakan dalam Pembelajaran Jauh. Ini dilakukan dengan menginisialisasi bobot jaringan Anda ke bobot jaringan lain dengan arsitektur yang sama yang telah dilatih sebelumnya pada dataset generik besar.
    • Hal-hal lain yang dapat membatasi overfitting di Deep Neural Networks adalah: Normalisasi Batch , yang dapat bertindak sebagai pengatur dan dalam beberapa kasus (misalnya modul awal) berfungsi serta putus; batch berukuran relatif kecil dalam SGD, yang juga dapat mencegah overfitting; menambahkan noise acak kecil ke bobot di lapisan tersembunyi.

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:

  • Sejauh ini teknik regularisasi yang paling efektif adalah dropout , yang berarti bahwa itu harus menjadi yang pertama kali Anda gunakan. Namun, Anda tidak perlu (dan mungkin tidak) menempatkan dropout di mana-mana! Lapisan yang paling rentan terhadap overfitting adalah lapisan Fully Connected (FC), karena mengandung sebagian besar parameter. Dropout harus diterapkan ke lapisan-lapisan ini (memengaruhi koneksi mereka ke lapisan berikutnya).
  • Normalisasi batch , selain memiliki efek regularisasi membantu model Anda dalam beberapa cara lain (misalnya mempercepat konvergensi, memungkinkan penggunaan tingkat pembelajaran yang lebih tinggi). Itu juga harus digunakan dalam lapisan FC.
  • Seperti yang disebutkan sebelumnya, mungkin bermanfaat untuk menghentikan model Anda lebih awal dalam tahap pelatihan daripada yang dijadwalkan. Masalah dengan penghentian dini adalah bahwa tidak ada jaminan bahwa, pada titik tertentu, model tidak akan mulai membaik lagi. Pendekatan yang lebih praktis daripada penghentian awal adalah menyimpan bobot model yang mencapai kinerja terbaik pada set validasi. Namun, berhati-hatilah, karena ini bukan perkiraan kinerja model Anda yang tidak bias (hanya lebih baik dari perangkat pelatihan). Anda juga bisa mengenakan setelan validasi. Lebih lanjut tentang itu nanti.
    implementasi yang keras
  • Dalam beberapa aplikasi (mis. Tugas terkait gambar), sangat disarankan untuk mengikuti arsitektur yang sudah mapan (mis. VGG, ResNet, Inception), yang dapat Anda temukan bobotnya untuk ImageNet. Sifat generik dari dataset ini, memungkinkan fitur-fitur pada gilirannya cukup generik untuk digunakan untuk tugas terkait gambar. Selain kuat untuk overfitting, ini akan sangat mengurangi waktu pelatihan.
    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.
  • Augmentasi data . Meskipun selalu membantu untuk memiliki dataset yang lebih besar, teknik augmentasi data memiliki kekurangannya. Lebih khusus lagi, Anda harus berhati-hati untuk tidak menambah terlalu kuat , karena ini dapat merusak konten semantik data. Misalnya dalam augmentasi gambar jika Anda menerjemahkan / menggeser / skala atau menyesuaikan kecerahan / kontras gambar terlalu banyak Anda akan kehilangan banyak informasi yang dikandungnya. Selain itu, skema augmentasi perlu diimplementasikan untuk setiap tugas secara ad-hoc (misalnya dalam pengenalan digit tulisan tangan, digit biasanya disejajarkan dan tidak boleh diputar terlalu banyak; mereka juga tidak boleh diputar ke segala arah, karena mereka tidak simetris horizontal / vertikal. Hal yang sama berlaku untuk gambar medis).
    0
Djib2011
sumber
9

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:

  • tes unit
  • pemeriksaan dataset (lihat beberapa sampel input / label acak untuk set pelatihan dan set tes dan periksa apakah labelnya benar; periksa lebar dan ukuran gambar input; kocokan sampel dalam pelatihan / set tes dan lihat apakah itu mempengaruhi hasil; dll.)
  • tes pengacakan
  • standarisasi versi preprocessing dan paket Anda
  • menyimpan buku catatan percobaan numerik

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:

  • mengurangi ukuran batch: ukuran batch yang lebih kecil biasanya dikaitkan dengan kesalahan generalisasi yang lebih kecil, jadi ini adalah sesuatu yang harus dicoba. Namun, perhatikan bahwa beberapa orang membantah kegunaan minibatch: menurut pengalaman saya, mereka membantu (selama Anda tidak harus menggunakan ukuran kecil yang gila sepertim=16), tetapi Elad Hoffer, Itay Hubara, Daniel Soudry Train lebih lama, menggeneralisasi lebih baik: menutup kesenjangan generalisasi dalam pelatihan batch besar jaringan saraf tidak setuju. Perhatikan bahwa jika Anda menggunakan norma batch (lihat di bawah), minibatch yang terlalu kecil akan sangat berbahaya.
  • gunakan SGD daripada pengoptimal adaptif: ini sudah dicakup oleh @shimao, jadi saya hanya menyebutkannya demi kelengkapan
  • gunakan dropout: jika Anda menggunakan LSTM, gunakan dropout standar hanya untuk unit input dan output dari layer LSTM. Untuk unit berulang (gerbang) gunakan dropout berulang, seperti yang pertama kali ditunjukkan oleh Yarin Gal di Ph.D. tesis . Namun, jika Anda menggunakan CNN, dropout lebih jarang digunakan sekarang. Sebaliknya, Anda cenderung ...
  • ... gunakan normalisasi batch: arsitektur CNN terbaru menghindari dropout demi normalisasi batch. Ini bisa jadi hanya iseng saja, atau bisa jadi karena fakta bahwa ternyata dropout dan normalisasi batch tidak bermain baik bersama (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, Memahami Ketidakharmonisan antara Dropout dan Normalisasi Batch oleh Variance) Pergeseran ). Karena norma batch lebih efektif daripada dropout ketika Anda memiliki kumpulan data besar, ini bisa menjadi alasan mengapa dropout tidak disukai oleh arsitektur CNN. Jika Anda menggunakan normalisasi bets, verifikasi bahwa distribusi bobot dan bias untuk setiap lapisan terlihat mendekati standar normal. Untuk RNNs, menerapkan norma batch sangat rumit: normalisasi berat badan (Tim Salimans, Diederik P. Kingma,Normalisasi Berat: Reparameterisasi Sederhana untuk Mempercepat Pelatihan Deep Neural Networks ) adalah alternatif yang layak.
  • gunakan augmentasi data: ini juga memiliki efek regularisasi.

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.

DeltaIV
sumber
5

Daftar teknik regularisasi yang umum digunakan yang pernah saya lihat dalam literatur adalah:

  1. Menggunakan normalisasi batch, yang merupakan regularizer efektif mengejutkan ke titik di mana saya jarang melihat dropout digunakan lagi, karena itu sama sekali tidak perlu.
  2. Sejumlah kecil pembusukan berat.
  3. Beberapa teknik regularisasi baru-baru ini termasuk Shake-shake ("Shake-Shake regularisasi" oleh Xavier Gastaldi) dan Cutout ("Peningkatan Regulasi Jaringan Neural Konvolusional dengan Cutout" oleh Terrance DeVries dan Graham W. Taylor). Secara khusus, kemudahan Cutout dapat diimplementasikan membuatnya sangat menarik. Saya percaya ini bekerja lebih baik daripada putus sekolah - tapi saya tidak yakin.
  4. Jika memungkinkan, lebih suka arsitektur convolutional sepenuhnya daripada arsitektur dengan lapisan yang sepenuhnya terhubung. Bandingkan VGG-16, yang memiliki 100 juta parameter dalam satu lapisan yang sepenuhnya terhubung, dengan Resnet-152, yang memiliki 10 kali jumlah lapisan dan parameter yang lebih sedikit.
  5. Lebih suka SGD daripada pengoptimal lain seperti Rmsprop dan Adam. Telah terbukti menggeneralisasi lebih baik. ("Meningkatkan Kinerja Generalisasi dengan Beralih dari Adam ke SGD" oleh Nitish Shirish Keskar dan Richard Socher)
shimao
sumber
0

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:

  1. 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)

  2. 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)

  3. 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?

mlane
sumber