In Nengo sometimes we represent connection weights in a factored form. For example, suppose you have N
neurons in one ensemble and M
neurons in the second ensemble. Instead of representing the connection weights between those layers with an NxM
weight matrix, we can split it into an NxD
and a DxM
matrix (where D
<< M
and N
). This is much more efficient in terms of memory usage and communication bandwidth (we only need to communicate a D
-dimensional signal between ensembles, rather than N
), although you do sacrifice some representational power. Anyway, in those terms the NxD
matrix is called the “decoders” and the DxM
matrix is called the “encoders”. So you take the output of your first ensemble, multiply it by the decoders, then multiply that again by the encoders, and that is the input to your second ensemble.
Note that in practice we often insert another matrix in the middle, so the full story is that you have a NxD0
matrix, a D0xD1
matrix, and a D1xM
matrix. The D0xD1
matrix is the transform
parameter on a factored connection (ensemble->ensemble
). As opposed to on a ensemble.neurons->ensemble.neurons
connection, where the transform represents the full weight matrix.
You may also find this recent forum post helpful, for more discussion on the ideas surrounding this weight factoring New to Nengo & Confused about some concepts.