Otimização quando a função de custo demora para avaliar


59

A descida de gradiente e muitos outros métodos são úteis para encontrar mínimos locais em funções de custo. Eles podem ser eficientes quando a função de custo pode ser avaliada rapidamente em cada ponto, seja numericamente ou analiticamente.

Eu tenho o que me parece ser uma situação incomum. Cada avaliação da minha função de custo é cara. Estou tentando encontrar um conjunto de parâmetros que minimizem uma superfície 3D contra superfícies verdadeiras do solo. Sempre que altero um parâmetro, preciso executar o algoritmo em todo o grupo de amostras para medir seu efeito. Para calcular um gradiente, preciso alterar todos os 15 parâmetros de forma independente, o que significa que tenho que regenerar todas as superfícies e comparar com o grupo de amostras muitas vezes por gradiente e definitivamente muitas vezes ao longo da otimização.

Eu desenvolvi um método para contornar esse problema e atualmente o estou avaliando, mas estou surpreso por não ter encontrado muito na literatura a respeito de avaliações dispendiosas da função de custo. Isso me faz pensar se estou dificultando o problema e se pode haver uma maneira melhor já disponível.

Então, minhas perguntas são basicamente as seguintes: alguém conhece métodos para otimizar funções de custo, convexas ou não, quando a avaliação é lenta? Ou, estou fazendo algo bobo em primeiro lugar, executando novamente o algoritmo e comparando com o grupo de amostras tantas vezes?


5
Você já ouviu falar da descida estocástica do gradiente? Para redes neurais profundos aplicados a grandes conjuntos de treinamento você tem um problema semelhante (mas pode Eval gradiente analiticamente) e a solução padrão é fazer com gradiente descendente com base apenas em uma única amostra (estocástica) vs toda a coorte (batch)
seanv507

3
Estou apenas vagamente familiarizado com a área, portanto, este é um comentário e não uma resposta. Mas o que você está discutindo parece muito com o tópico Quantificação da incerteza, frequentemente enfrentado pelos engenheiros, onde uma única avaliação da função alvo levou semanas para ser avaliada (pelo menos nos problemas enfrentados pelos meus colegas de engenharia). Meu entendimento muito limitado de como isso é tratado é fazer uma aproximação substituta que é muito mais fácil de avaliar com base em avaliações anteriores e modelos de engenharia mais simples e depois usar esses modelos substitutos para escolher a próxima avaliação ...
Cliff AB

2
... da função alvo mais cara. Detesto dizer isso, mas não sei mais sobre o assunto no momento; Só fui informado sobre isso brevemente enquanto discutia tópicos de pesquisa com os referidos engenheiros. Curiosamente, parece uma área de pesquisa muito desafiadora: acredito que bons modelos requerem uma boa compreensão da física e da estatística.
Cliff AB

11
@ seanv507 Sim, obrigado, mas evitei por um motivo semelhante. Demora cerca de 30 segundos a um minuto para executar uma amostra. Se eu tiver 15 parâmetros, estou analisando quase 8 minutos por cálculo de gradiente, mesmo que eu use apenas uma amostra. Se o espaço for grande, pode demorar muito tempo. Corrija-me se você tiver outras idéias em mente.
Jared Becksfort

5
"o que me parece ser uma situação incomum. Cada avaliação da minha função de custo é cara". Esta não é de todo uma situação incomum, em geral. Ele aparece em todo o lugar, por exemplo, sempre que sua função de custo vem da execução de uma simulação (por exemplo, neste documento: white.ucc.asn.au/publications/White2015PsoTransistorSizing.pdf , simulamos um circuito no SPICE com 10s). Mais superficialmente, na ciência experimental, as avaliações podem levar idades. Um dos meus amigos no projeto Masters é basicamente otimizar 5 parâmetros para encontrar a melhor maneira de inserir DNA. Cada avaliação leva 24 horas.
Lyndon White

Respostas:


59

TL; DR

Eu recomendo usar o LIPO. É comprovadamente correto e comprovadamente melhor que a pesquisa aleatória pura (PRS). Também é extremamente simples de implementar e não possui hiperparâmetros. Não conduzi uma análise que compara o LIPO ao BO, mas minha expectativa é que a simplicidade e a eficiência do LIPO impliquem que ele terá um desempenho superior ao BO.

(Veja também: Quais são algumas das desvantagens da otimização de hiper parâmetros bayesianos? )

Otimização Bayesiana

Os métodos do tipo otimização bayesiana constroem modelos substitutos do processo gaussiano para explorar o espaço dos parâmetros. A idéia principal é que as tuplas de parâmetros que estão mais próximas terão valores de função semelhantes; portanto, a suposição de uma estrutura de covariância entre pontos permite que o algoritmo faça suposições informadas sobre qual melhor melhor tupla de parâmetro vale a pena tentar a seguir. Essa estratégia ajuda a reduzir o número de avaliações de funções; de fato, a motivação dos métodos BO é manter o número de avaliações de funções o mais baixo possível, enquanto "usa todo o búfalo" para fazer boas suposições sobre qual ponto testar a seguir. Existem diferentes figuras de mérito (melhoria esperada, melhoria quantílica esperada, probabilidade de melhoria ...) que são usadas para comparar pontos a serem visitados a seguir.

Compare isso com algo como uma pesquisa em grade, que nunca usará nenhuma informação de suas avaliações de funções anteriores para informar para onde ir.

Aliás, essa também é uma poderosa técnica de otimização global e, como tal, não faz suposições sobre a convexidade da superfície. Além disso, se a função é estocástica (por exemplo, as avaliações têm algum ruído aleatório inerente), isso pode ser explicado diretamente no modelo GP.

Por outro lado, você precisará ajustar pelo menos um GP a cada iteração (ou vários, escolhendo o "melhor", ou calculando a média sobre alternativas ou métodos totalmente bayesianos). Em seguida, o modelo é usado para fazer (provavelmente milhares) de previsões, geralmente na forma de otimização local com várias etapas, com a observação de que é muito mais barato avaliar a função de previsão do GP do que a função sob otimização. Mas mesmo com essa sobrecarga computacional, costuma acontecer que mesmo funções não-convexas possam ser otimizadas com um número relativamente pequeno de chamadas de função.

Um artigo amplamente citado sobre o tema é Jones et al , "Otimização global eficiente de funções caras de caixa preta". Mas há muitas variações nessa idéia.

Pesquisa aleatória

Mesmo quando a função de custo é cara de avaliar, a pesquisa aleatória ainda pode ser útil. A pesquisa aleatória é muito simples de implementar. A única opção a ser feita pelo pesquisador é definir a probabilidade que seus resultados estejam em algum quantil ; o restante prossegue automaticamente usando os resultados da probabilidade básica.qp q

Suponha que seu quantil seja e você deseje uma probabilidade que os resultados do modelo estejam no top % de todas as tuplas hiperparâmetro. A probabilidade de que todas as tentativas de tuplas não estejam nessa janela é (porque elas são escolhidas independentemente de forma aleatória na mesma distribuição); portanto, a probabilidade de que pelo menos uma tupla esteja nessa região é de . Juntando tudo, temosp = 0,95 100 × ( 1 - q ) = 5 n q n = 0,95 n 1 - 0,95 nq=0.95p=0.95100×(1q)=5nqn=0.95n10.95n

1qnpnlog(1p)log(q)

que no nosso caso específico gera .n59

Esse resultado é o motivo pelo qual a maioria das pessoas recomenda tentativas de tuplas para pesquisa aleatória. Vale ressaltar que é comparável ao número de experimentos necessários para obter bons resultados com métodos baseados no Processo Gaussiano, quando há um número moderado de parâmetros. Diferentemente dos processos gaussianos, o número de tuplas de consultas não muda com o número de hiperparâmetros a serem pesquisados; de fato, para um grande número de hiperparâmetros, um método baseado em processo gaussiano pode levar muitas iterações para avançar.n = 60n=60n=60

Como você tem uma garantia probabilística de como os resultados são bons, pode ser uma ferramenta persuasiva para convencer seu chefe de que não é necessário executar mais experimentos.

LIPO e suas variantes

É uma chegada emocionante que, se não é nova , certamente é nova para mim. Ele prossegue alternando entre a colocação de limites informados na função e a amostragem do melhor limite e o uso de aproximações quadráticas. Ainda estou trabalhando em todos os detalhes, mas acho que isso é muito promissor. Esta é uma boa redação do blog , e o artigo é Cédric Malherbe e Nicolas Vayatis " Otimização global das funções de Lipschitz ".


11
Parece uma variante moderna dos métodos de superfície de resposta!
Kjetil b halvorsen

11
Na verdade, a pesquisa aleatória pode funcionar notavelmente bem: argmin.net/2016/06/20/hypertuning
Tim

11
@ Tim Sim, seu ponto de vista é bem aceito. Eu não queria "decidir" a questão que é melhor neste post, já que existem permutações infinitas no BO, cada uma alegando ser "o melhor" otimizador de caixa preta - tornando impossível ser definitivo. Concordo que a pesquisa aleatória pode funcionar muito bem, mas eu recomendaria o LIPO sobre o PRS. O LIPO é comprovadamente correto e supera fortemente o PRS (em média) em todas as minhas experiências. O LIPO também possui um custo mínimo de estimativa: se você pode minimizar um QP, pode usar o LIPO, e o LIPO possui zero hiperparâmetros (ao contrário do BO).
Reponha Monica

Estou feliz por ter verificado esta questão novamente. LIPO parece ótimo.
Jared Becksfort

LIPO é ótimo. Quando tiver um momento, expandirei minha resposta para dar uma melhor contabilidade do LIPO.
Restabelecer Monica

40

A literatura sobre avaliação da função cara-caixa preta é bastante vasta e geralmente é baseada em métodos de modelo substituto, como outras pessoas apontaram. Caixa preta aqui significa que pouco se sabe sobre a função subjacente, a única coisa que você pode fazer é avaliar em um ponto escolhido (os gradientes geralmente não estão disponíveis).xf(x)x

Eu diria que o atual padrão ouro para avaliação da função de caixa preta (muito) dispendiosa é a otimização bayesiana (BO) (global ). O Sycorax já descreveu alguns recursos do BO, então estou apenas adicionando algumas informações que podem ser úteis.

Como ponto de partida, você pode ler este documento de visão geral 1 . Há também um mais recente [2].

A otimização bayesiana tem crescido constantemente nos últimos anos, com uma série de oficinas dedicadas (por exemplo, BayesOpt , e confira esses vídeos na oficina de Sheffield sobre BO), pois possui aplicações muito práticas no aprendizado de máquina, como para otimizar hiperparâmetros dos algoritmos ML - veja, por exemplo, este documento [3] e a caixa de ferramentas relacionada SpearMint . Existem muitos outros pacotes em várias linguagens que implementam vários tipos de algoritmos de otimização bayesiana.

Como mencionei, o requisito subjacente é que cada avaliação de função seja muito cara, de modo que os cálculos relacionados à BO adicionem uma sobrecarga insignificante. Para dar uma estimativa, o BO pode ser definitivamente útil se sua função for avaliada em um tempo da ordem de minutos ou mais. Você também pode aplicá-lo para cálculos mais rápidos (por exemplo, dezenas de segundos), mas dependendo do algoritmo usado, você pode ter que adotar várias aproximações. Se sua função é avaliada na escala de segundos , acho que você está atingindo os limites da pesquisa atual e talvez outros métodos possam se tornar mais úteis. Além disso, devo dizer, o BO raramente é realmente uma caixa preta e você geralmente precisa ajustar os algoritmos, às vezes muito , para fazê-lo funcionar em pleno potencial com um problema específico do mundo real.

BO à parte, para uma revisão dos métodos gerais de otimização sem derivadas, você pode dar uma olhada nesta revisão [4] e verificar se há algoritmos que possuem boas propriedades de convergência rápida. Por exemplo, a Pesquisa de coordenadas em vários níveis (MCS) geralmente converge muito rapidamente para uma vizinhança de um mínimo (nem sempre o mínimo global, é claro). O MCS é pensado para otimização global, mas você pode torná-lo local definindo restrições de limites apropriadas.

Finalmente, você está interessado no BO para funções de destino caras e barulhentas , veja minha resposta a esta pergunta .


Referências:

1 Brochu et al., "Um Tutorial sobre Otimização Bayesiana de Funções de Custo Caro, com Aplicação à Modelagem de Usuários Ativos e Aprendizagem por Reforço Hierárquico" (2010).

[2] Shahriari et al., "Tirando o ser humano do círculo: uma revisão da otimização bayesiana" (2015).

[3] Snoek et al., "Otimização bayesiana prática de algoritmos de aprendizado de máquina", NIPS (2012).

[4] Rios e Sahinidis, "Otimização sem derivados: uma revisão de algoritmos e comparação de implementações de software", Journal of Global Optimization (2013).


4
+1 Esta é uma ótima resposta. Em particular, esses documentos são um ótimo complemento para esse segmento; de fato, eu não sabia que o método geral que descrevi se chama Otimização Bayesiana. Mas estou preocupado que os links possam ficar ruins ao longo do tempo. Você se importaria em adicionar informações de citação mais completas para que futuros usuários possam acessar esses documentos?
Reinstate Monica

Os documentos de otimização bayesiana são bastante úteis. Obrigado por responder.
Jared Becksfort

11
@ user777: Bom ponto. Adicionada uma lista de referência explícita no final, que deve ser suficiente para recuperar os papéis.
lacerbi

6

Eu não conheço os algoritmos, mas acredito que o tipo de algoritmo de otimização que você está procurando é a otimização sem derivativos , usada quando o objetivo é caro ou barulhento .

Por exemplo, dê uma olhada neste artigo (Björkman, M. & Holmström, K. "Otimização global de funções não-convexas caras usando funções de base radial." Otimização e engenharia (2000) 1: 373. doi: 10.1023 / A: 1011584207202) cujo resumo parece indicar que é exatamente isso que você deseja:

O artigo considera a otimização global de funções objetivas caras, ou seja, o problema de encontrar o mínimo global quando existem vários mínimos locais e cada valor de função leva um tempo considerável da CPU para calcular. Tais problemas geralmente surgem em aplicações industriais e financeiras, onde um valor de função pode ser o resultado de uma simulação ou otimização de computador demorada. Geralmente, é difícil obter derivativos, e os algoritmos apresentados não fazem uso de tais informações.


2
Inclua informações de citação completas para os documentos vinculados e outros recursos. Queremos construir um repositório durável de informações, e os links tendem a ficar ruins com o tempo.
Reinstale Monica

Björkman, M. & Holmström, K. "Otimização global de funções não-convexas dispendiosas usando funções de base radial". Optimization and Engineering (2000) 1: 373. doi: 10.1023 / A: 1011584207202
jkdev

4

Você não está sozinho.

Sistemas caros de avaliar são muito comuns em engenharia, como modelos de método de elementos finitos (MEF) e modelos de dinâmica de fluidos computacional (CFD). A otimização desses modelos caros em termos de computação é muito necessária e desafiadora, porque os algoritmos evolutivos geralmente precisam de dezenas de milhares de avaliações do problema, o que não é uma opção para problemas caros para avaliar. Felizmente, existem muitos métodos (algoritmos) disponíveis para resolver esse problema. Até onde eu sei, a maioria deles é baseada em modelos substitutos (metamodelos). Alguns estão listados abaixo.

  • Otimização global eficiente (EGO) [1]. O algoritmo EGO foi mencionado acima e pode ser o mais famoso algoritmo de otimização baseado em substitutos. É baseado no modelo de Kriging e em um critério de preenchimento chamado função de melhoria esperada (IE). Os pacotes R, incluindo o algoritmo EGO, são DiceOptim e DiceKriging.
  • Método de amostragem por busca de modo (MPS) [2]. O algoritmo MPS é construído no modelo RBF e uma estratégia de amostragem aditiva é usada para selecionar pontos candidatos. O código MATLAB é publicado pelos autores em http://www.sfu.ca/~gwa5/software.html . O algoritmo MPS pode precisar de mais avaliações para obter o melhor, mas pode lidar com problemas mais complicados do que o algoritmo EGO da minha experiência pessoal.
  • Modelos substitutos do conjunto de Juliane Müller [3]. Ela usou vários substitutos para melhorar a capacidade de busca. A caixa de ferramentas MATLAB MATSuMoTo está disponível em https://github.com/Piiloblondie/MATSuMoTo .

No verão, esses algoritmos de otimização baseados em substitutos tentam encontrar o melhor global do problema usando o mínimo de avaliações possível. Isso é alcançado através do uso completo das informações fornecidas pelo substituto (substituto). Revisões sobre otimização de problemas computacionais caros estão em [4-6].


Referência:

  1. DR Jones, M. Schonlau e WJ Welch, "Otimização global eficiente de funções caras de caixa preta", Journal of Global Optimization, vol. 13, pp. 455-492, 1998.
  2. L. Wang, S. Shan e GG Wang, "Método de amostragem para otimização global em funções caras de caixa preta", Engineering Optimization, vol. 36, pp. 419-438, 2004.
  3. J. Müller, "Algoritmos de modelo substituto para problemas de otimização global de caixa preta computacionalmente caros", Universidade de Tecnologia de Tampere, 2012.
  4. GG Wang e S. Shan, "Revisão de técnicas de metamodelo em apoio à otimização do projeto de engenharia", Journal of Mechanical Design, vol. 129, pp. 370-380, 2007.
  5. AI Forrester e AJ Keane, "Avanços recentes na otimização baseada em substitutos", Progress in Aerospace Sciences, vol. 45, pp. 50-79, 2009.
  6. FAC Viana, TW Simpson, V. Balabanov e V. Toropov, "Metamodelo na otimização multidisciplinar de projetos: até onde realmente chegamos?", AIAA Journal, vol. 52, pp. 670-690, 01/04/2014 2014.

3

As duas estratégias simples que usei com sucesso no passado são:

  1. Se possível, tente encontrar uma função substituta mais simples, aproximando sua avaliação completa da função de custo - normalmente, um modelo analítico que substitui uma simulação. Otimize esta função mais simples. Em seguida, valide e ajuste a solução resultante com sua função exata de custo.
  2. Se possível, tente encontrar uma maneira de avaliar uma função exata "custo delta" - exata em vez de ser uma aproximação do uso do gradiente. Ou seja, a partir de um ponto 15-dimensional inicial para o qual você tem o custo total avaliado, encontre uma maneira de derivar como o custo mudaria fazendo uma pequena alteração em um (ou vários) dos 15 componentes do seu ponto atual. Você precisaria explorar as propriedades de localização de uma pequena perturbação, se houver alguma no seu caso específico, e provavelmente definir, armazenar em cache e atualizar uma variável de estado interna ao longo do caminho.

Essas estratégias são muito específicas para cada caso, não sei se elas podem ser aplicáveis ​​no seu caso ou não, desculpe se não forem. Ambos podem ser aplicáveis ​​(como nos meus casos de uso): aplique a estratégia "delta-cost" a um modelo analítico mais simples - o desempenho pode melhorar em várias ordens de magnitudes.

Outra estratégia seria usar um método de segunda ordem que normalmente tende a reduzir o número de iterações (mas cada iteração é mais complexa) - por exemplo, algoritmo Levenberg – Marquardt . Mas, considerando que você não parece ter uma maneira direta e eficiente de avaliar o gradiente, essa provavelmente não é uma opção viável nesse caso.


3

Como outras pessoas mencionaram, um modelo substituto (também chamado superfície de resposta) é uma abordagem poderosa. Na minha opinião, uma coisa crucial que as pessoas esquecem é que você pode executar várias avaliações de funções em paralelo , se estiver usando CPUs multicore.

Eu sugiro que, olhando para este código , ele use um modelo de resposta simples, mas seja escalável em CPUs multicore, o que fornece uma aceleração igual à quantidade de núcleos usados. Uma matemática por trás do método é descrita neste artigo .


Suponho que você seja o primeiro autor do artigo - você provavelmente deve mencionar isso, se for o caso. O artigo carece de comparação com métodos de ponta, como otimização bayesiana ou outros métodos substitutos (na verdade, ele não fornece nenhum parâmetro de referência). Você pode dizer algo mais?
19416 lacerbi

Não estou dizendo que o modelo usado lá é melhor. Só estou dizendo que as pessoas estão muito preocupados com a qualidade do modelo e, por vezes, esquecer-se sobre o paralelismo, que pode ser um grande negócio quando muitos núcleos estão envolvidos ..
Paul

Inclua informações de citação completas para os documentos vinculados e outros recursos. Queremos construir um repositório durável de informações, e os links tendem a ficar ruins com o tempo.
Reinstale Monica

2
Não tenho certeza de quanto a terminologia varia de acordo com a comunidade, mas geralmente aqui a superfície de resposta é usada como sinônimo de "modelo substituto polinomial" (normalmente um quadrático). Portanto, costumo pensar na modelagem substituta como um superconjunto da modelagem de superfície de resposta. (Isso pode estar incorreto).
GeoMatt22

0

Existem muitos truques usados ​​na descida do gradiente estocástico que também podem ser aplicados à avaliação da função objetivo. A ideia geral é tentar aproximar a função objetivo usando um subconjunto de dados .

Minhas respostas nesses dois posts discutem por que a descida estocástica do gradiente funciona: a intuição por trás disso é aproximar o gradiente usando um subconjunto de dados.

Como a descida estocástica do gradiente poderia economizar tempo em comparação com a descida padrão do gradiente?

Como executar a regressão linear de maneira paralela / distribuída para a configuração de big data?

O mesmo truque se aplica à função objetivo.

Vamos ainda usar a regressão linear como exemplo: suponha que a função objetivo seja . Se for enorme, digamos trilhões de linhas, avaliar uma vez levará muito tempo. Sempre podemos usar um subconjunto de e para aproximar a função objetivo, que é a perda ao quadrado no subconjunto dos dados.Axb2AAb

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.