In many textbooks it is said, that convolution can be interpreted as a pattern recognizer and that if kernel is located in region similar to it, then it gives greater response, than when it locates in different region.
But consider 1D case. Suppose we have kernel [1, 0.5]:

Now if this kernel will check "it's" pattern

the outcome will be
1*1 + 0.5*0.5= 1.25
and if kernel will check "foreign" pattern

the outcome will be
1*1 + 0.5*1= 1.5
i.e. higher.
So how kernel can be interpreted as a matcher? May be negative kernel values should be located in undesired regions and only kernels with negative values can recognize?