Возможно ли градиентное спуск для SVM с ядром (если так, почему люди используют квадратичное программирование)?


21

Почему люди используют методы квадратичного программирования (например, SMO) при работе с SVM с ядром? Что не так с градиентным спуском? Это невозможно использовать с ядрами или просто слишком медленно (и почему?).

Здесь немного больше контекста: пытаясь немного лучше понять SVM, я использовал Gradient Descent для обучения линейного классификатора SVM, используя следующую функцию стоимости:

J(w,b)=Ci=1mmax(0,1y(i)(wtx(i)+b))+12wtw

Я использую следующие обозначения:

  • w - это весовые характеристики модели, а- ее параметр смещения.b
  • я йx(i) - вектор элементов обучающего экземпляра.ith
  • y(i) - целевой класс (-1 или 1) для экземпляра .ith
  • m - количество обучающих экземпляров.
  • C - гиперпараметр регуляризации.

Я вывел (суб) вектор градиента (относительно и ) из этого уравнения, и Gradient Descent работал просто отлично. бwb

Теперь я хотел бы заняться нелинейными задачами. Могу ли я просто заменить все точечные продукты на в функции стоимости, где - функция ядра (например, RBF Гаусса, ), затем используйте исчисление для вывода (суб) градиентный вектор и приступить к градиентному спуску? K( u , v )KK( u , v )= e - γ u - v 2utvK(u,v)KK(u,v)=eγuv2

Если это слишком медленно, то почему? Функция стоимости не выпуклая? Или это потому, что градиент изменяется слишком быстро (он не является непрерывным по Липшицу), поэтому алгоритм продолжает перепрыгивать через долины во время спуска, поэтому он сходится очень медленно? Но даже тогда, как это может быть хуже, чем временная сложность квадратичного программирования, которая равна ? Если это вопрос локальных минимумов, не может ли стохастик GD с имитацией отжига преодолеть их? O(nsamples2×nfeatures)

Ответы:


6

Положим так, чтобы w t ϕ ( x ) = u tK и w t w = u t K u , причем K = ϕ ( x ) t ϕ ( x ) , где ϕ ( x ) является отображением исходной входной матрицы, хw=ϕ(x)uwtϕ(x)=utKwtw=utKuK=ϕ(x)tϕ(x)ϕ(x)x, Это позволяет решить SVM посредством первичной формулировки. Используя вашу запись для потери:

J(w,b)=Ci=1mmax(0,1y(i)(utK(i)+b))+12utKu

представляет собойматрицу m × m , а u представляет собойматрицу m × 1 . Ни один не бесконечен.Km×mum×1

Действительно, двойственное обычно быстрее решить, но у первичного также есть свои преимущества, такие как приближенные решения (которые не гарантированы в двойственной формулировке).


Теперь, почему дуал намного более заметен, не совсем понятно: [1]

Исторические причины, по которым большинство исследований в последнее десятилетие были посвящены двойной оптимизации, неясны . Мы полагаем, что это потому, что SVM были впервые введены в их формулировку жесткого поля [Boser et al., 1992], для которой двойная оптимизация (из-за ограничений) кажется более естественной. В целом, однако, SVM с мягким запасом предпочтительнее, даже если данные обучения являются разделяемыми: граница принятия решения является более надежной, поскольку учитывается больше точек обучения [Chapelle et al., 2000]


Chapelle (2007) утверждает, что временная сложность как первичной, так и двойной оптимизации составляет , наихудший случай - O ( n 3 ) , но они проанализировали квадратичные и приблизительные потери шарнира, поэтому не являются собственными потеря шарнира, поскольку его нельзя дифференцировать с помощью метода Ньютона.O(nnsv+nsv3)O(n3)


[1] Chapelle, O. (2007). Обучение векторной машины поддержки в Primal. Нейронные вычисления, 19 (5), 1155-1178.


1
+1 Не могли бы вы также расширить временную сложность
seanv507

@ seanv507 спасибо, действительно, я должен был обратиться к этому, я скоро обновлю этот ответ.
Firebug

4

Если мы применим преобразование ко всем входным весовым векторам ( x ( i ) ), мы получим следующую функцию стоимости:ϕx(i)

J(w,b)=Ci=1mmax(0,1y(i)(wtϕ(x(i))+b))+12wtw

Трюк с ядром заменяет на K ( u , v ) . Так как весовой вектор W является не трансформировали, ядро трик не может быть применен к функции затрат выше .ϕ(u)tϕ(v)K(u,v)w

Вышеуказанная функция стоимости соответствует основной форме цели SVM:

minw,b,ζCi=1mζ(i)+12wtw

y(i)(wtϕ(x(i))+b)1ζ(i))ζ(i)0i=1,,m

Двойная форма является:

minα12αtQα1tα

ytα=00αiCi=1,2,,m

1Qm×mQij=y(i)y(j)ϕ(x(i))tϕ(x(j))

Qij

Qij=y(i)y(j)K(x(i),x(j))

Таким образом, уловка ядра может быть использована только в двойственной форме задачи SVM (плюс некоторые другие алгоритмы, такие как логистическая регрессия).

Теперь вы можете использовать готовые библиотеки для квадратичного программирования, чтобы решить эту проблему, или использовать множители Лагранжа для получения неограниченной функции (функция двойной стоимости), а затем искать минимум с помощью градиентного спуска или любого другого метода оптимизации. Одним из наиболее эффективных подходов является алгоритм SMO, реализованный libsvmбиблиотекой (для SVM с ядром).


1
Я не уверен, почему вы отметили свой ответ вики-сообщества. Это похоже на совершенно правильный ответ на ваш вопрос.
Sycorax сообщает восстановить Monica

Спасибо @GeneralAbrial. Я пометил свой ответ как Вики сообщества, чтобы избежать подозрений в том, что я знал ответ, прежде чем задавать вопрос.
MiniQuark

1
Вы всегда должны делать то, что считаете правильным, но совершенно кошерно задавать вопросы и отвечать на них.
Sycorax сообщает восстановить Monica

w=ϕ(x)uwtϕ(x)=uKwtw=utKuK=ϕtϕu

2

Я могу ошибаться, но я не понимаю, как мы можем заменить точечные продукты ядрами, не превращая это в двойственную проблему.

xϕ(x)
J(w,b)=Ci=1mmax(0,1y(i)(wtϕ(x(i))+b))+12wtw
ϕ(x(i))w

Кажется трудным оптимизировать вектор бесконечных измерений, используя градиентный спуск напрямую.

Обновленный
ответ Firebug дает возможность заменить точечные продукты ядрами в первичной формулировке.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.