Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rules for cumsum #573

Merged
merged 4 commits into from
Jan 19, 2022
Merged

Rules for cumsum #573

merged 4 commits into from
Jan 19, 2022

Conversation

mcabbott
Copy link
Member

No description provided.

##### `cumsum`
#####

function frule((_, xdot), ::typeof(cumsum), x::AbstractArray; dims::Integer)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps an frule for cumsum! here as well?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are forward rlues for mutating functions safe? I haven't thought that through.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For reverse mode, #521 has thorny examples.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I believe so, since the primal and tangent are mutated simultaneously. We already have several frules for mutating functions. See e.g. https://github.com/JuliaDiff/ChainRules.jl/blob/main/src/rulesets/LinearAlgebra/factorization.jl.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, nice.

Then someone should do a big PR adding this to half the Base functions, right? sum! and circshift! et. al.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Must we define methods like cumsum!([0,0,0], ZeroTangent())?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, not certain. @oxinabox didn't we decide at some point that it's up to the AD to handle cases where all (co)tangents are zero tangents?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we can solve this when or if it comes up.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah we expect the AD to handle cases in reverse mode when inputs are all ZeroTangent.
For forwards mode, i would need to think more, but i think even with mutation https://en.wikipedia.org/wiki/Nothing_comes_from_nothing

We can absolutely add fixes as things come up.

Copy link
Member

@oxinabox oxinabox left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dod not understand by what way this works, but the tests show it does

Co-authored-by: Lyndon White <oxinabox@ucc.asn.au>
@mcabbott mcabbott merged commit 335d025 into JuliaDiff:main Jan 19, 2022
@mcabbott mcabbott deleted the cumsum branch January 19, 2022 15:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants