-
Notifications
You must be signed in to change notification settings - Fork 5
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
Option for orthogonal pointers in a vocabulary #129
Comments
It was removed because SPA (and even more so the implementation in this repository) is heavily based on the assumption of uniformly and randomly distributed unit vectors. Axis aligened, orthogonal vetors break this assumption and lead to unexpected behaviour in different places (see nengo/nengo#925). For this reason, we decided to remove that support, but might reconsider adding it in the future. That, however, will require some careful thinking and API design. |
I'm starting to think about ways to implement support of different binding operations in Nengo SPA (#69). That might allow to address this issue too, but currently I do not understand the use case well enough. (I think I never wanted axis-aligned vectors.)
Also note that despite the removal of the feature and mentioned problems, if you really want those axis-aligned orthogonal vectors with the current Nengo SPA and default circular-convolution, you can add those manually to you vocabulary: vocab = spa.Vocabulary(d)
for k, v in zip(sp_names, np.eye(d)):
vocab.add(k, v) |
For most of my use cases orthogonal (non-axis aligned) vectors would do. The goal was to make the similarity of all vectors zero to debug whether issues in the model were due to vectors being too close, or something else. Often I would have these vectors be inputs to non-spa networks, so having them axis aligned would just help when viewing the value plots later in the network, without needing to feed the output into a I believe the code snippet you wrote would be perfect for the majority of my use cases :) |
The old
nengo.spa
had the option to dospa.Vocabulary(randomize=False)
which forced all of the semantic pointers to be axis aligned and orthogonal (e.g. [1,0,0], [0,1,0] etc). I found this useful for debugging, but I don't see an option to do it innengo_spa
. Is there a reason it was removed, and it is straightforward to add?The text was updated successfully, but these errors were encountered: