anchor.diff:          (n-inputs (flt (n-inputs-in-batch trainer)))
           (momentum (momentum trainer))
           (weight-decay (weight-decay trainer))
  -        #+nil
           (weight-penalty (weight-penalty trainer)))
       (declare (type flt learning-rate n-inputs momentum
                      weight-decay #+nil weight-penalty))
       (mgl-mat:scal! momentum weight-deltas)
  -    (mgl-mat:axpy! (flt (/ n-inputs)) accumulator weight-deltas)
  +    (mgl-mat:axpy! (/ n-inputs) accumulator weight-deltas)
       ;; FIXME: WEIGHT-PENALTY
       #+nil
       (unless (zerop weight-penalty)
  
positive.code: (defmethod maybe-update-weights ((trainer batch-gd-trainer) n-new-inputs)
    (when (<= (batch-size trainer)
              (incf (n-inputs-in-batch trainer) n-new-inputs))
      (update-all-weights trainer))
    (incf (n-inputs trainer) n-new-inputs))
  
  ;;; delta_w' += m * delta_w + df/dw
  
negative.code: in the batch or the number of uses the weight in question has seen.")
     (momentum
      :initform #.(flt 0) :initarg :momentum :accessor momentum)
     (momentum-type
      :initform :normal :initarg :momentum-type :accessor momentum-type
      :type '(member :normal :nesterov))
     (weight-decay
      :initform #.(flt 0) :initarg :weight-decay :accessor weight-decay
      :documentation "WEIGHT-DECAY * WEIGHT is added to the gradient to
  