Boa pergunta. Eu já vi muitas regras de parada na literatura e existem vantagens e desvantagens para cada uma, dependendo do contexto. A optim
função em R, por exemplo, possui pelo menos três regras de parada diferentes:
maxit
, ou seja, um número máximo pré-determinado de iterações. Outra alternativa semelhante que eu vi na literatura é um número máximo de segundos antes do tempo limite. Se tudo o que você precisa é de uma solução aproximada, isso pode ser bastante razoável. De fato, existem classes de modelos (especialmente modelos lineares) para os quais a parada precoce é semelhante a colocar um gaussiano antes nos valores dos parâmetros. Um frequentista diria que você tem uma "norma L2" em vez de uma anterior, mas eles também pensariam nisso como uma coisa razoável a se fazer. Acabei de ler este artigo , mas ele fala sobre a relação entre parada precoce e regularização e pode ajudar a apontar para mais informações. Mas a versão curta é: sim, parar cedo pode ser uma coisa perfeitamente respeitável, dependendo do que você
abstol
, ou seja, pare quando a função chegar "perto o suficiente" a zero. Isso pode não ser relevante para você (não parece que você está esperando um zero), então eu vou pular.
reltol
, que é como sua segunda sugestão - pare quando a melhoria cair abaixo de um limite. Na verdade, não sei quanta teoria existe sobre isso, mas você provavelmente tenderá a obter mínimos mais baixos dessa maneira do que com um pequeno número máximo de iterações. Se isso é importante para você, pode valer a pena executar o código para mais iterações.
Outra família de regras de parada tem a ver com a otimização de uma função de custo em um conjunto de dados de validação (ou com validação cruzada), e não nos dados de treinamento. Dependendo do uso do seu modelo, você pode parar bem antes de chegar ao mínimo local nos dados de treinamento, pois isso pode envolver o ajuste excessivo. Tenho certeza de que Trevor Hastie escreveu sobre boas maneiras de fazer isso, mas não me lembro da citação.
Outras opções possíveis para encontrar mínimos mais baixos em um período de tempo razoável podem incluir:
Descida de gradiente estocástico, que requer apenas a estimativa de gradientes para uma pequena porção de seus dados por vez (por exemplo, um ponto de dados para SGD "puro" ou pequenos lotes pequenos).
Funções de otimização mais avançadas (por exemplo, métodos do tipo Newton ou Gradiente Conjugado), que usam informações sobre a curvatura da sua função objetivo para ajudá-lo a apontar em melhores direções e obter melhores tamanhos de passos à medida que desce.
Um termo "momentum" em sua regra de atualização, para que o otimizador faça um trabalho melhor ao descer ladeira abaixo do que delimitar as paredes do canyon em sua função objetivo.
Essas abordagens são todas discutidas nessas notas de aula que encontrei online.
Espero que isto ajude!
Edite oh, e você também pode tentar obter melhores valores iniciais (por exemplo, resolvendo uma versão mais simples do problema) para que sejam necessárias menos iterações para se aproximar do ideal do seu "início a quente".