why does perceptron algorithm work