Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Combine Dual numbers with compiled gradient tape

Aperta
#132 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
julia
Ambito
devtools

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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di JuliaDiff/ReverseDiff.jl

Tutte le issue di JuliaDiff/ReverseDiff.jl

Issue simili

Altre issue su Julia

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.