## 2 Materials and Methods
### Technical Aspects  
Training a neural network requires as input a set of hyperparameters. This includes the number of layers, the activation function, the number of neurons at each layer, and the number of epochs. Choosing the optimal set of hyperparameters highly affects the performance of the model, and it vastly depends on the complexity and nature of the problem [30]. The tuning of the hyperparameters was achieved via trial and error, as well as by using information in the literature. In this study, we experimented with an extensive number of configurations, which are presented in Table 1. After testing all these tested combinations, it was found that the activation functions that worked best for the hidden and output layers were softplus and linear, respectively, while the optimal number of hidden layers was 3. In addition, the number of neurons that was found to be the best for each of the hidden layers, from left to right, was 64-32-16 for the encoder and 16-32-64 for the decoder. The ratio of the training set to the validation set was 4:1.  
The process of adjusting the biases and weights of a network is referred to as back-propagation [26; 27]. The primary goal during this phase is to minimize the cost function. In our specific application, the cost function was defined as a typical loss function where the Kullback-Leibler loss component and the reconstruction loss were equally weighted. The gradient of the error function with respect to the weights was used to update them incrementally during training, following a backward propagation approach aimed at minimizing the error function. This iterative process, involving both forward and backward propagation across the entire dataset, is termed an \"epoch\" in machine learning. At the end of each epoch, the loss function, which represents the error, is computed. The objective is to determine an appropriate number of epochs such that the error converges. The number of epochs required may vary depending on the complexity of the problem. In this study, the convergence of the algorithm was evaluated based on the stability of the loss function value computed at the conclusion of each epoch. This indicates that the value of the loss function stabilized by the final epoch. Based on plots of the loss function versus the number of epochs (Figure A2) and after exploring the similarity of the input/output distribution (Figure A3), the number 1000 was considered the optimal choice.  
The entire computational work was performed in Python version 3.7 with TensorFlow 2.10.0. In our investigation, we used modest computational resources for training. Specifically, we used two computers (Fujitsu Siemens, Athens, Greece) running the Windows 11 operating system, each powered by an Intel(r) CoreTM i5-9400 CPU at 2.90 GHz with 8 GB of RAM. While these systems are not as robust as dedicated high-performance computing clusters, they still offered adequate computational power to effectively train our model. Generally, model training typically lasted between 20 and 30 min, with larger datasets and more intricate architectures necessitating longer training durations compared to smaller ones.  
\begin{table}
\begin{tabular}{c c c c c c} \hline \hline \multicolumn{2}{c}{**Number of Neurons in the**} & \multicolumn{2}{c}{**Number of Hidden Layers**} & \multicolumn{2}{c}{**Activation Function**} \\ \hline
**Encoder** & **Decoder** & **Encoder** & **Decoder** & **Hidden Layers** & **Output Layer** \\ \hline  & & & & Softplus & Softplus \\ \cline{3-5}
128–64–32– & 4–8–16–32– & 2–5 & ReLU & Softmax \\ \cline{3-5}
16–8–4 & 64–128 & 2–5 & ELU & Sigmoid \\ \cline{3-5}  & & & Linear & Linear \\ \cline{3-5}  & & & & Tanh & Tanh \\ \hline \hline \end{tabular}
\end{table}
Table 1: List of hyperparameters used for training the VAE model. The latent space dimension and the number of epochs were set to 1 and 1000, respectively.