Memesan normalisasi batch dan putus sekolah?

116

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.

golmschenk.dll
sumber

Jawaban:

143

Dalam Ioffe dan Szegedy 2015 , penulis menyatakan bahwa "kami ingin memastikan bahwa untuk nilai parameter apa pun, jaringan selalu menghasilkan aktivasi dengan distribusi yang diinginkan". Jadi Batch Normalization Layer sebenarnya disisipkan tepat setelah Conv Layer / Fully Connected Layer, tetapi sebelum dimasukkan ke aktivasi ULT (atau jenis lainnya). Lihat video ini sekitar waktu 53 menit untuk lebih jelasnya.

Sejauh dropout berjalan, saya percaya dropout diterapkan setelah lapisan aktivasi. Pada kertas dropout gambar 3b, faktor dropout / matriks probabilitas r (l) untuk hidden layer l diterapkan padanya pada y (l), di mana y (l) adalah hasil setelah menerapkan fungsi aktivasi f.

Jadi ringkasnya, urutan penggunaan normalisasi batch dan dropout adalah:

-> CONV / FC -> BatchNorm -> ReLu (atau aktivasi lainnya) -> Dropout -> CONV / FC ->

Zhongyu Kuang
sumber
63
Tampaknya bahkan Christian Szegedy sekarang suka menampilkan BatchNorm setelah ReLU (bukan sebelumnya). Kutipan oleh F. Chollet, penulis Keras: "Saya belum kembali untuk memeriksa apa yang mereka sarankan di makalah aslinya, tetapi saya dapat menjamin bahwa kode terbaru yang ditulis oleh Christian berlaku relu sebelum BN. Kadang-kadang masih menjadi topik perdebatan, meskipun. " sumber
pseudomarvin
3
Bagaimana dengan penggabungan, apakah itu akan terjadi di antara batchnorm dan aktivasi?
kata
5
Selain itu, sepertinya akurasi mungkin lebih tinggi dengan BN setelah aktivasi: github.com/cvjena/cnn-models/issues/3
wordsforthewise
1
video entah bagaimana terhapus!
blitu12345
10
Makalah ini menunjukkan bahwa drop out dengan BN biasanya mengarah ke hasil yang lebih buruk kecuali beberapa pengkondisian dilakukan untuk menghindari risiko pergeseran varians.
Haramoz
37

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

MiloMinderbinder
sumber
Diskusi reddit yang relevan tentang penempatan BatchNorm: reddit.com/r/MachineLearning/comments/67gonq/…
saetch_g
3
Tetapi bukankah ini akan mengacaukan statistik BN Anda karena Anda akan menghitungnya setelah putus sekolah diterapkan, yang tidak akan menjadi masalah pada saat tes?
ZakJ
@ZakJ kurasa tidak. Karena kami menghitung BN per unit (untuk setiap fitur internal) dan terlebih lagi itu diskalakan untuk mengimbangi putus sekolah.
semangat
@ZakJ benar. Lihat jawaban mohammed adel dan makalah ini di sini: arxiv.org/pdf/1801.05134.pdf . Akibatnya, lapisan Normalisasi Batch belajar untuk mengatasi pergeseran kovariat dalam data yang tidak ada lagi saat Putus sekolah dimatikan pada waktu pengujian.
skeller88
@ skeller88 Saya belum membaca koran. Di atas kepala saya, saya pikir jika Anda memiliki BN sebelum putus sekolah maka pada dasarnya mengacaukan maksud dari lapisan BN karena fungsi BN adalah untuk menyediakan data standar ke lapisan berikutnya.
MiloMinderbinder
12

Biasanya, Jatuhkan saja Dropout(bila Anda punya BN):

  • "BN menghilangkan kebutuhan Dropoutdalam beberapa kasus karena BN memberikan manfaat regularisasi yang serupa dengan Putus sekolah secara intuitif"
  • "Arsitektur seperti ResNet, DenseNet, dll. Tidak menggunakan 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.

xtluo.dll
sumber
bagaimana dengan MLP, apakah berguna untuk menggabungkannya.
DINA TAKLIT
1
@DINATAKLIT Ketika Anda benar-benar tidak memiliki cukup data pelatihan, menurut saya, YA.
xtluo
@xtulo maksud Anda pekerjaan ini setelah mereka adalah tanggal kecil? seperti jika saya telah membaca bahwa normalisasi batch bekerja lebih baik dengan dataset besar! Saya agak bingung :!
DINA TAKLIT
1
@DINATAKLIT Dalam komentar Anda sebelumnya what about MLPs is it useful to combine them, apakah maksud Anda begitu Is 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.
xtluo
@xtulo ya maksud saya apakah berguna untuk menggabungkan Droupout dan BN, ya saya setuju dengan jawaban terakhir Anda.
DINA TAKLIT
6

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 . masukkan deskripsi gambar di sini

Demo kecil untuk efek ini dapat ditemukan di notebook ini .

mohamed Adel
sumber
3
Bagaimana ini menjawab pertanyaan?
nbubis
1
Makalah ini menyediakan 2 strategi potensial: - Terapkan Dropout (hanya) setelah semua lapisan BN - Ubah Dropout menjadi bentuk yang lebih stabil-varians
pengguna3641187
@nbubis saya pikir itu menjawabnya secara tidak langsung. Tampaknya menyarankan untuk tidak menggunakannya sama sekali ("menjelaskan ketidakharmonisan antara Dropout dan Batch Norm (BN)").
NelsonGon
3

Berdasarkan makalah penelitian untuk kinerja yang lebih baik kita harus menggunakan BN sebelum menerapkan Dropouts

Renu
sumber
Jawabannya tidak membahas tumpukan penuh, yang ditanyakan dalam pertanyaan.
salehinejad
2

Urutan yang benar adalah: Conv> Normalization> Activation> Dropout> Pooling

salehinejad
sumber
2

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

model.add(Flatten())
model.add(layers.Dense(512, activation="elu"))
model.add(layers.Dense(10, activation="softmax"))

Lapisan konvolusional memiliki ukuran kernel (3,3), padding default, aktivasi adalah elu. Pooling adalah MaxPooling dari sisi kolam (2,2). Rugi categorical_crossentropydan pengoptimalnya adalah adam.

Probabilitas Dropout yang sesuai adalah 0.2atau 0.3, masing-masing. Jumlah peta fitur adalah 32atau 64, 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.

Lukas Nießen
sumber
Karena sifat stokastik NN, tidak cukup hanya bermain dengan satu pelatihan. Ketika Anda membuat sekitar 100 pelatihan dan mengambil rata-rata - hasilnya akan lebih akurat.
GensaGames
0

KonV / FC - BN - Sigmoid / tanh - putus sekolah. Jika fungsi aktivasi adalah Relu atau sebaliknya, urutan normalisasi dan putus sekolah bergantung pada tugas Anda

Cro Chan
sumber
0

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 .

Jiaxiang
sumber