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?
sumber
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.
sumber
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.LX( W) X X ℒ W W ℒ XW X X L W W L X
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 XP W P L P+1 P=2 L W X
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.XX X
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 menyebutnyaXX X X i ℒ ℒ X i ( W i ) X i + 1 ℒ X i + 1 ( W i ) ℒ X i ( W i ) ℒ X i + 1 ℒ X i ℒ X W Wi Xi L LXi(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+1 LXi+1(Wi) LXi(Wi) LXi+1 LXi L X W , 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 XL X W X X
sumber
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.
sumber
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.
sumber
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.
sumber