Почему люди используют методы квадратичного программирования (например, SMO) при работе с SVM с ядром? Что не так с градиентным спуском? Это невозможно использовать с ядрами или просто слишком медленно (и почему?).
Здесь немного больше контекста: пытаясь немного лучше понять SVM, я использовал Gradient Descent для обучения линейного классификатора SVM, используя следующую функцию стоимости:
Я использую следующие обозначения:
- - это весовые характеристики модели, а- ее параметр смещения.
- я й - вектор элементов обучающего экземпляра.
- - целевой класс (-1 или 1) для экземпляра .
- - количество обучающих экземпляров.
- - гиперпараметр регуляризации.
Я вывел (суб) вектор градиента (относительно и ) из этого уравнения, и Gradient Descent работал просто отлично. б
Теперь я хотел бы заняться нелинейными задачами. Могу ли я просто заменить все точечные продукты на в функции стоимости, где - функция ядра (например, RBF Гаусса, ), затем используйте исчисление для вывода (суб) градиентный вектор и приступить к градиентному спуску? K( u , v )KK( u , v )= e - γ ‖ u - v ‖ 2
Если это слишком медленно, то почему? Функция стоимости не выпуклая? Или это потому, что градиент изменяется слишком быстро (он не является непрерывным по Липшицу), поэтому алгоритм продолжает перепрыгивать через долины во время спуска, поэтому он сходится очень медленно? Но даже тогда, как это может быть хуже, чем временная сложность квадратичного программирования, которая равна ? Если это вопрос локальных минимумов, не может ли стохастик GD с имитацией отжига преодолеть их?