Simplify weight training by using 1D in the right way

This commit is contained in:
Pascal Serrarens 2026-07-06 11:38:33 +02:00
parent 10e1dd0126
commit 88114cc048

View File

@ -668,7 +668,7 @@ namespace NanoBrain {
public void BackPropagation1D(float derivative, float learningRate) {
foreach (Synapse synapse in this.synapses)
synapse.BackPropagation(this, derivative, learningRate);
synapse.BackPropagation(this, derivative, learningRate);
// Bias
if (this.trainable) {
@ -689,7 +689,14 @@ namespace NanoBrain {
public void BackPropagation3D(Vector3 derivative, float learningRate) {
foreach (Synapse synapse in this.synapses)
synapse.BackPropagation(this, derivative, learningRate);
// synapse.BackPropagation(this, derivative, learningRate);
// As the weight cannot change the direction of the derivative
// we can use the simpler, 1D backpropagation here
// But we still need to determine the sign of the derivative
if (Synapse.AreOpposed(derivative, synapse.neuron.activation))
synapse.BackPropagation(this, -derivative.magnitude, learningRate);
else
synapse.BackPropagation(this, derivative.magnitude, learningRate);
// Bias
if (this.trainable) {