# Parameter space representations¶

Parameter space representations are \(d \times d\) objects that define metrics in parameter space such as:

Fisher Information Matrices/Gauss-Newton matrix

Gradient 2nd moment (e.g. the sometimes called

Empirical Fisher)Other covariances such as in Bayesian Deep Learning

These matrices are often too large to fit in memory, for instance when \(d\) is in the order of \(10^6 - 10^8\) as is typical in current deep networks. Here is a list of parameter space representations that are available in NNGeometry, computed on a small network, represented as images where each pixel represent a component of the matrix, and the color is the magnitude of these components. These matrices are normalized by their diagonal (i.e. these are correlation matrices) for better visualization:

`nngeometry.object.pspace.PMatDense`

representation: this is the usual dense matrix. Memory cost: \(d \times d\)

`nngeometry.object.pspace.PMatBlockDiag`

representation: a block-diagonal representation where diagonal blocks are
dense matrices corresponding to parameters of a single layer, and cross-layer interactions are ignored (their coefficients are
set to \(0\)). Memory cost: \(\sum_l d_l \times d_l\) where \(d_l\) is the number of parameters of layer \(l\).

`nngeometry.object.pspace.PMatKFAC`

representation [GM16, MG15]: a block-diagonal representation where diagonal blocks are
factored as the Kronecker product of two smaller matrices, and cross-layer interactions are ignored (their coefficients are
set to \(0\)). Memory cost: \(\sum_l g_l \times g_l + a_l \times a_l\) where \(a_l\) is the number of neurons of the
input of layer \(l\) and \(g_l\) is the number of pre-activations of the output of layer \(l\).

`nngeometry.object.pspace.PMatEKFAC`

representation [GLB+18]: a block-diagonal representation where diagonal blocks are
factored as a diagonal matrix in a Kronecker factored eigenbasis, and cross-layer interactions are ignored (their coefficients are
set to \(0\)). Memory cost: \(\sum_l g_l \times g_l + a_l \times a_l + d_l\) where \(a_l\) is the number of neurons of the
input of layer \(l\) and \(g_l\) is the number of pre-activations of the output of layer \(l\), and \(d_l\) is

`nngeometry.object.pspace.PMatDiag`

representation: a diagonal representation that ignores all interactions between parameters.
Memory cost: \(d\)

`nngeometry.object.pspace.PMatQuasiDiag`

representation [Oll15]: a diagonal representation where for each neuron, a coefficient is also
stored that measures the interaction between this neuron’s weights and the corresponding bias.
Memory cost: \(2 \times d\)