There are a few reasons why normalize=False
is the default:
- By normalizing you lose some information about the “strength” (norm) of the vector. This might be relevant to understand network behavior and see if it is behaving properly. For example, if the norm of the vector is very small this might be an indication that the network is not working properly, but by normalizing everything could seem to be ok. Also, if you aim to produce approximately normalized vectors in the network, not normalizing gives you a better idea of how well you are achieving this. That being said, there are certainly situations where you want to normalize for the comparison for which the
normalize
argument is provided. - Normalization is hard to implement in neurons (without making additional assumptions, e.g. about the input range). This makes the default of
spa.similarity
closer to what could be achieved in a neural network.
When creating a vocabulary, Semantic Pointers are created with unit length (or approximately unit length) so that normalization should not make a difference (or almost no difference).