O Gradient Descent é possível para SVMs kernelizados (se sim, por que as pessoas usam a Programação Quadrática)?

21

Por que as pessoas usam técnicas de programação quadrática (como SMO) ao lidar com SVMs kernelizados? O que há de errado com a descida do gradiente? É impossível usar com kernels ou é muito lento (e por quê?).

Aqui está um pouco mais de contexto: tentando entender um pouco melhor os SVMs, usei o Gradient Descent para treinar um classificador SVM linear usando a seguinte função de custo:

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

Estou usando as seguintes notações:

  • w é o peso do recurso do modelob é seu parâmetro de viés.
  • x(i) é oith vector recurso da instância de treinamento.
  • y(i) é a classe de destino (-1 ou 1) para aith instância.
  • m é o número de instâncias de treinamento.
  • C é o hiperparâmetro de regularização.

I derivado de um vector de (sub) gradiente (no que diz respeito a w e b ) a partir desta equação, e Gradiente Descida funcionou muito bem.

utvK(u,v)KK(u,v)=eγuv2

Se é muito lento, por que isso? A função de custo não é convexa? Ou é porque o gradiente muda muito rápido (não é contínuo em Lipschitz) para que o algoritmo continue pulando através dos vales durante a descida e converja muito lentamente? Mas mesmo assim, como pode ser pior que a complexidade de tempo da programação quadrática, que é ? Se é uma questão de mínimos locais, a GD Estocástica com recozimento simulado não pode superá-los? O(nsamples2×nfeatures)

MiniQuark
fonte

Respostas:

6

Defina modo que w t ϕ ( x ) = u tK e w t w = u t K u , com K = ϕ ( x ) t ϕ ( x ) , onde ϕ ( x ) é um mapeamento da matriz de entrada original, xw=ϕ(x)uwtϕ(x)=utKwtw=utKuK=ϕ(x)tϕ(x)ϕ(x)x. Isso permite resolver o SVM através da formulação primária. Usando sua notação para a perda:

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

m × m u m × 1K é uma matriz é uma matriz . Nem é infinito.m×mum×1

De fato, o dual é geralmente mais rápido de resolver, mas o primal também tem suas vantagens, como soluções aproximadas (que não são garantidas na formulação dual).


Agora, por que o dual é muito mais proeminente não é óbvio: [1]

As razões históricas pelas quais a maior parte da pesquisa na última década foi sobre otimização dupla não são claras . Acreditamos que é porque os SVMs foram introduzidos pela primeira vez em sua formulação de margem rígida [Boser et al., 1992], para a qual uma otimização dupla (devido às restrições) parece mais natural. Em geral, no entanto, os SVMs de margem flexível devem ser preferidos, mesmo que os dados de treinamento sejam separáveis: o limite de decisão é mais robusto porque mais pontos de treinamento são levados em consideração [Chapelle et al., 2000]


Chapelle (2007) argumenta que a complexidade temporal da otimização primária e dupla é , sendo o pior caso O ( n 3 ) , mas eles analisaram perdas quadráticas e aproximadas da dobradiça, portanto, não é adequado. perda de dobradiça, pois não é diferenciável para ser usado com o método de Newton.O(nnsv+nsv3)O(n3)


[1] Chapelle, O. (2007). Treinando uma máquina de vetores de suporte no primal. Computação neural, 19 (5), 1155-1178.

Firebug
fonte
1
+1 talvez você possa expandir a complexidade de tempo também
seanv507
@ seanv507 obrigado, na verdade eu deveria ter abordado isso, em breve atualizarei esta resposta.
Firebug
4

Se aplicarmos uma transformação a todos os vetores de peso de entrada ( x ( i ) ), obteremos a seguinte função de custo:ϕx(i)

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

Os substitui truque do kernel por K ( u , v ) . Como o vetor de peso w não é transformado, o truque do kernel não pode ser aplicado à função de custo acima .ϕ(u)tϕ(v)K(u,v)w

A função de custo acima corresponde à forma primária do objetivo SVM:

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

sujeito a e ζ ( i )0 para i = 1 , , my(i)(wtϕ(x(i))+b)1ζ(i))ζ(i)0i=1,,m

A forma dupla é:

minα12αtQα1tα

sujeito a e 0 α iC para i = 1 , 2 , , mytα=00αiCi=1,2,,m

onde é um vector completo de 1s e Q é um m × m matriz com elementos Q i j = y ( i ) y ( j ) φ ( x ( i ) ) tφ ( x ( j ) ) .1Qm×mQij=y(i)y(j)ϕ(x(i))tϕ(x(j))

Agora podemos usar o truque do kernel calculando assim:Qij

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

Portanto, o truque do kernel pode ser usado apenas na forma dupla do problema SVM (além de outros algoritmos, como a regressão logística).

Agora você pode usar as bibliotecas de programação quadrática prontas para resolver esse problema ou usar multiplicadores Lagrangianos para obter uma função irrestrita (a função de custo duplo) e, em seguida, procurar um mínimo usando a Descida de gradiente ou qualquer outra técnica de otimização. Uma das abordagens mais eficientes parece ser o algoritmo SMO implementado pela libsvmbiblioteca (para SVM kernelizado).

MiniQuark
fonte
1
Não sei por que você marcou sua resposta Wiki da comunidade. Parece uma resposta perfeitamente válida para sua pergunta.
Sycorax diz Restabelecer Monica
Obrigado @GeneralAbrial. Marquei minha resposta como Wiki da comunidade para evitar suspeitas de que sabia a resposta antes de fazer a pergunta.
MiniQuark 2/16
1
Você deve sempre fazer o que acha certo, mas é perfeitamente mais fácil perguntar e responder sua própria pergunta.
Sycorax diz Restabelecer Monica
W=ϕ(x)vocêWtϕ(x)=vocêKwtw=utKuK=ϕtϕu
2

Posso estar errado, mas não vejo como podemos substituir os produtos por kernels sem transformá-lo no problema duplo.

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

Parece difícil otimizar um vetor de dimensões infinitas usando a descida gradiente diretamente.

Atualizar
A resposta do Firebug fornece uma maneira de substituir os produtos de ponto por kernels na formulação primária.

dontloo
fonte