Koordinat ve gradyan inişine karşı


23

İki algoritma için farklı kullanım durumlarının ne olduğunu merak ediyordum, Koordinat İniş ve Degrade İniş .

Koordinat iniş işlevinin düzgün olmayan işlevlerle problemleri olduğunu biliyorum, ancak SVM ve LASSO gibi popüler algoritmalarda kullanılıyor.

Ancak gradyan inişi, özellikle YSA'ların yeniden dirilişi ile ve diğer birçok makine öğrenim görevi için daha yaygın kullanıldığını düşünüyorum.

Benim sorum şudur: Ne tür problemler bir başkasına değil, diğerine de uyuyor ve bu açıdan SVM'ler ve LASSO için iniş uygunluğunu, fakat YSA'lar için degrade iniş uygunluğunu kılan nedir?

Bir optimizasyon algoritması seçerken ikisi arasında nasıl bir seçim yapılmalı?

Yanıtlar:


7

Genelde, işlevin pürüzsüz bir kısmının gradyanını ve / veya cezanın proksimal operatörünü eğlendirmenin ne kadar basit / kolay olduğu meselesidir.

Bazen, tek bir değişken (veya bir blok veya değişkenler) durumunda sorunun tam bir çözümünü bulmak, aynı anda tüm değişkenler için çözmekten çok daha basittir. Diğer zamanlarda, tek tek türevlere kıyasla gradyanı hesaplamak çok pahalıdır. Ayrıca, iniş koordinat yakınsama ista, aynıdır , k yineleme sayısı, ancak bazen daha iyi ISTA ve Fista hem göre performans edebilir, bkz mesela http: //statweb.stanford. edu / ~ tibs / compare.txt .1/k2k

Böyle şeyler, örneğin ISTA / FISTA'ya göre koordinat iniş seçimini etkileyecektir.


Peki, koordinat inişinin (CD) daha hızlı olacağı durumlar hangileridir? Hangi CD'nin daha iyi aday olacağı konusunda belirli fonksiyon tipleri var mı?
Bar

Belirli bir işlev sınıfının CD ile örneğin FISTA gibi diğer yöntemlerden daha hızlı olacağını söyleyemem. Bildiğim kadarıyla, bu büyük ölçüde sizin işlevinize ve degradeyi ve bunun gibi şeyleri değerlendirmenin ne kadar pahalı olduğuna bağlı. Tecrübelerime göre, CD modelde çok az değişken olduğunda Kement probleminde FISTA'dan daha hızlı (hatırlamıyorum ama binlerce kişiden daha az). Burada sadece CD'yi ISTA ve FISTA ile karşılaştırdığımı unutmayın, diğer algoritmalar (Newton veya Pseudo-Newton gibi) muhtemelen daha hızlı olacaktır; ama bu tamamen eldeki probleme bağlı.
Tommy L

Neden CD GD'den daha hızlı? Sayaç mantığı gibi görünüyor.
Royi,

3

Koordinat iniş bir seferde bir parametreyi güncellerken , gradyan iniş tüm parametreleri bir kerede güncellemeye çalışır.

Bir algoritmanın ne zaman diğerinden daha iyi olacağını tam olarak belirlemek zordur . Örneğin, koordinat inişinin LASSO için son teknoloji ürünü olduğunu öğrendiğim için çok şok oldum. Ve tek ben değildim; 17 no'lu slayta bakınız .

Bununla birlikte, bir sorunu inişi koordine etmek için daha takdir edilebilir kılan bazı özellikler var:

(1) Hızlı koşullu güncellemeler. Herhangi bir nedenden ötürü, sorun birinin parametreleri tek tek çok hızlı bir şekilde optimize etmesine izin veriyorsa, koordinat inişi bunu kullanabilir. Örneğin, yalnızca bir veri alt kümesini kullanarak belirli parametreleri güncelleyebilir, bu güncellemelerin hesaplama maliyetini büyük ölçüde azaltır. Diğer bir örnek ise, diğer tüm parametrelerin değerlerine bağlı olarak, bireysel bir parametre için kapalı formda bir çözüm bulunmasıdır.

(2) Parametreler için nispeten bağımsız modlar. Bir parametrenin en uygun değeri diğer parametre değerlerinden tamamen bağımsızsa, bir tur koordinat inişi çözüme götürür (her bir koordinat güncellemesinin geçerli modu bulduğunu varsayarsak). Öte yandan, belirli bir parametre için modun diğer parametre değerlerine çok bağlı olması durumunda, her turda çok küçük güncellemelerle koordinat inişinin çok yüksek olması muhtemeldir.

Ne yazık ki, çoğu sorun için, (2) geçerli değildir, bu nedenle koordinat inişinin alternatif algoritmalara göre iyi bir performans göstermesi nadirdir. LASSO için iyi performans göstermesinin sebebinin, koşulu canlandırmak için kullanabileceği birçok püf noktası olduğuna inanıyorum (1).

α


0

Bunun eski bir soru olduğunu ve çok iyi cevapları olduğunu biliyorum. Bazı pratik kişisel deneyimlerimi paylaşmak istiyorum.

k

  • Tüm olasılıklar olumlu olmalı.
  • Olasılık kümesinin tüm öğeleri bir taneye kadar toplanmalıdır

Bu aslında çok şey soruyor. Degrade iniş ile biri genellikle bir ceza fonksiyonu ile kısıtlamalar ile ilgilenir. İşte işe yaramayacak. Bir değer bu kısıtlamalardan birini ihlal ettiği anda, kodunuz tipik olarak sayısal bir hata verir. Dolayısıyla, optimizasyon algoritmasının onu geçmesine asla izin vermeyerek kısıtlamalarla uğraşmak zorunda değil.

Gradyan inişine izin vermek için kısıtlamaları karşılamak için probleminize uygulayabileceğiniz çok sayıda dönüşüm vardır. Ancak, bunu yapmanın en kolay ve en tembel yolunu arıyorsanız, koordinat inişinin gideceği yol:

pben

  • pbenk+1=pbenk-ηJpben
  • pben=min(maksimum(pben,0),1)
  • Pj+1=Pj1Σben=1npben

Benim gibi Python'da çalışan biri için bu genellikle performansı olumsuz yönde etkileyen ek bir döngü kullanmam gerektiği anlamına geliyor. Gradyan iniş performansı optimize edilmiş Numpy kullanmama izin veriyor. Biri onunla çok iyi bir hız alabilir, ancak bu, koordinat inişiyle elde edilemez, bu yüzden genellikle bazı dönüşüm tekniklerini kullanıyorum.

Dolayısıyla, sonuç, koordinat inişinin Poisson dağılımındaki rate parametresi gibi çok katı kısıtlamalarla başa çıkmak için en kolay seçenek olduğudur. Olumsuz olursa, kod şikayet vb.

Umarım bu biraz fikir vermiştir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.