Dynamic Neural Field Composer 0.0.0
A C++20 library and interactive application for building and simulating Dynamic Neural Field (DNF) architectures.
Loading...
Searching...
No Matches
activation_function.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4
5#include "tools/logger.h"
6#include "tools/math.h"
7
11
13{
29
36 {
38 ActivationFunction() = default;
41
43 virtual std::vector<double> operator()(const std::vector<double>& input) = 0;
44
47 virtual void apply(const std::vector<double>& input, std::vector<double>& out) const = 0;
48
49 [[nodiscard]] virtual std::unique_ptr<ActivationFunction> clone() const = 0;
50 [[nodiscard]] virtual std::string toString() const = 0;
51
52 virtual void print() const = 0;
53 virtual ~ActivationFunction() = default;
54 };
55
69 struct SigmoidFunction final : public ActivationFunction
70 {
71 double x_shift;
72 double steepness;
73
75
79 SigmoidFunction(double x_shift, double steepness);
80
81 std::vector<double> operator()(const std::vector<double>& input) override;
82 void apply(const std::vector<double>& input, std::vector<double>& out) const override;
83 bool operator==(const SigmoidFunction& other) const;
84 [[nodiscard]] std::unique_ptr<ActivationFunction> clone() const override;
85 [[nodiscard]] std::string toString() const override;
86 void print() const override;
87
88 [[nodiscard]] double getSteepness() const;
89 [[nodiscard]] double getXShift() const;
90
91 ~SigmoidFunction() override = default;
92 };
93
106 {
107 double x_shift;
108
110
113 explicit HeavisideFunction(double x_shift);
114
115 std::vector<double> operator()(const std::vector<double>& input) override;
116 void apply(const std::vector<double>& input, std::vector<double>& out) const override;
117 bool operator==(const HeavisideFunction& other) const;
118 [[nodiscard]] std::unique_ptr<ActivationFunction> clone() const override;
119 [[nodiscard]] std::string toString() const override;
120 void print() const override;
121
122 [[nodiscard]] double getXShift() const;
123
124 ~HeavisideFunction() override = default;
125 };
126
149 {
150 double x_shift;
151 double beta;
152
154
158 AbsSigmoidFunction(double x_shift, double beta);
159
160 std::vector<double> operator()(const std::vector<double>& input) override;
161 void apply(const std::vector<double>& input, std::vector<double>& out) const override;
162 bool operator==(const AbsSigmoidFunction& other) const;
163 [[nodiscard]] std::unique_ptr<ActivationFunction> clone() const override;
164 [[nodiscard]] std::string toString() const override;
165 void print() const override;
166
167 [[nodiscard]] double getBeta() const;
168 [[nodiscard]] double getXShift() const;
169
170 ~AbsSigmoidFunction() override = default;
171 };
172}
ActivationFunctionType
Identifies the concrete activation function type.
Definition activation_function.h:24
@ HEAVISIDE
Binary step function.
Definition activation_function.h:26
@ SIGMOID
Logistic (exponential) sigmoid.
Definition activation_function.h:25
@ ABSSIGMOID
Rational (absolute-value) sigmoid approximation — cedar's default.
Definition activation_function.h:27
Definition element_parameters.h:10
Rational (absolute-value) sigmoid — cedar's default activation function.
Definition activation_function.h:149
std::string toString() const override
Definition activation_function.cpp:143
std::vector< double > operator()(const std::vector< double > &input) override
Apply the activation function to input and return the result.
Definition activation_function.cpp:120
bool operator==(const AbsSigmoidFunction &other) const
Definition activation_function.cpp:133
std::unique_ptr< ActivationFunction > clone() const override
Definition activation_function.cpp:138
AbsSigmoidFunction(const AbsSigmoidFunction &)=default
double x_shift
Inflection point / threshold (cedar: theta).
Definition activation_function.h:150
void apply(const std::vector< double > &input, std::vector< double > &out) const override
Apply the activation function in-place into a pre-allocated out buffer. out must already be sized to ...
Definition activation_function.cpp:125
double getXShift() const
Definition activation_function.cpp:166
double beta
Steepness parameter — cedar/cosivina naming (larger = steeper).
Definition activation_function.h:151
void print() const override
Definition activation_function.cpp:155
double getBeta() const
Definition activation_function.cpp:161
Abstract base for activation functions applied to a neural field.
Definition activation_function.h:36
ActivationFunction & operator=(const ActivationFunction &)=delete
virtual std::string toString() const =0
virtual void apply(const std::vector< double > &input, std::vector< double > &out) const =0
Apply the activation function in-place into a pre-allocated out buffer. out must already be sized to ...
ActivationFunction(const ActivationFunction &)=default
virtual std::vector< double > operator()(const std::vector< double > &input)=0
Apply the activation function to input and return the result.
ActivationFunctionType type
Concrete function type.
Definition activation_function.h:37
virtual std::unique_ptr< ActivationFunction > clone() const =0
Heaviside step function.
Definition activation_function.h:106
std::unique_ptr< ActivationFunction > clone() const override
Definition activation_function.cpp:89
void print() const override
Definition activation_function.cpp:103
double x_shift
Threshold; activation strictly above this value maps to 1.
Definition activation_function.h:107
std::vector< double > operator()(const std::vector< double > &input) override
Apply the activation function to input and return the result.
Definition activation_function.cpp:73
void apply(const std::vector< double > &input, std::vector< double > &out) const override
Apply the activation function in-place into a pre-allocated out buffer. out must already be sized to ...
Definition activation_function.cpp:78
HeavisideFunction(const HeavisideFunction &)=default
double getXShift() const
Definition activation_function.cpp:109
bool operator==(const HeavisideFunction &other) const
Definition activation_function.cpp:84
std::string toString() const override
Definition activation_function.cpp:94
Logistic (exponential) sigmoid.
Definition activation_function.h:70
std::unique_ptr< ActivationFunction > clone() const override
Definition activation_function.cpp:34
std::vector< double > operator()(const std::vector< double > &input) override
Apply the activation function to input and return the result.
Definition activation_function.cpp:12
std::string toString() const override
Definition activation_function.cpp:39
void apply(const std::vector< double > &input, std::vector< double > &out) const override
Apply the activation function in-place into a pre-allocated out buffer. out must already be sized to ...
Definition activation_function.cpp:17
void print() const override
Definition activation_function.cpp:51
double getXShift() const
Definition activation_function.cpp:62
double x_shift
Inflection point of the sigmoid (cedar: theta; cosivina: x0).
Definition activation_function.h:71
double getSteepness() const
Definition activation_function.cpp:57
SigmoidFunction(const SigmoidFunction &)=default
bool operator==(const SigmoidFunction &other) const
Definition activation_function.cpp:29
double steepness
Slope at the inflection point (cedar/cosivina: beta).
Definition activation_function.h:72