protected override void TrainCore(Step downstream)
{
int inputIndex = 0;
int definitionIndex = correctClass * InputLength;
foreach (Step upstream in downstream.Upstream)
{
Debug.Assert(inputIndex + upstream.Length <= InputLength);
for (int i = 0; i < upstream.Length; i++)
{
double desiredState = ClassStateDefinitions[definitionIndex];
double firstDerivative = 2.0 * (upstream.Output[inputIndex] - desiredState);
upstream.ErrorDerivative[inputIndex] = firstDerivative;
inputIndex += 1;
definitionIndex += 1;
}
}
}