Dlaczego ludzie używają technik programowania kwadratowego (takich jak SMO) podczas obsługi SVM z jądrem? Co jest nie tak z Gradient Descent? Czy nie jest możliwe używanie go z jądrem, czy jest to po prostu zbyt wolne (i dlaczego?).
Oto nieco więcej kontekstu: starając się lepiej zrozumieć SVM, użyłem Gradient Descent do wyszkolenia liniowego klasyfikatora SVM za pomocą następującej funkcji kosztu:
Używam następujących notacji:
- to wagi cech modelu, ato parametr odchylenia.
- i th jest wektorem funkcji instancji szkoleniowej .
- i th to klasa docelowa (-1 lub 1) dla instancji .
- jest liczbą instancji treningowych.
- to hiperparametr regularyzacji.
Z tego równania wyprowadziłem (pod) wektor gradientu (w odniesieniu do i ), a zejście gradientu działało dobrze.
Teraz chciałbym rozwiązać problemy nieliniowe. Można po prostu zastąpić wszystkich iloczyn skalarny z w funkcji kosztu, gdzie jest funkcją jądra (na przykład Gaussa RBF, ), a następnie użyj rachunku różniczkowego do uzyskania wektora (pod) gradientu i kontynuuj z gradientem opadania?
Jeśli jest za wolny, dlaczego? Czy funkcja kosztu nie jest wypukła? A może dlatego, że gradient zmienia się zbyt szybko (nie jest ciągły w skali Lipschitza), więc algorytm przeskakuje przez doliny podczas zniżania, więc zbiega się bardzo wolno? Ale nawet wtedy, jak może być gorzej niż złożoność czasowa programowania kwadratowego, którą jest ? Jeśli jest to kwestia lokalnych minimów, czy Stochastic GD z symulowanym wyżarzaniem nie może ich pokonać?