Mengapa kita harus mengocok data saat melatih jaringan saraf?

15

Dalam pelatihan mini-batch jaringan saraf, saya mendengar bahwa praktik penting adalah mengocok data pelatihan sebelum setiap zaman. Adakah yang bisa menjelaskan mengapa pengocokan pada setiap zaman membantu?

Dari pencarian google, saya menemukan jawaban berikut:

  • ini membantu pelatihan bertemu dengan cepat
  • itu mencegah bias selama pelatihan
  • itu mencegah model dari belajar urutan pelatihan

Tapi, saya memiliki kesulitan untuk memahami mengapa salah satu dari efek tersebut disebabkan oleh pengacakan acak. Adakah yang bisa memberikan penjelasan intuitif?

DSKim
sumber

Jawaban:

8

Untuk mencoba memberikan penjelasan lain:

Salah satu hal paling kuat tentang jaringan saraf adalah bahwa mereka bisa menjadi fungsi yang sangat kompleks, memungkinkan seseorang untuk mempelajari hubungan yang sangat kompleks antara input dan data output Anda. Hubungan-hubungan ini dapat mencakup hal-hal yang tidak pernah Anda harapkan, seperti urutan di mana data diumpankan dalam setiap zaman. Jika urutan data dalam setiap zaman adalah sama, maka model dapat menggunakan ini sebagai cara untuk mengurangi kesalahan pelatihan, yang merupakan semacam overfitting.

Sehubungan dengan kecepatan: Metode mini-batch bergantung pada keturunan gradien stokastik (dan perbaikannya), yang berarti bahwa mereka bergantung pada keacakan untuk menemukan minimum. Shuffling mini-batch membuat gradien lebih bervariasi, yang dapat membantu konvergensi karena meningkatkan kemungkinan mengenai arah yang baik (atau setidaknya itulah cara saya memahaminya).

bibliolitik
sumber
1
Bagaimana jaringan saraf mempelajari urutan data dimasukkan dalam setiap zaman?
Kode Paus
1
Singkatnya, mereka tidak bisa. Jika menggunakan pelatihan mini-batch (yaitu, lebih dari satu batch per epoch), maka urutan tertentu ke data dapat mempengaruhi pelatihan dalam arti bahwa dengan pelatihan pada satu mini-batch terlebih dahulu pemecah dapat memasuki wilayah tertentu (mungkin berisi minimum lokal ...) daripada yang lain. Tetapi untuk mengatakan bahwa umpan balik NN "belajar" tentang pemesanan data tidak benar karena setiap prediksi dibuat secara independen dari setiap prediksi lainnya, dan pemesanan dalam mini-batch akan, tentu saja, tidak memiliki efek apa pun.
Josh
6

Dari sudut pandang yang sangat sederhana, data diumpankan secara berurutan, yang menunjukkan bahwa paling tidak, urutan data mungkin memiliki efek pada output. Jika urutannya tidak penting, pengacakan tidak akan merugikan. Jika urutan itu penting, pengacakan akan membantu memuluskan efek acak tersebut sehingga tidak menjadi bias sistematis. Singkatnya, pengacakan itu murah dan tidak pernah sakit, dan akan sering meminimalkan efek pemesanan data.

Wang Nuklir
sumber
6

Catatan: sepanjang jawaban ini saya mengacu pada minimalisasi kehilangan pelatihan dan saya tidak membahas kriteria berhenti seperti kehilangan validasi. Pilihan kriteria berhenti tidak mempengaruhi proses / konsep yang dijelaskan di bawah ini.

Proses pelatihan jaringan saraf adalah untuk menemukan nilai minimum dari fungsi kerugian , di mana mewakili matriks (atau beberapa matriks) dari bobot antara neuron dan mewakili dataset pelatihan. Saya menggunakan subskrip untuk untuk menunjukkan bahwa minimalisasi hanya terjadi pada bobot (yaitu, kami mencari sedemikian rupa sehingga diminimalkan) sementara diperbaiki.X(W)X X W W XWXXWWX

Sekarang, jika kita berasumsi bahwa kita memiliki elemen dalam (yaitu, ada bobot dalam jaringan), adalah permukaan dalam ruang dimensi . Untuk memberikan analog visual, bayangkan bahwa kita hanya memiliki dua bobot neuron ( ). Maka memiliki interpretasi geometris yang mudah: ia adalah permukaan dalam ruang 3 dimensi. Ini muncul dari fakta bahwa untuk setiap matriks bobot yang diberikan , fungsi kehilangan dapat dievaluasi pada dan nilai tersebut menjadi ketinggian permukaan.W P P + 1 P = 2 W XPWPP+1P=2WX

Tetapi ada masalah ketidakkonsistenan; permukaan yang saya jelaskan akan memiliki banyak minimum lokal, dan karena itu algoritma gradient descent rentan untuk menjadi "terjebak" dalam minimum tersebut sementara solusi yang lebih dalam / lebih rendah / lebih baik mungkin terletak di dekatnya. Ini mungkin terjadi jika tidak berubah pada semua iterasi pelatihan, karena permukaannya tetap untuk diberikan ; semua fitur-fiturnya statis, termasuk berbagai minimumnya.XXX

Solusi untuk ini adalah pelatihan batch mini yang dikombinasikan dengan pengocokan. Dengan mengocok baris dan pelatihan hanya pada sebagian dari mereka selama iterasi yang diberikan, berubah dengan setiap iterasi, dan sebenarnya sangat mungkin bahwa tidak ada dua iterasi pada seluruh urutan iterasi pelatihan dan zaman akan dilakukan pada sama persis . Efeknya adalah bahwa pemecah dapat dengan mudah "memantul" dari minimum lokal. Bayangkan bahwa pemecah terjebak dalam minimum lokal pada iterasi dengan pelatihan mini-batch . Minimum lokal ini sesuai dengan dievaluasi pada nilai bobot tertentu; kami akan menyebutnyaXXXX i X i ( W i ) X i + 1 X i + 1 ( W i ) X i ( W i ) X i + 1X i X W WiXiXi(Wi). Pada iterasi berikutnya bentuk permukaan kerugian kita sebenarnya berubah karena kita menggunakan , yaitu, dapat mengambil nilai yang sangat berbeda dari dan sangat mungkin tidak sesuai dengan minimum lokal! Kami sekarang dapat menghitung pembaruan gradien dan melanjutkan pelatihan. Agar lebih jelas: bentuk akan - secara umum - berbeda dari . Perhatikan bahwa di sini saya mengacu pada fungsi kerugian dievaluasi pada set pelatihan ; ini adalah permukaan lengkap yang didefinisikan atas semua nilaiXi+1Xi+1(Wi)Xi(Wi)Xi+1XiXW, daripada evaluasi kerugian itu (yang hanya skalar) untuk nilai . Perhatikan juga bahwa jika mini-batch digunakan tanpa pengocokan, masih ada tingkat "diversifikasi" permukaan yang hilang, tetapi akan ada sejumlah (hingga relatif kecil) jumlah permukaan kesalahan unik yang terlihat oleh solver (khususnya, ia akan melihat set persis mini-batch yang sama - dan karena itu kehilangan permukaan - selama setiap zaman).W

Satu hal yang saya sengaja hindari adalah diskusi tentang ukuran mini-batch, karena ada sejuta pendapat tentang ini dan memiliki implikasi praktis yang signifikan (paralelisasi yang lebih besar dapat dicapai dengan batch yang lebih besar). Namun, saya percaya yang berikut ini layak disebutkan. Karena dievaluasi dengan menghitung nilai untuk setiap baris (dan menjumlahkan atau mengambil rata-rata; yaitu, operator komutatif) untuk satu set matriks bobot , susunan baris tidak berpengaruh ketika menggunakan full- keturunan gradien batch (yaitu, ketika setiap batch adalah penuh , dan iterasi dan zaman adalah hal yang sama). X W X XXWX X

Josh
sumber
Terima kasih atas penjelasan yang bermanfaat ini. Setelah membaca jawaban Anda secara mendalam, saya memiliki dua pertanyaan: 1. Anda menyebutkan bahwa mini-batch memasok diversifikasi terbatas. Saya tidak mengerti mengapa ini tidak cukup untuk menghindari macet di minimum lokal. Jika solver berada dalam minimum lokal permukaan satu batch, itu dengan probabilitas tinggi tidak dalam minimum lokal permukaan batch berikutnya, dengan demikian, itu tidak boleh macet.? 2. Bagaimana solver bertemu di permukaan fungsi kerugian sementara permukaan selalu berubah dengan menggunakan batch yang berbeda?
Kode Paus
Manfaat diversifikasi masih ada tanpa pengocokan, tetapi tidak signifikan seperti ketika pengocokan digunakan karena terus-menerus melihat urutan permukaan kerugian yang sama, sedangkan jika kita menggunakan pengocokan, mungkin tidak pernah melihat permukaan kerugian yang sama persis lebih dari satu kali. Mengenai kriteria penghentian, saya umumnya menulis milik saya sehingga setelah pengurangan rata-rata persen atas jumlah iterasi tertentu kurang dari toleransi, pelatihan berhenti.
Josh
2
Mungkin saya tidak benar-benar menjawab pertanyaan Anda tentang minima lokal dengan baik. Secara teori, permukaan kehilangan ini semua harus menunjukkan beberapa tingkat kesamaan karena distribusi probabilitas respon (tergantung pada prediktor model) diasumsikan konstan pada seluruh dataset pelatihan. Jadi, jika minimum cukup dalam, itu akan muncul di banyak mini-batch sehingga pemecah tidak mungkin memantul darinya. Tetapi jika minimum pada dasarnya hanya "noise" maka strategi ini harus bekerja dengan cukup baik dan memungkinkan model untuk melanjutkan pelatihan.
Josh
Terima kasih. Respons kedua Anda membuatnya dapat dimengerti dengan jelas mengapa NN bertemu meskipun permukaannya berbeda. Mengenai pertanyaan pertama saya, apakah benar untuk mengatakan bahwa memiliki urutan yang sama hanya akan memiliki kemungkinan lebih tinggi bahwa "noise" berulang di banyak permukaan kehilangan batch daripada saat menggunakan pengocokan? Ini adalah satu-satunya penjelasan yang bisa saya berikan mengapa masih mungkin terjebak dalam minima lokal saat menggunakan batch mini tanpa pengocokan.
Kode Paus
@ CodePope Saya pikir itu benar. Juga, sekali kehilangan telah berkurang banyak sejak awal pelatihan, gradien akan sangat kecil dan bahkan mungkin saja bahwa pemecah pada dasarnya terjebak dalam "lingkaran" karena terus melihat urutan yang sama dari permukaan kehilangan. Harap perhatikan bahwa ini adalah penjelasan spekulatif berdasarkan pengalaman saya yang agak terbatas, jadi jika Anda memiliki minat teoritis yang serius dalam hal ini, Anda sebaiknya berkonsultasi dengan ahli.
Josh
4

Bayangkan beberapa label minibatch terakhir Anda memang memiliki lebih banyak noise. Kemudian batch ini akan menarik bobot akhir yang dipelajari ke arah yang salah. Jika Anda mengocok setiap waktu, kemungkinan beberapa batch terakhir menjadi sangat tidak proporsional berkurang.

Ganesha
sumber
1

Saat Anda melatih jaringan menggunakan set data tetap, artinya data yang tidak pernah Anda seret selama pelatihan. Anda sangat mungkin mendapatkan bobot yang sangat tinggi dan sangat rendah seperti 40,70, -101,200 ... dll. Ini berarti bahwa jaringan Anda belum mempelajari data pelatihan tetapi telah mempelajari kebisingan data pelatihan Anda. Kasing klasik model pakaian luar. Dengan jaringan seperti itu, Anda akan mendapatkan prediksi untuk data yang telah Anda gunakan untuk pelatihan. Jika Anda menggunakan input lain untuk mengujinya, model Anda akan berantakan. Sekarang, ketika Anda mengacak data latihan setelah setiap zaman (iterasi dari keseluruhan set), Anda cukup memberi input berbeda ke neuron di setiap zaman dan yang hanya mengatur bobot yang berarti Anda lebih mungkin mendapatkan bobot "lebih rendah" yang mendekati nol , dan itu berarti jaringan Anda dapat membuat generalisasi yang lebih baik.

Saya harap itu jelas.

PRCube
sumber
1

Berikut ini penjelasan yang lebih intuitif:

Saat menggunakan gradient descent, kami ingin kerugian dikurangi dalam arah gradient. Gradien dihitung oleh data dari satu mini-batch untuk setiap putaran pembaruan berat. Yang kita inginkan terjadi adalah gradien berbasis mini-batch ini kira-kira adalah gradien populasi, karena ini diharapkan menghasilkan konvergensi yang lebih cepat. (Bayangkan jika Anda memberi makan jaringan 100 data class1 dalam satu mini-batch, dan 100 data class2 di yang lain, jaringan akan berputar-putar. Cara yang lebih baik adalah memberi makan dengan 50 class1 + 50 class2 di setiap mini-batch.)

Bagaimana cara mencapainya karena kita tidak bisa menggunakan data populasi dalam mini-batch? Seni statistik memberi tahu kita: mengocok populasi, dan potongan data batch_size pertama dapat mewakili populasi. Inilah mengapa kita perlu mengocok populasi.

Saya harus mengatakan, pengocokan tidak diperlukan jika Anda memiliki metode lain untuk mengambil sampel data dari populasi dan memastikan sampel dapat menghasilkan gradien yang masuk akal.

Itulah pengertian saya. Semoga ini bisa membantu.

golden8212312
sumber