Mengapa data harus dikocok untuk tugas pembelajaran mesin


30

Dalam tugas-tugas pembelajaran mesin, adalah umum untuk mengacak data dan menormalkannya. Tujuan normalisasi jelas (karena memiliki rentang nilai fitur yang sama). Tapi, setelah banyak berjuang, saya tidak menemukan alasan berharga untuk mengacak data.

Saya telah membaca posting ini di sini membahas kapan kita perlu mengacak data, tetapi tidak jelas mengapa kita harus mengocok data. Selain itu, saya sering melihat dalam algoritma seperti Adam atau SGD di mana kita perlu batch gradient descent (data harus dipisahkan ke mini-batch dan ukuran batch harus ditentukan). Sangat penting menurut posting ini untuk mengacak data untuk setiap zaman untuk memiliki data yang berbeda untuk setiap kelompok. Jadi, mungkin datanya dikocok dan yang lebih penting diubah.

Kenapa kita melakukan ini?


1
Mungkin bermanfaat untuk menyatakan dengan tepat mengapa jawaban di tautan pertama tidak membantu Anda. Kalau tidak, kami mengambil risiko mengulang konten yang sudah dikatakan di sana dengan sedikit perbaikan.
E_net4 mengatakan Reinstate

Seperti yang telah saya nyatakan saya ingin tahu mengapa tidak kapan, apakah Anda tahu mengapa? apakah itu benar-benar dijelaskan di sana? Saya belum melihat makalah untuk ini sama sekali
Media

1
Untuk informasi lebih lanjut tentang dampak dari pemesanan contoh, baca Kurikulum Pembelajaran [pdf].
Emre

1
Saya memposting ini di CrossValidated dan saya pikir itu relevan. stats.stackexchange.com/a/311318/89653
Josh

@ Sebenarnya makalah ini menentang pengocokan, terima kasih, saya tidak mendengar tentang pembelajaran semacam ini.
Media

Jawaban:


19

Berdasarkan Apa yang harus kita lakukan ketika pertanyaan yang diposting di DataScience merupakan duplikat dari pertanyaan yang diposting di CrossValidated? , Saya memposting ulang jawaban saya untuk pertanyaan yang sama yang ditanyakan di CrossValidated ( https://stats.stackexchange.com/a/311318/89653 ).

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 merupakan 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.WXX WW XX(W)WXXWWX

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 itu 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 menyebutnyaX i X i X i ( W i ) X i + 1 X i + 1 ( W i ) X i ( W i ) X i + 1X i X W WXXiXiXi(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 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 sengaja saya 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 seperangkat matriks bobot , susunan baris tidak berpengaruh ketika menggunakan full- batch gradient descent (yaitu, ketika setiap batch adalah penuh , dan iterasi dan zaman adalah hal yang sama). X W X XXWX X


+1. Jawaban ini secara teknis lebih baik dijelaskan daripada jawaban lainnya dengan jumlah upvote yang lebih tinggi.
Gokul NC

29

Pengocokan data melayani tujuan mengurangi varians dan memastikan bahwa model tetap umum dan lebih sedikit pakaian.

Kasus yang jelas di mana Anda akan mengacak data Anda adalah jika data Anda diurutkan berdasarkan kelas / target mereka. Di sini, Anda ingin mengacak untuk memastikan bahwa set pelatihan / tes / validasi Anda mewakili keseluruhan distribusi data.

Untuk keturunan gradient batch, logika yang sama berlaku. Gagasan di balik penurunan gradien batch adalah dengan menghitung gradien pada batch tunggal, Anda biasanya akan mendapatkan estimasi gradien "benar" yang cukup baik. Dengan begitu, Anda menghemat waktu perhitungan dengan tidak harus menghitung gradien "true" di seluruh dataset setiap waktu.

Anda ingin mengocok data Anda setelah setiap zaman karena Anda akan selalu memiliki risiko untuk membuat batch yang tidak mewakili keseluruhan dataset, dan oleh karena itu, estimasi gradien Anda akan mati. Mengacak data Anda setelah setiap zaman memastikan bahwa Anda tidak akan "terjebak" dengan terlalu banyak kumpulan yang buruk.

Dalam keturunan gradien stokastik biasa, ketika setiap batch memiliki ukuran 1, Anda masih ingin mengocok data Anda setelah setiap zaman untuk membuat pembelajaran Anda tetap umum. Memang, jika titik data 17 selalu digunakan setelah titik data 16, gradiennya sendiri akan menjadi bias dengan pembaruan data titik 16 apa pun yang dibuat pada model. Dengan mengacak data Anda, Anda memastikan bahwa setiap titik data menciptakan perubahan "independen" pada model, tanpa bias oleh titik yang sama sebelumnya.


1
Seperti yang saya jelaskan, Anda mengacak data Anda untuk memastikan bahwa set pelatihan / tes Anda akan representatif. Dalam regresi, Anda menggunakan pengocokan karena Anda ingin memastikan bahwa Anda tidak hanya melatih nilai-nilai kecil misalnya. Mengocok sebagian besar adalah perlindungan, kasus terburuk, itu tidak berguna, tetapi Anda tidak kehilangan apa-apa dengan melakukannya. Untuk bagian penurunan gradien stokastik, Anda sekali lagi ingin memastikan bahwa modelnya tidak seperti itu karena urutan di mana Anda memasukkan data, jadi untuk memastikan untuk menghindari itu, Anda acak
Valentin Calomme

2
Saya pikir pengocokan mengurangi varians dan cenderung meningkatkan bias (yaitu, mengurangi kecenderungan untuk menyesuaikan data). Bayangkan kita melakukan penurunan gradien batch penuh, sehingga zaman dan iterasi adalah hal yang sama. Lalu ada minimum global (bukan berarti kita bisa menemukannya) yang sedang dicari oleh pemecah kita. Jika kita menggunakan kerugian MSE, maka kita akan meminimalkan bias jika kita dapat mencapai solusi ini setiap saat. Tetapi karena minimum global ini kemungkinan ditemukan di tempat yang berbeda untuk rangkaian pelatihan yang berbeda, solusi ini cenderung memiliki varian yang tinggi.
Josh

2
Dengan mengocok, kita cenderung untuk menyatu ke solusi yang terletak pada minimum global untuk seluruh rangkaian pelatihan (bias lebih tinggi), tetapi lebih mungkin untuk menemukan solusi yang menggeneralisasi lebih baik (varian lebih rendah).
Josh

7

Misalkan data diurutkan dalam urutan tertentu. Misalnya kumpulan data yang diurutkan berdasarkan kelas mereka. Jadi, jika Anda memilih data untuk pelatihan, validasi, dan tes tanpa mempertimbangkan subjek ini, Anda akan memilih masing-masing kelas untuk tugas yang berbeda, dan itu akan gagal prosesnya.

Oleh karena itu, untuk menghambat masalah semacam ini, solusi sederhana adalah mengocok data untuk mendapatkan rangkaian pelatihan, validasi, dan data uji yang berbeda.

Tentang mini-batch, jawaban untuk posting ini dapat menjadi solusi untuk pertanyaan Anda.


1
@Media Jawaban yang paling terkait dalam tautan yang disediakan adalah: "Mengocok mini-batch membuat gradien lebih bervariasi, yang dapat membantu konvergensi karena meningkatkan kemungkinan mengenai arah yang baik"
OmG

Sebenarnya saya telah melihat ini di koran SGD tetapi sebagai penulis makalah mengklaim itu adalah alasan konvergensi bukan pengocokan. Saya melihat tautannya dan saya agak ragu. untuk lebih jelasnya lihat kertas menakjubkan ini . Para penulis telah menyebutkan poin di sana, tetapi karena Anda akan melihat tidak ada alasan yang tepat untuk menyeret
Media

1

Kita perlu mengocok hanya untuk minibatch / SGD, tidak perlu keturunan batch gradient.

Jika tidak mengocok data, data dapat diurutkan atau titik data serupa akan terletak bersebelahan, yang mengarah pada konvergensi yang lambat:

  • Sampel yang serupa akan menghasilkan permukaan yang sama (1 permukaan untuk fungsi kerugian untuk 1 sampel) -> gradien akan menunjuk ke arah yang sama tetapi arah ini jarang menunjuk ke minimum-> itu mungkin mendorong gradien sangat jauh dari minimum
  • "Arah terbaik": rata-rata semua gradien dari semua permukaan (batch gradient descent) yang menunjuk langsung ke minum
  • "Arah Minibatch": rata-rata dari berbagai arah akan menunjuk lebih dekat ke minimum, meskipun bukan dari mereka menunjuk ke minimum
  • "Arah 1-sampel": arahkan lebih jauh ke minimum dibandingkan dengan minibatch

Saya menggambar plot fungsi kerugian L-2 untuk regresi linier untuk y=2x di sini


1

Karena dievaluasi dengan menghitung nilai untuk setiap baris (dan menjumlahkan atau mengambil rata-rata; yaitu, operator komutatif) untuk seperangkat matriks bobot , susunan baris tidak berpengaruh ketika menggunakan full- keturunan gradien batchXWX

Melengkapi jawaban @ Josh, saya ingin menambahkan bahwa, untuk alasan yang sama, pengocokan harus dilakukan sebelum batching. Jika tidak, Anda mendapatkan jumlah permukaan terbatas yang sama.


Terima kasih dan selamat datang di komunitas kami.
Media

1

Untuk akurasi model yang terbaik, selalu disarankan bahwa data pelatihan harus memiliki semua rasa data.

Pengacakan data pelatihan membantu kami dalam mencapai target ini.


1

Dengan mengocok baris dan pelatihan hanya pada sebagian dari mereka selama iterasi yang diberikan, 𝑋 berubah dengan setiap iterasi, dan itu sebenarnya sangat mungkin bahwa tidak ada dua iterasi atas seluruh urutan iterasi pelatihan dan zaman akan dilakukan pada saat yang sama persis exact

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.