From 88114cc048e3d6c6c614c2438b82e663e8610ffd Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Mon, 6 Jul 2026 11:38:33 +0200 Subject: [PATCH] Simplify weight training by using 1D in the right way --- Runtime/Scripts/Core/Neuron.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Runtime/Scripts/Core/Neuron.cs b/Runtime/Scripts/Core/Neuron.cs index 646607c..c0dfc6b 100644 --- a/Runtime/Scripts/Core/Neuron.cs +++ b/Runtime/Scripts/Core/Neuron.cs @@ -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) {