Panduan memulai project baru

Bagian ini menjelaskan cara memilih hal-hal berikut di awal project ML:

  • arsitektur model
  • pengoptimal
  • ukuran tumpukan
  • konfigurasi awal

Asumsi

Saran di bagian ini mengasumsikan hal berikut:

  • Anda telah merumuskan masalah, dan menyiapkan data pelatihan Anda sampai batas tertentu.
  • Anda telah menyiapkan pipeline pelatihan dan pengujian.
  • Anda telah memilih dan menerapkan metrik yang representatif sebanyak mungkin dari apa yang ingin Anda ukur di lingkungan yang di-deploy.

Dengan asumsi bahwa Anda telah memenuhi semua persyaratan sebelumnya, sekarang Anda siap untuk mencurahkan waktu untuk arsitektur model dan konfigurasi pelatihan.

Memilih arsitektur model

Mari kita mulai dengan definisi berikut:

  • Arsitektur model adalah sistem untuk menghasilkan prediksi. Arsitektur model berisi framework untuk mengonversi data input dalam prediksi, tetapi tidak berisi parameter. Misalnya, pada jaringan neural dengan tiga lapisan tersembunyi, yaitu 10 node, 5 node, dan 3 node. masing-masing adalah arsitektur model.
  • Model adalah arsitektur model ditambah nilai spesifik untuk semua parameter. Misalnya, model terdiri dari jaringan neural yang dijelaskan dalam definisi arsitektur model, ditambah nilai spesifik untuk bobot dan bias dari setiap node.
  • Kelompok model adalah template untuk menyusun arsitektur model diberi sekumpulan hyperparameter.

Memilih arsitektur model benar-benar berarti memilih satu set dari berbagai (satu untuk setiap setelan hyperparameter model).

Jika memungkinkan, cobalah untuk menemukan codebase yang didokumentasikan yang menangani sesuatu sedekat mungkin dengan masalah yang ada. Kemudian, reproduksi kembali model tersebut sebagai memiliki titik awal.

Pilih pengoptimal

Tidak ada pengoptimal yang "terbaik" berbagai jenis masalah machine learning dan arsitektur model. Bahkan hanya membandingkan performa pengoptimal bukanlah hal yang mudah. 🎞 Sebaiknya gunakan pengoptimal populer yang sudah mapan, terutama ketika memulai sebuah proyek baru.

Sebaiknya pilih pengoptimal yang paling populer untuk jenis masalah yang sedang Anda kerjakan. Sebaiknya gunakan pengoptimal berikut:

Perhatikan semua argumen pengoptimal yang dipilih. Pengoptimal dengan lebih banyak hyperparameter biasanya memerlukan lebih banyak upaya penyesuaian. Hal ini sangat menyakitkan pada tahap awal proyek ketika Anda mencoba menemukan nilai terbaik dari berbagai hyperparameter lainnya (misalnya, kecepatan pembelajaran) sembari memperlakukan argumen pengoptimal sebagai gangguan. Oleh karena itu, kami merekomendasikan pendekatan berikut:

  1. Di awal proyek, pilih sebuah pengoptimal yang tidak memiliki banyak konfigurasi hyperparameter. Berikut ini dua contohnya:
    • SGD dengan momentum tetap.
    • Adam dengan Epsilon, Beta1, dan Beta2 tetap.
  2. Pada tahap selanjutnya dari proyek, beralihlah ke pengoptimal yang lebih umum yang menyesuaikan lebih banyak hyperparameter, bukan memperbaikinya ke nilai default.

Pilih ukuran tumpukan

Ringkasan: Ukuran tumpukan mengatur kecepatan pelatihan; jangan gunakan ukuran tumpukan untuk menyesuaikan performa set validasi secara langsung.

Ukuran batch sangat menentukan waktu pelatihan dan resource komputasi pengguna. Meningkatkan ukuran tumpukan sering mengurangi waktu pelatihan, yang:

  • Memungkinkan Anda menyesuaikan hyperparameter secara lebih menyeluruh dalam waktu tetap yang berbeda, yang berpotensi menghasilkan model akhir yang lebih baik.
  • Mengurangi latensi siklus pengembangan, sehingga ide-ide baru dapat diperoleh diuji lebih sering.

Meningkatkan ukuran tumpukan dapat mengurangi atau meningkatkan konsumsi resource, atau membiarkan konsumsi resource tidak berubah.

Jangan memperlakukan ukuran tumpukan sebagai hyperparameter yang dapat disesuaikan untuk validasi menetapkan performa. Jika semua jika kondisi berikut terpenuhi, performa model sebaiknya tidak bergantung pada ukuran tumpukan:

  • Semua hyperparameter pengoptimal disesuaikan dengan baik.
  • Regularisasi memadai dan disesuaikan dengan baik.
  • Jumlah langkah pelatihan sudah cukup.

Performa akhir yang sama harus dapat dicapai menggunakan ukuran tumpukan (Lihat Shallue et al. 2018 dan Mengapa ukuran tumpukan tidak boleh disesuaikan untuk meningkatkan langsung performa set validasi?)

Menentukan ukuran batch yang layak dan memperkirakan throughput pelatihan

Untuk model dan pengoptimal tertentu, perangkat keras yang tersedia biasanya mendukung berbagai macam ukuran tumpukan. Faktor pembatas biasanya memori akselerator. Sayangnya, mungkin sulit untuk menghitung ukuran tumpukan akan muat dalam memori tanpa menjalankan, atau setidaknya mengompilasi, program pelatihan lengkap. Solusi termudah biasanya adalah menjalankan tugas pelatihan pada ukuran tumpukan yang berbeda (misalnya, meningkatkan kekuatan 2) untuk sejumlah langkah hingga salah satu tugas melebihi memori yang tersedia. Sebagai setiap ukuran tumpukan, latih cukup lama untuk mendapatkan perkiraan throughput pelatihan:

throughput pelatihan = jumlah contoh yang diproses per detik

atau, setara dengan waktu per langkah:

waktu per langkah = ukuran batch / throughput pelatihan

Ketika akselerator belum tersaturasi, jika ukuran tumpukan menjadi dua kali lipat, throughput pelatihan juga harus berlipat ganda (atau setidaknya hampir dua kali lipat). Setara dengan itu, waktu per langkah harus konstan (atau setidaknya hampir ) saat ukuran tumpukan meningkat. Jika tidak demikian, maka pipeline pelatihan memiliki bottleneck, seperti I/O atau sinkronisasi antar-node komputasi. Pertimbangkan untuk mendiagnosis dan memperbaiki bottleneck sebelum melanjutkan.

Jika throughput pelatihan meningkat hanya hingga ukuran tumpukan maksimumnya, maka hanya pertimbangkan ukuran tumpukan hingga ukuran tumpukan maksimum tersebut, meskipun perangkat keras mendukung ukuran tumpukan yang lebih besar. Semua manfaat penggunaan ukuran batch yang lebih besar mengasumsikan throughput pelatihan meningkat. Jika tidak, perbaiki bottleneck atau gunakan ukuran tumpukan yang lebih kecil.

Akumulasi gradien menyimulasikan ukuran tumpukan yang lebih besar daripada yang bisa dilakukan hardware sehingga tidak memberikan manfaat throughput. Anda seharusnya umumnya menghindari akumulasi gradien dalam pekerjaan yang diterapkan.

Anda mungkin perlu mengulangi langkah-langkah ini setiap kali Anda mengubah model atau pengoptimal. Misalnya, arsitektur model yang berbeda mungkin mengizinkan ukuran tumpukan yang lebih besar agar sesuai dengan memori.

Pilih ukuran tumpukan untuk meminimalkan waktu pelatihan

Berikut adalah definisi kami tentang waktu pelatihan:

  • waktu pelatihan = (waktu per langkah) x (jumlah total langkah)

Anda sering dapat menganggap waktu per langkah kira-kira konstan untuk semua ukuran tumpukan yang layak. Hal ini berlaku jika:

  • Tidak ada overhead dari komputasi paralel.
  • Semua bottleneck pelatihan telah didiagnosis dan diperbaiki. (Lihat bagian sebelumnya untuk cara mengidentifikasi bottleneck pelatihan. Dalam praktiknya, biasanya ada setidaknya beberapa overhead dari peningkatan ukuran tumpukan.

Seiring bertambahnya ukuran tumpukan, jumlah total langkah yang diperlukan untuk mencapai sasaran performa tetap biasanya menurun, asalkan Anda menyesuaikan kembali hyperparameter yang relevan saat mengubah ukuran batch. (Lihat Shallue et al. 2018.) Misalnya, menggandakan ukuran tumpukan dapat mengurangi separuh jumlah total langkah-langkah yang diperlukan. Hubungan ini disebut penskalaan sempurna dan seharusnya untuk semua ukuran tumpukan hingga ukuran tumpukan penting.

Di luar ukuran tumpukan utama, peningkatan ukuran tumpukan menghasilkan pengembalian yang semakin menurun. Artinya, meningkatkan ukuran tumpukan pada akhirnya tidak lagi mengurangi jumlah langkah pelatihan tetapi tidak pernah meningkatkannya. Oleh karena itu, ukuran tumpukan yang meminimalkan waktu pelatihan biasanya ukuran batch terbesar yang tetap mengurangi jumlah langkah pelatihan tidak diperlukan. Ukuran batch ini bergantung pada set data, model, dan pengoptimal, dan ini merupakan masalah terbuka bagaimana menghitungnya selain mencarinya secara eksperimental untuk setiap masalah baru. 🤖

Saat membandingkan ukuran tumpukan, perhatikan perbedaan antara hal berikut:

  • Contoh anggaran atau anggaran epoch—menjalankan semua eksperimen saat memperbaiki jumlah pelatihan contoh presentasi.
  • Anggaran langkah—menjalankan semua eksperimen dengan jumlah pelatihan.

Membandingkan ukuran batch dengan anggaran epoch hanya akan menguji pengaturan skala, bahkan ketika ukuran tumpukan yang lebih besar masih menyediakan percepatan yang berarti dengan mengurangi jumlah langkah pelatihan yang diperlukan. Sering kali, ukuran tumpukan terbesar yang didukung oleh perangkat keras yang tersedia lebih kecil dari ukuran tumpukan penting. Oleh karena itu, aturan yang tepat praktis (tanpa menjalankan eksperimen apa pun) adalah menggunakan kumpulan data mungkin ukuran.Tidak ada gunanya menggunakan ukuran tumpukan yang lebih besar jika meningkatkan waktu pelatihan.

Pilih ukuran tumpukan untuk meminimalkan konsumsi resource

Ada dua jenis biaya resource yang terkait dengan peningkatan ukuran batch:

  • Biaya di muka. Misalnya, membeli perangkat keras baru atau menulis ulang pipeline pelatihan untuk menerapkan pelatihan multi-GPU / multi-TPU.
  • Biaya penggunaan. Misalnya, penagihan terhadap anggaran sumber daya tim, tagihan dari penyedia cloud, biaya listrik / pemeliharaan.

Jika ada biaya awal yang signifikan untuk meningkatkan ukuran tumpukan, mungkin lebih baik menunda penambahan ukuran tumpukan sampai proyek matang dan lebih mudah untuk menilai kompromi biaya-manfaat. Menerapkan program pelatihan paralel multi-host dapat memperkenalkan bug dan masalah tidak kentara jadi mungkin lebih baik memulai dengan pendekatan yang lebih sederhana {i>pipelines<i} lainnya. Di sisi lain, peningkatan yang besar dalam waktu pelatihan mungkin sangat bermanfaat di awal proses ketika banyak penyesuaian eksperimen diperlukan.

Kami mengacu pada total biaya penggunaan (yang mungkin mencakup beberapa jenis biaya) sebagai konsumsi resource, yang dihitung sebagai berikut:

konsumsi resource = konsumsi resource per langkah x jumlah total langkah

Meningkatkan ukuran tumpukan biasanya akan mengurangi jumlah total langkah. Apakah konsumsi resource meningkat atau menurun bergantung pada bagaimana konsumsi per langkah berubah, yang bergantung pada ukuran batch sebagai berikut:

  • Meningkatkan ukuran tumpukan dapat mengurangi konsumsi resource. Misalnya, jika setiap langkah dengan ukuran tumpukan yang lebih besar dapat dijalankan pada perangkat keras yang sama dengan ukuran tumpukan yang lebih kecil (hanya dengan peningkatan waktu per langkah), maka setiap peningkatan konsumsi per langkah mungkin lebih besar daripada penurunan jumlah langkah.
  • Meningkatkan ukuran tumpukan mungkin tidak mengubah konsumsi resource. Misalnya, jika menggandakan ukuran tumpukan mengurangi separuh jumlah langkah diperlukan dan menggandakan jumlah GPU yang digunakan, total konsumsi (dalam hal jam GPU) tidak berubah.
  • Meningkatkan ukuran tumpukan dapat meningkatkan konsumsi resource. Misalnya, jika peningkatan ukuran tumpukan memerlukan perangkat keras yang ditingkatkan, peningkatan konsumsi per langkah mungkin lebih besar daripada pengurangan jumlah langkah.

Mengubah ukuran tumpukan memerlukan penyesuaian ulang sebagian besar hyperparameter

Nilai optimal sebagian besar hyperparameter peka terhadap ukuran tumpukan. Oleh karena itu, mengubah ukuran tumpukan biasanya memerlukan tuning proses yang sama. Hyperparameter yang berinteraksi paling kuat dengan ukuran tumpukan. Oleh karena itu, sebaiknya lakukan penyesuaian secara terpisah untuk setiap ukuran tumpukan, adalah sebagai berikut:

  • Hyperparameter pengoptimal (misalnya, kecepatan pembelajaran dan momentum)
  • Hyperparameter regularisasi

Perhatikan hal ini saat memilih ukuran batch di awal project. Jika Anda perlu beralih ke ukuran tumpukan yang berbeda di kemudian hari, mungkin sulit, memakan waktu, dan mahal untuk menyesuaikan ulang hyperparameter lainnya untuk ukuran tumpukan baru.

Cara norma batch berinteraksi dengan ukuran batch

Norma batch rumit dan, secara umum, harus menggunakan batch yang berbeda yang lebih besar daripada komputasi gradien untuk menghitung statistik. Lihat Penerapan normalisasi batch detail untuk diskusi mendetail.

Memilih konfigurasi awal

Tahap pertama dalam penyesuaian hyperparameter adalah menentukan titik awal untuk hal berikut:

  • konfigurasi model (mis. jumlah lapisan)
  • hyperparameter pengoptimal (mis. kecepatan pembelajaran)
  • jumlah langkah pelatihan

Menentukan konfigurasi awal ini memerlukan beberapa operasi pelatihan yang dikonfigurasi dan {i>trial-and-error<i}.

Prinsip panduan kami adalah sebagai berikut:

Temukan konsumsi resource yang sederhana, relatif cepat, dan relatif rendah konfigurasi yang memperoleh performa wajar.

dalam hal ini:

  • Sederhana berarti menghindari fitur pipeline yang tidak perlu, seperti reguler atau trik arsitektural. Misalnya, suatu pipeline tanpa putusan regularisasi (atau dengan regularisasi dengan pelolosan dinonaktifkan) lebih sederhana daripada dengan regularisasi (dropout).
  • Performa yang wajar bergantung pada masalahnya. Namun, setidaknya model terlatih yang masuk akal berperforma jauh lebih baik daripada peluang acak di set validasi.

Memilih konfigurasi awal yang cepat dan menggunakan sedikit penggunaan resource membuat penyesuaian hyperparameter jauh lebih efisien. Misalnya, mulailah dengan model yang lebih kecil.

Memilih jumlah langkah pelatihan melibatkan penyeimbangan ketegangan berikut:

  • Pelatihan untuk lebih banyak langkah dapat meningkatkan performa dan menyederhanakan hyperparameter tuning. (Untuk detail selengkapnya, lihat Shallue et al. 2018).
  • Sebaliknya, pelatihan dengan langkah yang lebih sedikit berarti bahwa setiap latihan lebih cepat dan menggunakan lebih sedikit resource, sehingga meningkatkan efisiensi tuning dengan mengurangi waktu antar siklus dan memungkinkan Anda untuk menjalankan lebih banyak eksperimen secara paralel. Selain itu, jika Anda memilih anggaran langkah besar yang tidak perlu di awal proyek, mungkin sulit untuk mengubahnya nanti dalam proyek; misalnya, setelah Anda menyesuaikan jadwal kecepatan pembelajaran untuk jumlah langkah tersebut.