Bagaimana cara (secara sistematis) menyesuaikan tingkat pembelajaran dengan Gradient Descent sebagai Pengoptimal?

12

Orang luar ke bidang ML / DL; memulai kursus Belajar Udacity Deep yang didasarkan pada Tensorflow; melakukan penugasan 3 masalah 4; mencoba menyesuaikan tingkat belajar dengan konfigurasi berikut:

  • Ukuran batch 128
  • Jumlah langkah: cukup untuk mengisi 2 zaman
  • Ukuran lapisan tersembunyi: 1024, 305, 75
  • Inisialisasi berat: terpotong normal dengan std. deviasi dari sqrt (2 / n) di mana n adalah ukuran dari layer sebelumnya
  • Peluang putus sekolah: 0,75
  • Regularisasi: tidak diterapkan
  • Algoritma Learning Rate: peluruhan eksponensial

bermain-main dengan parameter laju pembelajaran; mereka tampaknya tidak berpengaruh dalam banyak kasus; kode di sini ; hasil:

Accuracy    learning_rate   decay_steps     decay_rate      staircase
93.7        .1              3000            .96             True
94.0        .3              3000            .86             False
94.0        .3              3000            .96             False
94.0        .3              3000            .96             True
94.0        .5              3000            .96             True
  • Bagaimana seharusnya saya menyesuaikan tingkat pembelajaran secara sistematis?
  • Bagaimana tingkat pembelajaran terkait dengan jumlah langkah?
Thoran
sumber
1
tpot menyediakan jalur penyetelan ML otomatis
denfromufa

Jawaban:

4

Gunakan pengoptimal keturunan gradien. Ini adalah ikhtisar yang sangat bagus.

Mengenai kode, lihat tutorial ini . Ini dan ini adalah beberapa contoh.

Secara pribadi, saya sarankan untuk menggunakan ADAM atau RMSprop. Masih ada beberapa hiperparameter untuk ditetapkan, tetapi ada beberapa yang "standar" yang bekerja 99% dari waktu. Untuk ADAM Anda dapat melihat kertasnya dan untuk RMSprop di slide ini .

EDIT

Oke, Anda sudah menggunakan optimizer gradien. Kemudian Anda dapat melakukan beberapa optimasi hyperparameters untuk memilih tingkat pembelajaran terbaik. Baru-baru ini, pendekatan otomatis telah diusulkan . Juga, ada banyak pekerjaan yang menjanjikan oleh Frank Hutter mengenai penyetelan hyperparameters otomatis.

Lebih umum, lihat Tantangan AutoML , di mana Anda juga dapat menemukan kode sumber oleh tim. Dalam tantangan ini, tujuannya adalah untuk mengotomatisasi pembelajaran mesin, termasuk penyetelan hyperparameters.

Akhirnya, makalah ini oleh LeCun dan tutorial terbaru dari DeepMin ini (lihat Bab 8) memberikan beberapa wawasan yang mungkin berguna untuk pertanyaan Anda.

Bagaimanapun, perlu diingat bahwa (terutama untuk masalah yang mudah), adalah normal bahwa tingkat pembelajaran tidak banyak mempengaruhi pembelajaran ketika menggunakan pengoptimal gradient descent. Biasanya, pengoptimal ini sangat andal dan bekerja dengan parameter yang berbeda.

Simon
sumber
Saya sudah menggunakan Gradient Descent Optimizer dalam kode. Terima kasih atas tautannya!
Thoran
@ Thoran Ok, tidak membaca kode: D (dan pertanyaannya tidak menyebutkan pengoptimal). Saya telah mengedit jawaban saya untuk memberi Anda lebih banyak bantuan :)
Simon
Perkembangan yang bagus, membuat pekerjaan lebih mudah bagi orang luar seperti <. Apakah Anda tahu bagaimana jumlah langkah dan tingkat pembelajaran terkait? Perasaan saya memberi tahu saya bahwa jika ada lebih banyak langkah, proses pembelajaran harus lebih lambat.
Thoran
@Thoran Biasanya ya, semakin tinggi jumlah langkah, semakin lambat prosesnya (tetapi juga semakin stabil). Saya selanjutnya mengedit jawaban saya dengan menambahkan beberapa referensi untuk beberapa "trik" yang dapat berguna untuk menyetel dengan tangan hyperparameters.
Simon
hal yang sangat keren, akan butuh waktu bagi saya untuk mencernanya: D
Thoran
1

Anda dapat mengotomatiskan penyetelan hyper-parameter dalam banyak algoritma pembelajaran mesin itu sendiri, atau hanya hyperparameters untuk pengoptimal Gradient Descent yaitu tingkat pembelajaran.

Salah satu perpustakaan yang telah populer untuk melakukan ini adalah spearmint.

https://github.com/JasperSnoek/spearmint

iratzhash
sumber
1

Tuner kecepatan pembelajaran otomatis terkini diberikan dalam Adaptasi Tingkat Pembelajaran Online dengan Keturunan Hypergradient

Metode ini sangat mudah diterapkan, hasil inti untuk SGD diberikan sebagai:

αt=αt1+βf(θt1)Tf(θt2)

βe.g.f(θt2)α

βα0

eqzx
sumber
0

Untuk menyetel hiperparameter (apakah itu tingkat pembelajaran, tingkat peluruhan, regularisasi, atau apa pun), Anda perlu membuat dataset holdout; dataset ini terpisah dari dataset pelatihan Anda. Setelah menyetel beberapa model dengan konfigurasi berbeda (di mana konfigurasi = pilihan tertentu dari masing-masing hyperparameter), Anda memilih konfigurasi dengan memilih salah satu yang memaksimalkan akurasi holdout.

Alireza
sumber
Bagaimana perbedaan dataset yang dimiliki dengan dataset tes atau validasi?
Thoran
holdout adalah nama lain untuk validasi. Pada dasarnya Anda memiliki tiga set data terpisah: kereta api, holdout, dan tes. Kereta hanya digunakan untuk mempelajari bobot model (misalnya, menggunakan gradient descent). Heldout digunakan untuk menyetel parameter model. Tes hanya digunakan untuk mengukur kinerja generalisasi (yaitu bagaimana saya bisa mengharapkan model saya untuk tampil pada data yang tidak terlihat)
Alireza
Terima kasih @Alireza untuk meluangkan waktu Anda untuk menjelaskan. Saya sudah menggunakan dataset validasi. Dan tanpa tes, tidak mungkin untuk mengukur akurasi!
Thoran
Nah, pertanyaan awal Anda adalah tentang menentukan tingkat pembelajaran: jika kolom pertama dalam posting asli Anda memiliki ketepatan (bukan pelatihan), maka Anda dapat mengatakan 0,5 lebih baik dari 0,1 (meskipun Anda harus terus mencoba nilai> 0,5). [catatan: jika Anda melakukan kembali percobaan Anda, cukup pisahkan beberapa data untuk dijadikan uji]
Alireza