Apakah pelatihan neural networks dilakukan satu per satu? [duplikat]

9

Saya mencoba mempelajari jaringan saraf dengan menonton seri video ini dan menerapkan jaringan saraf sederhana dengan Python.

Inilah salah satu hal yang saya pikirkan: Saya melatih jaringan saraf pada data sampel, dan saya punya 1.000 sampel. Pelatihan ini terdiri dari mengubah bobot dan bias secara bertahap untuk membuat fungsi biaya menghasilkan biaya yang lebih kecil.

Pertanyaan saya: Haruskah saya mengubah bobot / bias pada setiap sampel tunggal sebelum beralih ke sampel berikutnya, atau haruskah saya menghitung perubahan yang diinginkan untuk seluruh lot 1.000 sampel, dan baru kemudian mulai menerapkannya pada jaringan?

Ram Rachum
sumber

Jawaban:

9

Haruskah saya mengubah bobot / bias pada setiap sampel tunggal sebelum pindah ke sampel berikutnya,

Anda dapat melakukan ini, ini disebut stochastic gradient descent (SGD) dan biasanya Anda akan mengocok dataset sebelum mengerjakannya setiap kali.

atau haruskah saya menghitung perubahan yang diinginkan untuk seluruh lot sampel 1.000, dan baru kemudian mulai menerapkannya ke jaringan?

Anda dapat melakukan ini, ini disebut batch gradient descent, atau dalam beberapa kasus (terutama dalam sumber daya yang lebih lama) hanya dianggap sebagai pendekatan normal dan disebut gradient descent.

Setiap pendekatan menawarkan kelebihan dan kekurangan. Secara umum:

  • SGD membuat setiap pembaruan lebih cepat dalam hal jumlah data yang telah diproses. Jadi, Anda mungkin perlu lebih sedikit zaman sebelum melakukan konvergensi pada nilai yang masuk akal.

  • SGD melakukan lebih banyak pemrosesan per sampel (karena pembaruan lebih sering), jadi juga lebih lambat dalam arti bahwa akan lebih lama untuk memproses setiap sampel.

  • SGD dapat mengambil keuntungan lebih sedikit dari parallelisation, karena langkah-langkah pembaruan berarti Anda harus menjalankan setiap item data secara serial (karena bobot telah berubah dan hasil kesalahan / gradien dihitung untuk set bobot tertentu).

  • Langkah-langkah individual SGD biasanya hanya membuat tebakan kasar pada gradien yang benar untuk mengubah bobot. Ini adalah kerugian (kinerja NN terhadap tujuan pada set pelatihan dapat menurun serta meningkat) dan keuntungan (ada sedikit kemungkinan terjebak di titik stasioner lokal karena "jitter" ini menyebabkan perbedaan acak).

Apa yang terjadi dalam praktek adalah bahwa sebagian besar perangkat lunak memungkinkan Anda untuk berkompromi antara pemrosesan batch dan pemrosesan sampel tunggal, untuk mencoba dan mendapatkan kinerja terbaik dan memperbarui karakteristik. Ini disebut pemrosesan mini-batch, yang melibatkan:

  • Mengocok set data pada awal setiap zaman.

  • Bekerja melalui data acak, N item per waktu di mana N mungkin bervariasi dari mungkin 10 hingga 1000, tergantung pada masalah dan kendala pada perangkat keras. Keputusan umum adalah untuk memproses ukuran batch terbesar yang memungkinkan akselerasi GPU berjalan secara paralel.

  • Hitung pembaruan yang diperlukan untuk setiap batch kecil, lalu terapkan.

Ini saat ini merupakan metode pembaruan paling umum yang diasumsikan oleh kebanyakan pustaka jaringan saraf, dan mereka hampir secara universal akan menerima parameter ukuran bets dalam API pelatihan. Sebagian besar perpustakaan masih akan memanggil pengoptimal sederhana yang melakukan itu SGD; secara teknis memang benar, gradien yang dihitung masih agak acak karena tidak menggunakan batch penuh, tetapi Anda mungkin menemukan ini disebut gradien mini-batch gradien dalam beberapa makalah yang lebih tua.

Neil Slater
sumber
'Keputusan umum adalah untuk memproses ukuran batch terbesar yang memungkinkan akselerasi GPU berjalan secara paralel.' Bagaimana Anda menentukan ini? Saya belum melihat sumber daya mana pun yang dapat dikomentari ketika ukuran bets hanya cukup untuk paralelisasi puncak
DuttaA
Pertanyaan serupa pernah diajukan sebelumnya di situs web ini. Saya bahkan berpikir itu adalah duplikat (meskipun dari sudut pandang lain). Lihat: ai.stackexchange.com/q/11667/2444 .
nbro
"Keputusan umum adalah untuk memproses ukuran batch terbesar yang memungkinkan akselerasi GPU berjalan secara paralel." - Anda memilikinya mundur! Heuristik pertama adalah memproses ukuran mini-batch terkecil yang menghasilkan kinerja yang dapat diterima. Namun, dengan banyak model, Anda mencapai batas memori sebelum Anda memenuhi efisiensi perangkat keras, sehingga Anda akhirnya menjalankan model terbesar yang sesuai dengan RAM. Namun, secara umum, ukuran batch yang lebih kecil menemukan minima yang lebih baik karena mereka menunjukkan lebih banyak stokastik. Peringatan adalah bahwa norma batch pecah dengan ukuran batch yang sangat kecil.
Aleksandr Dubinsky
@AleksandrDubinsky RAM adalah perangkat keras.
DuttaA
0

Idealnya, Anda perlu memperbarui bobot dengan memeriksa semua sampel dalam dataset. Ini disebut sebagai Batch Gradient Descent . Tapi, sebagai no. contoh pelatihan meningkat, perhitungannya menjadi besar dan pelatihan akan sangat lambat. Dengan munculnya pembelajaran yang mendalam, ukuran pelatihan dalam jutaan dan perhitungan menggunakan semua contoh pelatihan sangat tidak praktis dan sangat lambat.

Di sinilah, dua teknik optimasi menjadi menonjol.

  1. Keturunan Gradien Mini-Batch
  2. Stochastic Gradient Descent (SGD)

Dalam mini-batch gradient descent, Anda menggunakan ukuran batch yang jauh lebih sedikit dari total no. contoh pelatihan dan perbarui bobot Anda setelah melewati contoh-contoh ini.

Dalam penurunan gradien stokastik, Anda memperbarui bobot setelah melewati setiap contoh pelatihan.

Datang ke keuntungan dan kerugian dari tiga metode yang kami diskusikan.

  • Keturunan gradien batch secara bertahap menyatu ke minimum global tetapi lambat dan membutuhkan daya komputasi yang besar.

  • Keturunan gradien stokastik menyatu dengan cepat tetapi tidak ke minimum global, ia menyatu di suatu tempat dekat dengan minimum global dan melayang di sekitar titik itu, tetapi tidak konvergen ke minimum global. Tetapi, titik konvergensi dalam penurunan gradien Stochastic cukup baik untuk semua tujuan praktis.

  • Mini-Batch gradient adalah trade-off kedua metode di atas. Tetapi, jika Anda memiliki implementasi vektor dari pembaruan bobot dan Anda
    berlatih dengan pengaturan multi-inti atau mengirimkan pelatihan ke
    beberapa mesin, ini adalah metode terbaik baik dalam hal waktu untuk pelatihan dan konvergensi ke minimum global.

Anda dapat merencanakan fungsi biaya, dengan no. iterasi untuk memahami perbedaan antara konvergensi di semua 3 jenis gradient descent.

  • Plot gradient descent plot jatuh dengan lancar dan lambat dan menjadi stabil dan mencapai minimum global.

  • Plot gradient descent gradient akan memiliki osilasi, akan jatuh dengan cepat tetapi melayang di sekitar minimum global.

Ini adalah beberapa blog di mana ada penjelasan rinci tentang keuntungan, kerugian dari masing-masing metode dan juga grafik tentang bagaimana perubahan fungsi biaya untuk ketiga metode dengan iterasi.

https://adventuresinmachinelearning.com/stochastic-gradient-descent/

https://machinelearningmastery.com/gentle-introduction-mini-batch-gradient-descent-configure-batch-size/

Kartik Podugu
sumber