Computational noise can corrupt NaN-safe computations
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Reproduza o exemplo mínimo funcional usando ForwardDiff.Dual, norm(v) e sqrt(sum(v.^2)), conforme mostrado na issue. Compare o comportamento seguro contra NaN de ambos os cálculos sob o valor e as entradas parciais indicados e, em seguida, determine um resultado esperado consistente com o projeto; considera-se concluído quando o caso de ruído demonstrado não propagar mais NaN ou Inf inesperadamente.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Different amounts of computational noise in the value and partials of a dual number has the potential to corrupt even NaN-safe computations.
Minimum working example:
using ForwardDiff, LinearAlgebra
# start with zero valued vector of dual numbers
v = zeros(ForwardDiff.Dual{Nothing, Float64, 1}, 3);
# assume a perturbation of one component exists due to some computational noise
value = 1.0e-200 # so that value^2 == 0.0 (due to machine precision)
partial = 1.0e-100 # so that 2*value*partial != 0.0 (due to machine precision)
v[1] = ForwardDiff.Dual{Nothing}(value, partial);
# try out two functions
norm(v)
# Dual{Nothing}(1.0e-200,NaN)
sqrt(sum(v.^2))
# Dual{Nothing}(0.0,Inf)
Both implementations will result in NaNs propagated throughout the function, even in NaN-safe mode. I first encountered this after propagating derivatives through a Newton solve.
Originally posted by @taylormcd in https://github.com/JuliaDiff/ForwardDiff.jl/issues/243#issuecomment-539291591
- Linguagem predominante
- Julia
- Estrelas
- 1k
- Forks
- 163
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de JuliaDiff/ForwardDiff.jl
-
missing floatmin, floatmax, and issubnormal for DualTalvez já em andamento @devmotion assumiu há 25 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
JuliaDiff/ForwardDiff.jl#852 · 6 comentários ·
-
`fma` and `muladd` ignore NaN-safe modeTalvez já em andamento @devmotion assumiu há 10 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
JuliaDiff/ForwardDiff.jl#860 ·
-
Enable NaN-safe mode by defaultTalvez já em andamento @devmotion assumiu há 12 dias. Aberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
JuliaDiff/ForwardDiff.jl#857 · 1 reação ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 52/100
JuliaDiff/ForwardDiff.jl#854 · 1 comentário ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 75/100
JuliaDiff/ForwardDiff.jl#849 ·
Todas as issues de JuliaDiff/ForwardDiff.jl
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
legend-exp/LegendDataManagement.jl#232 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
EnzymeAD/Reactant.jl#3569 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
astroautomata/SymbolicRegression.jl#783 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 73/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 90/100
Mantenedores costumam responder em até 1 dia