Stack Attention (wip)
For following a line of research that augments attention with a differentiable stack, beginning with DuSell et al. at ETH Zurich
Install
$ pip install stack-attention-pytorch
Usage
StackTransLayer
import torch
from stack_attention import StackTransLayer
tokens = torch.randn(2, 512, 256)
layer = StackTransLayer(256)
out1, state = layer(tokens)
out2, state = layer(
out1,
stack_state = state
)
assert out1.shape == out2.shape == tokens.shape
DataStructureTransLayer
Or declare a custom differentiable data structure
from stack_attention import DataStructureTransLayer, data_structure
counter = data_structure(
init = lambda: torch.zeros(1),
actions = dict(
inc = lambda s: s + 1.,
dec = lambda s: s - 1.,
noop = lambda s: s,
),
readout = lambda s: s
)
layer = DataStructureTransLayer(dim = 256, data_structure = counter)
tokens = torch.randn(2, 512, 256)
out, state = layer(tokens, recurrent = True)
Citations
@misc{dusell2024stackattentionimprovingability,
title = {Stack Attention: Improving the Ability of Transformers to Model Hierarchical Patterns},
author = {Brian DuSell and David Chiang},
year = {2024},
eprint = {2310.01749},
archivePrefix = {arXiv},
primaryClass = {cs.CL},
url = {https://arxiv.org/abs/2310.01749},
}
@misc{zhang2025stacktranslargelanguagemodel,
title = {StackTrans: From Large Language Model to Large Pushdown Automata Model},
author = {Kechi Zhang and Ge Li and Jia Li and Huangzhao Zhang and Yihong Dong and Jia Li and Jingjing Xu and Zhi Jin},
year = {2025},
eprint = {2507.15343},
archivePrefix = {arXiv},
primaryClass = {cs.SE},
url = {https://arxiv.org/abs/2507.15343},
}
@inproceedings{joulin2015inferring,
author = {Armand Joulin and Tom{\'a}{\v{s}} Mikolov},
title = {Inferring Algorithmic Patterns with Stack-Augmented Recurrent Nets},
booktitle = {Advances in Neural Information Processing Systems 28 (NIPS 2015)},
year = {2015}
}
Metadata
Release files for stack-attention-pytorch 0.0.11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| stack_attention_pytorch-0.0.11.tar.gz | 13.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| stack_attention_pytorch-0.0.11-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.6 kB
Release files / stack_attention_pytorch-0.0.11.tar.gz
| Download URL | stack_attention_pytorch-0.0.11.tar.gz |
|---|---|
| Size | 13.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a83ba0bd4b741d554fc469884c180a0cc2b103cf0390466e0549a2345296b9fb
|
|
BLAKE2b-256 checksum How to use checksums |
9edc3da836094d1676bd0f40caa08073bb837a406954b8737bb3c48bce39ab95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.17
|
Release files / stack_attention_pytorch-0.0.11-py3-none-any.whl
| Download URL | stack_attention_pytorch-0.0.11-py3-none-any.whl |
|---|---|
| Size | 15.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3d5ebcf978b004b073ca91be237ffdaf214fdc9fe4004fa2409cf0618678b57b
|
|
BLAKE2b-256 checksum How to use checksums |
b9c7b1195c673b12f863e12a71e0af71800c08a5a38c9335ab9bf7f6f5288e5a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.17
|