Flexible and Efficient Surrogate Gradient Modeling with Forward Gradient Injection
<|reference_start|>Flexible and Efficient Surrogate Gradient Modeling with Forward Gradient Injection: Automatic differentiation is a key feature of present deep learning frameworks. Moreover, they typically provide various ways to specify custom gradients within the computation graph, which is of particular importance for defining surrogate gradients in the realms of non-differentiable operations such as the Heaviside function in spiking neural networks (SNNs). PyTorch, for example, allows the custom specification of the backward pass of an operation by overriding its backward method. Other frameworks provide comparable options. While these methods are common practice and usually work well, they also have several disadvantages such as limited flexibility, additional source code overhead, poor usability, or a potentially strong negative impact on the effectiveness of automatic model optimization procedures. In this paper, an alternative way to formulate surrogate gradients is presented, namely, forward gradient injection (FGI). FGI applies a simple but effective combination of basic standard operations to inject an arbitrary gradient shape into the computational graph directly within the forward pass. It is demonstrated that using FGI is straightforward and convenient. Moreover, it is shown that FGI can significantly increase the model performance in comparison to custom backward methods in SNNs when using TorchScript. These results are complemented with a general performance study on recurrent SNNs with TorchScript and torch.compile, revealing the potential for a training speedup of more than 7x and an inference speedup of more than 16x in comparison with pure PyTorch.<|reference_end|>
@article{otte2024flexible,
    title={Flexible and Efficient Surrogate Gradient Modeling with Forward Gradient
  Injection},
    author={Sebastian Otte},
    journal={arXiv preprint arXiv:2406.00177},
    year={2024},
    archivePrefix={arXiv},
    eprint={2406.00177},
    primaryClass={cs.LG cs.NE}
}