Combine Dual numbers with compiled gradient tape
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
Direzione di ricerca
Inizia con la riproduzione in benchmarks/benchmark.jl e confronta il percorso con tape compilato che usa ReverseDiff.gradient! con il percorso ReverseDiff.gradient non compilato. Esamina come vengono gestiti i valori Dual di ForwardDiff durante la compilazione del tape. Il lavoro è completato quando i gradienti compilato e non compilato concordano per il caso segnalato, incluso il calcolo dell’Hessian.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
It seems that in some cases, the compiled tape does not return correct gradient in the following application of obtaining gradients.
function get_hessian_reversediff(params0::AbstractArray{T}) where T
tape2 = ReverseDiff.GradientTape(embedding_loss, (Dual.(randn(k, 10), zeros(k, 10)),))
ctape2 = ReverseDiff.compile(tape2)
get_hessian_reversediff(ctape2, params0)
end
function get_hessian_reversediff(tape, params0::AbstractArray{T}) where T
N = length(params0)
params = Dual.(params0, zero(T))
hes = zeros(T, N, N)
for i=1:N
@inbounds i !== 1 && (params[i-1] = Dual(params0[i-1], zero(T)))
@inbounds params[i] = Dual(params0[i], one(T))
res = ReverseDiff.gradient!(tape, (params,))[1]
res2 = ReverseDiff.gradient(embedding_loss, params)
h1 = vec(ForwardDiff.partials.(res, 1))
h2 = vec(ForwardDiff.partials.(res2, 1))
@show h1 - h2 # they are different!!!!
hes[:,i] .= vec(ForwardDiff.partials.(res, 1))
end
hes
end
It turns out h1 - h2 is not zero.
The compiled tape returns a gradient slightly different with the not compiled version. I checked that the not compiled version gradient is correct.
To reproduce the result. Please check
https://github.com/JuliaReverse/NiGraphEmbedding.jl/blob/master/benchmarks/benchmark.jl
Wondering what is a correct way the obtain gradient through forward differentiating over back program?
- Lingua principale
- Julia
- Stelle
- 396
- Fork
- 61
- Merge medio
- 23h 18m
- PR unite (30g)
- 16
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
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/ReverseDiff.jl
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
JuliaDiff/ReverseDiff.jl#318 ·
I maintainer di solito rispondono entro 1 giorno
-
`@grad`/`@grad_from_chainrules` silently reuse a tangent if a pullback returns too few tangentsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
JuliaDiff/ReverseDiff.jl#315 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
JuliaDiff/ReverseDiff.jl#314 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 56/100
JuliaDiff/ReverseDiff.jl#321 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
JuliaDiff/ReverseDiff.jl#320 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di JuliaDiff/ReverseDiff.jl
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
oxfordcontrol/COSMO.jl#211 ·
-
documentation
Difficoltà 2/5 Mezza giornata Idoneità per principianti 65/100
I maintainer di solito rispondono entro 6 giorni
-
Out-of-place JLArray/GPU problem with VectorContinuousCallback scalar-indexes (callback cache built with CPU zeros)Forse già presa @ChrisRackauckas-Claude l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
SciML/OrdinaryDiffEq.jl#4813 ·
I maintainer di solito rispondono entro 1 giorno
-
ARKODE: callbacks that modify `u` throw MethodError on reinitForse già presa @devmotion l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
SciML/Sundials.jl#575 ·
-
broken links in docsAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno