Koordinasikan vs gradient descent

23

Saya bertanya-tanya apa perbedaan kasus penggunaan untuk dua algoritma, Koordinat Keturunan dan Gradient Keturunan .

Saya tahu bahwa penurunan koordinat memiliki masalah dengan fungsi yang tidak mulus tetapi digunakan dalam algoritma populer seperti SVM dan LASSO.

Namun penurunan Gradient menurut saya digunakan secara lebih luas, terutama dengan kebangkitan JST, dan untuk banyak tugas pembelajaran mesin lainnya.

Pertanyaan saya adalah: Jenis masalah apa yang cocok satu tetapi tidak yang lain, dan dalam hal apa yang membuat penurunan koordinat cocok untuk SVM dan LASSO, tetapi gradient descent fitting untuk JST?

Bagaimana seharusnya seseorang memilih antara keduanya ketika memilih algoritma optimasi?

Bar
sumber

Jawaban:

7

Saya pikir itu biasanya adalah masalah seberapa sederhana / mudahnya menghitung gradien dari fungsi yang halus dan / atau operator proksimal dari penalti.

Terkadang, jauh lebih mudah untuk menemukan solusi yang tepat dari masalah dalam kasus dengan satu variabel tunggal (atau blok atau variabel), daripada menyelesaikannya untuk semua variabel secara bersamaan. Selain itu, terlalu mahal untuk menghitung gradien dibandingkan dengan turunan individu. Juga, konvergensi keturunan koordinat sama dengan untuk ista, , di mana k adalah jumlah iterasi, tetapi kadang-kadang kinerjanya lebih baik dibandingkan dengan ISTA dan FISTA, lihat misalnya http: //statweb.stanford. edu / ~ tibs / comparison.txt .1/k2k

Hal-hal seperti itu akan memengaruhi pemilihan keturunan koordinat vs. ISTA / FISTA, misalnya.

Tommy L
sumber
Jadi, kasus-kasus mana penurunan koordinat (CD) akan lebih cepat? Apakah ada beberapa jenis fungsi tertentu di mana CD akan menjadi kandidat yang lebih baik?
Bar
Saya tidak bisa mengatakan bahwa kelas fungsi tertentu akan lebih cepat dengan CD daripada dengan metode lain, seperti misalnya FISTA. Sejauh yang saya tahu ini sangat tergantung pada fungsi Anda, dan seberapa mahal untuk mengevaluasi gradien dan hal-hal seperti itu. Dari pengalaman saya, CD lebih cepat daripada FISTA pada masalah laso ketika ada beberapa variabel dalam model (tidak ingat, tetapi kurang dari beberapa ribu). Perhatikan bahwa saya hanya membandingkan CD dengan ISTA dan FISTA di sini, algoritma lain (seperti Newton atau Pseudo-Newton) kemungkinan akan jauh lebih cepat; tetapi ini sepenuhnya tergantung pada masalah yang dihadapi.
Tommy L
Kenapa CD lebih cepat dari GD? Tampaknya kontra logika.
Royi
3

Koordinasi penurunan memperbarui satu parameter pada satu waktu, sedangkan penurunan gradien mencoba memperbarui semua parameter sekaligus.

Sulit untuk menentukan dengan tepat kapan satu algoritma akan bekerja lebih baik daripada yang lain. Sebagai contoh, saya sangat terkejut mengetahui bahwa penurunan koordinat adalah hal yang paling baik untuk LASSO. Dan saya bukan satu-satunya; lihat slide 17 .

Dengan itu, ada beberapa fitur yang dapat membuat masalah lebih mudah untuk mengkoordinasikan keturunan:

(1) Pembaruan bersyarat cepat. Jika, karena alasan tertentu, masalah memungkinkan seseorang untuk mengoptimalkan parameter secara individual dengan sangat cepat, koordinat keturunan dapat memanfaatkan ini. Sebagai contoh, seseorang mungkin dapat memperbarui parameter tertentu hanya dengan menggunakan sebagian dari data, sangat mengurangi biaya komputasi dari pembaruan ini. Kasus lain adalah jika ada solusi bentuk tertutup untuk parameter individu, tergantung pada nilai-nilai semua parameter lainnya.

(2) Mode relatif independen untuk parameter. Jika nilai optimal dari satu parameter benar-benar independen dari nilai parameter lainnya, maka satu putaran penurunan koordinat akan mengarah ke solusi (dengan asumsi bahwa setiap pembaruan koordinat menemukan mode saat ini). Di sisi lain, jika mode untuk parameter yang diberikan sangat tergantung pada nilai parameter lainnya, penurunan koordinat sangat mungkin terjadi, dengan pembaruan yang sangat kecil di setiap putaran.

Sayangnya, untuk sebagian besar masalah, (2) tidak berlaku, jadi sangat jarang bahwa penurunan koordinat dapat dibandingkan dengan algoritma alternatif. Saya percaya alasan itu berkinerja baik untuk LASSO adalah bahwa ada banyak trik yang dapat digunakan untuk memberlakukan kondisi (1).

α

Cliff AB
sumber
0

Saya menyadari bahwa ini adalah pertanyaan lama dan memiliki beberapa jawaban yang sangat bagus. Saya ingin berbagi pengalaman pribadi yang praktis.

k

  • Semua probabilitas harus positif.
  • Semua elemen dari set probabilitas harus berjumlah satu

Ini sebenarnya banyak bertanya. Dengan gradient descent, seseorang biasanya berurusan dengan kendala melalui fungsi penalti. Ini tidak akan berfungsi. Segera setelah nilai melanggar salah satu kendala ini, kode Anda biasanya akan memunculkan semacam kesalahan numerik. Jadi kita harus berurusan dengan kendala dengan tidak pernah benar-benar mengizinkan algoritma optimasi untuk melewatinya.

Ada banyak transformasi yang dapat Anda terapkan pada masalah Anda untuk memenuhi kendala untuk memungkinkan gradient descent. Namun, jika Anda mencari cara termudah dan paling malas untuk mengimplementasikan ini maka mengoordinasikan penurunan adalah cara yang harus ditempuh:

halsaya

  • halsayak+1=halsayak-ηJhalsaya
  • halsaya=min(maks(halsaya,0),1)
  • Perbarui semua p_i: Pj+1=Pj1saya=1nhalsaya

Untuk orang seperti saya yang bekerja di Python, ini biasanya berarti bahwa saya harus menggunakan tambahan untuk-loop yang memengaruhi kinerja cukup negatif. Keturunan gradien memungkinkan saya untuk menggunakan Numpy yang dioptimalkan kinerja. Orang bisa mendapatkan kecepatan yang sangat baik dengan itu, namun, ini tidak dapat dicapai dengan keturunan koordinat jadi saya biasanya menggunakan beberapa teknik transformasi.

Jadi kesimpulannya adalah bahwa keturunan koordinat adalah pilihan termudah untuk menghadapi kendala yang sangat ketat seperti parameter rate dalam distribusi Poisson. Jika menjadi negatif, kode Anda mengeluh dll.

Saya harap ini menambah sedikit wawasan.

Dylan Solms
sumber