Haruskah sampel pelatihan diambil secara acak untuk pelatihan neural-batch mini diambil tanpa penggantian?

18

Kami mendefinisikan zaman sebagai telah melalui keseluruhan dari semua sampel pelatihan yang tersedia, dan ukuran mini-batch sebagai jumlah sampel yang kami rata-rata menemukan pembaruan untuk bobot / bias yang diperlukan untuk turun gradien.

Pertanyaan saya adalah apakah kita harus menggambar tanpa penggantian dari set contoh pelatihan untuk menghasilkan setiap mini-batch dalam suatu zaman. Saya merasa kita harus menghindari penggantian untuk memastikan bahwa kita benar-benar "menarik semua sampel" untuk memenuhi persyaratan akhir zaman, tetapi saya kesulitan menemukan jawaban yang pasti.

Saya sudah mencoba googling dan membaca Ch. 1 dari Neural Networks dan Deep Learning Nielsen tetapi belum menemukan jawaban yang jelas. Dalam teks itu, Nielsen tidak menentukan bahwa pengambilan sampel acak dilakukan tanpa penggantian, tetapi tampaknya mengisyaratkan demikian.

Formalisasi pelatihan yang lebih jelas di zaman ini dapat ditemukan di sini jika diinginkan - /stats//a/141265/131630

Sunting: pertanyaan ini sepertinya mirip dengan saya, tetapi tidak jelas bagaimana menerapkan fakta bahwa linearitas harapan acuh tak acuh terhadap independensi dalam situasi ini - Jika pengambilan sampel terjadi dengan atau tanpa penggantian

bobo
sumber
Kecuali ada alasan spesifik data, mini-batch untuk pelatihan jaringan saraf selalu diambil tanpa penggantian. Idenya adalah Anda ingin berada di suatu tempat di antara mode batch, yang menghitung gradien dengan seluruh dataset dan SGD, yang hanya menggunakan satu acak.
horaceT
SGD tidak dibatasi untuk menggunakan satu sampel acak. Proses itu disebut pelatihan online. "Versi ekstrim dari gradient descent adalah menggunakan ukuran mini-batch hanya 1 ... Prosedur ini dikenal sebagai pembelajaran online, on-line, atau tambahan." Dan juga, "Sebuah gagasan yang disebut keturunan gradien stokastik dapat digunakan untuk mempercepat pembelajaran. Idenya adalah untuk memperkirakan gradien ∇C dengan menghitung [itu] untuk sampel kecil dari input pelatihan yang dipilih secara acak. Dengan rata-rata sampel kecil ini .. .kita dapat dengan cepat mendapatkan estimasi gradien yang benar ". Keduanya mengutip dari Nielsen Ch. 1.
bobo

Jawaban:

13

Analisis teoretis yang baik dengan dan tanpa skema pengganti dalam konteks algoritma iteratif berdasarkan pengundian acak (yang merupakan jumlah pelatihan Jaringan Neural Dalam (DNN) diskriminatif) dapat ditemukan di sini

Singkatnya, ternyata pengambilan sampel tanpa penggantian, mengarah pada konvergensi yang lebih cepat daripada pengambilan sampel dengan penggantian.

Saya akan memberikan analisis singkat di sini berdasarkan contoh mainan yang mereka berikan: Katakanlah kita ingin mengoptimalkan fungsi tujuan berikut:

xopt=argminx12i=1N(xyi)2

di mana target . Dalam contoh ini, kami mencoba menyelesaikan untuk x yang optimal , diberi label N dari y i jelas.yiN(μ,σ2)xNyi

Ok, jadi jika kita memecahkan optimal di atas secara langsung, maka kita akan mengambil turunan dari fungsi kerugian di sini, atur ke 0, dan selesaikan untuk x . Jadi untuk contoh kita di atas, kerugiannya adalahxx

L=12i=1N(xyi)2

dan turunan pertamanya adalah:

δLδx=i=1N(xyi)

Pengaturan ke 0 dan penyelesaian untukx, menghasilkan:δLδxx

xopt=1Ni=1Nyi

Dengan kata lain, solusi optimal tidak lain adalah mean sampel dari semua sampel dari y .Ny

Sekarang, jika kita tidak dapat melakukan perhitungan di atas secara bersamaan, kita harus melakukannya secara rekursif, melalui persamaan pembaruan gradient descent di bawah ini:

xi=xi1λi(f(xi1))

dan cukup memasukkan istilah kami di sini menghasilkan:

xsaya=xsaya-1-λsaya(xsaya-1-ysaya)

Jika kita menjalankan atas untuk semua , maka kami secara efektif melakukan pembaruan ini tanpa penggantian. Pertanyaannya kemudian menjadi, bisakah kita juga mendapatkan nilai x yang optimal dengan cara ini? (Ingat bahwa nilai optimal x tidak lain adalah mean sampel dari y ). Jawabannya adalah ya, jika Anda membiarkan λ i = 1 / i . Untuk melihat, ini kami kembangkan:saya1,2,...Nxxyλsaya=1/saya

xsaya=xsaya-1-λsaya(xsaya-1-ysaya) xsaya=xsaya-1-1saya(xsaya-1-ysaya) xsaya=sayaxsaya-1-(xsaya-1-ysaya)saya xsaya=(saya-1)xsaya-1+ysayasaya sayaxsaya=(saya-1)xsaya-1+ysaya 

Namun persamaan terakhir hanyalah formula untuk rata-rata berlari! Jadi ketika kita mengulang set dari , i = 2 , dll, semua jalan ke i = N , kita akan melakukan pembaruan tanpa penggantian, dan formula pembaruan kita memberi kita solusi optimal x , yang merupakan mean sampel!saya=1saya=2saya=Nx

NxN=(N1)xN1+yN==>xN=1Ni=1Nyi=μ

Sebaliknya, jika kita benar-benar menggambar dengan penggantian, maka sementara undian kita akan benar-benar independen, nilai yang dioptimalkan akan berbeda dari rata-rata (optimal) μ , dan kesalahan kuadrat akan diberikan oleh:xNμ

E{(xNμ)2}

yang akan menjadi nilai positif, dan contoh mainan sederhana ini dapat diperluas ke dimensi yang lebih tinggi. Ini memiliki konsekuensi bahwa kami ingin melakukan pengambilan sampel tanpa penggantian sebagai solusi yang lebih optimal.

Semoga ini semakin memperjelasnya!

Tarin Ziyaee
sumber
Contoh ini menggunakan cukup banyak asumsi, yaitu penggunaan kuadrat kesalahan dan cembung dari lanskap kerugian. Apakah hasilnya berlaku ketika asumsi tersebut tidak terpenuhi?
bayerj
@bayerj Contoh mainan khusus ini, ya. Namun makalah ini berlanjut untuk memperpanjangnya untuk beberapa kasus teoritis lebih lanjut lainnya. Saya percaya sumber lain [Boutou saya pikir] menunjukkan dukungan empiris untuk pengambilan sampel tanpa penggantian menjadi unggul.
Tarin Ziyaee
@TarinZiyaee Terima kasih atas jawaban ini - dapatkah Anda menjelaskan λ_k = 1 / k? K mana yang kita bicarakan di sini, k dari persamaan di atas? Saya tidak mengikuti Anda di sini, yang membuat mengikuti penjumlahan dan kesimpulan selanjutnya menjadi sulit. Terima kasih.
bobo
1
@ Bobo Saya akan mencoba mengklarifikasi pos malam ini.
Tarin Ziyaee
1
@ Bobo Saya banyak memperbarui jawaban saya. Silakan lihat dan beri tahu saya jika itu membantu.
Tarin Ziyaee
5

Menurut kode dalam repositori Nielsen, mini-batch diambil tanpa penggantian:

    def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
    n = len(training_data)
    for j in range(epochs):
            random.shuffle(training_data)
            mini_batches = [
                training_data[k:k+mini_batch_size]
                for k in range(0, n, mini_batch_size)
            ]
            for mini_batch in mini_batches:
                self.update_mini_batch(mini_batch, eta)

Kita dapat melihat bahwa tidak ada penggantian sampel pelatihan dalam zaman. Menariknya, kita juga dapat melihat bahwa Nielsen memilih untuk tidak khawatir tentang penyesuaian eta(tingkat pembelajaran) untuk ukuran mini_batch terakhir, yang mungkin tidak memiliki sampel pelatihan sebanyak mini-batch sebelumnya. Agaknya ini adalah modifikasi lanjutan yang dia tinggalkan untuk bab-bab selanjutnya. **

** EDIT: Sebenarnya, penskalaan ini terjadi pada def update_mini_batchfungsi. Misalnya dengan bobot:

self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)]     

Ini diperlukan karena mini_batch terakhir mungkin lebih kecil dari mini_batch sebelumnya jika jumlah sampel pelatihan per mini_batch tidak dibagi secara merata ke dalam jumlah total sampel pelatihan yang tersedia.

mylist = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
n = len(mylist)
mini_batch_size = 2
mini_batches = [
    mylist[k:k+mini_batch_size]
    for k in range(0, n, mini_batch_size)
    ]
for mini_batch in mini_batches:
    print(mini_batch)

Keluaran:

['1', '2']
['3', '4']
['5', '6']
['7', '8']
['9', '10']

Berganti mini_batch_sizemenjadi 3, yang tidak terbagi rata menjadi 10 sampel pelatihan kami. Untuk output kita dapatkan:

['1', '2', '3']
['4', '5', '6']
['7', '8', '9']
['10']

Ketika mengevaluasi rentang dari daftar indeks (sesuatu dari bentuk di [x:y]mana xdan ybeberapa indeks ke dalam daftar), jika nilai tangan kanan kami melebihi panjang daftar, python hanya mengembalikan item dari daftar hingga nilai keluar dari kisaran indeks .

Jadi mini-batch terakhir mungkin lebih kecil dari mini-batch sebelumnya, tetapi jika ditimbang dengan yang sama etamaka sampel pelatihan tersebut akan berkontribusi lebih banyak untuk pembelajaran daripada sampel di mini-batch lain yang lebih besar. Karena ini adalah mini-batch terakhir, mungkin tidak perlu terlalu dikhawatirkan, tetapi dapat dengan mudah diselesaikan dengan menskalakan etapanjangnya mini-batch.

bobo
sumber