How are filters weights updated for a CNN?
You have made many wrong assumptions in this question. First theoretically speaking,


Filters do not work in the way to 'pick up elements' (they work on principle of edge detection).
You have assumed only a single combination of filter weights will give the desired output (assuming continuous weights not binary). This is especially in prominence in the problem of Regularization where we want to choose a set of weights without over-fitting data.
The error you used looks very similar to Perceptron update rule (squared error gives the same derivative, but make sure you are not confusing the two).
Backpropagation through 'dead ReLu's' is not possible (see this answer for more details).


Now, let us check mathematically:


  Input Volume:


$$
    \begin{matrix}
    1 &amp; -1 &amp; 0 \\
    0 &amp; 1 &amp; 0 \\
    0 &amp; -1 &amp; 1 \\
    \end{matrix}
$$


  Desired Output:


$$
    \begin{matrix}
    1 &amp; -1 \\
    0 &amp; 1  \\
    \end{matrix}
$$

Note, in this step you desire an output which is negative (element (0,-1)), but you are forward propagating through a ReLu which is cutting off the negative part, thus the gradients have no way to communicate or update the required negative.
Basically,

$ wx \rightarrow ReLu \rightarrow y$ is happening and if 'x' is a negative number then $y$ is always $0$ thus $(target-y)$ is always $target$ and hence whatever the value of $x$ error remains constant, and if we want to backpropagate (assuming squared error) then:

$\frac{d}{dw} (target - y)^2 = 2*(target - y)*\frac{d}{dw}y = -2*(target - y)*0 = 0$ (Remember from the ReLu output graph slope is $0$ in the negative region).


  Now, you randomise a filter:


$$
    \begin{matrix}
    1 &amp; -1 \\
    1 &amp; 1  \\
    \end{matrix}
$$

apply ReLu and get the following:

$$
    \begin{matrix}
    3 &amp; 0 \\
    0 &amp; 1  \\
    \end{matrix}
$$

again you have chosen you target to have a negative number which is not possible in the case of ReLu activation.

But continuing you get the error as:

$$
    \begin{matrix}
    -2 &amp; -1 \\
    0 &amp; 0  \\
    \end{matrix}
$$

use error to compute gradients (which again you have calculated wrong,by Backpropagating through ReLu's with ) values and also missed the minus sign associated with the output, but you have compensated it by adding it to the $w$ whereas the convention is to subtract):

$$
    \begin{matrix}
    1 &amp; 2 \\
    1 &amp; -2  \\
    \end{matrix}
$$

And get the new filter as:

$$
    \begin{matrix}
    0.5 &amp; 0 \\
    0.5 &amp; 0  \\
    \end{matrix}
$$

This is a pretty good approximation of the desired filter (even though the previous steps have wrong assumptions, but it does not matter much, since what you essentially did was use a linear activation function which will work, if you go through enough iterations). So basically you are using a Linear Filters and the details are too hodge podge for me to go into, so I will suggest some resources for you to see ReLu backpropagation:

Deep Neural Network - Backpropogation with ReLU