in the code with einstein notation:
for trace: $$ \langle \theta \rangle = \frac{1}{B} \sum_{t=1}^B \theta_t $$
update theta = use a moving average of previous batch-averaged quadratic postsynaptic activities where
How to implement
It is a bit unclear which modification function was used in the original paper.
While some sources state that it was
explanation in the paper: "The response of favored patterns grows until the mean response is high enough and the state stabilizes" (p. 36)
Instead of a temporal average, using the spatial average has become popular https://www.sciencedirect.com/science/article/pii/S0893608005800036
Aside from that calculating the treshold with a moving average $$ \theta_t = \gamma \theta_{t-1} + (1-\gamma) \langle z^2 \rangle_{b_t} $$ (Squadrani et al., 2022)
and a first order low-pass filter (Udeigwe et al., 2017) have been introduced
The original model does not provide an activation function for the postsynaptic activtiy.
Research has showed that a good activation function should be:
-
nonlinear "ot achieve nontrivial results" https://pmc.ncbi.nlm.nih.gov/articles/PMC9141587/
-
positive for biological interpretation https://pmc.ncbi.nlm.nih.gov/articles/PMC9141587/
-
function should be non symmetrical: https://www.researchgate.net/publication/2308452_Effect_of_Binocular_Cortical_Misalignment_on_Ocular_Dominance_and_Orientation_Selectivity
Often the sigmoid function is used as an activation https://pmc.ncbi.nlm.nih.gov/articles/PMC9141587/ Law and Cooper http://www.scholarpedia.org/article/BCM_theory
- Relu performs well in deep neural network learning so they chose RELU (Squadrani et al., 2022)
Resources:
- http://www.scholarpedia.org/article/BCM_theory
- https://neuronaldynamics.epfl.ch/online/Ch19.S2.html
- https://www.researchgate.net/publication/2308452_Effect_of_Binocular_Cortical_Misalignment_on_Ocular_Dominance_and_Orientation_Selectivity
- https://pmc.ncbi.nlm.nih.gov/articles/PMC9141587/
- https://github.com/Nico-Curti/plasticity
- https://github.com/Nico-Curti/plasticity/blob/main/plasticity/source/bcm.pyx
- https://github.com/Nico-Curti/plasticity/blob/main/plasticity/model/bcm.py
