Coordenada vs. descida de gradiente

23

Eu queria saber quais são os diferentes casos de uso para os dois algoritmos, descida de coordenadas e descida de gradiente .

Eu sei que a descida de coordenadas tem problemas com funções não suaves, mas é usada em algoritmos populares como SVM e LASSO.

Acho que a descida em gradiente é usada mais amplamente, especialmente com o ressurgimento de RNAs, e para muitas outras tarefas de aprendizado de máquina.

Minha pergunta é: que tipo de problemas se encaixam em um, mas não no outro, e nesse aspecto o que torna o ajuste de descida coordenada para SVMs e LASSO, mas o ajuste de descida gradiente para RNAs?

Como escolher entre os dois ao escolher um algoritmo de otimização?

Barra
fonte

Respostas:

7

Eu acho que geralmente é uma questão de quão simples / fácil é calcular o gradiente da parte suave da função e / ou o operador proximal da penalidade.

Às vezes, é muito mais simples encontrar uma solução exata do problema no caso de uma única variável (ou um bloco ou variáveis) do que trabalhar com todas as variáveis ​​simultaneamente. Outras vezes, é muito caro calcular o gradiente em comparação com os derivativos individuais. Além disso, a convergência de coordenar descida é o mesmo que para ista, , onde k é o número de iterações, mas pode, por vezes, obter um melhor desempenho comparado com ambos ISTA e fista, ver por exemplo, http: //statweb.stanford. edu / ~ tibs / Comparação.txt .1/k2k

Tais coisas influenciarão a escolha da descida coordenada vs. ISTA / FISTA, por exemplo.

Tommy L
fonte
Então, quais são os casos em que a descida de coordenadas (CD) será mais rápida? Existem alguns tipos específicos de funções nas quais o CD será um candidato melhor?
Bar
Não posso dizer que uma classe específica de funções seja mais rápida com o CD do que com outros métodos, como, por exemplo, o FISTA. Até onde eu sei, isso depende muito da sua função e de quão caro é avaliar o gradiente e coisas assim. De acordo com minha experiência, o CD é mais rápido que o FISTA no problema do laço, quando há poucas variáveis ​​no modelo (não se lembre, mas menos de alguns milhares). Observe que aqui estou apenas comparando CD com ISTA e FISTA; outros algoritmos (como Newton ou Pseudo-Newton) provavelmente serão muito mais rápidos; mas isso depende inteiramente do problema em questão.
Tommy G
Por que o CD é mais rápido que o GD? Parece contra-lógica.
Royi 30/06/16
3

A descida de coordenadas atualiza um parâmetro de cada vez, enquanto a descida de gradiente tenta atualizar todos os parâmetros de uma só vez.

É difícil especificar exatamente quando um algoritmo será melhor que o outro. Por exemplo, fiquei muito chocado ao saber que a descida de coordenadas era o estado da arte para o LASSO. E eu não era o único; veja o slide 17 .

Com isso dito, existem alguns recursos que podem tornar um problema mais corrigível para coordenar a descida:

(1) Atualizações condicionais rápidas. Se, por algum motivo, o problema permitir otimizar os parâmetros individualmente muito rapidamente, a descida de coordenadas poderá fazer uso disso. Por exemplo, é possível atualizar determinados parâmetros usando apenas um subconjunto dos dados, reduzindo bastante o custo computacional dessas atualizações. Outro caso é se houver uma solução de formulário fechado para um parâmetro individual, condicional aos valores de todos os outros parâmetros.

(2) Modos relativamente independentes para parâmetros. Se o valor ideal de um parâmetro for completamente independente dos outros valores, uma rodada de descida de coordenadas levará à solução (supondo que cada atualização de coordenada encontre o modo atual). Por outro lado, se o modo de um determinado parâmetro for altamente dependente de outros valores de parâmetros, é muito provável que a descida de coordenadas se aproxime, com atualizações muito pequenas a cada rodada.

Infelizmente, para a maioria dos problemas, (2) não se aplica, por isso é raro que a descida de coordenadas faça bem em comparação com algoritmos alternativos. Acredito que a razão pela qual ele tenha um bom desempenho no LASSO é que existem muitos truques que podemos usar para decretar a condição (1).

Para descida de gradiente, esse algoritmo funcionará bem se a segunda derivada for relativamente estável, uma boa α

Cliff AB
fonte
0

Percebo que essa é uma pergunta antiga e tem algumas respostas muito boas. Eu gostaria de compartilhar alguma experiência pessoal prática.

k componentes em um modelo de mistura. Eles têm as seguintes restrições:

  • Todas as probabilidades devem ser positivas.
  • Todos os elementos do conjunto de probabilidades devem somar um

Isso é realmente pedir muito. Com a descida gradiente, geralmente se lida com restrições através de uma função de penalidade. Aqui não vai funcionar. Assim que um valor viola uma dessas restrições, seu código geralmente gera um tipo de erro numérico. Portanto, é preciso lidar com as restrições, nunca permitindo que o algoritmo de otimização a atravesse.

Existem inúmeras transformações que você pode aplicar ao seu problema para satisfazer as restrições e permitir a descida do gradiente. No entanto, se você estiver procurando a maneira mais fácil e preguiçosa de implementar isso, a descida coordenada é o caminho a seguir:

pEu

  • pEuk+1=pEuk-ηJpEu
  • pEu=min(max(pEu,0 0),1)
  • Pj+1=Pj1Eu=1npEu

Para alguém como eu que trabalha em Python, isso geralmente significa que eu tenho que usar um loop for adicional que afeta o desempenho de maneira bastante negativa. A descida de gradiente me permite usar o Numpy, que é otimizado para desempenho. Pode-se obter uma velocidade muito boa com ele, no entanto, isso não é possível com a descida de coordenadas, então eu geralmente uso alguma técnica de transformação.

Portanto, a conclusão é que a descida de coordenadas é a opção mais fácil de lidar com restrições muito estritas, como o parâmetro rate na distribuição de Poisson. Se ele se tornar negativo, o código reclama, etc.

Espero que isso tenha adicionado um pouco de insight.

Dylan Solms
fonte