Backward pass through the network, including update.

        Parameters
        ----------
        diff_x : numpy array
            A matrix containing the differences between the input and neurons.
        influences : numpy array
            A matrix containing the influence each neuron has on each
            other neuron. This is used to calculate the updates.
        activations : numpy array
            The activations each neuron has to each data point. This is used
            to calculate the BMU.
        differency_y : numpy array
            The differences between the input and context neurons.

        Returns
        -------
        updates : tuple of arrays
            The updates to the weights and context weights, respectively.

def backward(self, diff_x, influences, activations, **kwargs):
        """
        Backward pass through the network, including update.

        Parameters
        ----------
        diff_x : numpy array
            A matrix containing the differences between the input and neurons.
        influences : numpy array
            A matrix containing the influence each neuron has on each
            other neuron. This is used to calculate the updates.
        activations : numpy array
            The activations each neuron has to each data point. This is used
            to calculate the BMU.
        differency_y : numpy array
            The differences between the input and context neurons.

        Returns
        -------
        updates : tuple of arrays
            The updates to the weights and context weights, respectively.

        """
        diff_y = kwargs['diff_y']
        bmu = self._get_bmu(activations)
        influence = influences[bmu]

        # Update
        x_update = np.multiply(diff_x, influence)
        y_update = np.multiply(diff_y, influence)

        return x_update, y_update