1

XOR n'est pas résoluble en utilisant un seul perceptron avec un produit scalaire standard et une fonction pas à pas.Comment exécuter un perceptron à 2 couches pour résoudre XOR

Cet article suggère d'utiliser 3 Perceptron pour faire un réseau: http://toritris.weebly.com/perceptron-5-xor-how--why-neurons-work-together.html

Je suis en train de gérer le réseau 3 perceptron cette façon, mais il ne produit pas de résultats corrects pour XOR:

//pseudocode 
class perceptron { 

    constructor(training_data) { 
    this.training_data = training_data 
    } 

    train() { 
    iterate multiple times over training data 
    to train weights 
    } 

    unit_step(value) { 
    if (value<0) return 0 
    else return 1 
    } 

    compute(input) { 
    weights = this.train() 
    sum  = scalar_product(input,weights) 
    return unit_step(sum) 
    } 
} 

Le perceptron ci-dessus peut résoudre les opérations NOT, AND, OU bits correctement. Voici comment j'utilise 3 Perceptron pour résoudre XOR:

AND_perceptron = perceptron([ 
    {Input:[0,0],Output:0}, 
    {Input:[0,1],Output:0}, 
    {Input:[1,0],Output:0}, 
    {Input:[1,1],Output:1} 
]) 

OR_perceptron = perceptron([ 
    {Input:[0,0],Output:0}, 
    {Input:[0,1],Output:1}, 
    {Input:[1,0],Output:1}, 
    {Input:[1,1],Output:1} 
]) 

XOR_perceptron = perceptron([ 
    {Input:[0,0],Output:0}, 
    {Input:[0,1],Output:1}, 
    {Input:[1,0],Output:1}, 
    {Input:[1,1],Output:0} 
]) 

test_x1 = 0 
test_x2 = 1 

//first layer of perceptrons 
and_result = AND_perceptron.compute(test_x1,test_x2) 
or_result = OR_perceptron.compute(test_x1,test_x2) 

//second layer 
final_result = XOR_perceptron.compute(and_result,or_result) 

Le final_result ci-dessus n'est pas cohérente, parfois 0, parfois 1. Il semble que je lance les 2 couches à tort. Comment faire fonctionner correctement ces 3 perceptrons en 2 couches?

Répondre

2

Si vous voulez construire un réseau de neurones avec conjonctions logiques (et, ou, non), vous devez considérer les équivalences suivantes concernant XOR:

A XOR B ≡ (A ∨ B) ∧ ¬ (A ∧ B) ≡ (A ∨ B) ∧ (¬A ∨ ¬B) ≡ (A ∧ ¬B) ∨ (¬A ∧ B)

donc, vous auriez besoin d'au moins trois ou et- ou -perceptrons et une négation si vous voulez utiliser vos perceptrons si je les comprends correctement. Dans l'article ils utilisent trois perceprons avec des poids spéciaux pour le xor. Ce ne sont pas les mêmes que et/et ou-perceptrons.

+0

tks, donc je peux utiliser 2 perceptrons qui peuvent apprendre ET, OU, et faire le résultat pour XOR basé sur ces 2 perceptrons – johnlowvale