Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
my plan is
Step 1) Change Zygote to check for chainrules before doing its normal stuff,
and adapt the stuff it gets back from chainrules to play nice with Zygotes expectations
Step 2) adapt ChainRules and Zygote, so their expectations are more inline with each other and integrate more deeply.
This likely includes adding a macro that is basically @adjoint to ChainRules.
I think
@adjoint function f, y, Δ->-yd i
sthe same as ChainRules’s:
rrule(::typeof(f),...) = (y, Rule(Δ->yd))
And that that should really have a similar connivence macro
This PR is Step 1.
Major limitations blocking this:
ChainRules does not know how to differentiate WRT the function itself, which matters for closures.
I know this imprinciple works as
without this branch:
With this branch
The matching PR for Nabla is:
invenia/Nabla.jl#178