问题
I tried to use a single perceptron to predict the XOR gate. However, the results seem to be completely random and I cannot find the error.
What am I doing wrong here ? - Is my training method wrong? - or is there any error in the perceptron model ? - or a single perceptron cannot be used for this problem ?
class Perceptron {
    constructor(input_nodes, learning_rate) {
        this.nodes = input_nodes;
        this.bias = Math.random() * 2 - 1;
        this.learning_rate = learning_rate;
        this.weights = [];
        for (let i = 0; i < input_nodes; i++) {
            this.weights.push(Math.random() * 2 - 1)
        }
    }
    train (inputs, desired_output) {
        // Guess the result
        let guess = this.predict(inputs);
        let error = desired_output - guess;
        // Adjust weights and bias
        for (let i = 0; i < this.weights.length; i++) {
            this.weights[i] += this.learning_rate * error * inputs[i];         
        }
        this.bias += error * this.learning_rate;
    }
    predict (input_array) {
        if ( input_array.length != this.nodes) throw new Error({message: 'Invalid Input!'})
        let sum = this.bias;
        for (let i = 0; i < input_array.length; i++) {
            sum += this.weights[i] * input_array[i];
        }
        return this.activate(sum);
    }
    activate (num) {
        return num < 0 ? 0 : 1;
    }
}
module.exports = Perceptron;
if ( require.main === module ) {
    let p = new Perceptron(2, 0.003);
    for ( let i = 0; i < 1000; i++ ) {
        p.train([0, 0], 0);
        p.train([0, 1], 1);
        p.train([1, 0], 1);
        p.train([1, 1], 0);
    }
    console.log( p.predict([0, 1]) )
}
回答1:
You don't seem to have a hidden layer. Neural Networks have at least one 'middle' layer that also propagates the values. like so 
Here is a great place to make a simple neural net.
来源:https://stackoverflow.com/questions/48448454/simple-perceptron-in-javascript-for-xor-gate