Quando um jacobiano analítico está disponível, é melhor aproximar o hessiano por , ou por diferenças finitas do jacobiano?

19

Digamos que eu esteja computando alguns parâmetros do modelo, minimizando a soma dos resíduos ao quadrado e assumindo que meus erros são gaussianos. Meu modelo produz derivadas analíticas, portanto, o otimizador não precisa usar diferenças finitas. Quando o ajuste estiver completo, desejo calcular erros padrão dos parâmetros ajustados.

Geralmente, nessa situação, o Hessiano da função de erro é relacionado à matriz de covariância por: que é a variação dos resíduos.

σ2H1=C
σ2

Quando nenhuma derivada analítica do erro está disponível, normalmente é impraticável calcular o Hessiano, portanto é tomado como uma boa aproximação.JTJ

No entanto, no meu caso, eu tenho um J analítico, por isso é relativamente barato para eu calcular H diferenciando finitamente J.

Portanto, minha pergunta é a seguinte: Seria mais preciso aproximar H usando meu J exato e aplicando a aproximação acima, ou aproximar H por J finito com diferenciação?

Colin K
fonte

Respostas:

12

Boa pergunta. Primeiro, lembre-se de onde vem essa aproximação . Seja seus pontos de dados, seja seu modelo e sejam os parâmetros do seu modelo. Então a função objetivo do problema de mínimos quadrados não linear é onde é o vetor dos resíduos, . O hessiano exato da função objetivo é . Portanto, o erro nesta aproximação é( x i , y i ) f ( ) β 1HJTJ(xi,yi)f()βrrI=yi-f(xi,β)H=JtJ+Σri2riH-JtJ=Σri2ri12rTrrri=yif(xi,β)H=JTJ+ri2riHJTJ=ri2ri. É uma boa aproximação quando os resíduos são pequenos; ou quando a segunda derivada dos resíduos for pequena. Os mínimos quadrados lineares podem ser considerados um caso especial em que a segunda derivada dos resíduos é zero.

Quanto à aproximação por diferenças finitas, é relativamente barato. Para calcular uma diferença central, você precisará avaliar o jacobiano mais vezes (uma diferença a frente custará avaliações adicionais, para que eu não me incomode). O erro da aproximação diferença central é proporcional à e , em que é o tamanho do passo. O tamanho ideal da etapa é , onden 4 r h 2 h h ~ ε 12nn4rh2h ϵhϵ13ϵé precisão da máquina. Portanto, a menos que as derivadas dos resíduos estejam explodindo, é bem claro que a aproximação da diferença finita deve ser MUITO melhor. Devo salientar que, embora o cálculo seja mínimo, a contabilidade não é trivial. Cada diferença finita no jacobiano fornecerá uma linha do hessiano para cada resíduo. Você precisará remontar o Hessian usando a fórmula acima.

Existe, no entanto, uma terceira opção. Se o seu solucionador usar um método Quasi-Newton (DFP, BFGS, Bryoden etc.), ele já estará aproximando o Hessian a cada iteração. A aproximação pode ser bastante boa, pois usa a função objetivo e os valores de gradiente de cada iteração. A maioria dos solucionadores lhe dará acesso à estimativa final do Hessian (ou seu inverso). Se isso é uma opção para você, eu usaria isso como estimativa de Hessian. Já está computado e provavelmente será uma estimativa muito boa.

Bill Woessner
fonte
Excelente resposta, obrigado. Justificar isso com uma comparação do erro de estimativa em cada caso é muito esclarecedor. Posso perguntar como você sabe que é o passo ideal para diferenças finitas? Eu nunca vi isso antes. ϵ1/3
Colin K
5
Esse é um velho truque para equilibrar erro de truncamento x erro de arredondamento. Obviamente, para minimizar o erro de truncamento, você quer fazer tão pequeno quanto possível. Mas quando fica pequeno demais, você começa a receber um erro de arredondamento significativo. A derivação é relativamente direta. Assumindo uma diferença central, o erro de truncamento é proporcional a . O erro de arredondamento é sempre proporcional a . Adicione os dois e minimize ao longo de . Você obtém . hhh2f(x)ϵf(x)hhhϵ13
Bill Woessner
3
Isso vale apenas para diferenças centrais. Para diferenças avançadas, o tamanho ideal da etapa é . Existem outros truques também. Por exemplo, verifique se você realmente sabe o que é . Eu sei que isso parece bobagem, mas coisas estranhas podem acontecer na aritmética de ponto flutuante. Aqui está uma maneira simples de ter certeza de que o valor correto de : . Matematicamente, é claro, . Mas se você usar valores que não podem ser exatamente representados no ponto flutuante (como ), verá que esse não é o caso. hϵ12hhh_actual = (x + h_desired) - xhactual=hdesiredh=0.0001
Bill Woessner
Talvez esse conteúdo possa ser adicionado à sua resposta, e não aos comentários. Dessa forma, os usuários futuros não precisam percorrer uma seção de comentários estendida para encontrar material que tenha relação direta com as reivindicações feitas na resposta.
Sycorax diz Restabelecer Monica
2
Ó meu Deus. Uma aproximação quase-Newton do Hessian pode ser uma estimativa terrível do Hessian e, portanto, resultar em uma estimativa muito pobre da matriz de covariância. Pode servir bem para facilitar a progressão do algoritmo ao ideal, mas pode ser bastante ruim como uma estimativa do Hessian.
Mark L. Stone