Mengapa menormalkan gambar dengan mengurangi rata-rata gambar dataset, alih-alih gambar saat ini berarti dalam pembelajaran mendalam?

88

Ada beberapa variasi tentang cara menormalkan gambar tetapi sebagian besar tampaknya menggunakan dua metode ini:

  1. Kurangi rata-rata per saluran yang dihitung atas semua gambar (mis. VGG_ILSVRC_16_layers )
  2. Kurangi dengan piksel / saluran yang dihitung atas semua gambar (mis. CNN_S , lihat juga jaringan referensi Caffe )

Pendekatan alami akan dalam pikiran saya untuk menormalkan setiap gambar. Sebuah gambar yang diambil di siang hari bolong akan menyebabkan lebih banyak neuron terbakar daripada gambar malam hari dan sementara itu dapat memberi tahu kita tentang waktu kita biasanya peduli tentang fitur yang lebih menarik hadir di tepi dll.

Pierre Sermanet merujuk pada 3.3.3 bahwa normalisasi kontras lokal yang akan berdasarkan per-gambar tapi saya belum menemukan ini dalam salah satu contoh / tutorial yang saya lihat. Saya juga telah melihat pertanyaan Quora yang menarik dan posting Xiu-Shen Wei tetapi mereka tampaknya tidak mendukung dua pendekatan di atas.

Apa sebenarnya yang saya lewatkan? Apakah ini masalah normalisasi warna atau ada makalah yang benar-benar menjelaskan mengapa begitu banyak yang menggunakan pendekatan ini?

Max Gordon
sumber
Saya tidak tahu jawabannya, tetapi apakah Anda sudah mencoba masing-masing metode? Apakah ada perbedaan dalam penampilan?
user112758
@ user112758 - mengimplementasikannya sedikit menyakitkan (terutama untuk by-pixel) dan pengalaman saya adalah bahwa normalisasi per gambar berfungsi dengan baik tetapi data saya tidak representatif. Saya akan mencoba bereksperimen dengan normalisasi tetapi saya ingin mendengar motivasi di balik ini (dalam pikiran saya) prosedur normalisasi aneh.
Max Gordon
Ok, mungkin Anda bisa menanyakan hal ini di caffe masalah grup Google caffe GitHub. Saya kira akan ada lebih banyak ahli dalam topik ini.
user112758

Jawaban:

58

Mengurangi dataset berarti berfungsi untuk "memusatkan" data. Selain itu, Anda idealnya ingin membagi dengan sttdev fitur atau pixel juga jika Anda ingin menormalkan setiap nilai fitur ke skor-z.

Alasan kami melakukan kedua hal tersebut adalah karena dalam proses pelatihan jaringan kami, kami akan mengalikan (bobot) dan menambahkan (bias) input awal ini untuk menyebabkan aktivasi yang kemudian kami backpropogate dengan gradien ke latih modelnya.

Kami ingin dalam proses ini untuk setiap fitur memiliki rentang yang sama sehingga gradien kami tidak lepas kendali (dan kami hanya membutuhkan satu pengganda tingkat pembelajaran global).

Cara lain yang dapat Anda pikirkan adalah jaringan pembelajaran mendalam yang secara tradisional berbagi banyak parameter - jika Anda tidak mengukur input Anda dengan cara yang menghasilkan nilai fitur dengan rentang yang sama (yaitu: pada keseluruhan dataset dengan mengurangi rata-rata) berbagi tidak akan terjadi dengan sangat mudah karena satu bagian dari berat gambar wbanyak dan yang lain terlalu kecil.

Anda akan melihat dalam beberapa model CNN bahwa pemutihan per-gambar digunakan, yang lebih sesuai dengan pemikiran Anda.

lollercoaster
sumber
4
Terima kasih atas jawabannya. Saya akrab dengan konsep memusatkan data dan memastikan rentangnya sama untuk mendapatkan gradien yang stabil. Pertanyaannya lebih pada mengapa kita perlu melakukan ini di seluruh dataset dan mengapa ini akan membantu berbeda dengan pemutihan per-gambar? Saya ingin referensi sederhana yang menunjukkan dalam beberapa cara bahwa ini meningkatkan pembelajaran sebelum saya menerima jawabannya. Saya tahu bahwa normalisasi batch adalah teknik yang sangat kuat tetapi saya tidak melihat koneksi ke seluruh normalisasi dataset.
Max Gordon
Jika Anda menerima batch normalisasi baik, maka Anda sudah ada di sana. Satu-satunya alasan Anda melakukan batch normalisasi adalah ketika Anda tidak dapat memasukkan dataset lengkap dalam memori atau Anda mendistribusikan pelatihan (seringkali merupakan masalah yang sama). Itu sebabnya kami punya batch.
lollercoaster
Saya pikir batch juga merupakan dasar untuk penurunan gradien stokastik. Bahkan jika saya bisa memasukkan semuanya ke dalam memori saya ingin memperbarui parameter lebih sering daripada setelah setiap zaman.
Max Gordon
3
Mereka. Dan Anda dapat memperbarui sesering yang Anda inginkan - implikasi analitisnya identik yang merupakan hal yang begitu bagus dan dapat diukur tentang penurunan gradien. Alasan kami menggunakan penurunan gradien stokastik (pengacakan input order + batching) adalah untuk memuluskan pendakian bukit kami melalui ruang gradien. Diberikan satu poin, kami tidak dapat benar-benar memastikan pembaruan kami akan mendorong kami ke arah maxima lokal, namun jika Anda memilih poin yang cukup, kemungkinan ini menjadi lebih tinggi (sesuai harapan).
lollercoaster
2
Bagaimana ini membantu mendapatkan fitur dalam rentang yang sama? Jika saya memiliki dua gambar, satu mulai dari 0 hingga 255 dan satu mulai dari 0 hingga 50 dalam nilai piksel, katakan dengan rata-rata 50 dan stdev dari 15. Normalisasi memberi saya gambar 1 mulai dari -3,3 hingga 13,6 dan gambar 2 mulai dari -3,3 hingga 0. Mereka masih belum dalam skala yang sama.
Daniel
9

Sebelum normalisasi batch, pengurangan rata-rata per saluran digunakan untuk memusatkan data sekitar nol rata-rata untuk setiap saluran (R, G, B). Ini biasanya membantu jaringan untuk belajar lebih cepat karena gradien bertindak seragam untuk setiap saluran. Saya menduga jika Anda menggunakan normalisasi batch, langkah pra-pemrosesan pengurangan saluran rata-rata sebenarnya tidak diperlukan karena Anda tetap normalisasi per mini-batch.

Sid M
sumber
1
"Saya menduga jika Anda menggunakan normalisasi batch, langkah pra-pemrosesan pengurangan rata-rata per channel tidak benar-benar diperlukan karena Anda tetap menormalkan per mini-batch." Tapi norma batch mengacu pada normalisasi bobot pada lapisan jaringan Anda ... bukan gambar input yang sebenarnya. Ini adalah 2 hal yang berbeda.
Monica Heddneck
4

Normalisasi per-gambar adalah umum dan bahkan satu-satunya fungsi yang dibangun saat ini di Tensorflow (terutama karena sangat mudah diimplementasikan). Ini digunakan untuk alasan yang tepat yang Anda sebutkan (siang VS malam untuk gambar yang sama). Namun, jika Anda membayangkan skenario yang lebih ideal di mana pencahayaan dikontrol, maka perbedaan relatif antara setiap gambar akan sangat berharga dalam algoritme, dan kami tidak ingin menghapusnya dengan normalisasi per-gambar (dan ingin lakukan normalisasi dalam konteks seluruh rangkaian data pelatihan).

JPJ
sumber
4

Ini disebut preprocessing data sebelum menggunakannya. Anda dapat memproses dalam banyak cara tetapi ada satu syarat bahwa Anda harus memproses setiap data dengan fungsi yang sama X_preproc = f (X) dan ini f (.) Tidak boleh bergantung pada data itu sendiri, jadi jika Anda menggunakan gambar saat ini berarti memproses ini gambar saat ini maka f (X) Anda akan benar-benar menjadi f (X, gambar) dan Anda tidak menginginkannya.

Normalisasi kontras gambar yang Anda bicarakan adalah untuk tujuan yang berbeda. Normalisasi kontras gambar akan membantu dalam fitur.

Tetapi f (.) Di atas akan membantu optimasi dengan menjaga semua fitur secara numerik sama satu sama lain (tentu saja sekitar)

Hacklavya
sumber