the perceptron algorithm