Все просто, умножение чистой ошибки на input меняет знак direction_and_amount, если input имеет отрицательное значение. Такое обращение знака гарантирует изменение веса в правильном направлении, даже когда input имеет отрицательное значение.
Если для первой пары ошибка составит 1000, а для второй –1000, тогда средняя ошибка получится равной нулю! Фактически вы обманете сами себя, считая свой прогноз идеальным, когда на самом деле каждый раз промахивались на целую 1000!