Bagaimana CNN menghindari masalah gradien yang hilang

15

Saya telah membaca banyak tentang jaringan saraf convoloutional dan bertanya-tanya bagaimana mereka menghindari masalah gradien menghilang. Saya tahu jaringan kepercayaan yang mendalam menumpuk auto-encoders tingkat tunggal atau jaringan dangkal pra-terlatih lainnya dan dengan demikian dapat menghindari masalah ini, tetapi saya tidak tahu bagaimana hal itu dihindari di CNN.

Menurut Wikipedia :

"Terlepas dari" masalah gradien hilang "yang disebutkan di atas," kekuatan pemrosesan GPU yang unggul membuat propagasi balik yang layak layak untuk jaringan saraf umpan jauh ke depan dengan banyak lapisan. "

Saya tidak mengerti mengapa pemrosesan GPU akan menghilangkan masalah ini?

Aly
sumber
2
Apakah artikel wikipedia tidak membenarkan mengapa GPU membantu mengatasi masalah gradien yang hilang? Apakah karena walaupun gradiennya kecil, karena GPU sangat cepat, kami masih dapat meningkatkan parameter dengan melakukan banyak langkah berkat GPU?
Charlie Parker
2
Persis. Menghilangkan masalah gradien adalah alasan mengapa bobot lapisan lebih rendah diperbarui pada tingkat yang sangat kecil, dan dengan demikian dibutuhkan selamanya untuk melatih jaringan. Tetapi, seperti halnya GPU, Anda dapat melakukan lebih banyak perhitungan (yaitu lebih banyak pembaruan pada bobot) dalam waktu yang lebih sedikit, dengan semakin banyak pemrosesan GPU, masalah gradien yang hilang agak menghilang sampai batas tertentu.
Sangram
@CharlieParker, bisa Anda jelaskan GPU's are fast correlated with vanishing gradients, saya bisa memahami logika cepat dengan bandwidth memori yang besar untuk memproses multiplikasi matriks multipel! tetapi bisakah Anda menjelaskan apa hubungannya dengan turunannya? Masalah gradien menghilang tampaknya melakukan lebih banyak dengan inisialisasi berat , bukan!
Anu

Jawaban:

13

Masalah gradien menghilang mengharuskan kita untuk menggunakan tingkat belajar kecil dengan gradient descent yang kemudian membutuhkan banyak langkah kecil untuk bertemu. Ini adalah masalah jika Anda memiliki komputer yang lambat yang membutuhkan waktu lama untuk setiap langkah. Jika Anda memiliki GPU cepat yang dapat melakukan lebih banyak langkah dalam sehari, ini bukan masalah.

Ada beberapa cara untuk mengatasi masalah gradien yang hilang. Saya akan menebak bahwa efek terbesar untuk CNN berasal dari beralih dari unit nonlinear sigmoid ke unit linear diperbaiki. Jika Anda menganggap jaringan saraf sederhana yang error tergantung pada berat w i j hanya melalui y j , di manaEwijyj

yj=f(iwijxi),

gradiennya adalah

wijE=Eyjyjwij=Eyjf(iwijxi)xi.

Jika adalah fungsi sigmoid logistik, f akan mendekati nol untuk input besar maupun input kecil. Jika f adalah unit linear yang diperbaiki,fff

f(u)=max(0,u),
turunannya adalah nol hanya untuk input negatif dan 1 untuk input positif. Kontribusi penting lainnya berasal dari inisialisasi bobot dengan benar. Makalah ini terlihat seperti sumber yang baik untuk memahami tantangan secara lebih rinci (walaupun saya belum membacanya):

http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf

Lucas
sumber
2
Saya agak bingung tentang unit linear yang diperbaiki. Ya, untuk sigmoids dll. Gradien seringkali sangat kecil - tetapi untuk unit linier yang diperbaiki seringkali tepat nol. Bukankah itu lebih buruk? Jadi, jika bobot suatu unit tidak menguntungkan, mereka tidak akan pernah berubah.
Hans-Peter Störr
2
Memikirkan hal ini, ReLU yang bocor dan / atau berisik mungkin digunakan untuk alasan itu.
sunside
5
Mengapa kalimat pertama Anda benar? Yaitu "Masalah gradien menghilang mengharuskan kita untuk menggunakan tingkat belajar kecil dengan gradient descent yang kemudian membutuhkan banyak langkah kecil untuk bertemu." Mengapa kita membutuhkan tingkat belajar yang kecil untuk mengatasi masalah gradien yang hilang? Jika gradien sudah kecil dengan karena gradien menghilang saya akan berharap bahwa membuat mereka kecil hanya memperburuk keadaan.
Charlie Parker
2
Pertanyaan yang bagus, saya seharusnya menjelaskan pernyataan itu dengan lebih baik. Masalah gradien pelenyapan bukanlah bahwa semua gradien kecil (yang dapat kita perbaiki dengan mudah menggunakan tingkat pembelajaran yang besar), tetapi gradien tersebut menghilang saat Anda melakukan backpropagate melalui jaringan. Yaitu, gradien kecil di beberapa lapisan tetapi besar di lapisan lain. Jika Anda menggunakan tingkat pembelajaran yang besar, semuanya meledak (karena beberapa gradien besar), jadi Anda harus menggunakan tingkat pembelajaran yang kecil. Menggunakan beberapa tingkat pembelajaran adalah pendekatan lain untuk mengatasi masalah, dengan biaya memperkenalkan lebih banyak parameter.
Lucas
3
Saya berpendapat bahwa tingkat pembelajaran sebagian besar terkait dengan masalah gradien yang meledak . Menurunkan gradien ke bawah dengan tingkat pembelajaran yang terlalu rendah sama sekali tidak mencegah gradien hilang, itu hanya menunda efek sebagai pembelajaran melambat jauh. Efeknya sendiri disebabkan oleh aplikasi berulang nonlinier dan penggandaan nilai-nilai kecil. Tentu saja ada kecenderungan untuk pergi ke tingkat belajar yang lebih kecil (karena daya komputasi) tetapi itu tidak ada hubungannya dengan menghilangnya gradien karena hanya mengontrol seberapa baik ruang negara dieksplorasi (diberikan kondisi stabil).
runDOSrun