From 306b218961fc105c3385bec106cc0b6859b98099 Mon Sep 17 00:00:00 2001 From: gfs Date: Sat, 8 Aug 2026 12:15:33 +0000 Subject: [PATCH 1/2] delete nn --- .github/agents/orchestrator.agent.md | 2 +- AGENTS.md | 2 +- README.md | 1 - ROADMAP.md | 2 +- TESTING.md | 16 +- doc/estimators/LinearRegression.md | 2 +- doc/neural_network/NeuralNetwork.md | 163 ---------- .../NeuralNetworkArchitecture.png | Bin 450583 -> 0 bytes doc/neural_network/README.md | 15 - doc/neural_network/activation/Activation.md | 149 --------- .../activation/ActivationFunctions.svg | 117 ------- doc/neural_network/layer/Layer.md | 127 -------- doc/neural_network/layer/Layers.svg | 191 ----------- doc/neural_network/losses/Loss.md | 139 -------- doc/neural_network/losses/LossFunctions.svg | 141 --------- doc/neural_network/model/Model.md | 154 --------- doc/neural_network/model/Model.svg | 174 ---------- numerical/CMakeLists.txt | 1 - numerical/neural_network/CMakeLists.txt | 4 - .../activation/ActivationFunction.cpp | 8 - .../activation/ActivationFunction.hpp | 46 --- .../neural_network/activation/CMakeLists.txt | 31 -- .../neural_network/activation/LeakyReLU.cpp | 8 - .../neural_network/activation/LeakyReLU.hpp | 54 ---- numerical/neural_network/activation/ReLU.cpp | 8 - numerical/neural_network/activation/ReLU.hpp | 44 --- .../neural_network/activation/Sigmoid.cpp | 8 - .../neural_network/activation/Sigmoid.hpp | 46 --- .../neural_network/activation/Softmax.cpp | 8 - .../neural_network/activation/Softmax.hpp | 77 ----- numerical/neural_network/activation/Tanh.cpp | 8 - numerical/neural_network/activation/Tanh.hpp | 46 --- .../activation/test/CMakeLists.txt | 18 -- .../activation/test/TestLeakyReLU.cpp | 58 ---- .../activation/test/TestReLU.cpp | 50 --- .../activation/test/TestSigmoid.cpp | 50 --- .../activation/test/TestSoftmax.cpp | 118 ------- .../activation/test/TestTanh.cpp | 76 ----- numerical/neural_network/layer/CMakeLists.txt | 22 -- numerical/neural_network/layer/Dense.cpp | 8 - numerical/neural_network/layer/Dense.hpp | 150 --------- numerical/neural_network/layer/Layer.hpp | 26 -- .../neural_network/layer/test/CMakeLists.txt | 15 - .../neural_network/layer/test/TestDense.cpp | 296 ------------------ .../losses/BinaryCrossEntropy.cpp | 6 - .../losses/BinaryCrossEntropy.hpp | 79 ----- .../neural_network/losses/CMakeLists.txt | 31 -- .../losses/CategoricalCrossEntropy.cpp | 6 - .../losses/CategoricalCrossEntropy.hpp | 99 ------ numerical/neural_network/losses/Loss.hpp | 17 - .../losses/MeanAbsoluteError.cpp | 8 - .../losses/MeanAbsoluteError.hpp | 75 ----- .../losses/MeanSquaredError.cpp | 8 - .../losses/MeanSquaredError.hpp | 73 ----- .../neural_network/losses/test/CMakeLists.txt | 17 - .../losses/test/TestBinaryCrossEntropy.cpp | 143 --------- .../test/TestCategoricalCrossEntropy.cpp | 156 --------- .../losses/test/TestMeanAbsoluteError.cpp | 109 ------- .../losses/test/TestMeanSquaredError.cpp | 117 ------- numerical/neural_network/model/CMakeLists.txt | 21 -- numerical/neural_network/model/Model.hpp | 287 ----------------- .../neural_network/model/test/CMakeLists.txt | 14 - .../neural_network/model/test/TestModel.cpp | 160 ---------- simulator/CMakeLists.txt | 1 - simulator/neural_network/CMakeLists.txt | 1 - .../NeuralNetwork/CMakeLists.txt | 24 -- .../neural_network/NeuralNetwork/Main.cpp | 12 - .../NeuralNetwork/application/CMakeLists.txt | 21 -- .../NeuralNetwork/application/NnSimulator.cpp | 210 ------------- .../NeuralNetwork/application/NnSimulator.hpp | 46 --- .../NeuralNetwork/view/CMakeLists.txt | 26 -- .../view/NnConfigurationPanel.cpp | 77 ----- .../view/NnConfigurationPanel.hpp | 31 -- .../NeuralNetwork/view/NnMainWindow.cpp | 78 ----- .../NeuralNetwork/view/NnMainWindow.hpp | 35 --- 75 files changed, 5 insertions(+), 4662 deletions(-) delete mode 100644 doc/neural_network/NeuralNetwork.md delete mode 100644 doc/neural_network/NeuralNetworkArchitecture.png delete mode 100644 doc/neural_network/README.md delete mode 100644 doc/neural_network/activation/Activation.md delete mode 100644 doc/neural_network/activation/ActivationFunctions.svg delete mode 100644 doc/neural_network/layer/Layer.md delete mode 100644 doc/neural_network/layer/Layers.svg delete mode 100644 doc/neural_network/losses/Loss.md delete mode 100644 doc/neural_network/losses/LossFunctions.svg delete mode 100644 doc/neural_network/model/Model.md delete mode 100644 doc/neural_network/model/Model.svg delete mode 100644 numerical/neural_network/CMakeLists.txt delete mode 100644 numerical/neural_network/activation/ActivationFunction.cpp delete mode 100644 numerical/neural_network/activation/ActivationFunction.hpp delete mode 100644 numerical/neural_network/activation/CMakeLists.txt delete mode 100644 numerical/neural_network/activation/LeakyReLU.cpp delete mode 100644 numerical/neural_network/activation/LeakyReLU.hpp delete mode 100644 numerical/neural_network/activation/ReLU.cpp delete mode 100644 numerical/neural_network/activation/ReLU.hpp delete mode 100644 numerical/neural_network/activation/Sigmoid.cpp delete mode 100644 numerical/neural_network/activation/Sigmoid.hpp delete mode 100644 numerical/neural_network/activation/Softmax.cpp delete mode 100644 numerical/neural_network/activation/Softmax.hpp delete mode 100644 numerical/neural_network/activation/Tanh.cpp delete mode 100644 numerical/neural_network/activation/Tanh.hpp delete mode 100644 numerical/neural_network/activation/test/CMakeLists.txt delete mode 100644 numerical/neural_network/activation/test/TestLeakyReLU.cpp delete mode 100644 numerical/neural_network/activation/test/TestReLU.cpp delete mode 100644 numerical/neural_network/activation/test/TestSigmoid.cpp delete mode 100644 numerical/neural_network/activation/test/TestSoftmax.cpp delete mode 100644 numerical/neural_network/activation/test/TestTanh.cpp delete mode 100644 numerical/neural_network/layer/CMakeLists.txt delete mode 100644 numerical/neural_network/layer/Dense.cpp delete mode 100644 numerical/neural_network/layer/Dense.hpp delete mode 100644 numerical/neural_network/layer/Layer.hpp delete mode 100644 numerical/neural_network/layer/test/CMakeLists.txt delete mode 100644 numerical/neural_network/layer/test/TestDense.cpp delete mode 100644 numerical/neural_network/losses/BinaryCrossEntropy.cpp delete mode 100644 numerical/neural_network/losses/BinaryCrossEntropy.hpp delete mode 100644 numerical/neural_network/losses/CMakeLists.txt delete mode 100644 numerical/neural_network/losses/CategoricalCrossEntropy.cpp delete mode 100644 numerical/neural_network/losses/CategoricalCrossEntropy.hpp delete mode 100644 numerical/neural_network/losses/Loss.hpp delete mode 100644 numerical/neural_network/losses/MeanAbsoluteError.cpp delete mode 100644 numerical/neural_network/losses/MeanAbsoluteError.hpp delete mode 100644 numerical/neural_network/losses/MeanSquaredError.cpp delete mode 100644 numerical/neural_network/losses/MeanSquaredError.hpp delete mode 100644 numerical/neural_network/losses/test/CMakeLists.txt delete mode 100644 numerical/neural_network/losses/test/TestBinaryCrossEntropy.cpp delete mode 100644 numerical/neural_network/losses/test/TestCategoricalCrossEntropy.cpp delete mode 100644 numerical/neural_network/losses/test/TestMeanAbsoluteError.cpp delete mode 100644 numerical/neural_network/losses/test/TestMeanSquaredError.cpp delete mode 100644 numerical/neural_network/model/CMakeLists.txt delete mode 100644 numerical/neural_network/model/Model.hpp delete mode 100644 numerical/neural_network/model/test/CMakeLists.txt delete mode 100644 numerical/neural_network/model/test/TestModel.cpp delete mode 100644 simulator/neural_network/CMakeLists.txt delete mode 100644 simulator/neural_network/NeuralNetwork/CMakeLists.txt delete mode 100644 simulator/neural_network/NeuralNetwork/Main.cpp delete mode 100644 simulator/neural_network/NeuralNetwork/application/CMakeLists.txt delete mode 100644 simulator/neural_network/NeuralNetwork/application/NnSimulator.cpp delete mode 100644 simulator/neural_network/NeuralNetwork/application/NnSimulator.hpp delete mode 100644 simulator/neural_network/NeuralNetwork/view/CMakeLists.txt delete mode 100644 simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.cpp delete mode 100644 simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.hpp delete mode 100644 simulator/neural_network/NeuralNetwork/view/NnMainWindow.cpp delete mode 100644 simulator/neural_network/NeuralNetwork/view/NnMainWindow.hpp diff --git a/.github/agents/orchestrator.agent.md b/.github/agents/orchestrator.agent.md index 12faa6ad..431a9845 100644 --- a/.github/agents/orchestrator.agent.md +++ b/.github/agents/orchestrator.agent.md @@ -33,7 +33,7 @@ Triage requests and route to the right specialist. Do NOT implement or plan your ## Context to gather - Module: `analysis`, `windowing`, `control_analysis`, `controllers`, `dynamics`, - `estimators`, `filters`, `filters::passive`, `math`, `neural_network`, + `estimators`, `filters`, `filters::passive`, `math`, `optimization`, `regularization`, `solvers` - Existing patterns to follow? - Documentation update needed? diff --git a/AGENTS.md b/AGENTS.md index 825cdd6f..c97f4979 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -51,7 +51,7 @@ resource-constrained embedded systems. Real-time, deterministic, no heap. `analysis`, `windowing`, `control_analysis`, `controllers`, `estimators`, `filters` (active Kalman family — **not** `filters::active`), `filters::passive`, `math`, -`neural_network`, `optimization`, `regularization`, `solvers`, and new: +`optimization`, `regularization`, `solvers`, and new: `robust_control`, `nonlinear_control`. ## Math functions diff --git a/README.md b/README.md index 2ea91d70..d9e057e1 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,6 @@ Refer to the documentation to quickly integrate and utilize the library's signal | [Controllers](doc/controllers/README.md) | Bang-Bang/Hysteresis, PID, LQR, LQI (Integral/Servo State Feedback), MPC, Saturation, Rate Limiter, Slew-Limited Saturation, Feedforward/2-DOF, Gain-Scheduled Controller, Lead-Lag Compensator, Luenberger Observer | | [Estimators](doc/estimators/README.md) | Linear Regression, Polynomial Fitting, Total Least Squares, Yule-Walker (offline), Recursive Least Squares, LMS / NLMS Adaptive Filter (online), Consistency Metrics / NEES / NIS | | [Filters](doc/filters/README.md) | Kalman, Extended Kalman, Unscented Kalman, Square-Root Kalman, Alpha-Beta/Alpha-Beta-Gamma, FIR, IIR, Exponential Moving Average, Moving Average, Complementary, Median Filter, CIC (Cascaded Integrator-Comb), Notch/Comb Filter, Savitzky-Golay Filter, Biquad/Second-Order-Section Cascade, IIR Filter Design (Butterworth/Chebyshev-I + Bilinear Transform), Madgwick/Mahony AHRS | -| [Neural Network](doc/neural_network/README.md) | Layers, activations, losses, model | | [Optimization](doc/optimization/README.md) | Gradient Descent | | [Regularization](doc/regularization/README.md) | L1 (Lasso), L2 (Ridge) | | [Math](doc/math/README.md) | CORDIC, Quaternion, MatrixNorms, Step Response Metrics, MatrixExponential | diff --git a/ROADMAP.md b/ROADMAP.md index a5d3f6ec..7dab252d 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -43,7 +43,7 @@ magnitude/phase. The items below are the missing pieces. All are **float-only**, on bounded `math::Vector`/`math::Matrix` inputs; tests are `TEST_F` on `float`. > **Test-only helpers (not production components).** A ULP/relative-error comparator and a -> finite-difference **gradient check** (for `neural_network/` and `optimization/`) are pure test +> finite-difference **gradient check** (for `optimization/`) are pure test > utilities — add them to the `numerical.math_test_helper` INTERFACE library > ([`numerical/math/test_doubles/`](numerical/math/test_doubles/)), not to `numerical/` production code. diff --git a/TESTING.md b/TESTING.md index 9b61f179..22d2d96b 100644 --- a/TESTING.md +++ b/TESTING.md @@ -61,7 +61,6 @@ Canonical rules still apply ([AGENTS.md](AGENTS.md), [testing.instructions.md](. | Optimization | ● | | | | ● | ● | | | | | Regularization | ● | | | | | ● | ● | | | | Solvers (linear / ODE / roots) | ● | | ○ | ● | ● | ● | ● | | ● | -| Neural network | ● | | | | ○ | ● | ● | | | | Math foundation | ● | | | | | ● | ● | | ● | ● primary ○ situational @@ -89,8 +88,6 @@ implementation against its own prior output. - **Transforms / filters** — known pairs (δ, sinusoid, DC); Butterworth/Chebyshev vs `scipy.signal`. - **Estimators / regression** — simulated known linear-Gaussian systems, AR processes with known coefficients, data on a known line/polynomial. Assert RMSE vs truth, NEES/NIS in χ² band, R². -- **Neural network** — hand-computed forward/backward passes; finite-difference gradient checks. - ### R2 — Unhappy flow (no exceptions here — errors are `std::optional`/status enums) Force **every** failure return and assert the *failure* value, not just success: non-SPD Cholesky, singular/rank-deficient solve, non-convergence at `maxIterations`, rank-deficient @@ -257,18 +254,7 @@ final value. within the requested tolerance. - **M7 conservation** — energy drift bounded for a conservative system over many steps. -### 10. Neural network — `neural_network/` -`activation/*`, `layer/Dense`, `losses/*`, `model/Model`. - -- **M1 activation values** — reference points: `sigmoid(0)=0.5`, `tanh(0)=0`, `relu(−x)=0`, - `leaky_relu` slope; output range bounds; monotonicity where expected. -- **M7 softmax** — outputs sum to 1 and are non-negative; shift-invariance. -- **M1 loss values & gradients** — MSE of identical vectors = 0; loss non-negative; analytic gradient - matches finite-difference (M1 gradient check). -- **M1 dense layer** — `output = W·x + b`; back-prop gradient check. -- **Model (M6)** — forward pass is deterministic and equals the manual layer composition. - -### 11. Math foundation — `math/` +### 10. Math foundation — `math/` `Matrix`, `ComplexNumber`, `Quaternion`, `Cordic`, `TrigonometricFunctions`, `HyperbolicFunctions`, `AdvancedFunctions`, `Statistics`, `LinearTimeInvariant`, `Toeplitz`, `QNumber`. diff --git a/doc/estimators/LinearRegression.md b/doc/estimators/LinearRegression.md index de0d547a..47c5576c 100644 --- a/doc/estimators/LinearRegression.md +++ b/doc/estimators/LinearRegression.md @@ -115,7 +115,7 @@ graph LR |-----------------------------------------------------------|--------------------------------------------------------------------------------------------| | [Gaussian Elimination](../solvers/GaussianElimination.md) | Used to solve the normal equation system | | [Yule-Walker](YuleWalker.md) | Structurally similar — also solves a linear system derived from correlations | -| [Neural Network](../neural_network/NeuralNetwork.md) | A single-layer neural network with no activation and MSE loss reduces to linear regression | +| Neural Network (neural-network-toobox-cpp) | A single-layer neural network with no activation and MSE loss reduces to linear regression | ## References & Further Reading diff --git a/doc/neural_network/NeuralNetwork.md b/doc/neural_network/NeuralNetwork.md deleted file mode 100644 index b8792e08..00000000 --- a/doc/neural_network/NeuralNetwork.md +++ /dev/null @@ -1,163 +0,0 @@ -# Neural Networks - -## Overview & Motivation - -A neural network is a parameterized function $f_\theta: \mathbb{R}^n \to \mathbb{R}^m$ built by composing simple, differentiable transformations called **layers**. Each layer applies an affine map followed by a non-linear activation, and the whole composition is trained end-to-end by gradient-based optimization. - -Neural networks are powerful because of the **universal approximation theorem**: a single hidden layer with enough neurons can approximate any continuous function on a compact set to arbitrary accuracy. In practice, *depth* (many layers) is more parameter-efficient than width for learning hierarchical features. - -This library provides a minimal, statically-sized neural network framework designed for **embedded inference and on-device training** — no heap allocation, no dynamic shapes, full compile-time dimension checking. - -## Mathematical Theory - -### Forward Propagation - -Given $L$ layers, the network computes: - -$$a_0 = x$$ -$$z_\ell = W_\ell \, a_{\ell-1} + b_\ell, \quad \ell = 1, \ldots, L$$ -$$a_\ell = f_\ell(z_\ell)$$ -$$\hat{y} = a_L$$ - -where $W_\ell \in \mathbb{R}^{n_\ell \times n_{\ell-1}}$ are weights, $b_\ell \in \mathbb{R}^{n_\ell}$ are biases, and $f_\ell$ is the activation function for layer $\ell$. - -### Loss Function - -Training minimizes a scalar loss $\mathcal{L}(\hat{y}, y)$ that measures how far the prediction $\hat{y}$ is from the target $y$. Common choices: - -| Loss | Formula | Use Case | -|------|--------------------------------------------------------|----------------------------| -| MSE | $\frac{1}{m}\sum(\hat{y}_i - y_i)^2$ | Regression | -| BCE | $-\sum[y_i \log \hat{y}_i + (1-y_i)\log(1-\hat{y}_i)]$ | Binary classification | -| CCE | $-\sum y_i \log \hat{y}_i$ | Multi-class classification | - -### Backpropagation - -Backpropagation efficiently computes $\nabla_\theta \mathcal{L}$ via the chain rule, working from the output layer backward: - -$$\delta_L = \nabla_{a_L}\mathcal{L} \odot f_L'(z_L)$$ -$$\delta_\ell = (W_{\ell+1}^T \delta_{\ell+1}) \odot f_\ell'(z_\ell)$$ - -The gradients with respect to parameters are: - -$$\frac{\partial \mathcal{L}}{\partial W_\ell} = \delta_\ell \, a_{\ell-1}^T, \qquad \frac{\partial \mathcal{L}}{\partial b_\ell} = \delta_\ell$$ - -### Parameter Update - -An optimizer uses the gradients to update the parameter vector $\theta$: - -$$\theta_{t+1} = \theta_t - \eta \, \nabla_\theta \mathcal{L}$$ - -where $\eta$ is the learning rate. More sophisticated optimizers (momentum, Adam) modify this basic rule. - -## Complexity Analysis - -| Phase | Time | Space | -|------------------|-----------------------------------------------------------|-------------------------------------------| -| Forward pass | $O\!\left(\sum_{\ell=1}^L n_\ell \cdot n_{\ell-1}\right)$ | $O\!\left(\sum n_\ell\right)$ activations | -| Backward pass | Same as forward | Same + gradient storage | -| Parameter update | $O(P)$ | $O(P)$ optimizer state | - -where $P = \sum_\ell (n_\ell \cdot n_{\ell-1} + n_\ell)$ is the total parameter count. For small embedded networks ($P < 10{,}000$), both passes complete in microseconds. - -## Step-by-Step Walkthrough - -**Network:** 2 inputs → 2 hidden (ReLU) → 1 output (Sigmoid). Learning XOR. - -**Architecture:** - -```mermaid -graph LR - x1((x₁)) --> h1((h₁)) - x1 --> h2((h₂)) - x2((x₂)) --> h1 - x2 --> h2 - h1 --> y((ŷ)) - h2 --> y -``` - -**Epoch 0 — Forward pass** with input $x = [1, 0]^T$, target $y = 1$: - -| Step | Computation | Result | -|-----------------------|--------------------------------------------------------|-----------------| -| Hidden pre-activation | $z_1 = W_1 x + b_1$ | $[0.3, -0.1]^T$ | -| Hidden activation | $a_1 = \text{ReLU}(z_1)$ | $[0.3, 0.0]^T$ | -| Output pre-activation | $z_2 = W_2 a_1 + b_2$ | $[0.15]$ | -| Output activation | $\hat{y} = \sigma(z_2)$ | $[0.537]$ | -| Loss | $\mathcal{L} = -(y\log\hat{y} + (1-y)\log(1-\hat{y}))$ | $0.621$ | - -**Epoch 0 — Backward pass:** - -| Step | Computation | Result | -|-----------------|-----------------------------------------------------|-------------------------| -| Output gradient | $\delta_2 = \hat{y} - y$ | $[-0.463]$ | -| $\nabla W_2$ | $\delta_2 \cdot a_1^T$ | $[-0.139, 0]$ | -| Hidden gradient | $\delta_1 = W_2^T \delta_2 \odot \text{ReLU}'(z_1)$ | $[-0.231, 0]^T$ | -| $\nabla W_1$ | $\delta_1 \cdot x^T$ | $[[-0.231, 0], [0, 0]]$ | - -**Update:** $W \leftarrow W - 0.1 \cdot \nabla W$. After ~500 epochs, the network correctly classifies all four XOR inputs. - -## Pitfalls & Edge Cases - -- **Vanishing gradients.** Deep networks with Sigmoid or Tanh activations suffer exponential gradient decay. Prefer ReLU-family activations in hidden layers. -- **Exploding gradients.** Large weights amplify gradients exponentially. Use proper weight initialization (Xavier/He) and gradient clipping. -- **Dead neurons.** ReLU neurons that receive only negative inputs output zero forever. LeakyReLU mitigates this. -- **Fixed-point saturation.** In Q15/Q31, activations and gradients must stay within $[-1, 1)$. Scale inputs and learning rates accordingly. -- **Learning rate sensitivity.** Too high → divergence; too low → no progress. Start with $\eta = 0.01$ and adjust. -- **Overfitting.** Small embedded datasets are easily memorized. Apply [regularization](../regularization/Regularization.md) (L2 weight decay). - -## Variants & Generalizations - -| Variant | Key Difference | -|----------------------------------------|-------------------------------------------------------------------------| -| **Convolutional Neural Network (CNN)** | Layers share weights spatially; efficient for image/signal data | -| **Recurrent Neural Network (RNN)** | Layers share weights across time steps; models sequences | -| **Residual Network (ResNet)** | Skip connections mitigate vanishing gradients in very deep networks | -| **Transformer** | Attention-based; no recurrence; state-of-the-art for sequences | -| **Quantized Neural Network** | Weights and activations in low-bit integers; optimal for MCU deployment | - -## Applications - -- **Function approximation** — Learning arbitrary input-output mappings from data. -- **Classification** — Mapping inputs to discrete categories (fault detection, gesture recognition). -- **Regression** — Predicting continuous values (sensor calibration, system identification). -- **Control** — Neural network policies for model-free or model-predictive control on embedded targets. -- **Signal processing** — Learned filters replacing hand-designed FIR/IIR chains. - -## Connections to Other Algorithms - -```mermaid -graph TD - NN["Neural Network"] - Layer["Dense Layer"] - Act["Activation Functions"] - Loss["Loss Functions"] - Opt["Optimizer"] - Reg["Regularization"] - Model["Model"] - LR["Linear Regression"] - - Layer --> NN - Act --> NN - Loss --> NN - Opt --> NN - Reg --> NN - NN --> Model - NN -.->|"single-layer, linear activation, MSE loss"| LR -``` - -| Component | Relationship | -|--------------------------------------------------------|-----------------------------------------------------------------| -| [Dense Layer](layer/Layer.md) | The fundamental building block; computes affine transformations | -| [Activation Functions](activation/Activation.md) | Introduce non-linearity after each layer | -| [Loss Functions](losses/Loss.md) | Define the training objective | -| [Optimizer](../optimization/Optimizer.md) | Drives parameter updates via gradient descent | -| [Regularization](../regularization/Regularization.md) | Penalizes complexity to prevent overfitting | -| [Model](model/Model.md) | Composes layers into a trainable pipeline | -| [Linear Regression](../estimators/LinearRegression.md) | Special case: single layer, identity activation, MSE loss | - -## References & Further Reading - -- Goodfellow, I., Bengio, Y., and Courville, A., *Deep Learning*, MIT Press, 2016 — Chapters 6–8. -- He, K. et al., "Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification", *ICCV*, 2015 — He initialization. -- Rumelhart, D.E., Hinton, G.E., and Williams, R.J., "Learning representations by back-propagating errors", *Nature*, 323, 1986. diff --git a/doc/neural_network/NeuralNetworkArchitecture.png b/doc/neural_network/NeuralNetworkArchitecture.png deleted file mode 100644 index c3817e9b403246c9074f3ffeaa7fe4731b4ed5fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450583 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

-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

VGgj;9 zrW1E5=-3G~S>yS{&s=o)U)CwQ!_p;eWu;Ot1D%Iqt+*R{^KR&l{zGiUi?3zQLU+Goz>ifgRPd_ z03r>DqRE)*sH|#__$`Whd;$oKMQpzb=U!DZ=;g|lR!gMR4{)e7!fxCgEHzhE=)Qso z^cK_kp{h{4bAf#U&60Ijbg2^~-*&+g>=iWV@j1x8uxH6@*=O{36>{p0u7&im}_dS36>>-l^>Zk}DLRuGW~W_dngKZI+58Jw}_`9zdt_^aew zW{-abx4&tazC!qh^kIEV5x#sFcJd*g10UtvmF5UGY1OK-e%f+6tIhqszhZ=Gz#G{f z(c(e~MAPox$(PeQO4_V^TMz4$2g-YA zbEFtsm|se+1;Gl%UobRf$U{b*ob0u^x{_;coGZ+!1w0~B8GRVWs$MjxXKlEQtfyU* z?;UZS+s=;NcF88BkOry;XzzD~IZy={O6CyHZy_lkO)*1KKFw{&hG@;Ab7G^xf^mNV zRr|{mx~ccy2NB2qTqqM4oQE}Ku<8~&J`s9jVrr;Hzq%uFBp zNWU6iLv-f9z0Me7$dBeCAFL8TI!`BA^+?d?8!t=Yw?=PYC4`uj8m)z$5exL<4XGwxq5cK!saLsZn&d0O`mt8oYUuuy4F0-h590R1*Y= z|4dwoGb|9mc(NoA6GQCDwyL6re#lDLsw29t zk;V1fL#N+tU)TSyzkeSaj-xHjjqt-Skh{u?=mZMcnNA+nyCXQ(4eH#OClvbyiQvj}hl zW($X$%Knvlb)c&AyxJ`5eCUr`V$Mu8HEY6K-GLPQ%-hDidhTE;M}5b!KB7@{DPl1{ zz4x$VwCjC6b5eMd*usDbJZrf^CeHpmKj*xvHjj&>9vPr z5uB%d&xK-f0CQ@vBx{a<5<;glcltSsg3(16%2iS~*LSXx9MS|bBI)hs#U(Hco7S8h z52CA?@j|;aO`XfV*@dGl8D?n}Eg1@oxWhiyJ>tTfYrhYBrXu6eX69$ZMt()1h;7vZ zw+fvpj*u0Zg9Fy6m|>CMAu=YyFVe&mMuLfxjpmpk_U@>4gap1Ai1E<8@lb}(Rp-5_i~zj) z^%RK$gl0Y|6VS?hMgBH;KF>5wIBX7U;;rRi6}SJ#YJ{QI&yuGWjSBpajXiM&?Zt_- zZzA#o{xjCG{_J0hxz3c?V%7>VH~<1G@`r$Y81>ADXm+w^)Pl6-33#3;^W>)Qh~gK% z^QK{WR2fg!F_goV|90b41llIb9F7y@Z|B^ly?Gi*s$2gn?li$EJcH*rCwh_>6<{}B z9D(1>_0QaQzK<)h)WHlA7I1qdFid((OyvBRjS&YX@h1Vx930~MIQ{`(j&YN#*^LXT z$_%It-5@P5rxh(_E%=}8Wu8t+6hsgjyJ(}I`4gU}ddbUKNb`pG9$d=5C!cW%*$-5w z3v^sGs+9%4uQ!WNq}$^>*@ewPbz=!eGfA0^mYCvz{U8inpLNnZ6=@u@S&6(|{{2|s zEHy2*c^fkXwV|e@PjmD`7`haVE;WzJH^2}pisUW=rz{&v!RHLjK|(?K*m?_3=A^Uk zmoR!qwW+t#ABHUAH(3o)T%SCP-;%O4auk@aGc6M!oOb!Hb}Wx$hD@G*<6YOG@p&w* zu0&VfGv@yFV#M|`e{U+&?Ed1uugQo}hl#R@%63Ll%e7|xH)1yTg`Tf4(u$Z3Vg&H~ zxLs)yeK*=Om%3C@k~9E<3aA*zfQU;;pUMJydn-y*O$*mBq5RM6Vr&Ig3 z%_Z%0>~SwwgDjNTqt}mU?;CZ7diK`!y{vzvdp%J!HuQ%k;azSEYGO?fq0GHbX!FXk zzfn;gt@VMw_~jfhd$HiUkKWZVOfKiCl^o3et^O_3(Xh{?nSva6?2F31ADkKv!*_Js z`3i)b?l`V|8%bs=a{M!+``L-etvvRX_KR7B=dP(KPaj?2XM?@Kc{TKZOsSkVCm;kd zpw5`a9UNDCw41|}U*0zwzBYP0ZwfJX8a6`?*s6QtoWHo)Ma%9Bbyk88;vU>m2OO6l zWI`0gtP0uMVK=z=tL+gH*lT$XnUF3^s-ndjqYzT2wB+m0eg^ig_)%|Ky7H=T9w!*_ zd)ftxKM1ttMcBF0i5sS$JSJH#V<+AbLKv6dj)}XZJgpM0RFVST2HEDFf#qm{Y!!sUjDC70e?)l z)?;=ObX^;9q2E<8M|5(g@xtOME54eLZI{V(+V@N5WBxm4>SxPZ8QG3=L0YYh4_FP6 z`?x|l$J%=flYuu0?%fA%IR(!4S@5C4uvE|QjEZ6S3SxAH!9{e2Y0q+h&B4OEw7A%x zTZ_qGPWxTg`S93@cz}t;oHO78#VYWjvEG1=8 z?7}$7VYx$*!bs|NykaKe`aKl?fz%lB*65Ydm9{BW-ZA)Y!3iG(%J8|mI)MSf88ez| z>n{pG)Qh3Y9l?&y&9JQQaYMY(LyfseAxdTGK>Wao0YX4PHoWu=L%Yi4oZ8RSziQVl z!k`v(u8!*+JV@rtsN1YgW4~w5Vl!QUOTgtQY75VQj+8nX>lGQHm0f2dMgFvCM?DU& zdr$JItwU0P*=%>(VUV3%rSDGH<%8>1-=}K+tVDEbfcdu(-upSu;c=40w{bDS+`7Tb zcNe@Z*W;z%-K!Q@H?5z7&HrVFIj~ci#t9MFxzh{l(oO+giWyGz78c83^LB=D_9Vow z3zu@Qn>Q5he64#O*iRPj;;N1#yIhl*$3ObX{2A1-|ZZj(p8qFWgXbj1r_&MeGw zzdqtSdT{r+*_yA$DbxgGFw8_tfp$=^9^lu_+sL*Ah|vFP&lG#SW9~57WaKjT_s-BD zbZkTRWytO1O_z;3>RpKs-WPFvk!M<uaHHqivu&s7Bg$=Exk#dj2em<|W z9Wwl?Ve*rE@xS-$7sh2{@^z1lhv^>EVAWBCl5U)ct4(L`Y{B#gUne+CIF}SG;94Y- zrdQq;g)v9G2Xd|)#;o6mcn;^g9@kd7`<8X;xQKE zBw>@A45%2#XpD1njPL^1O_6^aJ>Mte9B-f7SRLD!cW|Isu0bFfpDwSiNfy-na%{%) zmY%O;SsF_jKJP6)ccp&wqs0~2;qdWnMN5DQ4@lTN)f09B3=4^!yJ*Um)o}zY`d@o3 zeBXtUzOOd1f=Y{6cZtK&F8P=3vLM z2>-d&+ohYYZ8RWZkLiYN-7o#?0uUL}!H6v#`)0N-eq?mq8j}-Z_FD<1UIUt^2GKO908cx0{l z5+J=(4dM72(Ff|^G9PFaxfU6Zt+Vqd^u~P*;t$bdpB$FWppEQ8sbbc`h(sc7$Pys4Aa0Z_v1JkAz6C49kHtOmu^QrWqciafrN!Y@)Lq$^G z(`t*Ulia5qv$1V92iMGQCmnSydwR_zpR<8NbwH;%^QRnF9u*;{o|I!!ueHUQ{iC)t zo7SuxYckyJURwUOGmqE5(hLK0-|!yJqfjM8;qwb-lZqi)`9ArbWm-+bFslpf`SY0R zPn+4>u_Mn?kq_dy8b9~@=j~4u3vX3%@AG!8NUiw1 zX>;Anu*gd;=AzZb1eVjlDs+(Z^^k@v{;ktR~Ewb_+maL;wto@BlO& zF+Z+!ze)7tboXEpBd6z6e1W~{yZFi{TKASWJ}D9Im!9vq)35Ki8-IDY<;SDdG7H+? zTM{0#+i#6-?-a2&rhO=8g5Tj+7Y!1&q`>s9${byTXzVou1LHw$?&f{dPa+N)UP|b#g2F$XyTEa#k|a%z4_GQYZHqcmRyw zF{ZhgQe9&96oKu<>&=i={RMnRLloX*D_bwcl|d}e#v8^Bt}Ig)2U5e?-x)aMqe;e+e4e2d_qkd)RMJmPlPn>9X6O$oD zo5j9mN?t}7_8*5Nm%5>ivDg@&aDh}MyFUL5ut5O}Z?)K;>*?)cBR3XaWSuL(Z&T$#XshuhKnM`-DM>~%v6;IVO;TmU<#Ru>VN z=U=9ocy=)RcgWfyUdr3^Ic1wRv)9ZA54S5M1s=+t#6Q5e0pnx$YNNQur-PH~25qTQ zgl%)Ce${-b3%!-c4}o*>>X5FkD(ZcWh0;{*Nj%KbzSR>YJyLklTB9@XxL1ax$%*e0#Y#E;Qkl1dEc8!;$TmesS};eVuOUiZ_Lk0_@4yp zh{+I#5sjsN=df}2sh&GzlsWrJ&k{I2(E%_GlUjB^@KZ1B=x1hcES~_Fx)VI7u0AbE z=)IYmxB}ZbC-OKWrJT9^=V~uls5@aB3rhfk{pn{fyHD zNqN;U!88Sg_6vtkL81iIAyb@7AF*Bn@WhuPnVZ>?H3i5(R^5U`oS2aMH;fJaHFKvI z9d@jrU#;tvZX4$^z5H||8SiRxo5@26rPE3xcn%Dk@R35g})s=ET*t}pFlV& zt15gZ*~O+}ZS^|D=_E?kPPXMW^hh<(bLyfQXeRC~4vE4tTLTLo1b>^CsWnRx2t|(b zm*+~JA2F+Hv>rK`QWRUZZ2HW&%D_$<#i)ri2iI#4d6=UqdKT&1sFiJSp*=L#2oC#K zBC{Y$;_zhWA|6mpVWt~ni8(pPVS9HrD_c*PToa@PuVf9oHJkHhtam?O3Gt4aRpTf8aBq8^y zup0I6J)F%!e+~3|Tq4=e>6p0bBv~x(QR_xuoy$yfJ)AYoox=Meym%f}Ucrn#qGbkS zP!3L$6)vZD`63I?JvUP-OD~)fUpKTLg5L9oH|i57fi=xChi^F14VOvp^N^VZOzIZq z=MXi$lsQD5!|NUz3QAELQ9Vb}+vOvqd4;~l?ewm?2S64=Sf7uzUw64qn^V=Y6){ni z(lfWfXf?wo42*-$z&trO0fcJ}`DLvx+drYGcmr3{FStyN=SE| z{C(SYZoK~E*rL+t=3*g{bA0LzQ`;uB_L43N8qurncSSB2`Rm4y zvjp)9%TV}J5YTuWP-L69oH-nz0&Cn1a6Vry9DVJ*#1+ZSq zJt_EmQmbMZEymO|33(wj&55IM_<1*jHeR%ba}boj-PAqb0QRe*^vp*6Lu+j31g3usIwAlk1TzA1x721?)8Ys3=CHxD zd~LZrzU57H4rcd`d)_F}*_}&V&~<}Arx!2o_BQMEu0L;uQkSxNc-&*~nmU=s#!;Rj z^!}4eSw66#b622fk;1SArT)?Bfisu-*D1*lfL8D));m@0OPJ;a3*fh|pNS>Nm1ps| ze>xJ83CiU6p6yUtZw~tesl4UlB)-L=U?*WlW+#D@)p=`zE7vl`nyv2Hna*Bzx7)Ua z*v8O8zu^uPFZj}rQD_bwfthYb#~VMQ#Uy-#WbclY?KT)3P?-_8cN2w>W8{u*+nxBA zW!F`HoS?jK(&Vu#tRki*wNpRS%9-MDQ#q6ofd;+epZ1lCzdk^i|M)V!+PUY<4Pns| z<&-tA2%y<4h4xjND0-8yI&a7KIzk2Z@A4q;Z0|&KGO|d_W&c1cqm^&3Wh2EGkLZj@ zFh{LysZ&x&zYjy!jQ1Aonw5c^Ywy>VRimM<@Oj;X1QqEm9mr9_F~KdqHzCdUy~W?X zNVy+bG`9W>_kb*WZNQ@u1nET;bkCQO~YVTUB`+{oUS# z3j%P~l{r>{P>8YonheB_zQ*Vd4~UWULY1X=hG^YxJ-NIbp|k}3<7+d~@z;+1%TsZC z{MGfB(0l_*idEB~q>FY=oE$TG+=XHuGW~gKL9=MqvzcK&wxWN0y}Fy{>9loVCt(|t zieIVb`)N?fEX2Fg)nc1Kw*kJ!GnMJgacpqHOq)lfsfonOa(dqoE+W!71f)eu%o}6c zsySP|&nk4rG%%^NgYMz9GfOE0gfAD1*-mBZhwh$t?YgauxG#J+EmJ=h(QBF(cRDzh z?!F$sy12145`c~@y7pVdab?p5PWfv!;`RJ(QOgff=g0l5xu9>;E7=~%>x*KD(V6Xe zuFnT~`aF3r78(4`dJO7pZVIBa`pj@zSXQe$U%kdH(R8msPcN~*{;xE7R}R0PY4qsT znm1;D8n8a~Ok2=o>hmd&M5gdrCvZ24HRL2ht&TH&0{r%~&p6CM&+?OKW=J0I#XC>V z;BA=A**#?Z?BJ++cYg^lxm&NcTg8mtfAxX#NdKa8*o~HErv=`%GLn}Qu|K-PXiTGe zX(O2|z^9!ztT-&WY6yurXLA4RkxlLsn$dvP!f5SY0G3P7(GJFYoz%n zviwpahly1A&{xE;T>rIi*T6k@QvXpglg<;i;3*;?l6V=)&1#$~HaJRXW z4h11|&i<*7#BirWZ^ttf@wG$?^015G5Hh6BSkeYd!jYKLg#@i9-PCEBcE zY9BbpFwxhDOyy;b?2w5cKcFM9jDiyQ@9k`lF%f!`#;aVUQrJy6TH%eE*0YJd`!L(J zlKAWO3A?YpkHkG1ZoBkDogfTPs(6XjHmz`3IlU8gg|sOsi-aw%C-9ZpaAt5QA1^AOw{adTgeTgm_z(!urAtb(N_+Sf*!?U~F@+^UUFCrmd z8Y3;o1zJS^E*!Q^7`zvum!RUz2lpL3+GPo3BCc}{1PES>+*43e#svOuE3px%?bK9;h?a63oT@kR>uzd=WBw`l z?Z-j!hPSjaZ52AR1{FwFb(O+<5M}puV1chFl9Q#UFJ-m5jo}h^$PNUa;a1&}@9c1+ z=>O~=LeQufRa5^$un0j$c*W=%kiF_*DmRALKd7f0ko_0_2RlNa!)}S{7XO!x`0WQe z$gO`1b{WYk0DHlL5-sRhGfo$kJ#0x-Tdo)wdftz_3^K>lDi&*zFydrSK|0F=Sq@mj z>egIF%*O7~)aSB<`Wtg5c(97KgWKF+L(ji~uNcn*W%8gm#g>bDSCFm+@+6RGt_f!` zr@k(*>iXC3-GjWj+iN4?5q|z~Rop-2_u+YNKR%uD*0~{Sc+|IS(TwJTiE^lkYRvgV zH5dRoiR}K7SWedAi_t|RbSamzr=lKjjSlX}=M~?4CvXWR287bw|4I0M2DpI8v+9NR z|Kdt3v=&H9et^C@paZ72V1k%??9bH7(~2!sg6|qwC1diiPGwRyHB7v? zIb7K%)GUMr&W^e_xQrj%Ht04G1|3VrIx3;cjzL{x`~n^3wp|#oQFzN5BmXoR|9r={ z9qe(w(bRw9N664;QDMRLeP&Xu88Y&XSty!=)~0+kh_aB zZUn_bAZA>aH0OP-OL3;?4W`YbQfuTtlz_$*K93qqbSBk}@A}3qh+*1*=U<^F;n<1I z8GcrsDuAFmtseskvLi%nP5hvN+#;S<_oAXGY`1GqvP@Ot>}jf?kp1@Ysu=IQt%!=m z&njc(CR3}cdFK#b$~E%5172n#urlsX2}#({lF8g2`N4ele^+ixVaw3xoHF+|NPv6} z$M$0pzd(+g0d=P~s_XX!|$XYLBhqi20t9)viXcgQSHd)$!`u(fG|z7|L=Lg;*&#z*LRXu1XLpF?#$-xZGb z^bd2hgZ>ZALH%!8?e-cDawX{p$`&TMtpFDJdD(ZB1A@GBZ-~gDmEqzr4r8I_Ou3)On zE?-hzdbJSgW>dBNCgInp+PHnhJbv(M>~dye^NGaUO3!AQjupjjuV%UBpf$shL%t5A^TrHfndYbep%M*lMhD`q`C-&7_Wk`@e{N zCS1N=3Y@?8GDXFmsxurR1599W#lb`v63bMq>q4FMcWihh_@Kto^mUOJ@%G~FAdE2l zry$I{$cpY_t}ruoZbl>`P08kSNbP@eLMWUm1>wyhab3loRE2W3>jsJ*HkVanNo~&x zBjSj1EUfQQZM-6>grJv5^s@d$2=bEOpDmKS?eYutsR*e};Db~HYL-rW2fQcnx$O7; zhM1Xm+gd|!4qwklw{-05n8N*t!uwsrqR|Dz`{@1MtT3bPYVc~= zkj3<>0}rV07Ny9GunF0b&x>tf!Rkse9jT?3eg)^filddtsnOX@mq|s^W338XPmXq2 zNfL5am|i&d{H0tx(in}_=>ms5MB99=Z{8>PM)n4?=Z{5apCgnymz9nJ4)p8IpR0o|tAdHCQ)~&w@k^bjWUDIvD~Vy<>IV!b~pEW2qnB6+*EGInWVY zcQ87Ck2)+I8P}nT^Fa3LU4}VRswzr`0;=>MYG9q-(blrx+bwA**$aO<446n<~hV{!Um>s{fYdUuC9?+mum0xFkE;<+mmRLGIUIHZ z{ytU7I-KnmS%gwW1-y*syypNu*^i=55Ej199wr<+Xg-&7vU&hW>A`wG%Z?ogXy{IN z0FN+-*=7?%F#dXRViPO!mqAwt8pM@1$;1Gn9alzzSc;z;LbV663MraP&}Gftp>s@a{` zKj@jin4#OgT>8j6$q7D^vvW0|a@)n;a~fZNG2Z+Jwbv-hC>YQZ{4M=Z_a}Z7E`gXC zXsss6slXSw^9I6F-{+J_&OTDr0HgN%!k%l;mJ8775mS@~HUy@_&L&*|0agix zqOb{{{P;F?(6{I@gkDZw^D*9(B_q@D<~ec!9=l{)&UxXS4o@oDnk>6VGtABtl=o6C89XTC;O$yoiT>WxIqp) zxrmn~50#?`(eK`)7UQ3D@^=6(cgdyTR~fkrZQ~r?5omEPV?R&C8jBsvIJif@xvfCjtYaM16?EmlL{b1>8+Pu zjGh1fbwN_S^>cf8n)!?G#hUf3wwXtTr_xunzcs601wC*T?G38~#?`AI3qI!rYw4x8 z($w2g@0g{g53a(~*#n+r{a4ug`J>~~+vp!bGbZ%|)dAo*#VOp=&}5bcZ)=blwu(X; zla&S*WOlE<_0IJ<|2Kk3wEYZUWmQIk9)36;tW)#?xYT#*qmQf9>z`m+w@iI4Vh4vU z#w1N_aRU+8Q_X>CJmUFqFq+hC;q8QRlQP4csJow!M3wQ!avf%L`(oZ~-R%f5V|l6x zf_$|?{PW#j-3f(8=yPWXkD&uXM?=sz?w^;lPVyN2a6gQA+QTgus!5sGXbBXLBxs0HaU|)t zX@w5uifjkqHp;EZrhL}IU)=>eXj~8`+TFyvCQ+#c8mJm*d*V#Dlp%#1~6O@ z|Hyn=gWP`+Po01@+8VgSq#9Z8qA0$xLCNFkYTHVK%w~!53ENq8%Y! zg(J>kw_S=){}}j<&w&5ZnSW*l1impg{-T>VhmThJyv|Ycoy{mOfNW=T`%AJurGFmq z{JiK#<7ho+L4S^!lnsO}@(ZX7Ua}%>eE@GKr!d>PclD!S%}L^3R~pQp^$aFP2VEZu zF1&09ThDTwLiDJyni;Y?z0I_KC}gA-qy8?**S7n@jl4yUQ2`p&i?gN3V#H|!Tii;# z^q}`LL+m?v-xxZ=C-KGoftadpMi>Ol>VB=jrYtRwuHj%VoR*=z@YG!w*cM}Yy;Ca*mq^vNxwu`@vqsaYL6 zIFGSr=$)R?0nV1H-# zcuJ4^#pK@i2iA1%UuR#g{|gH@!;Dsn>YzWcA4M6Nshxo6v**vcP6VkF`VPF-c+kXm z?yXybKo}+0u5r;pg(lzXfKkN`Hqtfp{uwaohfm z#+UEw4NkNFJhn&YtcL4KIK4(0lClBD@u1YfmZHn*Kppb~)-=4%U-WLW)E_Ds^PvNr zE8i$FNMGZYtvZJ?Wr-!LUITI4}628U|)4FUyo5ACmH>Ewq8^gJ7wdiwQx*o$}P6Cklbo2G56Bq<(j? zTy`){9L)FoFMqKGY)cDfsY^09I(#8O5q_QHZerHia2#9+E?xgCw5vSV#0kIx_oo5l zf2Z5Du6zjkNnQ&}v;Q!>Lsf19d_n}$bN8bq;mwS-Y0EWGL|uWP6>Fl-!hbo45FM>A{iJ7ZH)|HJ;xe zJrsjdLR}?p=^~;{jy#M^6^|v|>RnpHB7MV+W)JOt|HUrid>z5)Qi28?&qM4cWjLS5 zZ7FQYV$OK259Q|lk2$IAZD=);nI@pVWG?~Z2L8zI>B-*>oyn8njF6;DeD`Gfb+o z`TOo6%tRAv7(87kK`aK}AiJh*L1Tz5GuE;OQ7M zk1;D26e$m@`{N7iYB&b}Yj~!H?6Mi*O`R{YV^dZQIRMN(zWhf4#lrOls-tHL9b^3UpZMCRIQAu+cp3KArF2tV8ldcV0V*8W$|nRZCXgV~ zIJ0~%uvaPYx0%#0T^Sg&>tX46>{YQqSM$rk@_IUrsucTQWoQe0L9db|A$5*g8aFdl z5!C^+l$Lj=V$e^>@0o$^LOjC7S6uX;>C2RH>>oj~Tk|w>{GZ=`!|-d;?LbeB((qbX z*97$>Y7293q?w(V=r|H&X*%fH3^jR3%^i{ju?zV^zoPZFV6Evl&SI|c++nq07y>Z^ zsz>5Jp^wjZsScALJ1qonmdkMu8pTx*kZS>q>54&{Njw%$<>@ToEu>vcak`$vXp|hZ zOYZLOD@WQ6QH>e+Mb|A&DeuZ0eoCk$77w-ECZ>3WndHwgIVjo_hMuqB0%fhjSzwUI z{N_1`uYO2V1XC~uwgJH<66T92(B=kkBtI%)?9=e(phwKdQ?Lke90I%DaKV^uTYGdc^ z*!Dq3-#Z?DJsw!0sjU2%2$hbKcSytPJ#F-6lZ7hF(>TjfubCIgp6pqx+=b~zOX5^e zy=9Bj3YFgy$iC4~yqM@ER1!B-dcN6xg4&9Z=4VHob*G?5eAOBY{5z&d7vz8LM+K+f z$ro~D@N~WqjE%3PDk-`>(2!l5DCMnmJFEo9v{o(Rx&E4K zxE9UH*(LX2IlYg-N33?vu&+t}1aG@;w&*RE^YRGALb?w@^c!;Uqd%GA($d#xx?*vQ z_&%b=w3={P7N~e`c6Wx;EqXOCyhCekb3gF1a*`ET<+Phi3R#xzKKWF(dlz4XUswh#VqvSdxe&?xREX~=E9e+g(* zBv1AO6*O3wVQslQGbVAmR#rMfLHwX9#j|BgR`3aHoo8|lde#OR=s!%Mg82LhU=nQh z#HSrf1wVN$OP?x4uWj%c`@KbGuzCcN{>c3@h^hVVH#7?i<=b;=?OTzo;!m^Fd3ODE zFB3-u3|}?H2tN-M?=6uqyXDll2D=?#+QON4b?UpStA0SIq}0vv4uj9>^*yUq&N<6o zQO4)h0Q20C!m>>|XqwAPE_&ON^ts`w1nduQKF#4i4(yZ+G*lJcPm~B56{^Gg@28LT zx9)>2kOfqNj?Q7#ubr2Kse^_71K+N^V_%qL@egsoBA!UI;K_ZBD6J1HflT01O_U_8 z959lqT(r?}??8-ATMJKol5pF;&USV)29*&YgC+0i&br`Z-M{5v-xJE)A@>yZt&gNz zV#Ik7;v`&6j~4#MxEEZYM3jdj#|;cQv7N=7SqcdC*)zbYDZ34tala%{ zz1njIZ$QHcUIEc!o4bx)y*-};{E}Kyg7ou2%)1S z?B1@g+Lr{j`$+Yip`P3q3+YKbHx;!|AUQHFVo*$VqpRJTt6MDNvA9)>U|~{suM0Zu zH?$binP+DsJp8ow_;CLg`8Q*drnAAdmNN6^O^J8&9u0W6K<|O$CD{k30(knIo#;HR z(!O=0 z{CVR|`pTYDA1+vm*YBhJ6jSWDUaFN|w58vuMuHaP^n%&=;x zPS*zH=uc+3^2q|mIolWo=(LA&NqjI-{B|cA?Jc0u!k6L%_Laqt!AUM7C& zf8pHZU2kJ88BVZ!aKdELW*7f8w+^UCO<9sbL72y59fV|4ie9|FwezSx;O za3d};oJjHb;V!v~x`#K;_Ay?HQ%?D4f&3rb+;acAg}mNkHlo-dQirr=_bs_>Ww|J< zOe!jI@s~lvYq{TeZi^`tdPc5p&FEm60DPt+dyXMa`LMez!fR%x*`-{V0 zHM0F#f2PI5TgF=&ju&+HS=>BjVj$}FZvAKUk03xu@Wj>qj$_G6KO`s@S;DZIoYp1I zMSnw*b(ank7Imcv?ojCj{D;JO*aw|vof-bKp-Z?hdL3AL?(8&TKW$RFSNX5m$af&< zVL#mM5avrd1wcsS!nC_A*DdR!NiEX>hUjiZ!xC!qI1Rv{TR4}bKDNw1Z^t2y(9`qB ztUxK>q<Z0}LM)ykAL=d_|RRnVO zM!RJrxNaHiEl4CNs(@B6rppaf8wGDh71M`Vb-NOr9tPu139$l--t^fOe%_6v^c1yF ztTk}P$z`4k_>Ulbyh3dB~i%y&oSDWTR$hr(4(!SvFpA>KUp zCHu$DhT9k&Sg&WiT!8&fOL|`uv0Ubh+_#9R=Kx*zIJ}DykPLEJOz*6$9Q%4m*;OY8 zzdzssLY)3Rd4Y}5s;6}0g8e>8_PMM~8>baHy~l#ApOX;E%r;2!%7jn13^7_b8xq5- zEXFVV>kKR31)Y|)qiD1$Yil@n%m50#L7d-8 z*cZ5KHiNABo9r<*X<$yPh(WSE;twK5ACF1Va0o9sS}3MUf_T=rluA8DI6*XH-wwTW zieK|)$Srpj>!hDSx90U*Pk6G0-rTq`e^b64M`D;2f9~K5fF*vsbKc{-Jms_APiNS_ ztFSLO@d76t6((lM0)r(1e&XjOVSPq1UQ?R3Bp#S$@X*!3`L}Zh!HbESuJO{&hRb)T zz`9;*kNyx!bmaz0!=4$7m~s0ZU0~4?4wS2L<$WznZ;kKRrFxB5zXa(+rK4$%F{F#I zt~+3_q_Lh~ahI;&T`F*I9}J#ooNPXu?4IGXXW? zZql2xSfFcdtU#&8K9 z9a<7wSJ1+{4R>YSpx-L7&xJOyo)wO&Mtk#iulf^gkWx5Mb(Z3#1QxdFFwW|}*}Ab# zs6j$Iw1<~<@k=AB`0nc`*4}E#LiGM>sy660Dy~)W?~L~Xe4UjDx)FO!r7j}}yl6&c z*b?Zwnl;a@Q9swcjeg@K-G7LrzBz_}$$-uFh35FF4r7E8qO<}de}w`{e5Tb#&SKXs z7r4A@cZS!6x|D}jll|F>$;t~wfeQt0c8FOcgTZ|LY9L82TRr_6J*sFCzo*ny=OA;; zRcUYUaP9@a1|JwbrOoZkH>$V_N5Kl#oqq7`|n?+162Pj|Gu!;5wF41 zUXJflr4QU&)^t0k>ezbQMA5^{^SmLBnt1jG`4n5%3Z2>7{cKBGJ6XdLc4_D!Ap(P$ z)K715|H}WkYPwby27|`>9D1Fw8zg|8vVsYd$6Q#k(vj|Md)07X`LrJbLpT3w+-z$( z>TSDkIBKUOrtA&kHcTP*l>p*w$tQPmR4d!R@X?_CQ-@Ge=Zg+_in$Q}CaNK_<=KLb zh^~kHVUkFq;JybVY&C_y+cSQnu}nk?r`up27>aN+cEbK?6g};hE97L3yi7Rjfl=T* zb&RR&N5A960DT|(4#3tL6TI{@arw0wP>1?g*0By+Qwv&(HR&MbJ?jR#;E9y6+fHA) zW3k=}UtN}|{;cm1X=a9P%nf_De{8eY=FTq*Z`l5hChgbC?^fQ2rH+)k?iZXK-FnMV zK=w9s(qaWDJMNeN&M0Ke9cs2| zMq5nRwA@GGjh^PX<4u4Ab&8y)Glt5XUU@^gpW2^!geOv=1`rT6Dp9SIGr0LvfZNV> zM&j^_uCQmD&G-ri4thke#ZOPpg`)Xoir=J(vvm!h zLG9}kg@Ir2rSKUe=A8}1V9{E`+RKO)9z)-&=?JM`(xnvUe!X`un)dS`EFl_O zR71Q?WarwKT}b*Gfs^DkS6zk`yo_L4so7_~!tOLWm8(c)RkT9h?IZ&3dm(ZUuf|M! z{$T>|6D=~eEyYmrR3TekD@)lkhr9tG`5;BvdmQ*)>VxVd_4e~)V$ds-R=_@BADRIi z16I#N{v3e43dX&(T@3?mQZ(M3<~YxW6mq5u8k5t*(N4J-; zx;c`otT)Z>wbG!fgzS6M8BQLdHf8Z;LIZV*>~3zLg!5czTN(7uu37$ACpR2$B>A5_ zR5K$0VeR;xh~r7)Cx)&pPXRv+3#oCQjWIy2L#C;8yphwUz$`Z96{Dp&6Lr!)b5h2B zLIgr{g+wZIj^ZP=1ORP8Rl-TkW!w_Th+dPyM}7_2APHx4kb zZKSMngAPxb-3X5YhSqiPAnE$=Kn4uXeB<)>dU!iv2^ z^Ok07ePRy+J@{_FKPk-R^TQ=_rEy6(lhgxogZ5o`3^%H!(M?gDvy%n+#{za;?_Cl~1t>^vm8gS09%y#TB&@_P|p$ zmTMmaw>6F3*~El_Hy6sT?TSyo)FPutD;-YSOD~_jQ&yulN<0ZK%Djknw$p0SI?@#h zJR#Yfi#pv@P*t!DQuO}8xW`p*%+Sv2npjh7VwZz`@LP}Go=DZdSZOU$GUWILl zJ~{pjhkMEhoR;ygS`R}RqH&E8XpawS?59mrOJv+ut%&hw4&DQA$jBj#*HL{(VRdIF z`UBsFjgf>(eOd{;Yv$>Z9r^{eKF&2hW=*K+R8Fav%PP&QaQ6Qyy7qXc*FWBs;^-VX z>9Wd^%aX$?`3gff$`M_Z)G)Vk7q4O2V#k*xEi7DTOk(X- z+qG0xX-+kQ?ro1QA?)_`ld8e({_($5?T{rAVtgAv+2o=JyVG{jD<1sbhu91?3()_kMdNB8B=-JcTijQb&<1>*u01sTf9Wh z)6mQInPP-cyFoAQp5^nRb&9l_<)wpDd?n|=U;T8k(;WVA-|_t~&03L{P6z4?-<$t9 zn&@E|*&cLjDNh$AolbZd?&Rzr-&Wc*c4&D8&E%&ED#zwRV+)`)W9Drbt$aAS^1Xp= zE@KaJdwWNl%b=6S6T>YG zakJxF6kQb;-k$?%a#G#d(%S!~-Kf%pyt&9n8pLu&O&l=ry0;+*w7mxhwc%T()P${< zQ>TbwB;y}~s)~i3;}JO9?f8c_vDC9ueVh+-YvC7nq8H>s;;)C3EmU!+k#?j6w>zeS zCjE(ZKr`FiOKGlKPa!L} zQUb7c^rpNA6W2CRn1D(R2X4}@upB1?XbbefNsZAuZSDq4-O^Yf`m&zGL_m=Lz%9zr z^7P5P#TM?*Xn&(J($bs2YH@{Qz?Un@fks6ZC?2fP0J`d74%mfOyHsr(g@PNopw(Up zB}3g}+#Mw4=G)u?*&z*T$X zoR2mySsIsbwn>=nw7M(9#xVV72rHO`9ftf_G=nJ$@6J1wKgbiyiYdxs1Z1GY@nJ;F zxz_RH(JVp`4>gX9`vlx&M{TszC0=CI^{N&g)8DFp`eZ`@2l<^^NnCGf!#b*#XCyI* z7%9K4sBTt$rABa-zM;#J(r|^i>P(+}!Y%S_u#wuo?8lQ2lGQ1Rzm|1>o$}&sUjN$e z5$`k13rYHwO6~Ao2s(5MxnW=~mQ*}K@adc{EK6?#G^o&;t@*7&XJ~{BkF+ih)WZa5 z$29;=&0wZw)eVARu;M|wIY9fOAo$nvh3AYSO)RPoJ14few0bMSxp;t;OH8*=c14R$ z(B@SH6tiG3Vy3R^Skn-Cw-EoEk3I3dhPNBA-}4gI0@{m32)4m@R2PfJAitl?Pr?a) zVxuHnt+-7EjYQ#8DnWHU;)_yUX`x4UUh`RYXJOwi(l|cMf;Wpfh|I}~tl&Q;1iXT) zt*o+|bFu_^BD=0(Fvk7T<;a__q<`oI_d-g;-%{k1+smFGpUOP<$|DZ5}RVc`ra=)2TK z(6%ljcmi$sJytMhz%DS$5xa&^eLBO&?aOy<6WWy!=(xV%B#Fe~nOdP@&W^1u6CWrY zF%C7)U&Hvfnf4XbMr#0dag!-@bsW*}v>B6mqD$C)AI_*Y`gmBQW{Oks1x!Zcm_jX^ zTX66W-Mh(P*kZ0ruPo?sV8NpzsnRkO6P~bj;~QD=J?r6CD28*4YE>bqB4PM0T(6%v z9HEatD90{zDsl?W)h@oH>Ii$NFY~@Yk_9EFHkvTtW+%fmxWLd_Z4EtCsgI)vZjk>{ zSv+Fw{bx-)`m#@(x>du;e5SRB7H9js-y|`t0hsO51Y7g>pd@a$ZRT+uC^!dHa2-8H zR1y&tC*sMw80R@J+14KN9|+Y`X1XD;5_$Al0In4WDvaeGZ!rQza_?dGtim7sI%C%HM-h`z7})MLyK0EiRrjrRba6c|t6q;4X}L{% z%~vx&ie$(Y5Q=c&I_9ozqv)P=!E~M5snzFRv?y~-ECnk5^ z%_SOildV|3;(=|ir&L8X{speCvD6x8%J%t<&;e}U_ThN7^0ca8nBz1j2@|841d<)x zcY+vDe%!KK^jwgOf9SKUgD!l7lvvoAF>4Xy(c{?>7mS*@^@$|@qP@-TPgh?xJ*0k0 zt5odgyt{oMiAgTS%-pfJZqKER)c&(-zld3Uq%Y4sF#8R|oOLGk6n+9)vnO$3si;z& zi61wdjuK@@Ak}8YKv{E9&?GeDp1XoZ`3&2-EQ=KfE4+DWvWeE?Ptlc267So7>*zmp zk(!FCX5kwbWR^ExJ;Pw1mS-@0QHyp0nTYGOM(JWh9@kzdi?!8OhHc+k% zP^S}9YWVGMw}4XHxN-gbJ=k+s5A8zLY7OvOBAHcYsG1KT!y&&e#83Y2K6$E z)m!A=&b~8yP0?jHYNS4m4s9SXzCzQXz|*cAeaAWSMM0KmiXY}#|4dX~GSW;f=5MxU z;s~w4u4Dwi4$Ie2Ed2RNZS_Z(kf+pPZ=P>I+7x0?eg%5YZj6Ax{WSJ$ov3I^9Y z|4lMXIdJd>&9`^@IM?B~T;2=8&BE{Zi-LGy`#9ru!_C-ry@HwbvSXC>m=i#DI@$kI z2!Y|F$+~*XUoSb9Jex|n2YnoRPwoO^aP}>$t_WfSAM3z!K)Zl^33(^gv#ybSp7Zt6UGN_q)#hT=sL=&*$PEC9vJO$rgD-DtGAM9Xr)vQ} ztQ%#7;}6L)CMgJt#lf)lG>`ixw1thsJ@uEEPynDC>QSV$9R9rrL##Tf9rz z7pTsM?l;9tpS&UIp$yz*0>Q^v>@W za|YCm&U7y&3%7LnZ>HZNbm5DnsPbd696ak)7NC;1Nj^_tMeYCkeL%iTzafqx)SY@x zoKLXtUZ-}fyOX}-j}2K-5kG3Hlb^iX4U7UdGbcJrLW}{wgp)Rax47W0PbPJR!7^5 zFRbbiD)xEHU!SSGl1ywu9<)VJB|TbqW=696l4{U&UVhU;LYWsyI;g8;(|0;@fBKB$ z_&N2YN%G zGHagKY!qhKP!MJ8+Rf60Q3ukHyp1ZI<0P=#V#SrjixM4Q%NuG2On1r%y-V0h71>_0 zM*(93ukn-Js0r}hb(r06+8Q}MBW(Pd924^R@as9u;!;}~=@-PW`Fq75*Dx%4@uZf>0NR+V_O1 zs&39;a{QaW583>p|eDdCeRzq>Bij0II@dt6qLLR5O3-(;82fU2;IdYjn# in%G1=S8jFe*V;qo#);D!>l{|7hpV&4u@^`Dlm7=k<^~J^ diff --git a/doc/neural_network/README.md b/doc/neural_network/README.md deleted file mode 100644 index 0604db4c..00000000 --- a/doc/neural_network/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Neural Network - -Components for building, training, and evaluating feed-forward neural networks entirely on-device with static memory allocation. - -## Components - -| Component | Description | -|----------------------------------------------------|-----------------------------------------------------------------------------------------| -| [Neural Network Overview](NeuralNetwork.md) | Architecture, training loop, and how the components fit together | -| [Layers](layer/Layer.md) | Dense (fully connected) layer with forward and backward pass | -| [Activation Functions](activation/Activation.md) | Non-linear element-wise transforms: ReLU, LeakyReLU, Sigmoid, Tanh, Softmax | -| [Loss Functions](losses/Loss.md) | Objective functions: MSE, MAE, Binary Cross-Entropy, Categorical Cross-Entropy | -| [Model](model/Model.md) | Variadic-template model composing layers, optimizer, and loss into a trainable pipeline | - -> **See also:** [Optimization](../optimization/README.md) for optimizers (Gradient Descent) and [Regularization](../regularization/README.md) for weight penalties (L1, L2) — these are general-purpose domains used by neural networks and other algorithms. diff --git a/doc/neural_network/activation/Activation.md b/doc/neural_network/activation/Activation.md deleted file mode 100644 index 6bd43ae8..00000000 --- a/doc/neural_network/activation/Activation.md +++ /dev/null @@ -1,149 +0,0 @@ -# Activation Functions - -## Overview & Motivation - -An activation function $f$ is a non-linear, element-wise transformation applied after the affine map in each neural network layer: - -$$a = f(z) = f(W x + b)$$ - -Without activation functions, stacking layers would collapse into a single affine transformation — the network could only represent linear mappings regardless of depth. Activation functions are what give neural networks their expressive power. - -The choice of activation function controls **gradient flow** during back-propagation, **output range**, and **computational cost** — all critical on resource-constrained embedded targets. - -## Mathematical Theory - -### Forward and Backward - -Every activation function exposes two operations: - -| Operation | Definition | Purpose | -|--------------|------------|---------------------------------------------------| -| **Forward** | $a = f(z)$ | Transform the pre-activation | -| **Backward** | $f'(z)$ | Provide the local derivative for back-propagation | - -The chain rule connects them during training: - -$$\frac{\partial \mathcal{L}}{\partial z} = \frac{\partial \mathcal{L}}{\partial a} \cdot f'(z)$$ - -### Catalogue - -#### ReLU (Rectified Linear Unit) - -$$f(z) = \max(0, z), \qquad f'(z) = \begin{cases} 1 & z > 0 \\ 0 & z \le 0 \end{cases}$$ - -- Computationally cheapest (single comparison). -- Sparse activations accelerate training. -- **Risk:** neurons with $z \le 0$ for all inputs are permanently dead. - -#### Leaky ReLU - -$$f(z) = \begin{cases} z & z > 0 \\ \alpha z & z \le 0 \end{cases}, \qquad f'(z) = \begin{cases} 1 & z > 0 \\ \alpha & z \le 0 \end{cases}$$ - -where $\alpha$ is a small positive constant (typically $0.01$). Prevents dead neurons by allowing a small gradient for $z < 0$. - -#### Sigmoid - -$$f(z) = \frac{1}{1 + e^{-z}}, \qquad f'(z) = f(z)(1 - f(z))$$ - -- Output range $(0, 1)$ — natural for probabilities. -- **Risk:** saturates for $|z| \gg 0$, causing vanishing gradients. - -#### Tanh (Hyperbolic Tangent) - -$$f(z) = \tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}, \qquad f'(z) = 1 - f(z)^2$$ - -- Output range $(-1, 1)$ — zero-centered, unlike Sigmoid. -- Same saturation problem as Sigmoid at extremes. - -#### Softmax - -For a vector $\mathbf{z} \in \mathbb{R}^k$: - -$$f(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{k} e^{z_j}}$$ - -- Outputs form a probability distribution ($\sum f(z_i) = 1$). -- Used exclusively at the output layer for multi-class classification. -- The Jacobian is a full $k \times k$ matrix — more expensive than element-wise activations. - -## Complexity Analysis - -| Activation | Forward (per element) | Backward (per element) | Notes | -|------------|--------------------------------|-------------------------------|------------------------------| -| ReLU | $O(1)$ — comparison | $O(1)$ — comparison | Fastest | -| Leaky ReLU | $O(1)$ — comparison + multiply | $O(1)$ | Negligible overhead vs ReLU | -| Sigmoid | $O(1)$ — exp + divide | $O(1)$ — reuse forward result | Requires `exp()` | -| Tanh | $O(1)$ — exp (twice) | $O(1)$ — reuse forward result | Requires `exp()` | -| Softmax | $O(k)$ — vector exp + sum | $O(k^2)$ — full Jacobian | Significantly more expensive | - -## Step-by-Step Walkthrough - -**Scenario:** Forward and backward pass through a 3-neuron hidden layer with ReLU, given pre-activations $z = [-0.5, \; 1.2, \; 0.0]$. - -**Forward:** - -| Neuron | $z$ | $\text{ReLU}(z)$ | -|--------|--------|------------------| -| 1 | $-0.5$ | $0.0$ | -| 2 | $1.2$ | $1.2$ | -| 3 | $0.0$ | $0.0$ | - -**Backward** with incoming gradient $\frac{\partial \mathcal{L}}{\partial a} = [0.3, \; -0.7, \; 0.1]$: - -| Neuron | $f'(z)$ | $\frac{\partial \mathcal{L}}{\partial z}$ | -|--------|-------------------|-------------------------------------------| -| 1 | $0$ (dead) | $0.3 \times 0 = 0$ | -| 2 | $1$ | $-0.7 \times 1 = -0.7$ | -| 3 | $0$ (at boundary) | $0.1 \times 0 = 0$ | - -Neuron 1 is *dead* — its gradient is zero and its weights will not update. If this persists across all training samples, the neuron is permanently inactive. - -## Pitfalls & Edge Cases - -- **Vanishing gradients with Sigmoid/Tanh.** For deep networks, gradients shrink exponentially through saturated activations. Use ReLU or Leaky ReLU in hidden layers. -- **Dead ReLU neurons.** If a neuron's bias drifts negative enough that no input ever produces $z > 0$, it stops learning. Leaky ReLU or careful initialization (He init) prevents this. -- **Softmax numerical instability.** Computing $e^{z_i}$ directly overflows for large $z_i$. Subtract $\max(\mathbf{z})$ before exponentiation: $f(z_i) = e^{z_i - z_{\max}} / \sum e^{z_j - z_{\max}}$. -- **Fixed-point range.** Sigmoid outputs $(0, 1)$ and Tanh outputs $(-1, 1)$ both fit in Q15/Q31, but the exponential intermediate values do not. Compute in floating-point and convert. -- **Non-differentiable points.** ReLU is technically non-differentiable at $z = 0$. In practice, assigning $f'(0) = 0$ works fine. - -## Variants & Generalizations - -| Variant | Key Difference | -|------------------------------|---------------------------------------------------------| -| **PReLU (Parametric ReLU)** | $\alpha$ is a learnable parameter per channel | -| **ELU (Exponential LU)** | $\alpha(e^z - 1)$ for $z < 0$; smooth and zero-centered | -| **GELU (Gaussian Error LU)** | $z \cdot \Phi(z)$; used in Transformers | -| **Swish / SiLU** | $z \cdot \sigma(z)$; smooth, non-monotonic | -| **Hard Sigmoid / Hard Tanh** | Piece-wise linear approximations; no transcendentals | - -## Applications - -- **Hidden layers** — ReLU (or Leaky ReLU) is the default choice for feed-forward and convolutional hidden layers. -- **Binary classification output** — Sigmoid maps the output to a probability. -- **Multi-class classification output** — Softmax produces a probability distribution. -- **Recurrent networks** — Tanh is traditionally used in LSTM/GRU gates. -- **Embedded inference** — Hard Sigmoid/Tanh avoid expensive `exp()` calls on MCUs without FPU. - -## Connections to Other Algorithms - -```mermaid -graph TD - Act["Activation Functions"] - Layer["Dense Layer"] - NN["Neural Network"] - Loss["Loss Functions"] - Act --> Layer - Layer --> NN - NN --> Loss -``` - -| Component | Relationship | -|---------------------------------------|------------------------------------------------------------------------------------------| -| [Dense Layer](../layer/Layer.md) | Applies the activation function after the affine transformation | -| [Neural Network](../NeuralNetwork.md) | Activations enable the non-linear function approximation that makes deep networks useful | -| [Loss Functions](../losses/Loss.md) | The output activation must match the loss: Sigmoid + BCE, Softmax + CCE | - -## References & Further Reading - -- Nair, V. and Hinton, G.E., "Rectified linear units improve restricted Boltzmann machines", *ICML*, 2010. -- Glorot, X., Bordes, A., and Bengio, Y., "Deep sparse rectifier neural networks", *AISTATS*, 2011. -- Clevert, D.-A., Unterthiner, T., and Hochreiter, S., "Fast and accurate deep network learning by exponential linear units (ELUs)", *ICLR*, 2016. diff --git a/doc/neural_network/activation/ActivationFunctions.svg b/doc/neural_network/activation/ActivationFunctions.svg deleted file mode 100644 index 0aa1c7d8..00000000 --- a/doc/neural_network/activation/ActivationFunctions.svg +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - Activation Functions - - - - - - x - - - - f(x) - - - - -2 - - - -1 - - - 0 - - - 1 - - - 2 - - - - 1 - - - -1 - - - - - - - ReLU - - - - LeakyReLU - - - - Sigmoid - - - - Tanh - - - - - - - - - z - - - - f(z) - - - - a - - - - - - Next Layer - - - - - - - - - - - - - - - - - - - - - - Properties - - - Simple - - - No dead neurons - - - Bounded [0,1] - - - Zero-centered - - \ No newline at end of file diff --git a/doc/neural_network/layer/Layer.md b/doc/neural_network/layer/Layer.md deleted file mode 100644 index 6ffe46ec..00000000 --- a/doc/neural_network/layer/Layer.md +++ /dev/null @@ -1,127 +0,0 @@ -# Dense Layer - -## Overview & Motivation - -A **dense** (fully-connected) layer is the most fundamental building block of a neural network. It maps an input vector $a_{\text{in}} \in \mathbb{R}^n$ to an output vector $a_{\text{out}} \in \mathbb{R}^m$ through a learnable affine transformation followed by a non-linear activation: - -$$a_{\text{out}} = f(W \, a_{\text{in}} + b)$$ - -Every input neuron is connected to every output neuron — hence "fully connected." The layer's **parameters** are the weight matrix $W$ and bias vector $b$; training adjusts these to minimize the loss. - -In this library, input size, output size, and parameter count are all **compile-time constants**, enabling stack allocation and dimension checking with zero runtime overhead. - -## Mathematical Theory - -### Forward Pass - -$$z = W \, a_{\text{in}} + b, \qquad a_{\text{out}} = f(z)$$ - -where $W \in \mathbb{R}^{m \times n}$, $b \in \mathbb{R}^m$, and $f$ is the [activation function](../activation/Activation.md). - -### Backward Pass - -Given the gradient of the loss with respect to the output $\frac{\partial \mathcal{L}}{\partial a_{\text{out}}}$: - -1. **Pre-activation gradient:** -$$\delta = \frac{\partial \mathcal{L}}{\partial a_{\text{out}}} \odot f'(z)$$ - -2. **Weight gradient:** -$$\frac{\partial \mathcal{L}}{\partial W} = \delta \, a_{\text{in}}^T$$ - -3. **Bias gradient:** -$$\frac{\partial \mathcal{L}}{\partial b} = \delta$$ - -4. **Input gradient** (propagated to the previous layer): -$$\frac{\partial \mathcal{L}}{\partial a_{\text{in}}} = W^T \delta$$ - -### Parameter Count - -$$P = m \times n + m = m(n + 1)$$ - -For a layer with 128 inputs and 64 outputs: $P = 64 \times 129 = 8{,}256$ parameters. - -## Complexity Analysis - -| Operation | Time | Space | -|---------------------------------------------|----------------|-----------------------------------| -| Forward ($W a + b$) | $O(m \cdot n)$ | $O(m)$ output + $O(m)$ cached $z$ | -| Backward ($\delta$, $\nabla W$, $\nabla b$) | $O(m \cdot n)$ | $O(m \cdot n)$ weight gradient | -| Total parameters | — | $O(m \cdot n + m)$ | - -The matrix-vector product dominates both passes. For embedded networks (e.g. $n = 32, m = 16$), a single forward pass takes ~512 multiply-accumulate operations. - -## Step-by-Step Walkthrough - -**Layer:** 3 inputs → 2 outputs, ReLU activation. - -$$W = \begin{bmatrix} 0.5 & -0.3 & 0.8 \\ 0.1 & 0.7 & -0.2 \end{bmatrix}, \quad b = \begin{bmatrix} 0.1 \\ -0.1 \end{bmatrix}, \quad a_{\text{in}} = \begin{bmatrix} 1.0 \\ 0.5 \\ -1.0 \end{bmatrix}$$ - -**Forward:** - -| Step | Computation | Result | -|-----------------------------------|------------------------------------------------------|---------------------| -| $z = W a_{\text{in}} + b$ | $[0.5 - 0.15 - 0.8 + 0.1,\; 0.1 + 0.35 + 0.2 - 0.1]$ | $[-0.35,\; 0.55]^T$ | -| $a_{\text{out}} = \text{ReLU}(z)$ | $[\max(0, -0.35),\; \max(0, 0.55)]$ | $[0.0,\; 0.55]^T$ | - -**Backward** with $\frac{\partial \mathcal{L}}{\partial a_{\text{out}}} = [0.2,\; -0.4]^T$: - -| Step | Computation | Result | -|--------------------------------------------------------|-----------------------------------------------------|------------------------------------------------------------| -| $\delta = \nabla a_{\text{out}} \odot \text{ReLU}'(z)$ | $[0.2 \cdot 0,\; -0.4 \cdot 1]$ | $[0,\; -0.4]^T$ | -| $\nabla W = \delta \, a_{\text{in}}^T$ | row 1: all zeros; row 2: $-0.4 \times [1, 0.5, -1]$ | $\begin{bmatrix}0 & 0 & 0\\-0.4 & -0.2 & 0.4\end{bmatrix}$ | -| $\nabla b = \delta$ | — | $[0,\; -0.4]^T$ | -| $\nabla a_{\text{in}} = W^T \delta$ | $W^T [0, -0.4]^T$ | $[-0.04,\; -0.28,\; 0.08]^T$ | - -## Pitfalls & Edge Cases - -- **Dimension mismatch.** In a multi-layer network, the output size of layer $\ell$ must equal the input size of layer $\ell+1$. This library enforces this at compile time. -- **Weight initialization.** Zero-initialized weights cause all neurons to compute the same thing (symmetry problem). Use He initialization for ReLU: $W_{ij} \sim \mathcal{N}(0, \sqrt{2/n})$. -- **Gradient accumulation.** When processing mini-batches, accumulate $\nabla W$ across samples before updating — do not update per-sample. -- **Fixed-point overflow in $W a$.** The dot product of $n$ terms can exceed Q15/Q31 range. Use a wider accumulator (Q31 for Q15 data) or scale weights. -- **Large layers exhaust stack.** A 256×256 weight matrix of `float` consumes 256 KB. Size layers to fit the target's stack budget. - -## Variants & Generalizations - -| Variant | Key Difference | -|-------------------------------|-----------------------------------------------------------------------------------------------------------| -| **Convolutional layer** | Weight sharing across spatial positions; $O(k^2 \cdot c)$ parameters per filter instead of $O(n \cdot m)$ | -| **Recurrent layer** | Shares weights across time steps; adds a hidden state feedback connection | -| **Batch normalization layer** | Normalizes activations to zero mean and unit variance; accelerates training | -| **Dropout layer** | Randomly zeros activations during training; regularization effect | -| **Sparse layer** | Only a subset of connections exist; reduces parameter count and computation | - -## Applications - -- **Hidden layers** — One or more dense layers form the core of feed-forward networks for regression and classification. -- **Output layer** — A final dense layer maps to the target dimensionality (1 for regression, $k$ for $k$-class classification). -- **Embedding projection** — Dense layers project high-dimensional sparse inputs to low-dimensional dense representations. -- **Controller networks** — In neural network-based control, small dense layers map state vectors to actuator commands. - -## Connections to Other Algorithms - -```mermaid -graph TD - Layer["Dense Layer"] - Act["Activation Functions"] - Model["Model"] - Opt["Optimizer"] - LR["Linear Regression"] - - Act --> Layer - Layer --> Model - Model --> Opt - Layer -.->|"no activation, MSE loss"| LR -``` - -| Component | Relationship | -|-----------------------------------------------------------|----------------------------------------------------------------------------------------| -| [Activation Functions](../activation/Activation.md) | Applied element-wise after the affine transformation | -| [Model](../model/Model.md) | Chains multiple dense layers into a network | -| [Optimizer](../../optimization/Optimizer.md) | Updates $W$ and $b$ using the computed gradients | -| [Linear Regression](../../estimators/LinearRegression.md) | A dense layer with identity activation and MSE loss is equivalent to linear regression | - -## References & Further Reading - -- Goodfellow, I., Bengio, Y., and Courville, A., *Deep Learning*, MIT Press, 2016 — Chapter 6. -- He, K. et al., "Delving deep into rectifiers", *ICCV*, 2015 — He weight initialization. -- Glorot, X. and Bengio, Y., "Understanding the difficulty of training deep feedforward neural networks", *AISTATS*, 2010 — Xavier initialization. diff --git a/doc/neural_network/layer/Layers.svg b/doc/neural_network/layer/Layers.svg deleted file mode 100644 index ffceb246..00000000 --- a/doc/neural_network/layer/Layers.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - Neural Network Layers - - - - - - - Dense Layer Architecture - - - - Input - - - - - x₁...xₙ - - - - - - - - - - - - - - - - - - - - - - - - - - Weights - W₁₁...Wᵢⱼ - - - - - Pre-activation - - - - - z = Wx + b - - - - - - - - - Biases - - - - - Activation - - f(z) - (ReLU, Sigmoid, etc.) - - - - - - - - - - - Output - - - - - a = f(z) - - - - - - - - - - - Next Layer - - - - - - - - - - - - - - - Forward Pass - - - - - - - - Backpropagation Through Layer - - - - - - ∂L/∂a - - - - ∂L/∂z = ∂L/∂a ⊙ f'(z) - - - - - - - - - - - - - - - - - - - - ∂L/∂W = ∂L/∂z · x^T - - - - ∂L/∂b = ∂L/∂z - - - - ∂L/∂x = W^T · ∂L/∂z - - - - - For Optimizer - - - - To Previous Layer - - - - - - Backward Pass - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/neural_network/losses/Loss.md b/doc/neural_network/losses/Loss.md deleted file mode 100644 index 8b938641..00000000 --- a/doc/neural_network/losses/Loss.md +++ /dev/null @@ -1,139 +0,0 @@ -# Loss Functions - -## Overview & Motivation - -A loss function $\mathcal{L}(\hat{y}, y)$ quantifies how far a model's prediction $\hat{y}$ is from the true target $y$. Training a neural network means finding parameters $\theta$ that minimize the expected loss over the training data: - -$$\theta^* = \arg\min_\theta \; \mathbb{E}[\mathcal{L}(f_\theta(x), y)]$$ - -The loss function defines the **entire learning objective** — different losses lead to different optimal models even on the same data. It must also provide a **gradient** $\nabla_{\hat{y}} \mathcal{L}$ for back-propagation. - -## Mathematical Theory - -### Mean Squared Error (MSE) - -$$\mathcal{L}_{\text{MSE}} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}_i - y_i)^2$$ - -$$\frac{\partial \mathcal{L}}{\partial \hat{y}_i} = \frac{2}{m}(\hat{y}_i - y_i)$$ - -- Penalizes large errors quadratically → sensitive to outliers. -- Natural choice for **regression** tasks. -- Optimal when the error distribution is Gaussian. - -### Mean Absolute Error (MAE) - -$$\mathcal{L}_{\text{MAE}} = \frac{1}{m} \sum_{i=1}^{m} |\hat{y}_i - y_i|$$ - -$$\frac{\partial \mathcal{L}}{\partial \hat{y}_i} = \frac{1}{m} \mathrm{sign}(\hat{y}_i - y_i)$$ - -- Linear penalty → robust to outliers. -- Non-differentiable at $\hat{y}_i = y_i$ (use sub-gradient in practice). - -### Binary Cross-Entropy (BCE) - -$$\mathcal{L}_{\text{BCE}} = -\frac{1}{m}\sum_{i=1}^{m} \left[ y_i \log \hat{y}_i + (1 - y_i) \log(1 - \hat{y}_i) \right]$$ - -$$\frac{\partial \mathcal{L}}{\partial \hat{y}_i} = -\frac{1}{m}\left(\frac{y_i}{\hat{y}_i} - \frac{1 - y_i}{1 - \hat{y}_i}\right)$$ - -- Assumes $\hat{y}_i \in (0, 1)$ — pair with **Sigmoid** output activation. -- Maximum likelihood estimator for Bernoulli-distributed targets. - -### Categorical Cross-Entropy (CCE) - -$$\mathcal{L}_{\text{CCE}} = -\sum_{i=1}^{k} y_i \log \hat{y}_i$$ - -$$\frac{\partial \mathcal{L}}{\partial \hat{y}_i} = -\frac{y_i}{\hat{y}_i}$$ - -- Assumes $\hat{y}$ is a probability distribution ($\sum \hat{y}_i = 1$) — pair with **Softmax** output activation. -- Standard loss for **multi-class classification**. - -## Complexity Analysis - -| Loss | Forward | Backward | Notes | -|------|---------|----------|------------------------------| -| MSE | $O(m)$ | $O(m)$ | Cheapest; no transcendentals | -| MAE | $O(m)$ | $O(m)$ | Requires `sign()` | -| BCE | $O(m)$ | $O(m)$ | Requires `log()` | -| CCE | $O(k)$ | $O(k)$ | Requires `log()` | - -All losses are $O(m)$ where $m$ is the output dimension. The computational cost is negligible compared to the dense layer matrix products. - -## Step-by-Step Walkthrough - -**Scenario:** 3-class classification. Target $y = [0, 1, 0]$ (class 2). Softmax output $\hat{y} = [0.1, 0.7, 0.2]$. - -**CCE Forward:** - -$$\mathcal{L} = -(0 \cdot \log 0.1 + 1 \cdot \log 0.7 + 0 \cdot \log 0.2) = -\log(0.7) \approx 0.357$$ - -**CCE Backward:** - -| $i$ | $y_i$ | $\hat{y}_i$ | $\partial \mathcal{L}/\partial \hat{y}_i = -y_i / \hat{y}_i$ | -|-----|-------|-------------|--------------------------------------------------------------| -| 1 | 0 | 0.1 | $0$ | -| 2 | 1 | 0.7 | $-1.429$ | -| 3 | 0 | 0.2 | $0$ | - -The gradient is non-zero only for the true class, and its magnitude $1/\hat{y}_2$ grows as the prediction *worsens* — providing a strong corrective signal. - -**For comparison — MSE on the same example:** - -$$\mathcal{L}_{\text{MSE}} = \frac{1}{3}[(0.1)^2 + (0.7-1)^2 + (0.2)^2] = \frac{1}{3}[0.01 + 0.09 + 0.04] = 0.047$$ - -MSE gives a much weaker signal and does not account for the probabilistic nature of the output. - -## Pitfalls & Edge Cases - -- **$\log(0)$ is $-\infty$.** Clamp predictions to $[\varepsilon, 1 - \varepsilon]$ before computing BCE or CCE. A typical $\varepsilon = 10^{-7}$. -- **Mismatched activation and loss.** Sigmoid + CCE or Softmax + BCE produce incorrect gradients. Always pair: Sigmoid ↔ BCE, Softmax ↔ CCE. -- **MSE for classification.** MSE can train a classifier but converges slower than cross-entropy because its gradient does not account for the log-likelihood structure. -- **Label encoding.** CCE expects one-hot encoded targets. Integer labels must be converted first. -- **Fixed-point log.** The `log()` function needed for cross-entropy is expensive and ill-conditioned near zero in fixed-point. Evaluate in floating-point. - -## Variants & Generalizations - -| Variant | Key Difference | -|----------------------|----------------------------------------------------------------------------| -| **Huber loss** | Quadratic for small errors, linear for large; robust regression | -| **Focal loss** | Down-weights well-classified examples; addresses class imbalance | -| **KL divergence** | Measures distance between two distributions; used in variational inference | -| **Hinge loss** | Margin-based; used in SVMs and some neural classifiers | -| **Contrastive loss** | Learns similarity metrics; used in Siamese networks | - -## Applications - -- **Regression** — MSE for Gaussian noise, MAE for Laplacian noise or when outlier robustness is needed. -- **Binary classification** — BCE for yes/no decisions (fault detection, anomaly flagging). -- **Multi-class classification** — CCE for mutually exclusive categories (gesture recognition, signal type identification). -- **Probabilistic output** — Cross-entropy losses calibrate prediction confidence, not just accuracy. - -## Connections to Other Algorithms - -```mermaid -graph TD - Loss["Loss Functions"] - Act["Activation Functions"] - Opt["Optimizer"] - Reg["Regularization"] - Model["Model"] - LR["Linear Regression"] - - Act -->|"output activation must match loss"| Loss - Loss --> Opt - Reg -->|"added to loss"| Loss - Loss --> Model - Loss -.->|"MSE + normal equation"| LR -``` - -| Component | Relationship | -|-----------------------------------------------------------|------------------------------------------------------------------------------------------------------| -| [Activation Functions](../activation/Activation.md) | Output activation must match: Sigmoid ↔ BCE, Softmax ↔ CCE, identity ↔ MSE | -| [Optimizer](../../optimization/Optimizer.md) | Uses $\nabla \mathcal{L}$ to update parameters | -| [Regularization](../../regularization/Regularization.md) | Adds a penalty term to the loss: $\mathcal{L}_{\text{total}} = \mathcal{L} + \lambda \Omega(\theta)$ | -| [Linear Regression](../../estimators/LinearRegression.md) | Solved analytically when the loss is MSE and the model is linear | - -## References & Further Reading - -- Goodfellow, I., Bengio, Y., and Courville, A., *Deep Learning*, MIT Press, 2016 — Chapter 6.2 (cost functions). -- Bishop, C.M., *Pattern Recognition and Machine Learning*, Springer, 2006 — Chapter 4.3 (cross-entropy). -- Lin, T.-Y. et al., "Focal loss for dense object detection", *ICCV*, 2017. diff --git a/doc/neural_network/losses/LossFunctions.svg b/doc/neural_network/losses/LossFunctions.svg deleted file mode 100644 index 128c1dfe..00000000 --- a/doc/neural_network/losses/LossFunctions.svg +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - Loss Functions - - - - - - Prediction - - - - Loss - - - - Target - - - - - - - MSE: (ŷ-y)² - - - - MAE: |ŷ-y| - - - - BCE: -y·log(ŷ)-(1-y)·log(1-ŷ) - - - - CCE: -Σy·log(ŷ) - - - - - - - - - - - - - Input - - - - - - - Hidden - - - - - - Output ŷ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Loss L(ŷ,y) - - - - Target y - - - - L - - - - Gradient ∇L - - - - - - - - - - - - Backpropagation - - - - - - - - - - \ No newline at end of file diff --git a/doc/neural_network/model/Model.md b/doc/neural_network/model/Model.md deleted file mode 100644 index f7602cb8..00000000 --- a/doc/neural_network/model/Model.md +++ /dev/null @@ -1,154 +0,0 @@ -# Model (Neural Network Composition) - -## Overview & Motivation - -A **Model** composes a sequence of [dense layers](../layer/Layer.md) into a single trainable function $f: \mathbb{R}^n \to \mathbb{R}^m$. It is the orchestrator that: - -1. Chains layers so the output of each feeds into the next (**forward pass**). -2. Propagates gradients backward through the chain (**backward pass**). -3. Flattens all layer parameters into a single vector for the [optimizer](../../optimization/Optimizer.md). -4. Verifies dimensional compatibility **at compile time** using variadic templates. - -In this library, the Model is fully statically typed — layer dimensions, parameter counts, and memory footprints are all known at compile time, enabling zero-overhead abstraction on embedded targets. - -## Mathematical Theory - -### Composition - -For $L$ layers with transformations $f_1, f_2, \ldots, f_L$: - -$$\hat{y} = (f_L \circ f_{L-1} \circ \cdots \circ f_1)(x) = f_L(f_{L-1}(\ldots f_1(x) \ldots))$$ - -Each $f_\ell$ is a dense layer: $f_\ell(a) = \sigma_\ell(W_\ell a + b_\ell)$. - -### Parameter Vector - -All weights and biases are concatenated into a single vector: - -$$\theta = [\text{vec}(W_1), b_1, \text{vec}(W_2), b_2, \ldots, \text{vec}(W_L), b_L] \in \mathbb{R}^P$$ - -where $P = \sum_{\ell=1}^L m_\ell(n_\ell + 1)$. - -### Forward Pass (Chained Evaluation) - -```mermaid -graph LR - X["x ∈ ℝⁿ"] --> L1["Layer 1"] --> L2["Layer 2"] --> Ldots["⋯"] --> LL["Layer L"] --> Y["ŷ ∈ ℝᵐ"] -``` - -### Backward Pass (Reverse Chain Rule) - -$$\frac{\partial \mathcal{L}}{\partial \theta_\ell} = \frac{\partial \mathcal{L}}{\partial a_L} \cdot \frac{\partial a_L}{\partial a_{L-1}} \cdots \frac{\partial a_{\ell+1}}{\partial a_\ell} \cdot \frac{\partial a_\ell}{\partial \theta_\ell}$$ - -Each layer stores its input $a_{\ell-1}$ during the forward pass so it can compute $\nabla W_\ell$ and $\nabla b_\ell$ during the backward pass. - -### Training Loop - -```mermaid -graph TD - FP["Forward pass: ŷ = Model(x)"] - LC["Loss: ℒ(ŷ, y)"] - BP["Backward pass: ∇θ ℒ"] - UP["Update: θ ← θ − η ∇θ ℒ"] - FP --> LC --> BP --> UP --> FP -``` - -## Complexity Analysis - -| Operation | Time | Space | -|-------------------|--------|-------------------------------------| -| Forward pass | $O(P)$ | $O(\sum n_\ell)$ cached activations | -| Backward pass | $O(P)$ | $O(P)$ gradients | -| `GetParameters()` | $O(P)$ | $O(P)$ flat vector | -| `SetParameters()` | $O(P)$ | — | - -All operations scale linearly with the total parameter count $P$. - -## Step-by-Step Walkthrough - -**Model:** 2 → 3 → 1 (two layers). - -**Compile-time verification chain:** - -| Check | Condition | Status | -|------------------------------------------|------------------|--------| -| Layer 1 input size = Model input size | $2 = 2$ | ✓ | -| Layer 1 output size = Layer 2 input size | $3 = 3$ | ✓ | -| Layer 2 output size = Model output size | $1 = 1$ | ✓ | -| All types derive from `Layer` | type trait check | ✓ | - -**Parameter layout** ($P = 3(2 + 1) + 1(3 + 1) = 9 + 4 = 13$): - -| Index | Parameter | -|-------|--------------------------| -| 0–5 | $W_1$ (3×2 = 6 elements) | -| 6–8 | $b_1$ (3 elements) | -| 9–11 | $W_2$ (1×3 = 3 elements) | -| 12 | $b_2$ (1 element) | - -**Forward pass** with $x = [1.0, 0.5]^T$: - -1. Layer 1: $a_1 = \text{ReLU}(W_1 x + b_1) = [0.0, 0.8, 0.3]^T$ -2. Layer 2: $\hat{y} = \sigma(W_2 a_1 + b_2) = [0.62]$ - -**Backward pass** with loss gradient $\delta_{\text{out}} = [0.12]$: - -1. Layer 2 backward → produces $\nabla W_2$, $\nabla b_2$, and $\delta_1 = W_2^T \delta_2 \odot \text{ReLU}'(z_1)$ -2. Layer 1 backward → produces $\nabla W_1$, $\nabla b_1$ - -**Optimizer** receives the full $\nabla \theta \in \mathbb{R}^{13}$ and updates $\theta$. - -## Pitfalls & Edge Cases - -- **Dimension mismatch caught at compile time.** If layer $\ell$ outputs $m$ but layer $\ell+1$ expects $n \ne m$, a `static_assert` fires during compilation. -- **Empty model.** The variadic template requires at least one layer. `static_assert(sizeof...(Layers) > 0)`. -- **Parameter ordering.** `GetParameters()` and `SetParameters()` must use the same concatenation order. The implementation iterates layers via `std::index_sequence` to guarantee consistency. -- **Training with wrong optimizer size.** The optimizer's parameter count template argument must equal `Model::TotalParameters`. A mismatch is also caught at compile time. -- **Large parameter vectors.** All parameters live on the stack. A model with $P > 10{,}000$ floats consumes 40 KB — verify this fits the target's stack. - -## Variants & Generalizations - -| Variant | Key Difference | -|--------------------------------|------------------------------------------------------------------------------------| -| **Sequential model (dynamic)** | Layers stored in a container; dimension checked at runtime instead of compile time | -| **Functional API** | Supports branching and merging (DAG topology instead of linear chain) | -| **Residual model** | Adds skip connections: $a_{\ell+2} = f_{\ell+1}(a_\ell) + a_\ell$ | -| **Recurrent model** | Unrolls the same layer across time steps | - -## Applications - -- **Embedded inference** — A pre-trained model's parameters are loaded via `SetParameters()` and only `Forward()` is called at runtime. -- **On-device training** — The full forward → loss → backward → update loop runs on the MCU for online learning/adaptation. -- **System identification** — A small model (2–3 layers) learns the plant dynamics from input-output data. -- **Sensor fusion** — Multiple sensor inputs are mapped to a unified state estimate through a trained model. - -## Connections to Other Algorithms - -```mermaid -graph TD - Model["Model"] - Layer["Dense Layer"] - Loss["Loss Functions"] - Opt["Optimizer"] - Reg["Regularization"] - NN["Neural Network"] - - Layer --> Model - Model --> Opt - Model --> Loss - Reg --> Loss - Model --> NN -``` - -| Component | Relationship | -|-------------------------------------------------------|--------------------------------------------------------------------------------------------| -| [Dense Layer](../layer/Layer.md) | The Model is a sequence of layers stored in a `std::tuple` | -| [Loss Functions](../losses/Loss.md) | Measures prediction error; the Model delegates loss computation to a Loss object | -| [Optimizer](../../optimization/Optimizer.md) | Receives the flat parameter/gradient vectors from the Model and returns updated parameters | -| [Regularization](../../regularization/Regularization.md) | Added to the loss before optimization | - -## References & Further Reading - -- Goodfellow, I., Bengio, Y., and Courville, A., *Deep Learning*, MIT Press, 2016 — Chapter 6 (deep feedforward networks). -- Paszke, A. et al., "PyTorch: An imperative style, high-performance deep learning library", *NeurIPS*, 2019 — inspiration for the sequential/functional model API. -- Abadi, M. et al., "TensorFlow: A system for large-scale machine learning", *OSDI*, 2016. diff --git a/doc/neural_network/model/Model.svg b/doc/neural_network/model/Model.svg deleted file mode 100644 index eb0406ed..00000000 --- a/doc/neural_network/model/Model.svg +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - Neural Network Model - - - - - - - Model Architecture - - - - Input - - - - - - - - - - Layer 1 - - - - - - - - Dense - - - - - - Layer 2 - - - - - - - - Dense - - - - - - Layer N - - - - - - - - Dense - - - - - Output - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Forward Propagation - - - - - - - - Model Training - - - - - - Parameters - GetParameters() - SetParameters() - - - - Loss Function - Cost() - Gradient() - - - - Optimizer - Minimize() - UpdateParameters() - - - - model.Train() - - - - - - - - - - - - - - - - - - - - - - - Features: - • Variadic template layers - • Compile-time dimension checking - • Parameter management - • Type safety - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/numerical/CMakeLists.txt b/numerical/CMakeLists.txt index 2f392cd0..0166abbd 100644 --- a/numerical/CMakeLists.txt +++ b/numerical/CMakeLists.txt @@ -4,7 +4,6 @@ add_subdirectory(controllers) add_subdirectory(estimators) add_subdirectory(filters) add_subdirectory(math) -add_subdirectory(neural_network) add_subdirectory(optimization) add_subdirectory(regularization) add_subdirectory(nonlinear_control) diff --git a/numerical/neural_network/CMakeLists.txt b/numerical/neural_network/CMakeLists.txt deleted file mode 100644 index 9e3b3676..00000000 --- a/numerical/neural_network/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -add_subdirectory(activation) -add_subdirectory(layer) -add_subdirectory(losses) -add_subdirectory(model) diff --git a/numerical/neural_network/activation/ActivationFunction.cpp b/numerical/neural_network/activation/ActivationFunction.cpp deleted file mode 100644 index f4333bf6..00000000 --- a/numerical/neural_network/activation/ActivationFunction.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "numerical/neural_network/activation/ActivationFunction.hpp" - -namespace neural_network -{ - template class ActivationFunction; - template class ActivationFunction; - template class ActivationFunction; -} diff --git a/numerical/neural_network/activation/ActivationFunction.hpp b/numerical/neural_network/activation/ActivationFunction.hpp deleted file mode 100644 index d67c24fa..00000000 --- a/numerical/neural_network/activation/ActivationFunction.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/math/QNumber.hpp" -#include - -namespace neural_network -{ - template - class ActivationFunction - { - static_assert(math::is_qnumber_v || std::is_floating_point_v, - "ActivationFunction can only be instantiated with math::QNumber types."); - - public: - virtual QNumberType Forward(QNumberType x) const = 0; - virtual QNumberType Backward(QNumberType x) const = 0; - - virtual void ForwardVector(std::span output, std::span input) const; - virtual void BackwardVector(std::span result, std::span preActivation, std::span output, std::span outputGradient) const; - }; - - template - OPTIMIZE_FOR_SPEED void ActivationFunction::ForwardVector(std::span output, std::span input) const - { - for (std::size_t i = 0; i < output.size(); ++i) - output[i] = Forward(input[i]); - } - - template - OPTIMIZE_FOR_SPEED void ActivationFunction::BackwardVector(std::span result, std::span preActivation, std::span /*output*/, std::span outputGradient) const - { - for (std::size_t i = 0; i < result.size(); ++i) - result[i] = outputGradient[i] * Backward(preActivation[i]); - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class ActivationFunction; - extern template class ActivationFunction; - extern template class ActivationFunction; -#endif -} diff --git a/numerical/neural_network/activation/CMakeLists.txt b/numerical/neural_network/activation/CMakeLists.txt deleted file mode 100644 index f20d4221..00000000 --- a/numerical/neural_network/activation/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -numerical_add_header_library(numerical.neural_network.activation) - -target_include_directories(numerical.neural_network.activation ${NUMERICAL_VISIBILITY} - "$" - "$" -) - -target_link_libraries(numerical.neural_network.activation ${NUMERICAL_VISIBILITY} - infra.util - numerical.math -) - -target_sources(numerical.neural_network.activation PRIVATE - ActivationFunction.hpp - LeakyReLU.hpp - ReLU.hpp - Sigmoid.hpp - Softmax.hpp - Tanh.hpp -) - -numerical_add_coverage_sources(numerical.neural_network.activation - ActivationFunction.cpp - ReLU.cpp - LeakyReLU.cpp - Sigmoid.cpp - Tanh.cpp - Softmax.cpp -) - -add_subdirectory(test) diff --git a/numerical/neural_network/activation/LeakyReLU.cpp b/numerical/neural_network/activation/LeakyReLU.cpp deleted file mode 100644 index a5e7fa00..00000000 --- a/numerical/neural_network/activation/LeakyReLU.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "numerical/neural_network/activation/LeakyReLU.hpp" - -namespace neural_network -{ - template class LeakyReLU; - template class LeakyReLU; - template class LeakyReLU; -} diff --git a/numerical/neural_network/activation/LeakyReLU.hpp b/numerical/neural_network/activation/LeakyReLU.hpp deleted file mode 100644 index db1fb39b..00000000 --- a/numerical/neural_network/activation/LeakyReLU.hpp +++ /dev/null @@ -1,54 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/neural_network/activation/ActivationFunction.hpp" - -namespace neural_network -{ - template - class LeakyReLU - : public ActivationFunction - { - public: - explicit LeakyReLU(QNumberType alpha = QNumberType(0.01f)); - - QNumberType Forward(QNumberType x) const override; - QNumberType Backward(QNumberType x) const override; - - private: - QNumberType alpha; - }; - - // Implementation - - template - LeakyReLU::LeakyReLU(QNumberType alpha) - : alpha(alpha) - {} - - template - OPTIMIZE_FOR_SPEED - QNumberType - LeakyReLU::Forward(QNumberType x) const - { - return x > QNumberType(0.0f) ? x : alpha * x; - } - - template - OPTIMIZE_FOR_SPEED - QNumberType - LeakyReLU::Backward(QNumberType x) const - { - return x > QNumberType(0.0f) ? QNumberType(0.9999f) : alpha; - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class LeakyReLU; - extern template class LeakyReLU; - extern template class LeakyReLU; -#endif -} diff --git a/numerical/neural_network/activation/ReLU.cpp b/numerical/neural_network/activation/ReLU.cpp deleted file mode 100644 index e7de7a9e..00000000 --- a/numerical/neural_network/activation/ReLU.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "numerical/neural_network/activation/ReLU.hpp" - -namespace neural_network -{ - template class ReLU; - template class ReLU; - template class ReLU; -} diff --git a/numerical/neural_network/activation/ReLU.hpp b/numerical/neural_network/activation/ReLU.hpp deleted file mode 100644 index b9fec8c8..00000000 --- a/numerical/neural_network/activation/ReLU.hpp +++ /dev/null @@ -1,44 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/neural_network/activation/ActivationFunction.hpp" - -namespace neural_network -{ - template - class ReLU - : public ActivationFunction - { - public: - QNumberType Forward(QNumberType x) const override; - QNumberType Backward(QNumberType x) const override; - }; - - // Implementation - - template - OPTIMIZE_FOR_SPEED - QNumberType - ReLU::Forward(QNumberType x) const - { - return x > QNumberType(0.0f) ? x : QNumberType(0.0f); - } - - template - OPTIMIZE_FOR_SPEED - QNumberType - ReLU::Backward(QNumberType x) const - { - return x > QNumberType(0.0f) ? QNumberType(0.9999f) : QNumberType(0.0f); - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class ReLU; - extern template class ReLU; - extern template class ReLU; -#endif -} diff --git a/numerical/neural_network/activation/Sigmoid.cpp b/numerical/neural_network/activation/Sigmoid.cpp deleted file mode 100644 index 775d1618..00000000 --- a/numerical/neural_network/activation/Sigmoid.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "numerical/neural_network/activation/Sigmoid.hpp" - -namespace neural_network -{ - template class Sigmoid; - template class Sigmoid; - template class Sigmoid; -} diff --git a/numerical/neural_network/activation/Sigmoid.hpp b/numerical/neural_network/activation/Sigmoid.hpp deleted file mode 100644 index cb2166c3..00000000 --- a/numerical/neural_network/activation/Sigmoid.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/math/Math.hpp" -#include "numerical/neural_network/activation/ActivationFunction.hpp" - -namespace neural_network -{ - template - class Sigmoid - : public ActivationFunction - { - public: - QNumberType Forward(QNumberType x) const override; - QNumberType Backward(QNumberType x) const override; - }; - - // Implementation - - template - OPTIMIZE_FOR_SPEED - QNumberType - Sigmoid::Forward(QNumberType x) const - { - return QNumberType(1.0f / (1.0f + math::Exp(-math::ToFloat(x)))); - } - - template - OPTIMIZE_FOR_SPEED - QNumberType - Sigmoid::Backward(QNumberType x) const - { - QNumberType y = Forward(x); - return y * (QNumberType(0.9999f) - y); - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class Sigmoid; - extern template class Sigmoid; - extern template class Sigmoid; -#endif -} diff --git a/numerical/neural_network/activation/Softmax.cpp b/numerical/neural_network/activation/Softmax.cpp deleted file mode 100644 index b3890d9c..00000000 --- a/numerical/neural_network/activation/Softmax.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "numerical/neural_network/activation/Softmax.hpp" - -namespace neural_network -{ - template class Softmax; - template class Softmax; - template class Softmax; -} diff --git a/numerical/neural_network/activation/Softmax.hpp b/numerical/neural_network/activation/Softmax.hpp deleted file mode 100644 index afa9af20..00000000 --- a/numerical/neural_network/activation/Softmax.hpp +++ /dev/null @@ -1,77 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/math/Math.hpp" -#include "numerical/neural_network/activation/ActivationFunction.hpp" -#include - -namespace neural_network -{ - template - class Softmax - : public ActivationFunction - { - public: - QNumberType Forward(QNumberType x) const override; - QNumberType Backward(QNumberType x) const override; - void ForwardVector(std::span output, std::span input) const override; - void BackwardVector(std::span result, std::span preActivation, std::span output, std::span outputGradient) const override; - }; - - template - OPTIMIZE_FOR_SPEED - QNumberType - Softmax::Forward(QNumberType x) const - { - return QNumberType(math::Exp(math::ToFloat(x))); - } - - template - OPTIMIZE_FOR_SPEED - QNumberType - Softmax::Backward(QNumberType x) const - { - QNumberType y = Forward(x); - return y * (QNumberType(0.9999f) - y); - } - - template - OPTIMIZE_FOR_SPEED void Softmax::ForwardVector(std::span output, std::span input) const - { - QNumberType maxVal = input[0]; - for (std::size_t i = 1; i < input.size(); ++i) - if (input[i] > maxVal) - maxVal = input[i]; - - QNumberType sum = QNumberType(0.0f); - for (std::size_t i = 0; i < output.size(); ++i) - { - output[i] = QNumberType(math::Exp(math::ToFloat(input[i]) - math::ToFloat(maxVal))); - sum += output[i]; - } - - for (std::size_t i = 0; i < output.size(); ++i) - output[i] = std::max(std::min(output[i] / sum, QNumberType(0.9999f)), QNumberType(0.0001f)); - } - - template - OPTIMIZE_FOR_SPEED void Softmax::BackwardVector(std::span result, std::span /*preActivation*/, std::span output, std::span outputGradient) const - { - QNumberType dot = QNumberType(0.0f); - for (std::size_t i = 0; i < result.size(); ++i) - dot += outputGradient[i] * output[i]; - - for (std::size_t i = 0; i < result.size(); ++i) - result[i] = output[i] * (outputGradient[i] - dot); - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class Softmax; - extern template class Softmax; - extern template class Softmax; -#endif -} diff --git a/numerical/neural_network/activation/Tanh.cpp b/numerical/neural_network/activation/Tanh.cpp deleted file mode 100644 index 145ad563..00000000 --- a/numerical/neural_network/activation/Tanh.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "numerical/neural_network/activation/Tanh.hpp" - -namespace neural_network -{ - template class Tanh; - template class Tanh; - template class Tanh; -} diff --git a/numerical/neural_network/activation/Tanh.hpp b/numerical/neural_network/activation/Tanh.hpp deleted file mode 100644 index b869ad9e..00000000 --- a/numerical/neural_network/activation/Tanh.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/math/Math.hpp" -#include "numerical/neural_network/activation/ActivationFunction.hpp" - -namespace neural_network -{ - template - class Tanh - : public ActivationFunction - { - public: - QNumberType Forward(QNumberType x) const override; - QNumberType Backward(QNumberType x) const override; - }; - - // Implementation - - template - OPTIMIZE_FOR_SPEED - QNumberType - Tanh::Forward(QNumberType x) const - { - return QNumberType(math::Tanh(math::ToFloat(x))); - } - - template - OPTIMIZE_FOR_SPEED - QNumberType - Tanh::Backward(QNumberType x) const - { - QNumberType y = Forward(x); - return QNumberType(0.9999f) - y * y; - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class Tanh; - extern template class Tanh; - extern template class Tanh; -#endif -} diff --git a/numerical/neural_network/activation/test/CMakeLists.txt b/numerical/neural_network/activation/test/CMakeLists.txt deleted file mode 100644 index 41779e06..00000000 --- a/numerical/neural_network/activation/test/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -add_executable(numerical.neural_network.activation_test) -emil_build_for(numerical.neural_network.activation_test BOOL NUMERICAL_TOOLBOX_BUILD_TESTS) -emil_add_test(numerical.neural_network.activation_test) - -target_link_libraries(numerical.neural_network.activation_test PUBLIC - gmock_main - numerical.neural_network.activation -) - -numerical_add_qemu_test(numerical.neural_network.activation_test) - -target_sources(numerical.neural_network.activation_test PRIVATE - TestLeakyReLU.cpp - TestReLU.cpp - TestSigmoid.cpp - TestSoftmax.cpp - TestTanh.cpp -) diff --git a/numerical/neural_network/activation/test/TestLeakyReLU.cpp b/numerical/neural_network/activation/test/TestLeakyReLU.cpp deleted file mode 100644 index e0e87fb9..00000000 --- a/numerical/neural_network/activation/test/TestLeakyReLU.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "numerical/neural_network/activation/LeakyReLU.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class TestLeakyReLU - : public ::testing::Test - { - public: - neural_network::LeakyReLU activation; - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestLeakyReLU, TestedTypes); -} - -TYPED_TEST(TestLeakyReLU, ForwardPositiveInput) -{ - EXPECT_EQ(this->activation.Forward(TypeParam(0.5f)), TypeParam(0.5f)); - EXPECT_EQ(this->activation.Forward(TypeParam(0.999f)), TypeParam(0.999f)); -} - -TYPED_TEST(TestLeakyReLU, ForwardNegativeInput) -{ - const auto alpha = TypeParam(0.01f); - neural_network::LeakyReLU activation(alpha); - - EXPECT_EQ(activation.Forward(TypeParam(-0.5f)), TypeParam(-0.005f)); -} - -TYPED_TEST(TestLeakyReLU, ForwardZeroInput) -{ - EXPECT_EQ(this->activation.Forward(TypeParam(0.0f)), TypeParam(0.0f)); -} - -TYPED_TEST(TestLeakyReLU, BackwardPositiveInput) -{ - EXPECT_EQ(this->activation.Backward(TypeParam(0.5f)), TypeParam(0.9999f)); - EXPECT_EQ(this->activation.Backward(TypeParam(0.999f)), TypeParam(0.9999f)); -} - -TYPED_TEST(TestLeakyReLU, BackwardNegativeInput) -{ - const auto alpha = TypeParam(0.01f); - neural_network::LeakyReLU activation(alpha); - - EXPECT_EQ(activation.Backward(TypeParam(-0.5f)), alpha); - EXPECT_EQ(activation.Backward(TypeParam(-0.999f)), alpha); -} - -TYPED_TEST(TestLeakyReLU, BackwardZeroInput) -{ - const auto alpha = TypeParam(0.01f); - neural_network::LeakyReLU activation(alpha); - - EXPECT_EQ(activation.Backward(TypeParam(0.0f)), alpha); -} diff --git a/numerical/neural_network/activation/test/TestReLU.cpp b/numerical/neural_network/activation/test/TestReLU.cpp deleted file mode 100644 index 6117eb28..00000000 --- a/numerical/neural_network/activation/test/TestReLU.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "numerical/neural_network/activation/ReLU.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class TestReLU - : public ::testing::Test - { - public: - neural_network::ReLU activation; - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestReLU, TestedTypes); -} - -TYPED_TEST(TestReLU, ForwardPositiveInput) -{ - EXPECT_EQ(this->activation.Forward(TypeParam(0.5f)), TypeParam(0.5f)); - EXPECT_EQ(this->activation.Forward(TypeParam(0.999f)), TypeParam(0.999f)); -} - -TYPED_TEST(TestReLU, ForwardNegativeInput) -{ - EXPECT_EQ(this->activation.Forward(TypeParam(-0.5f)), TypeParam(0.0f)); - EXPECT_EQ(this->activation.Forward(TypeParam(-0.999f)), TypeParam(0.0f)); -} - -TYPED_TEST(TestReLU, ForwardZeroInput) -{ - EXPECT_EQ(this->activation.Forward(TypeParam(0.0f)), TypeParam(0.0f)); -} - -TYPED_TEST(TestReLU, BackwardPositiveInput) -{ - EXPECT_EQ(this->activation.Backward(TypeParam(0.5f)), TypeParam(0.9999f)); - EXPECT_EQ(this->activation.Backward(TypeParam(0.999f)), TypeParam(0.9999f)); -} - -TYPED_TEST(TestReLU, BackwardNegativeInput) -{ - EXPECT_EQ(this->activation.Backward(TypeParam(-0.5f)), TypeParam(0.0f)); - EXPECT_EQ(this->activation.Backward(TypeParam(-0.999f)), TypeParam(0.0f)); -} - -TYPED_TEST(TestReLU, BackwardZeroInput) -{ - EXPECT_EQ(this->activation.Backward(TypeParam(0.0f)), TypeParam(0.0f)); -} diff --git a/numerical/neural_network/activation/test/TestSigmoid.cpp b/numerical/neural_network/activation/test/TestSigmoid.cpp deleted file mode 100644 index 2cd1e21f..00000000 --- a/numerical/neural_network/activation/test/TestSigmoid.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "numerical/neural_network/activation/Sigmoid.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class TestSigmoid - : public ::testing::Test - { - public: - neural_network::Sigmoid activation; - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestSigmoid, TestedTypes); -} - -TYPED_TEST(TestSigmoid, ForwardZeroInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(0.0f))), 0.5f, 0.001f); -} - -TYPED_TEST(TestSigmoid, ForwardPositiveInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(0.5f))), 0.622f, 0.001f); - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(0.999f))), 0.731f, 0.001f); -} - -TYPED_TEST(TestSigmoid, ForwardNegativeInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(-0.5f))), 0.378f, 0.001f); - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(-0.999f))), 0.269f, 0.001f); -} - -TYPED_TEST(TestSigmoid, BackwardZeroInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Backward(TypeParam(0.0f))), 0.25f, 0.001f); -} - -TYPED_TEST(TestSigmoid, BackwardPositiveInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Backward(TypeParam(0.5f))), 0.235f, 0.001f); - EXPECT_NEAR(math::ToFloat(this->activation.Backward(TypeParam(0.999f))), 0.197f, 0.001f); -} - -TYPED_TEST(TestSigmoid, BackwardNegativeInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Backward(TypeParam(-0.5f))), 0.235f, 0.001f); - EXPECT_NEAR(math::ToFloat(this->activation.Backward(TypeParam(-0.999f))), 0.197f, 0.001f); -} diff --git a/numerical/neural_network/activation/test/TestSoftmax.cpp b/numerical/neural_network/activation/test/TestSoftmax.cpp deleted file mode 100644 index 7c069693..00000000 --- a/numerical/neural_network/activation/test/TestSoftmax.cpp +++ /dev/null @@ -1,118 +0,0 @@ -#include "numerical/neural_network/activation/Softmax.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class TestSoftmax - : public ::testing::Test - { - public: - neural_network::Softmax activation; - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestSoftmax, TestedTypes); -} - -TYPED_TEST(TestSoftmax, ForwardZeroInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(-0.1f))), 0.905f, 0.001f); -} - -TYPED_TEST(TestSoftmax, ForwardNegativeInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(-0.5f))), 0.607f, 0.001f); - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(-0.9f))), 0.407f, 0.001f); -} - -TYPED_TEST(TestSoftmax, BackwardTinyValues) -{ - TypeParam x = TypeParam(-0.7f); - TypeParam y = this->activation.Forward(x); - - EXPECT_NEAR(math::ToFloat(this->activation.Backward(x)), - math::ToFloat(y * (TypeParam(0.9999f) - y)), 0.001f); -} - -TYPED_TEST(TestSoftmax, BackwardNegativeInputs) -{ - for (float x = -0.9f; x <= -0.5f; x += 0.1f) - { - TypeParam input = TypeParam(x); - TypeParam output = this->activation.Forward(input); - TypeParam derivative = this->activation.Backward(input); - TypeParam expected = output * (TypeParam(0.9999f) - output); - - EXPECT_NEAR(math::ToFloat(derivative), math::ToFloat(expected), 0.001f); - } -} - -TYPED_TEST(TestSoftmax, ComparativeTest) -{ - TypeParam x1 = TypeParam(-0.8f); - TypeParam x2 = TypeParam(-0.7f); - TypeParam y1 = this->activation.Forward(x1); - TypeParam y2 = this->activation.Forward(x2); - - EXPECT_LT(math::ToFloat(y1), math::ToFloat(y2)); -} - -TYPED_TEST(TestSoftmax, ForwardVectorNormalizesToOne) -{ - if constexpr (!std::is_floating_point_v) - GTEST_SKIP() << "Softmax vector ops exceed Q-number range"; - - constexpr std::size_t Size = 3; - TypeParam input[Size] = { TypeParam(-0.3f), TypeParam(-0.5f), TypeParam(-0.2f) }; - TypeParam output[Size] = {}; - - this->activation.ForwardVector(output, input); - - float sum = 0.0f; - for (std::size_t i = 0; i < Size; ++i) - sum += math::ToFloat(output[i]); - - EXPECT_NEAR(sum, 1.0f, 0.01f); -} - -TYPED_TEST(TestSoftmax, ForwardVectorPreservesOrdering) -{ - if constexpr (!std::is_floating_point_v) - GTEST_SKIP() << "Softmax vector ops exceed Q-number range"; - - constexpr std::size_t Size = 3; - TypeParam input[Size] = { TypeParam(-0.5f), TypeParam(-0.2f), TypeParam(-0.8f) }; - TypeParam output[Size] = {}; - - this->activation.ForwardVector(output, input); - - EXPECT_GT(math::ToFloat(output[1]), math::ToFloat(output[0])); - EXPECT_GT(math::ToFloat(output[0]), math::ToFloat(output[2])); -} - -TYPED_TEST(TestSoftmax, BackwardVectorProducesCorrectGradient) -{ - if constexpr (!std::is_floating_point_v) - GTEST_SKIP() << "Softmax vector ops exceed Q-number range"; - - constexpr std::size_t Size = 3; - TypeParam input[Size] = { TypeParam(-0.3f), TypeParam(-0.5f), TypeParam(-0.2f) }; - TypeParam output[Size] = {}; - this->activation.ForwardVector(output, input); - - TypeParam outputGradient[Size] = { TypeParam(0.9999f), TypeParam(0.0f), TypeParam(0.0f) }; - TypeParam result[Size] = {}; - - this->activation.BackwardVector(result, input, output, outputGradient); - - float dot = 0.0f; - for (std::size_t i = 0; i < Size; ++i) - dot += math::ToFloat(outputGradient[i]) * math::ToFloat(output[i]); - - for (std::size_t i = 0; i < Size; ++i) - { - float expected = math::ToFloat(output[i]) * (math::ToFloat(outputGradient[i]) - dot); - EXPECT_NEAR(math::ToFloat(result[i]), expected, 0.01f); - } -} diff --git a/numerical/neural_network/activation/test/TestTanh.cpp b/numerical/neural_network/activation/test/TestTanh.cpp deleted file mode 100644 index e9cef7ae..00000000 --- a/numerical/neural_network/activation/test/TestTanh.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include "numerical/neural_network/activation/Tanh.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class TestTanh - : public ::testing::Test - { - public: - neural_network::Tanh activation; - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestTanh, TestedTypes); -} - -TYPED_TEST(TestTanh, ForwardZeroInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(0.0f))), 0.0f, 0.001f); -} - -TYPED_TEST(TestTanh, ForwardSmallPositiveInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(0.5f))), 0.462f, 0.001f); - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(0.9f))), 0.716f, 0.001f); -} - -TYPED_TEST(TestTanh, ForwardSmallNegativeInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(-0.5f))), -0.462f, 0.001f); - EXPECT_NEAR(math::ToFloat(this->activation.Forward(TypeParam(-0.9f))), -0.716f, 0.001f); -} - -TYPED_TEST(TestTanh, BackwardZeroInput) -{ - EXPECT_NEAR(math::ToFloat(this->activation.Backward(TypeParam(0.0f))), 1.0f, 0.001f); -} - -TYPED_TEST(TestTanh, BackwardSmallPositiveInput) -{ - TypeParam x1 = TypeParam(0.5f); - TypeParam y1 = this->activation.Forward(x1); - EXPECT_NEAR(math::ToFloat(this->activation.Backward(x1)), - 1.0f - math::ToFloat(y1) * math::ToFloat(y1), 0.001f); - - TypeParam x2 = TypeParam(0.8f); - TypeParam y2 = this->activation.Forward(x2); - EXPECT_NEAR(math::ToFloat(this->activation.Backward(x2)), - 1.0f - math::ToFloat(y2) * math::ToFloat(y2), 0.001f); -} - -TYPED_TEST(TestTanh, BackwardSmallNegativeInput) -{ - TypeParam x1 = TypeParam(-0.5f); - TypeParam y1 = this->activation.Forward(x1); - EXPECT_NEAR(math::ToFloat(this->activation.Backward(x1)), - 1.0f - math::ToFloat(y1) * math::ToFloat(y1), 0.001f); - - TypeParam x2 = TypeParam(-0.8f); - TypeParam y2 = this->activation.Forward(x2); - EXPECT_NEAR(math::ToFloat(this->activation.Backward(x2)), - 1.0f - math::ToFloat(y2) * math::ToFloat(y2), 0.001f); -} - -TYPED_TEST(TestTanh, SymmetryProperty) -{ - for (float x = 0.1f; x <= 0.9f; x += 0.2f) - { - TypeParam posInput = TypeParam(x); - TypeParam negInput = TypeParam(-x); - - EXPECT_NEAR(math::ToFloat(this->activation.Forward(posInput)), - -math::ToFloat(this->activation.Forward(negInput)), 0.001f); - } -} diff --git a/numerical/neural_network/layer/CMakeLists.txt b/numerical/neural_network/layer/CMakeLists.txt deleted file mode 100644 index 170a3448..00000000 --- a/numerical/neural_network/layer/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -numerical_add_header_library(numerical.neural_network.layer) - -target_include_directories(numerical.neural_network.layer ${NUMERICAL_VISIBILITY} - "$" - "$" -) - -target_link_libraries(numerical.neural_network.layer ${NUMERICAL_VISIBILITY} - infra.util - numerical.math -) - -target_sources(numerical.neural_network.layer PRIVATE - Dense.hpp - Layer.hpp -) - -numerical_add_coverage_sources(numerical.neural_network.layer - Dense.cpp -) - -add_subdirectory(test) diff --git a/numerical/neural_network/layer/Dense.cpp b/numerical/neural_network/layer/Dense.cpp deleted file mode 100644 index 73550169..00000000 --- a/numerical/neural_network/layer/Dense.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "numerical/neural_network/layer/Dense.hpp" - -namespace neural_network -{ - template class Dense; - template class Dense; - template class Dense; -} diff --git a/numerical/neural_network/layer/Dense.hpp b/numerical/neural_network/layer/Dense.hpp deleted file mode 100644 index c2a88224..00000000 --- a/numerical/neural_network/layer/Dense.hpp +++ /dev/null @@ -1,150 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/neural_network/activation/ActivationFunction.hpp" -#include "numerical/neural_network/layer/Layer.hpp" -#include - -namespace neural_network -{ - template - class Dense - : public Layer - { - public: - using BaseLayer = Layer; - using InputVector = typename BaseLayer::InputVector; - using OutputVector = typename BaseLayer::OutputVector; - using ParameterVector = typename BaseLayer::ParameterVector; - - Dense(const math::Matrix& initialWeights, ActivationFunction& activation); - - void Forward(const InputVector& input) override; - InputVector& Backward(const OutputVector& output_gradient) override; - const OutputVector& Output() const override; - ParameterVector& Parameters() const override; - void SetParameters(const ParameterVector& parameters) override; - - private: - ActivationFunction& activation; - - math::Matrix weights; - math::Vector biases; - - InputVector input; - OutputVector preActivation; - OutputVector output; - - math::Matrix weightGradients; - math::Vector biasGradients; - - mutable ParameterVector parameters; - InputVector inputGradient; - }; - - // Implementation // - - template - Dense::Dense(const math::Matrix& initialWeights, ActivationFunction& activation) - : weights(initialWeights) - , activation(activation) - {} - - template - OPTIMIZE_FOR_SPEED void Dense::Forward(const InputVector& input) - { - this->input = input; - - for (std::size_t i = 0; i < OutputSize; ++i) - { - preActivation[i] = biases[i]; - for (std::size_t j = 0; j < InputSize; ++j) - preActivation[i] += weights.at(i, j) * input[j]; - } - - activation.ForwardVector(output, preActivation); - } - - template - OPTIMIZE_FOR_SPEED - typename Dense::InputVector& - Dense::Backward(const OutputVector& output_gradient) - { - OutputVector preActivationGradient; - - activation.BackwardVector(preActivationGradient, preActivation, output, output_gradient); - - for (std::size_t j = 0; j < InputSize; ++j) - { - inputGradient[j] = QNumberType(0.0f); - for (std::size_t i = 0; i < OutputSize; ++i) - inputGradient[j] += weights.at(i, j) * preActivationGradient[i]; - } - - for (std::size_t i = 0; i < OutputSize; ++i) - { - for (std::size_t j = 0; j < InputSize; ++j) - weightGradients.at(i, j) = preActivationGradient[i] * input[j]; - - biasGradients[i] = preActivationGradient[i]; - } - - return inputGradient; - } - - template - const typename Dense::OutputVector& Dense::Output() const - { - return output; - } - - template - typename Dense::ParameterVector& Dense::Parameters() const - { - std::size_t idx = 0; - - for (std::size_t i = 0; i < OutputSize; ++i) - for (std::size_t j = 0; j < InputSize; ++j) - { - parameters[idx] = weights.at(i, j); - ++idx; - } - - for (std::size_t i = 0; i < OutputSize; ++i) - { - parameters[idx] = biases[i]; - ++idx; - } - - return parameters; - } - - template - void Dense::SetParameters(const ParameterVector& parameters) - { - std::size_t idx = 0; - - for (std::size_t i = 0; i < OutputSize; ++i) - for (std::size_t j = 0; j < InputSize; ++j) - { - weights.at(i, j) = parameters[idx]; - ++idx; - } - - for (std::size_t i = 0; i < OutputSize; ++i) - { - biases[i] = parameters[idx]; - ++idx; - } - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class Dense; - extern template class Dense; - extern template class Dense; -#endif -} diff --git a/numerical/neural_network/layer/Layer.hpp b/numerical/neural_network/layer/Layer.hpp deleted file mode 100644 index 1a864e29..00000000 --- a/numerical/neural_network/layer/Layer.hpp +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include "numerical/math/Matrix.hpp" - -namespace neural_network -{ - template - class Layer - { - public: - using QNumberType_ = QNumberType; - using InputVector = math::Matrix; - using OutputVector = math::Matrix; - using ParameterVector = math::Matrix; - - static constexpr std::size_t InputSize = InputSize_; - static constexpr std::size_t OutputSize = OutputSize_; - static constexpr std::size_t ParameterSize = ParameterSize_; - - virtual void Forward(const InputVector& input) = 0; - virtual InputVector& Backward(const OutputVector& output_gradient) = 0; - virtual const OutputVector& Output() const = 0; - virtual ParameterVector& Parameters() const = 0; - virtual void SetParameters(const ParameterVector& parameters) = 0; - }; -} diff --git a/numerical/neural_network/layer/test/CMakeLists.txt b/numerical/neural_network/layer/test/CMakeLists.txt deleted file mode 100644 index fe92f8e3..00000000 --- a/numerical/neural_network/layer/test/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -add_executable(numerical.neural_network.layer_test) -emil_build_for(numerical.neural_network.layer_test BOOL NUMERICAL_TOOLBOX_BUILD_TESTS) -emil_add_test(numerical.neural_network.layer_test) - -target_link_libraries(numerical.neural_network.layer_test PUBLIC - gmock_main - numerical.neural_network.activation - numerical.neural_network.layer -) - -numerical_add_qemu_test(numerical.neural_network.layer_test) - -target_sources(numerical.neural_network.layer_test PRIVATE - TestDense.cpp -) diff --git a/numerical/neural_network/layer/test/TestDense.cpp b/numerical/neural_network/layer/test/TestDense.cpp deleted file mode 100644 index 12fba78d..00000000 --- a/numerical/neural_network/layer/test/TestDense.cpp +++ /dev/null @@ -1,296 +0,0 @@ -#include "numerical/neural_network/activation/ActivationFunction.hpp" -#include "numerical/neural_network/layer/Dense.hpp" -#include "numerical/neural_network/losses/Loss.hpp" -#include "numerical/optimization/Optimizer.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class ActivationMock - : public neural_network::ActivationFunction - { - public: - MOCK_METHOD(T, Forward, (T x), (const, override)); - MOCK_METHOD(T, Backward, (T x), (const, override)); - }; - - template - class MockLoss - : public neural_network::Loss - { - public: - using Vector = typename neural_network::Loss::Vector; - - MOCK_METHOD(T, Cost, (const Vector& parameters), (override)); - MOCK_METHOD(Vector, Gradient, (const Vector& parameters), (override)); - }; - - template - class MockOptimizer - : public optimization::Optimizer - { - public: - using Result = typename optimization::Optimizer::Result; - using Vector = typename optimization::Optimizer::Vector; - - const Result& Minimize(const Vector& initialGuess, optimization::ObjectiveFunction& objective) override - { - return result; - } - - Result result{ Vector{}, T(0), 0 }; - }; - - template - class TestDense - : public ::testing::Test - { - public: - static constexpr std::size_t InputSize = 3; - static constexpr std::size_t OutputSize = 2; - using WeightMatrix = math::Matrix; - using InputVector = math::Vector; - using OutputVector = math::Vector; - using ParameterVector = math::Vector; - - void SetUp() override - { - for (std::size_t i = 0; i < OutputSize; ++i) - for (std::size_t j = 0; j < InputSize; ++j) - initialWeight.at(i, j) = T(0.1f); - } - - WeightMatrix initialWeight; - ActivationMock activation; - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestDense, TestedTypes); -} - -TYPED_TEST(TestDense, Construction) -{ - using T = TypeParam; - neural_network::Dense::InputSize, TestDense::OutputSize> - dense(this->initialWeight, this->activation); - - auto params = dense.Parameters(); - - std::size_t idx = 0; - for (std::size_t i = 0; i < TestDense::OutputSize; ++i) - { - for (std::size_t j = 0; j < TestDense::InputSize; ++j) - { - EXPECT_EQ(params[idx++], this->initialWeight.at(i, j)); - } - } - - for (std::size_t i = 0; i < TestDense::OutputSize; ++i) - { - EXPECT_EQ(params[idx++], T(0.0f)); - } -} - -TYPED_TEST(TestDense, ForwardPropagation) -{ - using T = TypeParam; - using InputVector = typename TestDense::InputVector; - - neural_network::Dense::InputSize, TestDense::OutputSize> - dense(this->initialWeight, this->activation); - - InputVector input; - input[0] = T(1.0f); - input[1] = T(2.0f); - input[2] = T(3.0f); - - T expectedPreActivation = T(0.6f); - - EXPECT_CALL(this->activation, Forward(expectedPreActivation)) - .Times(TestDense::OutputSize) - .WillRepeatedly(testing::Return(T(0.5f))); - - dense.Forward(input); -} - -TYPED_TEST(TestDense, BackwardPropagation) -{ - using T = TypeParam; - using InputVector = typename TestDense::InputVector; - using OutputVector = typename TestDense::OutputVector; - - neural_network::Dense::InputSize, TestDense::OutputSize> - dense(this->initialWeight, this->activation); - - InputVector input; - input[0] = T(1.0f); - input[1] = T(2.0f); - input[2] = T(3.0f); - - OutputVector outputGradient; - outputGradient[0] = T(0.5f); - outputGradient[1] = T(0.7f); - - T expectedPreActivation = T(0.6f); - EXPECT_CALL(this->activation, Forward(expectedPreActivation)) - .Times(TestDense::OutputSize) - .WillRepeatedly(testing::Return(T(0.5f))); - - dense.Forward(input); - - T expectedPreActivationBackward = T(0.6f); - EXPECT_CALL(this->activation, Backward(expectedPreActivationBackward)) - .Times(TestDense::OutputSize) - .WillRepeatedly(testing::Return(T(0.4f))); - - dense.Backward(outputGradient); -} - -TYPED_TEST(TestDense, ParametersExtractionAndSetting) -{ - using T = TypeParam; - using ParameterVector = typename TestDense::ParameterVector; - - neural_network::Dense::InputSize, TestDense::OutputSize> - dense(this->initialWeight, this->activation); - - auto params = dense.Parameters(); - - ParameterVector newParams; - for (std::size_t i = 0; i < ParameterVector::size; ++i) - { - newParams[i] = T(0.2f); - } - - dense.SetParameters(newParams); - - auto updatedParams = dense.Parameters(); - for (std::size_t i = 0; i < ParameterVector::size; ++i) - { - EXPECT_EQ(updatedParams[i], newParams[i]); - } -} - -TYPED_TEST(TestDense, OptimizationWithMockedOptimizer) -{ - using T = TypeParam; - using ParameterVector = typename TestDense::ParameterVector; - - constexpr size_t TotalParams = (TestDense::InputSize * TestDense::OutputSize) + TestDense::OutputSize; - - neural_network::Dense::InputSize, TestDense::OutputSize> - dense(this->initialWeight, this->activation); - - MockOptimizer optimizer; - - auto initialParams = dense.Parameters(); - - ParameterVector optimizedParams; - for (std::size_t i = 0; i < TotalParams; ++i) - optimizedParams[i] = T(0.05f); - - optimizer.result = typename optimization::Optimizer::Result( - optimizedParams, T(0.4f), 3); - - MockLoss loss; - auto& result = optimizer.Minimize(initialParams, loss); - - dense.SetParameters(result.parameters); - - auto updatedParams = dense.Parameters(); - for (std::size_t i = 0; i < TotalParams; ++i) - EXPECT_EQ(updatedParams[i], optimizedParams[i]); - - EXPECT_EQ(result.iterations, 3u); -} - -TYPED_TEST(TestDense, FullLayerSequence) -{ - using T = TypeParam; - using InputVector = typename TestDense::InputVector; - using OutputVector = typename TestDense::OutputVector; - - neural_network::Dense::InputSize, TestDense::OutputSize> - dense(this->initialWeight, this->activation); - - InputVector input; - input[0] = T(1.0f); - input[1] = T(2.0f); - input[2] = T(3.0f); - - OutputVector outputGradient; - outputGradient[0] = T(0.5f); - outputGradient[1] = T(0.7f); - - { - ::testing::InSequence seq; - - EXPECT_CALL(this->activation, Forward(testing::_)) - .WillOnce(testing::Return(T(0.5f))); - EXPECT_CALL(this->activation, Forward(testing::_)) - .WillOnce(testing::Return(T(0.6f))); - - EXPECT_CALL(this->activation, Backward(testing::_)) - .WillOnce(testing::Return(T(0.3f))); - EXPECT_CALL(this->activation, Backward(testing::_)) - .WillOnce(testing::Return(T(0.4f))); - } - - dense.Forward(input); - dense.Backward(outputGradient); -} - -TYPED_TEST(TestDense, MultipleForwardBackwardPasses) -{ - using T = TypeParam; - using InputVector = typename TestDense::InputVector; - using OutputVector = typename TestDense::OutputVector; - - neural_network::Dense::InputSize, TestDense::OutputSize> - dense(this->initialWeight, this->activation); - - InputVector input1, input2; - input1[0] = T(1.0f); - input1[1] = T(2.0f); - input1[2] = T(3.0f); - input2[0] = T(4.0f); - input2[1] = T(5.0f); - input2[2] = T(6.0f); - - OutputVector outputGradient1, outputGradient2; - outputGradient1[0] = T(0.1f); - outputGradient1[1] = T(0.2f); - outputGradient2[0] = T(0.3f); - outputGradient2[1] = T(0.4f); - - { - ::testing::InSequence seq; - - EXPECT_CALL(this->activation, Forward(testing::_)) - .WillOnce(testing::Return(T(0.5f))); - EXPECT_CALL(this->activation, Forward(testing::_)) - .WillOnce(testing::Return(T(0.6f))); - - EXPECT_CALL(this->activation, Backward(testing::_)) - .WillOnce(testing::Return(T(0.3f))); - EXPECT_CALL(this->activation, Backward(testing::_)) - .WillOnce(testing::Return(T(0.4f))); - - EXPECT_CALL(this->activation, Forward(testing::_)) - .WillOnce(testing::Return(T(0.7f))); - EXPECT_CALL(this->activation, Forward(testing::_)) - .WillOnce(testing::Return(T(0.8f))); - - EXPECT_CALL(this->activation, Backward(testing::_)) - .WillOnce(testing::Return(T(0.5f))); - EXPECT_CALL(this->activation, Backward(testing::_)) - .WillOnce(testing::Return(T(0.6f))); - } - - dense.Forward(input1); - dense.Backward(outputGradient1); - - dense.Forward(input2); - dense.Backward(outputGradient2); -} diff --git a/numerical/neural_network/losses/BinaryCrossEntropy.cpp b/numerical/neural_network/losses/BinaryCrossEntropy.cpp deleted file mode 100644 index 9b119e04..00000000 --- a/numerical/neural_network/losses/BinaryCrossEntropy.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "numerical/neural_network/losses/BinaryCrossEntropy.hpp" - -namespace neural_network -{ - template class BinaryCrossEntropy; -} diff --git a/numerical/neural_network/losses/BinaryCrossEntropy.hpp b/numerical/neural_network/losses/BinaryCrossEntropy.hpp deleted file mode 100644 index b0f3438d..00000000 --- a/numerical/neural_network/losses/BinaryCrossEntropy.hpp +++ /dev/null @@ -1,79 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/math/Math.hpp" -#include "numerical/neural_network/losses/Loss.hpp" -#include "numerical/regularization/Regularization.hpp" - -namespace neural_network -{ - template - class BinaryCrossEntropy - : public Loss - { - public: - using Vector = typename Loss::Vector; - - BinaryCrossEntropy(const Vector& target, regularization::Regularization& regularization); - QNumberType Cost(const Vector& parameters) override; - Vector Gradient(const Vector& parameters) override; - - private: - Vector target; - regularization::Regularization& regularization; - }; - - // Implementation // - - template - BinaryCrossEntropy::BinaryCrossEntropy( - const Vector& target, - regularization::Regularization& regularization) - : target(target) - , regularization(regularization) - {} - - template - OPTIMIZE_FOR_SPEED - QNumberType - BinaryCrossEntropy::Cost(const Vector& parameters) - { - QNumberType cost = QNumberType(0.0f); - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - { - QNumberType pred = std::max(std::min(parameters[i], QNumberType(0.9999f)), QNumberType(0.0001f)); - - cost += -(target[i] * math::Log(math::ToFloat(pred)) + - (QNumberType(0.9999f) - target[i]) * math::Log(math::ToFloat(QNumberType(0.9999f) - pred))); - } - - return cost + regularization.Calculate(parameters); - } - - template - typename BinaryCrossEntropy::Vector - OPTIMIZE_FOR_SPEED - BinaryCrossEntropy::Gradient(const Vector& parameters) - { - Vector gradient; - auto regGradient = regularization.Gradient(parameters); - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - { - QNumberType pred = std::max(std::min(parameters[i], QNumberType(0.9999f)), QNumberType(0.0001f)); - - gradient[i] = (pred - target[i]) / (pred * (QNumberType(0.9999f) - pred)) + regGradient[i]; - } - - return gradient; - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class BinaryCrossEntropy; -#endif -} diff --git a/numerical/neural_network/losses/CMakeLists.txt b/numerical/neural_network/losses/CMakeLists.txt deleted file mode 100644 index dd90150e..00000000 --- a/numerical/neural_network/losses/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -numerical_add_header_library(numerical.neural_network.losses) - -target_include_directories(numerical.neural_network.losses ${NUMERICAL_VISIBILITY} - "$" - "$" -) - -target_link_libraries(numerical.neural_network.losses ${NUMERICAL_VISIBILITY} - infra.util - numerical.math - numerical.neural_network.activation - numerical.optimization - numerical.regularization -) - -target_sources(numerical.neural_network.losses PRIVATE - BinaryCrossEntropy.hpp - CategoricalCrossEntropy.hpp - Loss.hpp - MeanAbsoluteError.hpp - MeanSquaredError.hpp -) - -numerical_add_coverage_sources(numerical.neural_network.losses - MeanSquaredError.cpp - MeanAbsoluteError.cpp - BinaryCrossEntropy.cpp - CategoricalCrossEntropy.cpp -) - -add_subdirectory(test) diff --git a/numerical/neural_network/losses/CategoricalCrossEntropy.cpp b/numerical/neural_network/losses/CategoricalCrossEntropy.cpp deleted file mode 100644 index df87fde3..00000000 --- a/numerical/neural_network/losses/CategoricalCrossEntropy.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "numerical/neural_network/losses/CategoricalCrossEntropy.hpp" - -namespace neural_network -{ - template class CategoricalCrossEntropy; -} diff --git a/numerical/neural_network/losses/CategoricalCrossEntropy.hpp b/numerical/neural_network/losses/CategoricalCrossEntropy.hpp deleted file mode 100644 index 2a2876f3..00000000 --- a/numerical/neural_network/losses/CategoricalCrossEntropy.hpp +++ /dev/null @@ -1,99 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/math/Math.hpp" -#include "numerical/neural_network/activation/Softmax.hpp" -#include "numerical/neural_network/losses/Loss.hpp" -#include "numerical/regularization/Regularization.hpp" - -namespace neural_network -{ - template - class CategoricalCrossEntropy - : public Loss - { - public: - using Vector = typename Loss::Vector; - - CategoricalCrossEntropy(const Vector& target, regularization::Regularization& regularization); - QNumberType Cost(const Vector& parameters) override; - Vector Gradient(const Vector& parameters) override; - - private: - Vector target; - regularization::Regularization& regularization; - Softmax softmax; - - Vector ComputeSoftmaxProbabilities(const Vector& x) const; - }; - - // Implementation // - - template - CategoricalCrossEntropy::CategoricalCrossEntropy( - const Vector& target, - regularization::Regularization& regularization) - : target(target) - , regularization(regularization) - {} - - template - typename CategoricalCrossEntropy::Vector - OPTIMIZE_FOR_SPEED - CategoricalCrossEntropy::ComputeSoftmaxProbabilities(const Vector& x) const - { - Vector output; - QNumberType sum = QNumberType(0.0f); - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - { - output[i] = softmax.Forward(x[i]); - sum += output[i]; - } - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - { - output[i] = output[i] / sum; - output[i] = std::max(std::min(output[i], QNumberType(0.9999f)), QNumberType(0.0001f)); - } - - return output; - } - - template - OPTIMIZE_FOR_SPEED - QNumberType - CategoricalCrossEntropy::Cost(const Vector& parameters) - { - Vector probabilities = ComputeSoftmaxProbabilities(parameters); - QNumberType cost = QNumberType(0.0f); - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - cost += -target[i] * math::Log(math::ToFloat(probabilities[i])); - - return cost + regularization.Calculate(parameters); - } - - template - typename CategoricalCrossEntropy::Vector - OPTIMIZE_FOR_SPEED - CategoricalCrossEntropy::Gradient(const Vector& parameters) - { - auto regGradient = regularization.Gradient(parameters); - Vector probabilities = ComputeSoftmaxProbabilities(parameters); - Vector gradient; - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - gradient[i] = probabilities[i] - target[i] + regGradient[i]; - - return gradient; - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class CategoricalCrossEntropy; -#endif -} diff --git a/numerical/neural_network/losses/Loss.hpp b/numerical/neural_network/losses/Loss.hpp deleted file mode 100644 index 64356ba1..00000000 --- a/numerical/neural_network/losses/Loss.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include "numerical/optimization/ObjectiveFunction.hpp" - -namespace neural_network -{ - template - class Loss - : public optimization::ObjectiveFunction - { - static_assert(math::is_qnumber_v || std::is_floating_point_v, - "Loss can only be instantiated with math::QNumber types."); - - public: - using Vector = math::Vector; - }; -} diff --git a/numerical/neural_network/losses/MeanAbsoluteError.cpp b/numerical/neural_network/losses/MeanAbsoluteError.cpp deleted file mode 100644 index 7a5c6aa6..00000000 --- a/numerical/neural_network/losses/MeanAbsoluteError.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "numerical/neural_network/losses/MeanAbsoluteError.hpp" - -namespace neural_network -{ - template class MeanAbsoluteError; - template class MeanAbsoluteError; - template class MeanAbsoluteError; -} diff --git a/numerical/neural_network/losses/MeanAbsoluteError.hpp b/numerical/neural_network/losses/MeanAbsoluteError.hpp deleted file mode 100644 index e92392ac..00000000 --- a/numerical/neural_network/losses/MeanAbsoluteError.hpp +++ /dev/null @@ -1,75 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/neural_network/losses/Loss.hpp" -#include "numerical/regularization/Regularization.hpp" - -namespace neural_network -{ - template - class MeanAbsoluteError - : public Loss - { - public: - using Vector = typename Loss::Vector; - - MeanAbsoluteError(const Vector& target, regularization::Regularization& regularization); - QNumberType Cost(const Vector& parameters) override; - Vector Gradient(const Vector& parameters) override; - - private: - Vector target; - regularization::Regularization& regularization; - }; - - // Implementation // - - template - MeanAbsoluteError::MeanAbsoluteError(const Vector& target, regularization::Regularization& regularization) - : target(target) - , regularization(regularization) - {} - - template - OPTIMIZE_FOR_SPEED - QNumberType - MeanAbsoluteError::Cost(const Vector& parameters) - { - QNumberType cost = QNumberType(0.0f); - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - { - auto diff = parameters[i] - target[i]; - cost += diff < QNumberType(0.0f) ? -diff : diff; - } - - return cost + regularization.Calculate(parameters); - } - - template - OPTIMIZE_FOR_SPEED - typename MeanAbsoluteError::Vector - MeanAbsoluteError::Gradient(const Vector& parameters) - { - Vector gradient; - auto regGradient = regularization.Gradient(parameters); - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - { - auto diff = parameters[i] - target[i]; - gradient[i] = (diff > QNumberType(0.0f) ? QNumberType(0.9999f) : QNumberType(-0.9999f)) + regGradient[i]; - } - - return gradient; - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class MeanAbsoluteError; - extern template class MeanAbsoluteError; - extern template class MeanAbsoluteError; -#endif -} diff --git a/numerical/neural_network/losses/MeanSquaredError.cpp b/numerical/neural_network/losses/MeanSquaredError.cpp deleted file mode 100644 index d30ca40c..00000000 --- a/numerical/neural_network/losses/MeanSquaredError.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "numerical/neural_network/losses/MeanSquaredError.hpp" - -namespace neural_network -{ - template class MeanSquaredError; - template class MeanSquaredError; - template class MeanSquaredError; -} diff --git a/numerical/neural_network/losses/MeanSquaredError.hpp b/numerical/neural_network/losses/MeanSquaredError.hpp deleted file mode 100644 index 33003ff7..00000000 --- a/numerical/neural_network/losses/MeanSquaredError.hpp +++ /dev/null @@ -1,73 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/neural_network/losses/Loss.hpp" -#include "numerical/regularization/Regularization.hpp" - -namespace neural_network -{ - template - class MeanSquaredError - : public Loss - { - public: - using Vector = typename Loss::Vector; - - MeanSquaredError(const Vector& target, regularization::Regularization& regularization); - - QNumberType Cost(const Vector& parameters) override; - Vector Gradient(const Vector& parameters) override; - - private: - Vector target; - regularization::Regularization& regularization; - }; - - // Implementation // - - template - MeanSquaredError::MeanSquaredError(const Vector& target, regularization::Regularization& regularization) - : target(target) - , regularization(regularization) - {} - - template - OPTIMIZE_FOR_SPEED - QNumberType - MeanSquaredError::Cost(const Vector& parameters) - { - QNumberType cost = QNumberType(0.0f); - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - { - QNumberType diff = parameters[i] - target[i]; - cost += diff * diff; - } - - return QNumberType(math::ToFloat(cost) / 2.0f) + regularization.Calculate(parameters); - } - - template - OPTIMIZE_FOR_SPEED - typename MeanSquaredError::Vector - MeanSquaredError::Gradient(const Vector& parameters) - { - Vector gradient; - auto regGradient = regularization.Gradient(parameters); - - for (std::size_t i = 0; i < NumberOfFeatures; ++i) - gradient[i] = parameters[i] - target[i] + regGradient[i]; - - return gradient; - } - -#ifdef NUMERICAL_TOOLBOX_COVERAGE_BUILD - extern template class MeanSquaredError; - extern template class MeanSquaredError; - extern template class MeanSquaredError; -#endif -} diff --git a/numerical/neural_network/losses/test/CMakeLists.txt b/numerical/neural_network/losses/test/CMakeLists.txt deleted file mode 100644 index efc8684d..00000000 --- a/numerical/neural_network/losses/test/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -add_executable(numerical.neural_network.losses_test) -emil_build_for(numerical.neural_network.losses_test BOOL NUMERICAL_TOOLBOX_BUILD_TESTS) -emil_add_test(numerical.neural_network.losses_test) - -target_link_libraries(numerical.neural_network.losses_test PUBLIC - gmock_main - numerical.neural_network.losses -) - -numerical_add_qemu_test(numerical.neural_network.losses_test) - -target_sources(numerical.neural_network.losses_test PRIVATE - TestBinaryCrossEntropy.cpp - TestCategoricalCrossEntropy.cpp - TestMeanAbsoluteError.cpp - TestMeanSquaredError.cpp -) diff --git a/numerical/neural_network/losses/test/TestBinaryCrossEntropy.cpp b/numerical/neural_network/losses/test/TestBinaryCrossEntropy.cpp deleted file mode 100644 index 05a7515f..00000000 --- a/numerical/neural_network/losses/test/TestBinaryCrossEntropy.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include "numerical/neural_network/losses/BinaryCrossEntropy.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class MockRegularization - : public regularization::Regularization - { - public: - using Vector = typename regularization::Regularization::Vector; - MOCK_METHOD(QNumberType, Calculate, (const Vector& parameters), (const, override)); - MOCK_METHOD(Vector, Gradient, (const Vector& parameters), (const, override)); - }; - - template - class TestBinaryCrossEntropy - : public ::testing::Test - { - public: - static constexpr std::size_t NumberOfFeature = 2; - using Vector = math::Matrix; - - MockRegularization mockRegularization; - Vector target; - std::optional> loss; - - void SetUp() override - { - target = Vector{ T(0.8f), T(0.2f) }; - } - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestBinaryCrossEntropy, TestedTypes); -} - -TYPED_TEST(TestBinaryCrossEntropy, CostCallsRegularization) -{ - typename TestBinaryCrossEntropy::Vector parameters{ TypeParam(0.7f), TypeParam(0.3f) }; - TypeParam regValue = TypeParam(0.1f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .WillOnce(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - TypeParam cost = this->loss->Cost(parameters); - - TypeParam expectedCost = TypeParam(0.0f); - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - { - TypeParam pred = std::max(std::min(parameters[i], TypeParam(0.9999f)), TypeParam(0.0001f)); - expectedCost += -(this->target[i] * std::log(math::ToFloat(pred)) + - (TypeParam(0.9999f) - this->target[i]) * std::log(math::ToFloat(TypeParam(0.9999f) - pred))); - } - - EXPECT_NEAR(math::ToFloat(cost), math::ToFloat(expectedCost + regValue), 0.1f); -} - -TYPED_TEST(TestBinaryCrossEntropy, PerfectPrediction) -{ - typename TestBinaryCrossEntropy::Vector parameters = this->target; - TypeParam regValue = TypeParam(0.0f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .WillOnce(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - TypeParam cost = this->loss->Cost(parameters); - - // Due to clamping, perfect prediction won't reach exactly zero - EXPECT_GT(math::ToFloat(cost), 0.0f); - EXPECT_LT(math::ToFloat(cost), 1.1f); -} - -TYPED_TEST(TestBinaryCrossEntropy, WorstPrediction) -{ - typename TestBinaryCrossEntropy::Vector parameters{ TypeParam(0.1f), TypeParam(0.9f) }; - TypeParam regValue = TypeParam(0.0f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .WillOnce(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - TypeParam cost = this->loss->Cost(parameters); - - // Worst prediction should have significantly higher cost than best prediction - EXPECT_GT(math::ToFloat(cost), 1.0f); -} - -TYPED_TEST(TestBinaryCrossEntropy, GradientTest) -{ - typename TestBinaryCrossEntropy::Vector parameters{ TypeParam(0.6f), TypeParam(0.4f) }; - TypeParam regValue = TypeParam(0.1f); - - typename TestBinaryCrossEntropy::Vector regGradient; - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - regGradient[i] = regValue; - - EXPECT_CALL(this->mockRegularization, Gradient(::testing::_)) - .WillOnce(::testing::Return(regGradient)); - - this->loss.emplace(this->target, this->mockRegularization); - auto gradient = this->loss->Gradient(parameters); - - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - { - TypeParam pred = std::max(std::min(parameters[i], TypeParam(0.9999f)), TypeParam(0.0001f)); - TypeParam expectedGrad = (pred - this->target[i]) / (pred * (TypeParam(0.9999f) - pred)) + regValue; - EXPECT_NEAR(math::ToFloat(gradient[i]), math::ToFloat(expectedGrad), 0.15f); - } -} - -TYPED_TEST(TestBinaryCrossEntropy, MultipleParameters) -{ - std::array::Vector, 2> testParameters = { - typename TestBinaryCrossEntropy::Vector{ TypeParam(0.3f), TypeParam(0.7f) }, - typename TestBinaryCrossEntropy::Vector{ TypeParam(0.9f), TypeParam(0.1f) } - }; - - TypeParam regValue = TypeParam(0.2f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .Times(testParameters.size()) - .WillRepeatedly(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - - for (const auto& params : testParameters) - { - TypeParam cost = this->loss->Cost(params); - - TypeParam expectedCost = TypeParam(0.0f); - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - { - TypeParam pred = std::max(std::min(params[i], TypeParam(0.9999f)), TypeParam(0.0001f)); - expectedCost += -(this->target[i] * std::log(math::ToFloat(pred)) + - (TypeParam(0.9999f) - this->target[i]) * std::log(math::ToFloat(TypeParam(0.9999f) - pred))); - } - - EXPECT_NEAR(math::ToFloat(cost), math::ToFloat(expectedCost + regValue), 0.1f); - } -} diff --git a/numerical/neural_network/losses/test/TestCategoricalCrossEntropy.cpp b/numerical/neural_network/losses/test/TestCategoricalCrossEntropy.cpp deleted file mode 100644 index fdf08319..00000000 --- a/numerical/neural_network/losses/test/TestCategoricalCrossEntropy.cpp +++ /dev/null @@ -1,156 +0,0 @@ -#include "numerical/math/QNumber.hpp" -#include "numerical/neural_network/losses/CategoricalCrossEntropy.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class MockRegularization - : public regularization::Regularization - { - public: - using Vector = typename regularization::Regularization::Vector; - MOCK_METHOD(QNumberType, Calculate, (const Vector& parameters), (const, override)); - MOCK_METHOD(Vector, Gradient, (const Vector& parameters), (const, override)); - }; - - template - class TestCategoricalCrossEntropy - : public ::testing::Test - { - public: - static constexpr std::size_t NumberOfFeature = 2; - using Vector = math::Matrix; - - MockRegularization mockRegularization; - Vector target; - std::optional> loss; - - void SetUp() override - { - target = Vector{ T(0.8f), T(0.2f) }; - } - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestCategoricalCrossEntropy, TestedTypes); -} - -TYPED_TEST(TestCategoricalCrossEntropy, CostCallsRegularization) -{ - typename TestCategoricalCrossEntropy::Vector parameters{ TypeParam(0.7f), TypeParam(0.3f) }; - TypeParam regValue = TypeParam(0.1f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .WillOnce(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - TypeParam cost = this->loss->Cost(parameters); - - typename TestCategoricalCrossEntropy::Vector probs; - TypeParam sum = TypeParam(0.0f); - - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - { - probs[i] = std::exp(math::ToFloat(parameters[i])); - sum += probs[i]; - } - - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - probs[i] = probs[i] / sum; - - TypeParam expectedCost = TypeParam(0.0f); - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - expectedCost += -this->target[i] * std::log(math::ToFloat(probs[i])); - - EXPECT_NEAR(math::ToFloat(cost), math::ToFloat(expectedCost + regValue), 0.01f); -} - -TYPED_TEST(TestCategoricalCrossEntropy, PerfectPrediction) -{ - typename TestCategoricalCrossEntropy::Vector parameters{ TypeParam(2.0f), TypeParam(-2.0f) }; - TypeParam regValue = TypeParam(0.0f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .WillOnce(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - TypeParam cost = this->loss->Cost(parameters); - - EXPECT_GT(math::ToFloat(cost), 0.0f); - EXPECT_LT(math::ToFloat(cost), 1.0f); -} - -TYPED_TEST(TestCategoricalCrossEntropy, GradientTest) -{ - typename TestCategoricalCrossEntropy::Vector parameters{ TypeParam(0.2f), TypeParam(0.5f) }; - TypeParam regValue = TypeParam(0.1f); - - typename TestCategoricalCrossEntropy::Vector regGradient; - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - regGradient[i] = regValue; - - EXPECT_CALL(this->mockRegularization, Gradient(::testing::_)) - .WillOnce(::testing::Return(regGradient)); - - this->loss.emplace(this->target, this->mockRegularization); - auto gradient = this->loss->Gradient(parameters); - - typename TestCategoricalCrossEntropy::Vector probs; - TypeParam sum = TypeParam(0.0f); - - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - { - probs[i] = std::exp(math::ToFloat(parameters[i])); - sum += probs[i]; - } - - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - probs[i] = probs[i] / sum; - - // Account for limited precision in Q types - EXPECT_NEAR(math::ToFloat(gradient[0]), math::ToFloat(probs[0] - this->target[0] + regValue), 0.1f); - EXPECT_NEAR(math::ToFloat(gradient[1]), math::ToFloat(probs[1] - this->target[1] + regValue), 0.1f); -} - -TYPED_TEST(TestCategoricalCrossEntropy, MultipleParameters) -{ - std::array::Vector, 2> testParameters = { - typename TestCategoricalCrossEntropy::Vector{ TypeParam(0.3f), TypeParam(0.7f) }, - typename TestCategoricalCrossEntropy::Vector{ TypeParam(0.1f), TypeParam(0.9f) } - }; - - TypeParam regValue = TypeParam(0.2f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .Times(testParameters.size()) - .WillRepeatedly(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - - for (const auto& params : testParameters) - { - TypeParam cost = this->loss->Cost(params); - - typename TestCategoricalCrossEntropy::Vector probs; - TypeParam sum = TypeParam(0.0f); - - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - { - probs[i] = TypeParam(std::exp(math::ToFloat(params[i]))); - sum += probs[i]; - } - - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - { - probs[i] = probs[i] / sum; - probs[i] = TypeParam(std::max(std::min(math::ToFloat(probs[i]), 0.8f), 0.0001f)); - } - - TypeParam expectedCost = TypeParam(0.0f); - for (std::size_t i = 0; i < this->NumberOfFeature; ++i) - expectedCost += -this->target[i] * std::log(math::ToFloat(probs[i])); - - EXPECT_NEAR(math::ToFloat(cost), math::ToFloat(expectedCost + regValue), 0.1f); - } -} diff --git a/numerical/neural_network/losses/test/TestMeanAbsoluteError.cpp b/numerical/neural_network/losses/test/TestMeanAbsoluteError.cpp deleted file mode 100644 index 2ea448b3..00000000 --- a/numerical/neural_network/losses/test/TestMeanAbsoluteError.cpp +++ /dev/null @@ -1,109 +0,0 @@ -#include "numerical/neural_network/losses/MeanAbsoluteError.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class MockRegularization - : public regularization::Regularization - { - public: - using Vector = typename regularization::Regularization::Vector; - MOCK_METHOD(QNumberType, Calculate, (const Vector& parameters), (const, override)); - MOCK_METHOD(Vector, Gradient, (const Vector& parameters), (const, override)); - }; - - template - class TestMeanAbsoluteError - : public ::testing::Test - { - public: - static constexpr std::size_t NumberOfFeature = 2; - using Vector = math::Matrix; - - MockRegularization mockRegularization; - Vector target; - std::optional> loss; - - void SetUp() override - { - target = Vector{ T(0.5f), T(-0.3f) }; - } - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestMeanAbsoluteError, TestedTypes); -} - -TYPED_TEST(TestMeanAbsoluteError, CostCallsRegularization) -{ - typename TestMeanAbsoluteError::Vector parameters{ TypeParam(0.7f), TypeParam(-0.1f) }; - TypeParam regValue = TypeParam(0.1f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .WillOnce(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - TypeParam cost = this->loss->Cost(parameters); - - TypeParam maeValue = TypeParam(0.0f); - TypeParam diff1 = parameters[0] - this->target[0]; - TypeParam diff2 = parameters[1] - this->target[1]; - maeValue += (diff1 < TypeParam(0.0f) ? -diff1 : diff1) + (diff2 < TypeParam(0.0f) ? -diff2 : diff2); - - EXPECT_NEAR(math::ToFloat(cost), math::ToFloat(maeValue + regValue), 0.001f); -} - -TYPED_TEST(TestMeanAbsoluteError, ZeroError) -{ - typename TestMeanAbsoluteError::Vector parameters = this->target; - TypeParam regValue = TypeParam(0.0f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .WillOnce(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - TypeParam cost = this->loss->Cost(parameters); - - EXPECT_NEAR(math::ToFloat(cost), 0.0f, 0.001f); -} - -TYPED_TEST(TestMeanAbsoluteError, MultipleParameters) -{ - std::array::Vector, 2> testParameters = { - typename TestMeanAbsoluteError::Vector{ TypeParam(0.4f), TypeParam(-0.4f) }, - typename TestMeanAbsoluteError::Vector{ TypeParam(0.6f), TypeParam(-0.2f) } - }; - - TypeParam regValue = TypeParam(0.2f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .Times(testParameters.size()) - .WillRepeatedly(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - - for (const auto& params : testParameters) - { - TypeParam cost = this->loss->Cost(params); - - TypeParam maeValue = TypeParam(0.0f); - TypeParam diff1 = params[0] - this->target[0]; - TypeParam diff2 = params[1] - this->target[1]; - maeValue += (diff1 < TypeParam(0.0f) ? -diff1 : diff1) + (diff2 < TypeParam(0.0f) ? -diff2 : diff2); - - EXPECT_NEAR(math::ToFloat(cost), math::ToFloat(maeValue + regValue), 0.001f); - } -} - -TYPED_TEST(TestMeanAbsoluteError, GradientTest) -{ - typename TestMeanAbsoluteError::Vector parameters{ TypeParam(0.7f), TypeParam(-0.6f) }; - TypeParam regValue = TypeParam(0.1f); - - this->loss.emplace(this->target, this->mockRegularization); - auto gradient = this->loss->Gradient(parameters); - - EXPECT_NEAR(math::ToFloat(gradient[0]), 0.9999f, 0.01f); - EXPECT_NEAR(math::ToFloat(gradient[1]), -0.9999f, 0.01f); -} diff --git a/numerical/neural_network/losses/test/TestMeanSquaredError.cpp b/numerical/neural_network/losses/test/TestMeanSquaredError.cpp deleted file mode 100644 index 830f51a1..00000000 --- a/numerical/neural_network/losses/test/TestMeanSquaredError.cpp +++ /dev/null @@ -1,117 +0,0 @@ -#include "numerical/neural_network/losses/MeanSquaredError.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class MockRegularization - : public regularization::Regularization - { - public: - using Vector = typename regularization::Regularization::Vector; - MOCK_METHOD(QNumberType, Calculate, (const Vector& parameters), (const, override)); - MOCK_METHOD(Vector, Gradient, (const Vector& parameters), (const, override)); - }; - - template - class TestMeanSquaredError - : public ::testing::Test - { - public: - static constexpr std::size_t NumberOfFeature = 2; - using Vector = math::Matrix; - - MockRegularization mockRegularization; - Vector target; - std::optional> loss; - - void SetUp() override - { - target = Vector{ T(0.5f), T(-0.3f) }; - } - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestMeanSquaredError, TestedTypes); -} - -TYPED_TEST(TestMeanSquaredError, CostCallsRegularization) -{ - typename TestMeanSquaredError::Vector parameters{ TypeParam(0.7f), TypeParam(-0.1f) }; - TypeParam regValue = TypeParam(0.1f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .WillOnce(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - TypeParam cost = this->loss->Cost(parameters); - - TypeParam mseValue = TypeParam(0.0f); - TypeParam diff1 = parameters[0] - this->target[0]; - TypeParam diff2 = parameters[1] - this->target[1]; - mseValue += diff1 * diff1 + diff2 * diff2; - mseValue = TypeParam(math::ToFloat(mseValue) / 2.0f); - - EXPECT_NEAR(math::ToFloat(cost), math::ToFloat(mseValue + regValue), 0.001f); -} - -TYPED_TEST(TestMeanSquaredError, ZeroError) -{ - typename TestMeanSquaredError::Vector parameters = this->target; - TypeParam regValue = TypeParam(0.0f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .WillOnce(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - TypeParam cost = this->loss->Cost(parameters); - - EXPECT_NEAR(math::ToFloat(cost), 0.0f, 0.001f); -} - -TYPED_TEST(TestMeanSquaredError, MultipleParameters) -{ - std::array::Vector, 2> testParameters = { - typename TestMeanSquaredError::Vector{ TypeParam(0.4f), TypeParam(-0.4f) }, - typename TestMeanSquaredError::Vector{ TypeParam(0.6f), TypeParam(-0.2f) } - }; - - TypeParam regValue = TypeParam(0.2f); - - EXPECT_CALL(this->mockRegularization, Calculate(::testing::_)) - .Times(testParameters.size()) - .WillRepeatedly(::testing::Return(regValue)); - - this->loss.emplace(this->target, this->mockRegularization); - - for (const auto& params : testParameters) - { - TypeParam cost = this->loss->Cost(params); - - TypeParam mseValue = TypeParam(0.0f); - TypeParam diff1 = params[0] - this->target[0]; - TypeParam diff2 = params[1] - this->target[1]; - mseValue += diff1 * diff1 + diff2 * diff2; - mseValue = TypeParam(math::ToFloat(mseValue) / 2.0f); - - EXPECT_NEAR(math::ToFloat(cost), math::ToFloat(mseValue + regValue), 0.001f); - } -} - -TYPED_TEST(TestMeanSquaredError, GradientIncludesRegularization) -{ - typename TestMeanSquaredError::Vector parameters{ TypeParam(0.7f), TypeParam(-0.1f) }; - typename TestMeanSquaredError::Vector regGradient{ TypeParam(0.01f), TypeParam(-0.02f) }; - - EXPECT_CALL(this->mockRegularization, Gradient(::testing::_)) - .WillOnce(::testing::Return(regGradient)); - - this->loss.emplace(this->target, this->mockRegularization); - auto gradient = this->loss->Gradient(parameters); - - for (std::size_t i = 0; i < TestMeanSquaredError::NumberOfFeature; ++i) - { - float expected = math::ToFloat(parameters[i] - this->target[i] + regGradient[i]); - EXPECT_NEAR(math::ToFloat(gradient[i]), expected, 0.001f); - } -} diff --git a/numerical/neural_network/model/CMakeLists.txt b/numerical/neural_network/model/CMakeLists.txt deleted file mode 100644 index 35ea07ab..00000000 --- a/numerical/neural_network/model/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -numerical_add_header_library(numerical.neural_network.model) - -target_include_directories(numerical.neural_network.model ${NUMERICAL_VISIBILITY} - "$" - "$" -) - -target_link_libraries(numerical.neural_network.model ${NUMERICAL_VISIBILITY} - infra.util - numerical.math - numerical.neural_network.activation - numerical.neural_network.layer - numerical.neural_network.losses - numerical.optimization -) - -target_sources(numerical.neural_network.model PRIVATE - Model.hpp -) - -add_subdirectory(test) diff --git a/numerical/neural_network/model/Model.hpp b/numerical/neural_network/model/Model.hpp deleted file mode 100644 index 8b1d0145..00000000 --- a/numerical/neural_network/model/Model.hpp +++ /dev/null @@ -1,287 +0,0 @@ -#pragma once - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC optimize("O3", "fast-math") -#endif - -#include "infra/util/BoundedVector.hpp" -#include "numerical/math/CompilerOptimizations.hpp" -#include "numerical/neural_network/layer/Layer.hpp" -#include "numerical/neural_network/losses/Loss.hpp" -#include "numerical/optimization/Optimizer.hpp" -#include -#include -#include - -namespace neural_network -{ - template - auto make_layer(Args&&... args) - { - return [args = std::make_tuple(std::forward(args)...)]() mutable - { - return std::apply([](auto&&... params) - { - return Layer(std::forward(params)...); - }, - std::move(args)); - }; - } - - namespace detail - { - template - struct is_layer - { - static constexpr bool value = std::is_base_of_v< - Layer, - T>; - }; - - template - struct all_are_layers; - - template - struct all_are_layers : std::true_type - {}; - - template - struct all_are_layers - : std::integral_constant::value && - all_are_layers::value> - {}; - - template - struct verify_layer_sizes; - - template - struct verify_layer_sizes - { - static constexpr bool value = true; - }; - - template - struct verify_layer_sizes - { - using FirstLayer = Layer; - - static constexpr bool value = - (InputSize == FirstLayer::InputSize) && - verify_layer_sizes::value; - }; - - template - constexpr std::size_t calculate_total_parameters() - { - return (... + Layers::ParameterSize); - } - } - - template - class Model - { - static_assert(math::is_qnumber::value || std::is_floating_point::value, - "Model can only be instantiated with math::QNumber types or floating point types."); - - static_assert(detail::all_are_layers::value, - "All types in Layers must derive from Layer"); - - static_assert(sizeof...(Layers) > 0, "Model must have at least one layer"); - - static_assert(detail::verify_layer_sizes::value && - std::tuple_element_t>::OutputSize == OutputSize, - "Layer sizes do not match"); - - public: - using InputVector = math::Matrix; - using OutputVector = math::Matrix; - using ParameterVector = math::Vector()>; - static constexpr std::size_t TotalParameters = detail::calculate_total_parameters(); - - Model(); - - template> - Model(FactoryFuncs&&... factories) - : layers(std::invoke(std::forward(factories))...) - {} - - OutputVector Forward(const InputVector& input); - InputVector Backward(const OutputVector& output_gradient); - void Train(optimization::Optimizer& optimizer, Loss& loss, const ParameterVector& initialParameters); - void SetParameters(const ParameterVector& parameters); - ParameterVector GetParameters() const; - - private: - template - OutputVector ForwardImpl(const InputVector& input, std::index_sequence); - - template - void ForwardLayer(const InputType& layerInput); - - template - InputVector BackwardImpl(const OutputVector& output_gradient, std::index_sequence); - - template - InputVector BackwardLayer(const GradType& gradient); - - template - void SetParametersImpl(const ParameterVector& parameters, std::index_sequence); - - template - void SetLayerParameters(Layer& layer, const ParameterVector& parameters, std::size_t& offset); - - template - ParameterVector GetParametersImpl(std::index_sequence) const; - - template - void GetLayerParameters(const Layer& layer, ParameterVector& parameters, std::size_t& offset) const; - - std::tuple layers; - InputVector currentInput; - }; - - template - Model::Model() - : layers(std::make_tuple(Layers()...)) - {} - - template - typename Model::OutputVector - OPTIMIZE_FOR_SPEED - Model::Forward(const InputVector& input) - { - currentInput = input; - return ForwardImpl(input, std::make_index_sequence{}); - } - - template - typename Model::InputVector - OPTIMIZE_FOR_SPEED - Model::Backward(const OutputVector& output_gradient) - { - return BackwardImpl(output_gradient, std::make_index_sequence{}); - } - - template - void Model::Train( - optimization::Optimizer& optimizer, - Loss& loss, - const ParameterVector& initialParameters) - { - auto result = optimizer.Minimize(initialParameters, loss); - SetParameters(result.parameters); - } - - template - void Model::SetParameters(const ParameterVector& parameters) - { - SetParametersImpl(parameters, std::make_index_sequence{}); - } - - template - typename Model::ParameterVector - Model::GetParameters() const - { - return GetParametersImpl(std::make_index_sequence{}); - } - - template - template - typename Model::OutputVector - Model::ForwardImpl(const InputVector& input, std::index_sequence) - { - ForwardLayer<0>(input); - return std::get(layers).Output(); - } - - template - template - void Model::ForwardLayer(const InputType& layerInput) - { - std::get(layers).Forward(layerInput); - if constexpr (I + 1 < sizeof...(Layers)) - ForwardLayer(std::get(layers).Output()); - } - - template - template - typename Model::InputVector - Model::BackwardImpl(const OutputVector& output_gradient, std::index_sequence) - { - return BackwardLayer(output_gradient); - } - - template - template - typename Model::InputVector - Model::BackwardLayer(const GradType& gradient) - { - auto& inputGrad = std::get(layers).Backward(gradient); - if constexpr (I == 0) - return inputGrad; - else - return BackwardLayer(inputGrad); - } - - template - template - void Model::SetParametersImpl( - const ParameterVector& parameters, - std::index_sequence) - { - std::size_t offset = 0; - (SetLayerParameters(std::get(layers), parameters, offset), ...); - } - - template - template - void Model::SetLayerParameters( - Layer& layer, - const ParameterVector& parameters, - std::size_t& offset) - { - const std::size_t layerParameterSize = Layer::ParameterSize; - math::Vector layerParameters; - - for (std::size_t i = 0; i < layerParameterSize; ++i) - layerParameters[i] = parameters[offset + i]; - - layer.SetParameters(layerParameters); - offset += layerParameterSize; - } - - template - template - typename Model::ParameterVector - Model::GetParametersImpl( - std::index_sequence) const - { - ParameterVector parameters; - std::size_t offset = 0; - int dummy[] = { 0, (GetLayerParameters(std::get(layers), parameters, offset), 0)... }; - (void)dummy; - return parameters; - } - - template - template - void Model::GetLayerParameters( - const Layer& layer, - ParameterVector& parameters, - std::size_t& offset) const - { - const auto& layerParameters = layer.Parameters(); - for (std::size_t i = 0; i < Layer::ParameterSize; ++i) - parameters[offset + i] = layerParameters[i]; - offset += Layer::ParameterSize; - } -} diff --git a/numerical/neural_network/model/test/CMakeLists.txt b/numerical/neural_network/model/test/CMakeLists.txt deleted file mode 100644 index 1afc17cb..00000000 --- a/numerical/neural_network/model/test/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -add_executable(numerical.neural_network.model_test) -emil_build_for(numerical.neural_network.model_test BOOL NUMERICAL_TOOLBOX_BUILD_TESTS) -emil_add_test(numerical.neural_network.model_test) - -target_link_libraries(numerical.neural_network.model_test PUBLIC - gmock_main - numerical.neural_network.model -) - -numerical_add_qemu_test(numerical.neural_network.model_test) - -target_sources(numerical.neural_network.model_test PRIVATE - TestModel.cpp -) diff --git a/numerical/neural_network/model/test/TestModel.cpp b/numerical/neural_network/model/test/TestModel.cpp deleted file mode 100644 index 66491e07..00000000 --- a/numerical/neural_network/model/test/TestModel.cpp +++ /dev/null @@ -1,160 +0,0 @@ -#include "numerical/neural_network/layer/Layer.hpp" -#include "numerical/neural_network/model/Model.hpp" -#include "gmock/gmock.h" - -namespace -{ - template - class LayerMock - : public neural_network::Layer - { - public: - using BaseLayer = neural_network::Layer; - using InputVector = typename BaseLayer::InputVector; - using OutputVector = typename BaseLayer::OutputVector; - using ParameterVector = typename BaseLayer::ParameterVector; - using QNumberType = QNumberTypeMock; - static constexpr std::size_t InputSize = InputSizeMock; - static constexpr std::size_t OutputSize = OutputSizeMock; - static constexpr std::size_t ParameterSize = ParameterSizeMock; - - LayerMock(int mockParam = 0) - { - (void)mockParam; - setupDefaultBehavior(); - } - - LayerMock(const LayerMock& other) - : inputGradient(other.inputGradient) - , parameters(other.parameters) - { - setupDefaultBehavior(); - } - - LayerMock(LayerMock&& other) noexcept - : inputGradient(std::move(other.inputGradient)) - , parameters(std::move(other.parameters)) - { - setupDefaultBehavior(); - } - - LayerMock& operator=(const LayerMock&) = default; - LayerMock& operator=(LayerMock&&) = default; - - MOCK_METHOD(void, Forward, (const InputVector&), (override)); - MOCK_METHOD(InputVector&, Backward, (const OutputVector&), (override)); - MOCK_METHOD(const OutputVector&, Output, (), (const, override)); - MOCK_METHOD(ParameterVector&, Parameters, (), (const, override)); - MOCK_METHOD(void, SetParameters, (const ParameterVector&), (override)); - - private: - void setupDefaultBehavior() - { - ON_CALL(*this, Forward(testing::_)) - .WillByDefault([this](const InputVector& input) - { - (void)input; - }); - - ON_CALL(*this, Backward(testing::_)) - .WillByDefault([this](const OutputVector& output_gradient) -> InputVector& - { - (void)output_gradient; - return inputGradient; - }); - - ON_CALL(*this, Output()) - .WillByDefault([this]() -> const OutputVector& - { - return outputValue; - }); - - ON_CALL(*this, Parameters()) - .WillByDefault([this]() -> ParameterVector& - { - return parameters; - }); - - ON_CALL(*this, SetParameters(testing::_)) - .WillByDefault([this](const ParameterVector& p) - { - parameters = p; - }); - } - - InputVector inputGradient; - OutputVector outputValue; - ParameterVector parameters; - }; - - template - class TestModel - : public ::testing::Test - { - public: - static constexpr std::size_t InputSize = 1; - static constexpr std::size_t HiddenSize = 4; - static constexpr std::size_t OutputSize = 1; - static constexpr std::size_t ParameterSize = 2; - - using FirstLayer = LayerMock; - using SecondLayer = LayerMock; - using ModelType = neural_network::Model; - - TestModel() - : model(neural_network::make_layer(42), - neural_network::make_layer(43)) - {} - - ModelType model; - }; - - using TestedTypes = ::testing::Types; - TYPED_TEST_SUITE(TestModel, TestedTypes); -} - -TYPED_TEST(TestModel, LayerConstructionWithParameters) -{ - using FirstLayer = typename TestFixture::FirstLayer; - using SecondLayer = typename TestFixture::SecondLayer; - - auto firstLayerParam = 100; - auto secondLayerParam = 200; - - typename TestFixture::ModelType customModel( - neural_network::make_layer(firstLayerParam), - neural_network::make_layer(secondLayerParam)); -} - -TYPED_TEST(TestModel, SetParameters) -{ - using ParameterVector = math::Vector; - - ParameterVector parameters; - for (size_t i = 0; i < TestFixture::ModelType::TotalParameters; ++i) - parameters[i] = TypeParam(static_cast(i) * 0.1f); - - TestFixture::model.SetParameters(parameters); - - auto retrievedParams = TestFixture::model.GetParameters(); - - for (size_t i = 0; i < TestFixture::ModelType::TotalParameters; ++i) - EXPECT_EQ(math::ToFloat(retrievedParams[i]), math::ToFloat(parameters[i])); -} - -TYPED_TEST(TestModel, ConstructorVariants) -{ - typename TestFixture::ModelType defaultModel; - - typename TestFixture::ModelType factoryModel( - neural_network::make_layer(1), - neural_network::make_layer(2)); - - typename TestFixture::ModelType::InputVector input; - auto defaultOutput = defaultModel.Forward(input); - auto factoryOutput = factoryModel.Forward(input); - - typename TestFixture::ModelType::OutputVector outputGradient; - auto defaultGradient = defaultModel.Backward(outputGradient); - auto factoryGradient = factoryModel.Backward(outputGradient); -} diff --git a/simulator/CMakeLists.txt b/simulator/CMakeLists.txt index 24566f25..49cf9997 100644 --- a/simulator/CMakeLists.txt +++ b/simulator/CMakeLists.txt @@ -4,4 +4,3 @@ add_subdirectory(analysis) add_subdirectory(controllers) add_subdirectory(estimators) add_subdirectory(filters) -add_subdirectory(neural_network) diff --git a/simulator/neural_network/CMakeLists.txt b/simulator/neural_network/CMakeLists.txt deleted file mode 100644 index f53be19b..00000000 --- a/simulator/neural_network/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(NeuralNetwork) diff --git a/simulator/neural_network/NeuralNetwork/CMakeLists.txt b/simulator/neural_network/NeuralNetwork/CMakeLists.txt deleted file mode 100644 index d077418e..00000000 --- a/simulator/neural_network/NeuralNetwork/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -find_package(Qt6 REQUIRED COMPONENTS Widgets) - -add_subdirectory(application) -add_subdirectory(view) - -add_executable(numerical.simulator.neural_network.nn) -emil_build_for(numerical.simulator.neural_network.nn HOST All PREREQUISITE_BOOL NUMERICAL_TOOLBOX_BUILD_SIMULATOR) - -target_link_libraries(numerical.simulator.neural_network.nn PRIVATE - numerical.simulator.neural_network.nn.application - numerical.simulator.neural_network.nn.view -) - -target_sources(numerical.simulator.neural_network.nn PRIVATE - Main.cpp -) - -if(MSVC) - target_compile_options(numerical.simulator.neural_network.nn PRIVATE /W4 /wd4244 /wd4100) -else() - target_compile_options(numerical.simulator.neural_network.nn PRIVATE - -Wno-error - ) -endif() diff --git a/simulator/neural_network/NeuralNetwork/Main.cpp b/simulator/neural_network/NeuralNetwork/Main.cpp deleted file mode 100644 index 486713a4..00000000 --- a/simulator/neural_network/NeuralNetwork/Main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "simulator/neural_network/NeuralNetwork/view/NnMainWindow.hpp" -#include - -int main(int argc, char* argv[]) -{ - QApplication app(argc, argv); - - simulator::neural_network::nn::view::NnMainWindow window; - window.show(); - - return app.exec(); -} diff --git a/simulator/neural_network/NeuralNetwork/application/CMakeLists.txt b/simulator/neural_network/NeuralNetwork/application/CMakeLists.txt deleted file mode 100644 index 05411134..00000000 --- a/simulator/neural_network/NeuralNetwork/application/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -add_library(numerical.simulator.neural_network.nn.application STATIC) - -target_include_directories(numerical.simulator.neural_network.nn.application PUBLIC - "$" -) - -target_link_libraries(numerical.simulator.neural_network.nn.application PUBLIC - numerical.neural_network.model - numerical.regularization -) - -target_sources(numerical.simulator.neural_network.nn.application PRIVATE - NnSimulator.hpp - NnSimulator.cpp -) - -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_compile_options(numerical.simulator.neural_network.nn.application PRIVATE -Wno-error) -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - target_compile_options(numerical.simulator.neural_network.nn.application PRIVATE /W4 /wd4244 /wd4100) -endif() diff --git a/simulator/neural_network/NeuralNetwork/application/NnSimulator.cpp b/simulator/neural_network/NeuralNetwork/application/NnSimulator.cpp deleted file mode 100644 index 2cea2d9a..00000000 --- a/simulator/neural_network/NeuralNetwork/application/NnSimulator.cpp +++ /dev/null @@ -1,210 +0,0 @@ -#include "simulator/neural_network/NeuralNetwork/application/NnSimulator.hpp" -#include -#include -#include -#include - -namespace simulator::neural_network::nn -{ - namespace - { - struct TrainingData - { - std::vector> inputs; - std::vector targets; - }; - - TrainingData GenerateXorData() - { - TrainingData data; - data.inputs = { { 0.0f, 0.0f }, { 0.0f, 1.0f }, { 1.0f, 0.0f }, { 1.0f, 1.0f } }; - data.targets = { 0.0f, 1.0f, 1.0f, 0.0f }; - return data; - } - - TrainingData GenerateSineData(std::size_t samples) - { - TrainingData data; - data.inputs.resize(samples); - data.targets.resize(samples); - - for (std::size_t i = 0; i < samples; ++i) - { - float x = static_cast(i) / static_cast(samples - 1) * 2.0f * std::numbers::pi_v; - data.inputs[i] = { x / (2.0f * std::numbers::pi_v)}; - data.targets[i] = (std::sin(x) + 1.0f) / 2.0f; - } - return data; - } - - float Sigmoid(float x) - { - return 1.0f / (1.0f + std::exp(-x)); - } - - float SigmoidDerivative(float output) - { - return output * (1.0f - output); - } - - float TanhActivation(float x) - { - return std::tanh(x); - } - - float TanhDerivative(float output) - { - return 1.0f - output * output; - } - - struct DenseLayer - { - std::vector> weights; - std::vector biases; - std::vector preActivation; - std::vector output; - std::vector input; - std::vector> weightGrad; - std::vector biasGrad; - - DenseLayer(std::size_t inputSize, std::size_t outputSize, std::mt19937& rng) - { - float scale = std::sqrt(2.0f / static_cast(inputSize)); - std::normal_distribution dist(0.0f, scale); - - weights.resize(outputSize, std::vector(inputSize)); - biases.resize(outputSize, 0.0f); - preActivation.resize(outputSize); - output.resize(outputSize); - weightGrad.resize(outputSize, std::vector(inputSize, 0.0f)); - biasGrad.resize(outputSize, 0.0f); - - for (auto& row : weights) - for (auto& w : row) - w = dist(rng); - } - - void Forward(const std::vector& x, bool useTanh) - { - input = x; - for (std::size_t i = 0; i < weights.size(); ++i) - { - preActivation[i] = biases[i]; - for (std::size_t j = 0; j < input.size(); ++j) - preActivation[i] += weights[i][j] * input[j]; - - output[i] = useTanh ? TanhActivation(preActivation[i]) : Sigmoid(preActivation[i]); - } - } - - std::vector Backward(const std::vector& outputGrad, bool useTanh) - { - std::vector inputGrad(input.size(), 0.0f); - - for (std::size_t i = 0; i < weights.size(); ++i) - { - float derivative = useTanh ? TanhDerivative(output[i]) : SigmoidDerivative(output[i]); - float delta = outputGrad[i] * derivative; - - for (std::size_t j = 0; j < input.size(); ++j) - { - weightGrad[i][j] += delta * input[j]; - inputGrad[j] += delta * weights[i][j]; - } - biasGrad[i] += delta; - } - return inputGrad; - } - - void ApplyGradients(float lr, std::size_t batchSize) - { - float scale = lr / static_cast(batchSize); - for (std::size_t i = 0; i < weights.size(); ++i) - { - for (std::size_t j = 0; j < weights[i].size(); ++j) - { - weights[i][j] -= scale * weightGrad[i][j]; - weightGrad[i][j] = 0.0f; - } - biases[i] -= scale * biasGrad[i]; - biasGrad[i] = 0.0f; - } - } - }; - - NnResult TrainNetwork(const NnConfig& config, const TrainingData& data) - { - std::mt19937 rng(42); - - std::size_t inputSize = data.inputs[0].size(); - std::size_t hiddenSize = config.hiddenSize; - - DenseLayer hidden(inputSize, hiddenSize, rng); - DenseLayer output(hiddenSize, 1, rng); - - NnResult result; - result.epochIndex.resize(config.epochs); - result.lossHistory.resize(config.epochs); - - for (std::size_t epoch = 0; epoch < config.epochs; ++epoch) - { - float epochLoss = 0.0f; - - for (std::size_t s = 0; s < data.inputs.size(); ++s) - { - hidden.Forward(data.inputs[s], true); - output.Forward(hidden.output, false); - - float error = output.output[0] - data.targets[s]; - epochLoss += error * error; - - std::vector outputGrad = { error }; - auto hiddenGrad = output.Backward(outputGrad, false); - hidden.Backward(hiddenGrad, true); - } - - hidden.ApplyGradients(config.learningRate, data.inputs.size()); - output.ApplyGradients(config.learningRate, data.inputs.size()); - - result.epochIndex[epoch] = static_cast(epoch); - result.lossHistory[epoch] = epochLoss / static_cast(data.inputs.size()); - } - - result.predictionInputs.resize(data.inputs.size()); - result.predictionTargets = data.targets; - result.predictionOutputs.resize(data.inputs.size()); - - for (std::size_t s = 0; s < data.inputs.size(); ++s) - { - result.predictionInputs[s] = data.inputs[s][0]; - hidden.Forward(data.inputs[s], true); - output.Forward(hidden.output, false); - result.predictionOutputs[s] = output.output[0]; - } - - return result; - } - } - - void NnSimulator::Configure(const Configuration& config) - { - configuration = config; - } - - NnResult NnSimulator::Run() - { - TrainingData data; - - switch (configuration.nn.demo) - { - case DemoType::Xor: - data = GenerateXorData(); - break; - case DemoType::SineApproximation: - data = GenerateSineData(configuration.nn.sineSamples); - break; - } - - return TrainNetwork(configuration.nn, data); - } -} diff --git a/simulator/neural_network/NeuralNetwork/application/NnSimulator.hpp b/simulator/neural_network/NeuralNetwork/application/NnSimulator.hpp deleted file mode 100644 index a35f0d07..00000000 --- a/simulator/neural_network/NeuralNetwork/application/NnSimulator.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include -#include - -namespace simulator::neural_network::nn -{ - enum class DemoType - { - Xor, - SineApproximation - }; - - struct NnConfig - { - DemoType demo = DemoType::Xor; - std::size_t hiddenSize = 8; - float learningRate = 0.1f; - std::size_t epochs = 500; - std::size_t sineSamples = 50; - }; - - struct NnResult - { - std::vector epochIndex; - std::vector lossHistory; - std::vector predictionInputs; - std::vector predictionTargets; - std::vector predictionOutputs; - }; - - class NnSimulator - { - public: - struct Configuration - { - NnConfig nn; - }; - - void Configure(const Configuration& config); - NnResult Run(); - - private: - Configuration configuration; - }; -} diff --git a/simulator/neural_network/NeuralNetwork/view/CMakeLists.txt b/simulator/neural_network/NeuralNetwork/view/CMakeLists.txt deleted file mode 100644 index edb03739..00000000 --- a/simulator/neural_network/NeuralNetwork/view/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -add_library(numerical.simulator.neural_network.nn.view STATIC) - -set_target_properties(numerical.simulator.neural_network.nn.view PROPERTIES AUTOMOC ON) - -target_include_directories(numerical.simulator.neural_network.nn.view PUBLIC - "$" -) - -target_link_libraries(numerical.simulator.neural_network.nn.view PUBLIC - numerical.simulator.neural_network.nn.application - numerical.simulator.widgets - Qt6::Widgets -) - -target_sources(numerical.simulator.neural_network.nn.view PRIVATE - NnConfigurationPanel.hpp - NnConfigurationPanel.cpp - NnMainWindow.hpp - NnMainWindow.cpp -) - -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_compile_options(numerical.simulator.neural_network.nn.view PRIVATE -Wno-error) -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - target_compile_options(numerical.simulator.neural_network.nn.view PRIVATE /W4 /wd4244 /wd4100) -endif() diff --git a/simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.cpp b/simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.cpp deleted file mode 100644 index 87d0aa95..00000000 --- a/simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.hpp" -#include -#include -#include -#include - -namespace simulator::neural_network::nn::view -{ - NnConfigurationPanel::NnConfigurationPanel(QWidget* parent) - : QWidget(parent) - { - auto* layout = new QVBoxLayout(this); - - auto* demoGroup = new QGroupBox("Demo Selection", this); - auto* demoLayout = new QVBoxLayout(demoGroup); - - demoLayout->addWidget(new QLabel("Problem:")); - demoCombo = new QComboBox(demoGroup); - demoCombo->addItem("XOR Classification", static_cast(DemoType::Xor)); - demoCombo->addItem("Sine Approximation", static_cast(DemoType::SineApproximation)); - demoLayout->addWidget(demoCombo); - - layout->addWidget(demoGroup); - - auto* networkGroup = new QGroupBox("Network Parameters", this); - auto* networkLayout = new QVBoxLayout(networkGroup); - - networkLayout->addWidget(new QLabel("Hidden Layer Size:")); - hiddenSizeSpinBox = new QSpinBox(networkGroup); - hiddenSizeSpinBox->setRange(2, 64); - hiddenSizeSpinBox->setSingleStep(2); - hiddenSizeSpinBox->setValue(8); - networkLayout->addWidget(hiddenSizeSpinBox); - - networkLayout->addWidget(new QLabel("Learning Rate:")); - learningRateSpinBox = new QDoubleSpinBox(networkGroup); - learningRateSpinBox->setRange(0.001, 10.0); - learningRateSpinBox->setDecimals(3); - learningRateSpinBox->setSingleStep(0.01); - learningRateSpinBox->setValue(0.5); - networkLayout->addWidget(learningRateSpinBox); - - networkLayout->addWidget(new QLabel("Epochs:")); - epochsSpinBox = new QSpinBox(networkGroup); - epochsSpinBox->setRange(10, 10000); - epochsSpinBox->setSingleStep(100); - epochsSpinBox->setValue(1000); - networkLayout->addWidget(epochsSpinBox); - - networkLayout->addWidget(new QLabel("Sine Samples:")); - sineSamplesSpinBox = new QSpinBox(networkGroup); - sineSamplesSpinBox->setRange(10, 500); - sineSamplesSpinBox->setSingleStep(10); - sineSamplesSpinBox->setValue(50); - networkLayout->addWidget(sineSamplesSpinBox); - - layout->addWidget(networkGroup); - - auto* computeButton = new QPushButton("Train", this); - layout->addWidget(computeButton); - - layout->addStretch(); - - connect(computeButton, &QPushButton::clicked, this, &NnConfigurationPanel::ComputeRequested); - } - - NnSimulator::Configuration NnConfigurationPanel::GetConfiguration() const - { - NnSimulator::Configuration config; - config.nn.demo = static_cast(demoCombo->currentData().toInt()); - config.nn.hiddenSize = static_cast(hiddenSizeSpinBox->value()); - config.nn.learningRate = static_cast(learningRateSpinBox->value()); - config.nn.epochs = static_cast(epochsSpinBox->value()); - config.nn.sineSamples = static_cast(sineSamplesSpinBox->value()); - return config; - } -} diff --git a/simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.hpp b/simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.hpp deleted file mode 100644 index 9e3e3ac2..00000000 --- a/simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#include "simulator/neural_network/NeuralNetwork/application/NnSimulator.hpp" -#include -#include -#include -#include - -namespace simulator::neural_network::nn::view -{ - class NnConfigurationPanel - : public QWidget - { - Q_OBJECT - - public: - explicit NnConfigurationPanel(QWidget* parent = nullptr); - - NnSimulator::Configuration GetConfiguration() const; - - signals: - void ComputeRequested(); - - private: - QComboBox* demoCombo; - QSpinBox* hiddenSizeSpinBox; - QDoubleSpinBox* learningRateSpinBox; - QSpinBox* epochsSpinBox; - QSpinBox* sineSamplesSpinBox; - }; -} diff --git a/simulator/neural_network/NeuralNetwork/view/NnMainWindow.cpp b/simulator/neural_network/NeuralNetwork/view/NnMainWindow.cpp deleted file mode 100644 index b67b7faf..00000000 --- a/simulator/neural_network/NeuralNetwork/view/NnMainWindow.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "simulator/neural_network/NeuralNetwork/view/NnMainWindow.hpp" -#include "simulator/neural_network/NeuralNetwork/view/NnConfigurationPanel.hpp" -#include "simulator/widgets/TimeSeriesChartWidget.hpp" -#include -#include -#include - -namespace simulator::neural_network::nn::view -{ - NnMainWindow::NnMainWindow(QWidget* parent) - : QMainWindow(parent) - { - setWindowTitle("Neural Network Simulator"); - resize(1200, 700); - - auto* splitter = new QSplitter(Qt::Horizontal, this); - - configPanel = new NnConfigurationPanel(splitter); - configPanel->setMaximumWidth(350); - - tabWidget = new QTabWidget(splitter); - - lossChart = new widgets::TimeSeriesChartWidget(tabWidget); - predictionChart = new widgets::TimeSeriesChartWidget(tabWidget); - - tabWidget->addTab(lossChart, "Training Loss"); - tabWidget->addTab(predictionChart, "Predictions"); - - splitter->addWidget(configPanel); - splitter->addWidget(tabWidget); - splitter->setStretchFactor(0, 0); - splitter->setStretchFactor(1, 1); - - setCentralWidget(splitter); - statusBar()->showMessage("Configure network parameters and press Train"); - - connect(configPanel, &NnConfigurationPanel::ComputeRequested, this, &NnMainWindow::OnComputeRequested); - } - - void NnMainWindow::OnComputeRequested() - { - auto config = configPanel->GetConfiguration(); - - NnSimulator simulator; - simulator.Configure(config); - auto result = simulator.Run(); - - lossChart->SetTimeAxis(result.epochIndex); - lossChart->SetPanels({ - { - "Training Loss (MSE)", - "Loss", - { - { "MSE", QColor(231, 76, 60), result.lossHistory }, - }, - 1, - }, - }); - - predictionChart->SetTimeAxis(result.predictionInputs); - predictionChart->SetPanels({ - { - "Target vs Prediction", - "Value", - { - { "Target", QColor(41, 128, 185), result.predictionTargets }, - { "Prediction", QColor(231, 76, 60), result.predictionOutputs }, - }, - 1, - }, - }); - - auto finalLoss = result.lossHistory.empty() ? 0.0f : result.lossHistory.back(); - statusBar()->showMessage(QString("Training complete: %1 epochs, final loss = %2") - .arg(config.nn.epochs) - .arg(static_cast(finalLoss), 0, 'g', 6)); - } -} diff --git a/simulator/neural_network/NeuralNetwork/view/NnMainWindow.hpp b/simulator/neural_network/NeuralNetwork/view/NnMainWindow.hpp deleted file mode 100644 index f7a863f1..00000000 --- a/simulator/neural_network/NeuralNetwork/view/NnMainWindow.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include -#include - -namespace simulator::neural_network::nn::view -{ - class NnConfigurationPanel; -} - -namespace simulator::widgets -{ - class TimeSeriesChartWidget; -} - -namespace simulator::neural_network::nn::view -{ - class NnMainWindow - : public QMainWindow - { - Q_OBJECT - - public: - explicit NnMainWindow(QWidget* parent = nullptr); - - private slots: - void OnComputeRequested(); - - private: - NnConfigurationPanel* configPanel; - QTabWidget* tabWidget; - widgets::TimeSeriesChartWidget* lossChart; - widgets::TimeSeriesChartWidget* predictionChart; - }; -} From 405aa144880d64c6b2e1c1a438a85606b1e92231 Mon Sep 17 00:00:00 2001 From: gfs Date: Sat, 8 Aug 2026 14:29:35 +0200 Subject: [PATCH 2/2] Update CMakePresets.json --- CMakePresets.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index b1b695bb..74aa6918 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -135,10 +135,6 @@ "numerical.filters.active_test", "numerical.filters.passive_test", "numerical.math_test", - "numerical.neural_network.activation_test", - "numerical.neural_network.layer_test", - "numerical.neural_network.losses_test", - "numerical.neural_network.model_test", "numerical.nonlinear_control_test", "numerical.optimization_test", "numerical.regularization_test", @@ -160,10 +156,6 @@ "numerical.filters.active_test", "numerical.filters.passive_test", "numerical.math_test", - "numerical.neural_network.activation_test", - "numerical.neural_network.layer_test", - "numerical.neural_network.losses_test", - "numerical.neural_network.model_test", "numerical.nonlinear_control_test", "numerical.optimization_test", "numerical.regularization_test",

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