Çevrimiçi öğrenmede düzenlileştirme ve özellik ölçeklendirme?


15

Diyelim ki lojistik regresyon sınıflandırıcım var. Normal toplu öğrenmede, aşırı sığmayı önlemek ve ağırlıkları küçük tutmak için düzenli bir terim olurdu. Ayrıca özelliklerimi normalleştirip ölçeklendirirdim.

Çevrimiçi öğrenme ortamında sürekli bir veri akışı alıyorum. Her örnekle degrade iniş güncellemesi yapıyorum ve sonra atıyorum. Çevrimiçi öğrenmede özellik ölçeklendirme ve düzenleme terimini kullanmam gerekiyor mu? Evet ise, bunu nasıl yapabilirim? Örneğin, ölçeklendirilecek bir dizi eğitim verim yok. Düzenleme parametremi ayarlamak için doğrulama ayarlamam da yok. Hayır ise, neden olmasın?

Çevrimiçi öğrenmemde sürekli bir örnek akışı alıyorum. Her yeni örnek için bir tahmin yapıyorum. Sonra bir sonraki adımda, gerçek hedefi alıyorum ve degrade iniş güncellemesini yapıyorum.

Yanıtlar:


9

Açık kaynaklı proje vowpal wabbit , ağırlık güncellemelerini etkileyen 3 ek faktörün anında (çevrimiçi) hesaplanmasıyla geliştirilmiş çevrimiçi SGD'nin bir uygulamasını içerir. Bu faktörler ilgili komut satırı seçenekleriyle etkinleştirilebilir / devre dışı bırakılabilir (varsayılan olarak her üçü de açıktır, --sgdseçenek, hepsini kapatır, yani: "klasik" SGD'ye geri dönüş).

3 SGD geliştirme seçeneği:

  • --normalized her özelliğin ölçeği için ayarlanan güncellemeler
  • --adaptive uyarlamalı gradyan kullanır (AdaGrad) (Duchi, Hazan, Singer)
  • --invariant önem taşıyan güncellemeler (Karampatziakis, Langford)

Birlikte, çevrimiçi öğrenme sürecinin aşağıdakiler için 3 yönlü otomatik bir telafi / ayarlama yapmasını sağlarlar:

  • özellik başına ölçeklendirme (büyük ve küçük değerler)
  • özellik önemine göre özellik başına öğrenme oranı düşüşü
  • örnek başına özellik yaygınlığı / nadirliği için özellik uyarlanabilir öğrenme oranı ayarlaması

Sonuç olarak, öğrenciyi daha az önyargılı ve daha etkili hale getirmek için farklı özellikleri önceden normalleştirmeye veya ölçeklemeye gerek yoktur.

Buna ek olarak, vowpal wabbit , düzenleme seçenekleriyle birlikte kesik gradyanlı iniş yoluyla çevrimiçi normalleştirmeyi de uygular:

  • --l1 (L1-normu)
  • --l2 (L2 normu)

Birden fazla veri setindeki bu geliştirmelerle ilgili deneyimlerim, her biri koda eklendiğinde model doğruluğunu ve daha düzgün yakınsamayı önemli ölçüde geliştirmeleriydi.

İşte bu geliştirmelerle ilgili daha fazla ayrıntı için bazı akademik makaleler:


Arielf - Üç geliştirmeyi kapatırsanız (--sgd aracılığıyla), github.com/JohnLangford/vowpal_wabbit/wiki/v6.1_tutorial.pdf dosyasının 11. slaytında gösterilen sgd'dir, böylece power_t ve initial_t alakalı olur ?
B_Miner

1
B_miner: anladığım kadarıyla --power_tve --initial_tglobal (özellik başına değil) bağımsız seçenekler. --sgdsadece "klasik" SGD'ye döner. IOW: --sgdYalnızca iptal --invariant, --normalizedve --adaptive(ki ayrı, başı özelliği öğrenme-oranlarını ima)
arielf

Bu güncellemeleri paralel bir eşzamansız şekilde yapmanın bir yolu olup olmadığını biliyor musunuz (eşzamansız SGD'de olduğu gibi)? Birden fazla çalışanı olan VW, her geçişin sonunda her bir çalışanın modelinin ortalamasını alıyor gibi görünüyor. Bunun nasıl yapılacağı hakkında herhangi bir makale / yazılım işaretçisi?
JC1


1

evet kesinlikle düzenlileştirmeye ihtiyacınız var ... aynı zamanda degrade inişine yardımcı olur (ve öğrenme hızını 1 / C'ye ilklendirir)

bkz. örneğin SGD-QN kağıdı http://leon.bottou.org/papers bottou gazeteleri

çevrimiçi öğrenmeyle ne demek istediğinizi gerçekten açıklamamışsınızdır: örneğin her nokta için hedef değer elde edersiniz? Nasıl dahil edeceğinizi bilmiyorum ... C'yi arama ... Sanırım farklı düzenleme koşullarına sahip birden fazla sınıflandırıcıya sahip olacaksınız ve tahmin hatasını takip edeceksiniz (ağırlıkları güncellemeden önce)


Çevrimiçi öğrenmeyle bir örnek alıp bir tahmin yapıyorum. Bir sonraki adımda, örneğim için gerçek hedefi alıyorum ve degrade iniş güncellemesi yapıyorum.
siamii

iyi o zaman önerdiğim gibi olmalı - farklı düzenleme parametresine sahip bir grup sınıflandırıcı çalıştırıyorsunuz ve her sınıflandırıcının tahmin hatalarını takip ediyorsunuz.
seanv507

Öğrenme oranını 1 / C'ye başlatarak ne demek istediğinizden emin değilim. C nedir? Destek vektör makineleri hakkında mı konuşuyorsunuz? Düzenleyicinin katsayısı lambda olduğu lojistik regresyondan bahsediyorum. Bunun öğrenme oranı ile ne ilgisi olduğunu bilmiyorum.
siamii

evet l2 düzenlenme parametresi, C, lambda veya her neyse. bottou'nun sgdqn gazetesinde bir kenara değinilen bir şey ve başka bir yerde daha iyi açıklandığını varsayıyorum. temelde öğrenme oranınız hata yüzeyinin 1 / eğrilik (Hessian ters) olmalıdır .. şimdi hata yüzeyiniz
seanv507 15

1
Ayrıca özellik ölçeklendirmesi yapmam gerekir mi? Çevrimiçi ortamda nasıl yapılır?
siamii
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.