İnsanlar neden çekirdek SVM'lerle uğraşırken Kuadratik Programlama tekniklerini (SMO gibi) kullanıyor? Gradyan İnişinin nesi yanlış? Çekirdekle kullanmak imkansız mı yoksa çok mu yavaş (ve neden?).
İşte biraz daha fazla bağlam: SVM'leri biraz daha iyi anlamaya çalışırken, aşağıdaki maliyet işlevini kullanarak doğrusal bir SVM sınıflandırıcısını geliştirmek için Gradient Descent kullandım:
Aşağıdaki notasyonları kullanıyorum:
- , modelin özellik ağırlıklarıdır ve onun bias parametresidir.
- , eğitim örneğinin özellik vektörüdür.
- , örneği için hedef sınıftır (-1 veya 1) .
- , antrenman örnekleri sayısıdır.
- normalizasyon hiperparametresidir.
Bu denklemden bir (alt) gradyan vektörü ( ve ile ilgili olarak) elde ettim ve Gradient Descent gayet iyi çalıştı.
Şimdi doğrusal olmayan sorunların üstesinden gelmek istiyorum. Ben sadece tüm nokta ürünlerin değiştirebilir miyim ile maliyet fonksiyonu içinde K çekirdek fonksiyonudur (örneğin Gauss RBF, K (\ mathbf {u}, \ mathbf {v}) = e ^ {- \ gamma \ | \ mathbf {u} - \ mathbf {v} \ | ^ 2} ), sonra türetmek için hesap kullanın (alt) gradyan vektörü ve Gradient Descent ile devam edin? K( u , v )KK( u , v )= E - γ ‖ u - v ‖ 2
Çok yavaşsa, neden bu? Maliyet işlevi dışbükey değil mi? Yoksa gradyan çok hızlı değiştiği için mi (sürekli Lipschitz değil), algoritma iniş sırasında vadiler arasında zıplamaya devam ediyor, bu yüzden çok yavaş birleşiyor? Fakat o zaman bile, O ({n_ \ text {samples}} ^ 2 \ times n_ \ text {features}) olan Quadratic Programming'in zaman karmaşıklığından nasıl daha kötü olabilir ? Yerel bir minima meselesiyse, simüle edilmiş tavlama ile Stochastic GD bunları yenemez mi?