Error with nested calls to TaylorDiff
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
Direzione di ricerca
Riproduci l'esempio di derivata annidata dell'issue con Julia 1.11.5 e TaylorDiff v0.3.3. Inizia da derivative.jl e dalle definizioni della moltiplicazione in primitive.jl, in particolare dai metodi segnalati nell'ambiguità. Il lavoro è completato quando la chiamata annidata a TaylorDiff non solleva più un MethodError ambiguo per * e l'esempio può calcolare il gradiente richiesto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hi, I have the following nested AD problem that I'd like to get to work with TaylorDiff. Starting with a vector-valued function f(params, x) for scalar x, take a high-order derivative with respect to x and evaluate for a specific value of x. Then apply some reduction function to the result to obtain a scalar-valued function g(params). Finally I want to evaluate the gradient d g / d params. Example:
# Arbitrary function:
f(params, x) = [params[1] * x^3 + params[2], params[2] * sin(x - params[1]), sqrt(x + params[2])]
function g(params)
closure(x) = f(params, x)
some_x = 0.7
d3f_dx3 = TaylorDiff.derivative(closure, some_x, Val(3))
return sum(d3f_dx3)
end
some_params = [1.3, 2.1]
@show g(some_params) # Fine, gives 6.095380076578732
TaylorDiff.derivative(g, some_params, [1.0, 0.0], Val(1)) # First element of the gradient
Results, using julia 1.11.5 and TaylorDiff v0.3.3:
ERROR: MethodError: *(::TaylorScalar{Float64, 1}, ::TaylorScalar{Float64, 3}) is ambiguous.
Candidates:
*(a::TaylorScalar, b::Number)
@ TaylorDiff ~/.julia/packages/TaylorDiff/qw5aY/src/primitive.jl:119
*(a::Number, b::TaylorScalar)
@ TaylorDiff ~/.julia/packages/TaylorDiff/qw5aY/src/primitive.jl:114
Possible fix, define
*(::TaylorScalar, ::TaylorScalar)
Stacktrace:
[1] f(params::Vector{TaylorScalar{Float64, 1}}, x::TaylorScalar{Float64, 3})
@ Main ./REPL[4]:1
[2] (::var"#closure#1"{Vector{TaylorScalar{Float64, 1}}})(x::TaylorScalar{Float64, 3})
@ Main ./REPL[5]:2
[3] derivatives
@ ~/.julia/packages/TaylorDiff/qw5aY/src/derivative.jl:41 [inlined]
[4] derivative
@ ~/.julia/packages/TaylorDiff/qw5aY/src/derivative.jl:16 [inlined]
[5] g(params_in::Vector{TaylorScalar{Float64, 1}})
@ Main ./REPL[5]:4
[6] derivatives
@ ~/.julia/packages/TaylorDiff/qw5aY/src/derivative.jl:41 [inlined]
[7] derivative(f::Function, x::Vector{Float64}, l::Vector{Float64}, p::Val{1})
@ TaylorDiff ~/.julia/packages/TaylorDiff/qw5aY/src/derivative.jl:17
[8] top-level scope
@ REPL[8]:1
Any idea how this could be made to work?
While Zygote-over-TaylorDiff does work for this problem, @btime shows it is much faster to use ForwardDiff-over-ForwardDiff (probably due to the overhead of reverse mode), so I imagine TaylorDiff-over-TaylorDiff (or ForwardDiff-over-TaylorDiff) might be even faster due to the high-order inner derivative. Thanks.
- Lingua principale
- Julia
- Stelle
- 83
- Fork
- 12
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di JuliaDiff/TaylorDiff.jl
-
Ambiguity with forwarddiff ?Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
JuliaDiff/TaylorDiff.jl#103 · 6 commenti ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
JuliaDiff/TaylorDiff.jl#102 · 3 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
JuliaDiff/TaylorDiff.jl#95 · 1 commento ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
JuliaDiff/TaylorDiff.jl#93 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
JuliaDiff/TaylorDiff.jl#92 · 1 commento ·
Tutte le issue di JuliaDiff/TaylorDiff.jl
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
JuliaGenAI/HuggingFaceDatasets.jl#96 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
JuliaData/DBFTables.jl#50 ·