Pertanyaan awal terkait dengan implementasi TensorFlow secara khusus. Namun, jawabannya adalah untuk implementasi secara umum. Jawaban umum ini juga merupakan jawaban yang benar untuk TensorFlow.
Saat menggunakan normalisasi batch dan dropout di TensorFlow (secara khusus menggunakan contrib.layers), apakah saya perlu khawatir tentang pengurutannya?
Tampaknya mungkin jika saya menggunakan dropout diikuti segera oleh normalisasi batch mungkin ada masalah. Misalnya, jika pergeseran dalam normalisasi batch melatih ke nomor skala yang lebih besar dari keluaran pelatihan, tetapi kemudian pergeseran yang sama itu diterapkan ke nomor skala yang lebih kecil (karena kompensasi memiliki lebih banyak keluaran) tanpa putus sekolah selama pengujian, maka itu shift mungkin tidak aktif. Apakah lapisan normalisasi batch TensorFlow secara otomatis mengimbangi hal ini? Atau apakah ini tidak terjadi karena alasan tertentu saya hilang?
Juga, apakah ada kendala lain yang harus diperhatikan saat menggunakan keduanya secara bersamaan? Misalnya, dengan asumsi saya menggunakan mereka dalam urutan yang benar dalam hal di atas (dengan asumsi ada adalah urutan yang benar), bisa ada masalah dengan menggunakan kedua normalisasi batch dan putus sekolah pada beberapa lapisan berturut-turut? Saya tidak langsung melihat masalah dengan itu, tetapi saya mungkin melewatkan sesuatu.
Terima kasih banyak!
MEMPERBARUI:
Tes eksperimental tampaknya menunjukkan bahwa pengurutan itu penting. Saya menjalankan jaringan yang sama dua kali dengan hanya norma batch dan sebaliknya. Ketika dropout berada sebelum norma batch, kerugian validasi tampaknya meningkat karena kerugian pelatihan menurun. Mereka berdua kalah dalam kasus lain. Tapi dalam kasus saya gerakannya lambat, jadi banyak hal dapat berubah setelah lebih banyak pelatihan dan ini hanya satu tes. Jawaban yang lebih pasti dan terinformasi akan tetap dihargai.
sumber
Seperti dicatat di komentar, sumber daya yang luar biasa untuk membaca tentang urutan lapisan ada di sini . Saya telah membaca komentar dan ini adalah sumber daya terbaik tentang topik yang saya temukan di internet
2 sen saya:
Putus sekolah dimaksudkan untuk memblokir informasi dari neuron tertentu sepenuhnya untuk memastikan neuron tidak beradaptasi bersama. Jadi, normalisasi batch harus setelah putus sekolah jika tidak, Anda meneruskan informasi melalui statistik normalisasi.
Jika Anda memikirkannya, dalam masalah ML yang khas, inilah alasan kami tidak menghitung mean dan deviasi standar atas seluruh data dan kemudian membaginya menjadi set pelatihan, pengujian, dan validasi. Kami membagi dan kemudian menghitung statistik pada set kereta dan menggunakannya untuk menormalkan dan memusatkan validasi dan menguji set data
jadi saya sarankan Skema 1 (Ini mempertimbangkan komentar pseudomarvin tentang jawaban yang diterima)
-> CONV / FC -> ReLu (atau aktivasi lainnya) -> Dropout -> BatchNorm -> CONV / FC
sebagai lawan dari Skema 2
-> CONV / FC -> BatchNorm -> ReLu (atau aktivasi lainnya) -> Dropout -> CONV / FC -> dalam jawaban yang diterima
Harap dicatat bahwa ini berarti bahwa jaringan di bawah Skema 2 harus menunjukkan over-fitting dibandingkan dengan jaringan di bawah Skema 1 tetapi OP menjalankan beberapa tes seperti yang disebutkan dalam pertanyaan dan mereka mendukung Skema 2
sumber
Biasanya, Jatuhkan saja
Dropout
(bila Anda punyaBN
):Dropout
dalam beberapa kasus karena BN memberikan manfaat regularisasi yang serupa dengan Putus sekolah secara intuitif"Dropout
Untuk lebih jelasnya, lihat makalah ini [ Memahami Ketidakharmonisan antara Dropout dan Normalisasi Batch dengan Variance Shift ] seperti yang telah disebutkan oleh @Haramoz di komentar.
sumber
what about MLPs is it useful to combine them
, apakah maksud Anda begituIs it useful to combine Dropout and BN when using MLPs
? Perasaan saya tentang ini adalah bahwa ini terutama bergantung pada ukuran model Anda dan jumlah data pelatihan yang Anda miliki.Saya menemukan makalah yang menjelaskan ketidakharmonisan antara Dropout dan Batch Norm (BN). Ide utamanya adalah apa yang mereka sebut "pergeseran varians" . Hal ini disebabkan oleh fakta bahwa dropout memiliki perilaku yang berbeda antara tahap pelatihan dan pengujian, yang menggeser statistik input yang dipelajari BN. Ide utama dapat ditemukan dalam gambar ini yang diambil dari makalah ini .
Demo kecil untuk efek ini dapat ditemukan di notebook ini .
sumber
Berdasarkan makalah penelitian untuk kinerja yang lebih baik kita harus menggunakan BN sebelum menerapkan Dropouts
sumber
Urutan yang benar adalah: Conv> Normalization> Activation> Dropout> Pooling
sumber
Konv - Aktivasi - DropOut - BatchNorm - Pool -> Test_loss: 0,04261355847120285
Konv - Aktivasi - DropOut - Pool - BatchNorm -> Test_loss: 0,050065308809280396
Konv - Aktivasi - BatchNorm - Pool - DropOut -> Test_loss: 0,04911309853196144
Konv - Aktivasi - BatchNorm - DropOut - Pool -> Test_loss: 0,06809622049331665
Konv - BatchNorm - Aktivasi - DropOut - Pool -> Test_loss: 0,038886815309524536
Konv - BatchNorm - Aktivasi - Pool - DropOut -> Test_loss: 0,04126095026731491
Konv - BatchNorm - DropOut - Aktivasi - Pool -> Test_loss: 0,05142546817660332
Konv - DropOut - Aktivasi - BatchNorm - Pool -> Test_loss: 0,04827788099646568
Konv - DropOut - Aktivasi - Pool - BatchNorm -> Test_loss: 0,04722036048769951
Konv - DropOut - BatchNorm - Aktivasi - Pool -> Test_loss: 0,03238215297460556
Dilatih pada dataset MNIST (20 epoch) dengan 2 modul konvolusional (lihat di bawah), diikuti setiap kali dengan
Lapisan konvolusional memiliki ukuran kernel
(3,3)
, padding default, aktivasi adalahelu
. Pooling adalah MaxPooling dari sisi kolam(2,2)
. Rugicategorical_crossentropy
dan pengoptimalnya adalahadam
.Probabilitas Dropout yang sesuai adalah
0.2
atau0.3
, masing-masing. Jumlah peta fitur adalah32
atau64
, masing-masing.Sunting: Ketika saya melepaskan Dropout, seperti yang direkomendasikan dalam beberapa jawaban, itu menyatu lebih cepat tetapi memiliki kemampuan generalisasi yang lebih buruk daripada ketika saya menggunakan BatchNorm dan Dropout.
sumber
KonV / FC - BN - Sigmoid / tanh - putus sekolah. Jika fungsi aktivasi adalah Relu atau sebaliknya, urutan normalisasi dan putus sekolah bergantung pada tugas Anda
sumber
Saya membaca makalah yang direkomendasikan dalam jawaban dan komentar dari https://stackoverflow.com/a/40295999/8625228
Dari sudut pandang Ioffe dan Szegedy (2015), hanya menggunakan BN dalam struktur jaringan. Li et al. (2018) memberikan analisis statistik dan eksperimental bahwa terdapat pergeseran varians ketika praktisi menggunakan Dropout sebelum BN. Jadi, Li et al. (2018) merekomendasikan menerapkan Dropout setelah semua lapisan BN.
Dari sudut pandang Ioffe dan Szegedy (2015), BN terletak di dalam / sebelum fungsi aktivasi. Namun, Chen et al. (2019) menggunakan lapisan IC yang menggabungkan putus sekolah dan BN, dan Chen et al. (2019) merekomendasikan penggunaan BN setelah ULT.
Di latar belakang keamanan, saya menggunakan Dropout atau BN hanya di jaringan.
Chen, Guangyong, Pengfei Chen, Yujun Shi, Chang-Yu Hsieh, Benben Liao, dan Shengyu Zhang. 2019. "Memikirkan Kembali Penggunaan Normalisasi Batch dan Dropout dalam Pelatihan Jaringan Neural Dalam." CoRR abs / 1905.05928. http://arxiv.org/abs/1905.05928 .
Ioffe, Sergey, dan Christian Szegedy. 2015. “Normalisasi Batch: Mempercepat Pelatihan Deep Network dengan Mengurangi Pergeseran Kovariat Internal”. CoRR abs / 1502.03167. http://arxiv.org/abs/1502.03167 .
Li, Xiang, Shuo Chen, Xiaolin Hu, dan Jian Yang. 2018. “Memahami Ketidakharmonisan Antara Dropout dan Normalisasi Batch dengan Varians Shift.” CoRR abs / 1801,05134. http://arxiv.org/abs/1801.05134 .
sumber