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) {