Memilih tingkat pembelajaran

85

Saat ini saya sedang mengerjakan implementasi Stochastic Gradient Descent,, SGDuntuk jaring saraf menggunakan back-propagation, dan sementara saya mengerti tujuannya, saya punya beberapa pertanyaan tentang bagaimana memilih nilai untuk tingkat pembelajaran.

  • Apakah tingkat pembelajaran terkait dengan bentuk gradien kesalahan, karena menentukan tingkat keturunan?
  • Jika demikian, bagaimana Anda menggunakan informasi ini untuk menginformasikan keputusan Anda tentang suatu nilai?
  • Jika bukan nilai seperti apa yang harus saya pilih, dan bagaimana saya harus memilihnya?
  • Sepertinya Anda ingin nilai-nilai kecil untuk menghindari overshooting, tetapi bagaimana Anda memilih satu sehingga Anda tidak terjebak dalam minimum lokal atau butuh waktu lama untuk turun?
  • Apakah masuk akal untuk memiliki tingkat pembelajaran yang konstan, atau haruskah saya menggunakan beberapa metrik untuk mengubah nilainya ketika saya mendekati minimum dalam gradien?

Singkatnya: Bagaimana saya memilih tingkat pembelajaran untuk SGD?

ragingSloth
sumber

Jawaban:

69
  • Apakah tingkat pembelajaran terkait dengan bentuk gradien kesalahan, karena menentukan tingkat keturunan?

    • Dalam SGD biasa, jawabannya adalah tidak. Tingkat pembelajaran global digunakan yang acuh tak acuh terhadap gradien kesalahan. Namun, intuisi yang Anda gunakan telah menginspirasi berbagai modifikasi aturan pembaruan SGD.
  • Jika demikian, bagaimana Anda menggunakan informasi ini untuk menginformasikan keputusan Anda tentang suatu nilai?

    • Adagrad adalah yang paling dikenal di antaranya dan menskalakan tingkat pembelajaran global η pada setiap dimensi berdasarkan pada l2 norma sejarah kesalahan gradien gt pada setiap dimensi:

      masukkan deskripsi gambar di sini

    • Adadelta adalah algoritma pelatihan lain yang menggunakan baik sejarah gradien kesalahan seperti adagrad dan riwayat pembaruan bobot dan memiliki keuntungan karena tidak harus menetapkan tingkat pembelajaran sama sekali .

  • Jika bukan nilai seperti apa yang harus saya pilih, dan bagaimana saya harus memilihnya?

    • Menetapkan tingkat pembelajaran untuk SGD biasa dalam jaring saraf biasanya merupakan proses mulai dengan nilai waras seperti 0,01 dan kemudian melakukan cross-validasi untuk menemukan nilai optimal. Nilai tipikal berkisar pada beberapa urutan besarnya dari 0,0001 hingga 1.
  • Sepertinya Anda ingin nilai-nilai kecil untuk menghindari overshooting, tetapi bagaimana Anda memilih satu sehingga Anda tidak terjebak dalam minimum lokal atau terlalu lama untuk turun? Apakah masuk akal untuk memiliki tingkat pembelajaran yang konstan, atau haruskah saya menggunakan beberapa metrik untuk mengubah nilainya ketika saya mendekati minimum dalam gradien?

    • Biasanya, nilai yang terbaik adalah mendekati tingkat pembelajaran stabil tertinggi dan tingkat peluruhan / anil pembelajaran (baik linier atau eksponensial) digunakan selama pelatihan. Alasan di balik ini adalah bahwa sejak awal ada sinyal pembelajaran yang jelas sehingga pembaruan yang agresif mendorong eksplorasi sementara kemudian pada tingkat pembelajaran yang lebih kecil memungkinkan untuk eksploitasi permukaan kesalahan lokal yang lebih halus.
indico
sumber
1
Dalam praktiknya, Anda akan menggunakan tingkat pembelajaran dengan adadelta. Pada beberapa masalah tidak berfungsi tanpa.
bayer
Perlu dicatat bahwa pengoptimal Adam lebih biasa daripada Adagrad atau Adadelta hari ini.
E_net4 masih mogok
22

Di bawah ini adalah catatan yang sangat bagus (halaman 12) tentang tingkat pembelajaran dalam Jaring Saraf Tiruan (Back Propagation) oleh Andrew Ng. Anda akan menemukan detail yang berkaitan dengan tingkat pembelajaran.

http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf

Untuk poin ke-4 Anda, Anda benar bahwa biasanya seseorang harus memilih tingkat pembelajaran "seimbang", yang seharusnya tidak melampaui atau bertemu terlalu lambat. Seseorang dapat merencanakan tingkat pembelajaran melalui penurunan fungsi biaya untuk mendiagnosis / menyempurnakan. Dalam praktiknya, Andrew biasanya menggunakan algoritma L-BFGS (disebutkan di halaman 12) untuk mendapatkan tingkat pembelajaran "cukup baik".

BrNguyen
sumber
9

Memilih tingkat pembelajaran adalah contoh dari "masalah-meta" yang dikenal sebagai optimasi hyperparameter . Tingkat pembelajaran terbaik tergantung pada masalah yang dihadapi, serta pada arsitektur model yang dioptimalkan, dan bahkan pada keadaan model dalam proses optimasi saat ini! Bahkan ada paket perangkat lunak yang dikhususkan untuk optimasi hyperparameter seperti spearmint dan hyperopt (hanya beberapa contoh, ada banyak lainnya!).

Terlepas dari optimasi hyperparameter skala penuh, saya ingin menyebutkan satu teknik yang cukup umum untuk memilih tingkat pembelajaran yang belum disebutkan sejauh ini. Simulated annealing adalah teknik untuk mengoptimalkan model di mana seseorang mulai dengan tingkat pembelajaran yang besar dan secara bertahap mengurangi tingkat pembelajaran seiring optimasi berlangsung. Umumnya Anda mengoptimalkan model Anda dengan tingkat pembelajaran yang besar (0,1 atau lebih), dan kemudian secara bertahap mengurangi tingkat ini, sering kali dengan urutan besarnya (jadi 0,01, lalu 0,001, 0,0001, dll.).

Ini dapat dikombinasikan dengan penghentian awal untuk mengoptimalkan model dengan satu tingkat pembelajaran selama kemajuan sedang dibuat, kemudian beralih ke tingkat pembelajaran yang lebih kecil begitu kemajuan tampaknya lambat. Angka belajar yang lebih besar muncul untuk membantu model menemukan wilayah umum, optima skala besar, sementara angka yang lebih kecil membantu model fokus pada satu optimum lokal tertentu.

lmjohns3
sumber
6

Copy-paste dari tesis master saya :

  • Jika kerugian tidak berkurang untuk beberapa zaman, tingkat pembelajaran mungkin terlalu rendah. Proses pengoptimalan juga mungkin macet di minimum lokal.
  • Kehilangan NAN mungkin karena tingkat pembelajaran yang terlalu tinggi. Alasan lain adalah pembagian dengan nol atau mengambil logaritma nol.
  • Pelacakan pembaruan berat badan: Andrej Karpathy diusulkan dalam kuliah ke-5 CS231n untuk melacak pembaruan berat badan untuk memeriksa apakah tingkat pembelajaran dipilih dengan baik. Dia menyarankan bahwa pembaruan berat harus dalam urutan 10−3. Jika pembaruan berat terlalu tinggi, maka tingkat pembelajaran harus dikurangi. Jika pembaruan berat badan terlalu rendah, maka tingkat pembelajaran harus ditingkatkan.
  • Tingkat pembelajaran umum adalah dalam [0,1, 0,00001]
Martin Thoma
sumber
4

Tingkat pembelajaran, diubah sebagai "ukuran langkah" selama proses iterasi kami, telah menjadi isu panas selama bertahun-tahun, dan itu akan terus berlanjut.

Ada tiga opsi untuk ukuran langkah dalam perhatian saya:

  • Satu terkait dengan " waktu ", dan setiap dimensi akan memiliki ukuran langkah yang sama. Anda mungkin memperhatikan sesuatu seperti

αt

sementara t menunjukkan angka iterasi saat ini, alpha adalah parameter hiper

  • yang berikutnya terhubung dengan gradien , dan setiap dimensi memiliki ukuran langkah mereka sendiri. Anda mungkin memperhatikan sesuatu seperti

1αβ+s=1t-1gs2-αβ+s=1tgs2

sedangkan alpha dan beta adalah parameter hiper, g menunjukkan gradien

  • yang terakhir adalah kombinasi waktu dan gradien , dan harus seperti itu

1αβ+s=1t-1gs2-αβ+s=1tgs2+γt

atau

1αβ+s=1t-1gs2-αβ+s=1tgs2γt

Semoga ini bisa membantu Anda, semoga sukses -)

joe
sumber
Apakah Anda punya referensi untuk ini?
Jon
Anda dapat merujuk bagian tingkat pembelajaran dari FTRL, kami dapat memformulasikannya dengan TIME dan GRADIENT.
joe
3

Jaringan saraf sering dilatih oleh gradient descent pada bobot. Ini berarti pada setiap iterasi kami menggunakan backpropagation untuk menghitung turunan dari fungsi kerugian dengan memperhatikan setiap bobot dan mengurangkannya dari bobot tersebut. Namun, jika Anda benar-benar mencoba itu, bobot akan berubah terlalu banyak setiap iterasi, yang akan membuat mereka "overcorrect" dan kerugian sebenarnya akan meningkat / menyimpang. Jadi dalam praktiknya, orang biasanya melipatgandakan setiap turunan dengan nilai kecil yang disebut "tingkat pembelajaran" sebelum mereka mengurangkannya dari bobot yang sesuai.

Anda juga dapat menganggap fungsi kehilangan jaringan saraf sebagai permukaan, di mana setiap arah yang dapat Anda tempati mewakili nilai bobot. Keturunan gradien seperti mengambil lompatan ke arah saat ini dari lereng, dan tingkat belajar seperti panjang lompatan yang Anda ambil.

dileep balineni
sumber
3

Menambah jawaban David, di fastai adalah tempat saya menemukan konsep menemukan tingkat pembelajaran terbaik untuk data itu, menggunakan arsitektur tertentu.

Tapi benda itu hanya ada di fastai / pytorch. Baru-baru ini seseorang membuat implementasi yang keras .

yang pada gilirannya didasarkan pada makalah ini:

Semoga ini membantu.

tenshi
sumber
2

Biarkan saya memberikan pengantar singkat untuk pendekatan lain dalam memilih tingkat pembelajaran, berdasarkan kursus Pembelajaran Mendalam Jeremy Howard 1. Jika Anda ingin menggali lebih dalam, lihat blogpost ini .

Tingkat pembelajaran yang diusulkan dalam kursus Jeremy Howard didasarkan pada cara sistematis untuk mencoba tingkat pembelajaran yang berbeda dan memilih satu yang membuat fungsi kerugian paling turun. Ini dilakukan dengan mengumpankan banyak batch ke metode gradient descent mini-batch, dan meningkatkan laju pembelajaran setiap batch baru yang Anda beri makan ke dalam metode ini. Ketika tingkat belajar sangat kecil, fungsi kerugian akan menurun sangat lambat. Ketika tingkat belajar sangat besar, fungsi kerugian akan meningkat. Di antara kedua rezim ini, ada tingkat belajar yang optimal yang fungsi kerugiannya menurun paling cepat. Ini bisa dilihat pada gambar berikut:

masukkan deskripsi gambar di sini

10-3

David Masip
sumber