Bardo.AgentManager.SignalAggregator (Bardo v0.1.0)

View Source

The SignalAggregator module contains various aggregation functions.

An aggregation function is a function that in some manner gathers the input signal vectors, does something with it and the synaptic weights, and then produces a scalar value. For example, consider the dot product. The dot_product aggregation function composes the scalar value by aggregating the input vectors, and then calculating the dot product of the input vectors and the synaptic weights.

Another way to calculate a scalar value from the input and weight vectors is by multiplying the corresponding input signals by their weights, but instead of adding the resulting multiplied values, we multiply them. The are many other types of aggregation functions that could be created. We can also add normalizer functions, which could normalize the input signals.

Summary

Functions

Apply the appropriate aggregation function to the input.

The diff_product can be thought of as a neuron that looks not at the actual signal amplitudes, but the temporal difference in signal amplitudes. If the input signals have stabilized, then the neuron's input is calculated as a 0, if there is a sudden change in the signal, the neuron will see it.

The dot_product aggregation function is used in almost all artificial neural network implementations. It can be considered stable/proven.

The worth of the mult_product aggregation function is questionable, and should be further studied through benchmarking and testing. If there is any worth to this type of signal aggregator, evolution will find it!

Functions

apply(atom, i_acc, i_pid_ps)

@spec apply(atom(), [{pid(), [float()]}], [{pid(), [float()]}]) :: float()

Apply the appropriate aggregation function to the input.

This is a dispatcher that routes to the appropriate aggregation function based on the function name provided.

diff_product(i_acc, i_pid_ps)

@spec diff_product([{pid(), [float()]}], [{pid(), [float()]}]) :: float()

The diff_product can be thought of as a neuron that looks not at the actual signal amplitudes, but the temporal difference in signal amplitudes. If the input signals have stabilized, then the neuron's input is calculated as a 0, if there is a sudden change in the signal, the neuron will see it.

dot_product(i_acc, i_pid_ps)

@spec dot_product([{pid(), [float()]}], [{pid(), [float()]}]) :: float()

The dot_product aggregation function is used in almost all artificial neural network implementations. It can be considered stable/proven.

mult_product(i_acc, i_pid_ps)

@spec mult_product([{pid(), [float()]}], [{pid(), [float()]}]) :: float()

The worth of the mult_product aggregation function is questionable, and should be further studied through benchmarking and testing. If there is any worth to this type of signal aggregator, evolution will find it!