Symplectic Autoencoder
Symplectic autoencoders offer a structure-preserving way of mapping a high-dimensional system to a low dimensional system. Concretely this means that if we obtain a reduced system by means of a symplectic autoencoder, this system will again be reduced.
The architecture is represented by the figure below:
It is a composition of SympNet gradient layers and PSD-like matrices.
Intermediate Dimensions
For a high-fidelity system of dimension $2N$ and a reduced system of dimension $2n$, the intermediate dimensions in the symplectic encoder and the decoder are computed according to:
iterations = Vector{Int}(n : (N - n) ÷ (n_blocks - 1) : N)
iterations[end] = full_dim2
iterations * 2
So for e.g. $2N = 100,$ $2n = 10$ and $\mathtt{n\_blocks} = 3$ we get
\[\mathrm{iterations} = 5\mathtt{:}(45 \div 2)\mathtt{:}50 = 5\mathtt{:}22\mathtt{:}50 = (5, 27, 49),\]
and after the further two modifications the dimensions are:
\[(10, 54, 100).\]
Example
A visualization of an instance of SymplecticAutoencoder is shown below:
In this example shown in the figure n_encoder_blocks
is two, n_encoder_layers
is four, n_decoder_blocks
is 3 and n_decoder_layers
is 2. You can build such an instance of a symplectic autoencoder by calling:
using GeometricMachineLearning
const full_dim = 100
const reduced_dim = 10
model = SymplecticAutoencoder(full_dim, reduced_dim; n_encoder_blocks = 2, n_encoder_layers = 4, n_decoder_blocks = 3, n_decoder_layers = 2)
for layer in Chain(model)
println(stdout, layer)
end
GradientLayerQ{100, 100, typeof(tanh)}(500, tanh)
GradientLayerP{100, 100, typeof(tanh)}(500, tanh)
GradientLayerQ{100, 100, typeof(tanh)}(500, tanh)
GradientLayerP{100, 100, typeof(tanh)}(500, tanh)
PSDLayer{100, 10, Geodesic}()
GradientLayerQ{10, 10, typeof(tanh)}(50, tanh)
GradientLayerP{10, 10, typeof(tanh)}(50, tanh)
PSDLayer{10, 54, Geodesic}()
GradientLayerQ{54, 54, typeof(tanh)}(270, tanh)
GradientLayerP{54, 54, typeof(tanh)}(270, tanh)
PSDLayer{54, 100, Geodesic}()
We also see that the intermediate dimension in the decoder is 54.
Library Functions
GeometricMachineLearning.SymplecticAutoencoder
— TypeSymplecticAutoencoder(full_dim, reduced_dim)
Make an instance of SymplecticAutoencoder
for dimensions full_dim
and reduced_dim
(those have to be provided as Integer
s).
The architecture
The symplectic autoencoder architecture was introduced in [40]. Like any other autoencoder it consists of an encoder $\Psi^e:\mathbb{R}^{2N}\to\mathbb{R}^{2n}$ and a decoder $\Psi^d:\mathbb{R}^{2n}\to\mathbb{R}^{2N}$ with $n\ll{}N$. These satisfy the following properties:
\[\nabla_z\Psi^e\mathbb{J}_{2N}(\nabla_z\Psi^e\mathbb{J}_{2N})^T = \mathbb{J}_{2n} \text{ and } (\nabla_\xi\Psi^d)^T\mathbb{J}_{2N}\nabla_\xi\Psi^d = \mathbb{J}_{2n}.\]
Because the decoder has this particular property, the reduced system can be described by the Hamiltonian $H\circ\Psi^d$:
\[\mathbb{J}_{2n}\nabla_\xi(H\circ\Psi^d) = \mathbb{J}_{2n}(\nabla_\xi\Psi^d)^T\nabla_{\Psi^d(\xi)}H = \mathbb{J}_{2n}(\nabla_\xi\Psi^d)^T\mathbb{J}_{2N}^T\mathbb{J}_{2N}\nabla_{\Psi^d(\xi)}H = (\nabla_\xi\Psi^d)^+X_H(\Psi^d(\xi)),\]
where $(\nabla_\xi\Psi^d)^+$ is the pseudoinverse of $\nabla_\xi\Psi^d$ (for more details see the docs on the AutoEncoder type).
Arguments
You can provide the following keyword arguments:
n_encoder_layers::Integer = 4
: The number of layers in one encoder block.n_encoder_blocks::Integer = 2
: The number of encoder blocks.n_decoder_layers::Integer = 1
: The number of layers in one decoder block.n_decoder_blocks::Integer = 3
: The number of decoder blocks.sympnet_upscale::Integer = 5
: The upscaling dimension of the GSympNet. SeeGradientLayerQ
andGradientLayerP
.activation = tanh
: The activation in the gradient layers.encoder_init_q::Bool = true
: Specifies if the first layer in each encoder block should be of $q$ type.decoder_init_q::Bool = true
: Specifies if the first layer in each decoder block should be of $p$ type.
References
- [40]
- B. Brantner and M. Kraus. Symplectic autoencoders for Model Reduction of Hamiltonian Systems, arXiv preprint arXiv:2312.10004 (2023).