Articles

Het XOR-probleem in neurale netwerken.

Inleiding
Dit is het eerste artikel in een serie van artikelen over implementaties van kunstmatige neurale netwerken (ANN). Het doel van dit artikel is om de lezer te helpen een intuïtie te krijgen van de basisconcepten, alvorens verder te gaan met de algoritmische implementaties die zullen volgen.

Er wordt geen voorkennis verondersteld, hoewel, in het belang van beknoptheid, niet alle terminologie wordt uitgelegd in het artikel. In plaats daarvan worden hyperlinks gegeven naar Wikipedia en andere bronnen waar aanvullende lectuur nodig kan zijn.

Dit is een groot onderwerp. ANNs hebben een grote verscheidenheid aan toepassingen en kunnen worden gebruikt voor supervised, unsupervised, semi-supervised en reinforcement learning. En dan heb ik het nog niet eens over de probleem-specifieke architecturen binnen die categorieën. Maar we moeten ergens beginnen, dus om het toepassingsgebied te beperken, zullen we beginnen met de toepassing van ANNs op een eenvoudig probleem.

Het XOr Probleem
Het XOr, of “exclusief of”, probleem is een klassiek probleem in ANN onderzoek. Het is het probleem van het gebruik van een neuraal netwerk om de outputs van XOr logische poorten te voorspellen gegeven twee binaire inputs. Een XOr functie moet een ware waarde teruggeven als de twee inputs niet gelijk zijn en een foute waarde als ze wel gelijk zijn. Alle mogelijke ingangen en voorspelde uitgangen zijn weergegeven in figuur 1.

XOr is een classificatieprobleem waarvan de verwachte uitgangen van tevoren bekend zijn. Daarom is het aangewezen een benadering van gesuperviseerd leren te gebruiken.

Op het eerste gezicht lijkt XOr een zeer eenvoudig probleem, maar Minksy en Papert (1969) toonden aan dat dit een groot probleem was voor neurale netwerkarchitecturen uit de jaren zestig, bekend als perceptrons.

Perceptrons
Zoals alle ANNs is de perceptron opgebouwd uit een netwerk van eenheden, die analoog zijn aan biologische neuronen. Een eenheid kan een input van andere eenheden ontvangen. Daarbij neemt zij de som van alle ontvangen waarden en besluit of zij een signaal gaat doorgeven aan andere eenheden waarmee zij verbonden is. Dit wordt activering genoemd. De activeringsfunctie gebruikt een of ander middel om de som van de ingangswaarden te reduceren tot een 1 of een 0 (of een waarde die heel dicht bij een 1 of een 0 ligt) om de activering of het ontbreken daarvan weer te geven. Een andere vorm van eenheid, bekend als een bias-eenheid, activeert altijd en zendt gewoonlijk een hard gecodeerde 1 naar alle eenheden waarmee zij is verbonden.

Perceptrons omvatten één laag invoereenheden – met inbegrip van één bias-eenheid – en één uitvoereenheid (zie figuur 2). Hier wordt een bias-eenheid weergegeven door een gestippelde cirkel, terwijl andere eenheden worden weergegeven als blauwe cirkels. Er zijn twee niet bias input units die de twee binaire inputwaarden voor XOr vertegenwoordigen. Er kan een willekeurig aantal invoereenheden worden opgenomen.

Het perceptron is een soort feed-forward netwerk, hetgeen betekent dat het proces voor het genereren van een uitvoer – bekend als voorwaartse voortplanting – in één richting van de invoerlaag naar de uitvoerlaag stroomt. Er zijn geen verbindingen tussen eenheden in de inputlaag. In plaats daarvan zijn alle eenheden in de inputlaag rechtstreeks verbonden met de output-eenheid.

Een vereenvoudigde uitleg van het forward propagation-proces is dat de inputwaarden X1 en X2, samen met de biaswaarde van 1, worden vermenigvuldigd met hun respectieve gewichten W0..W2, en naar de output-eenheid worden doorgesluisd. De uitgangseenheid neemt de som van deze waarden en gebruikt een activeringsfunctie – gewoonlijk de Heavside step-functie – om de resulterende waarde om te zetten in een 0 of een 1, en zo de ingangswaarden als 0 of 1 te classificeren.

Het is de instelling van de gewichtsvariabelen die de auteur van het netwerk controle geeft over het proces van omzetting van ingangswaarden in een uitgangswaarde. Het zijn de gewichten die bepalen waar de classificatielijn, de lijn die de gegevenspunten in classificatiegroepen scheidt, wordt getrokken. Als alle datapunten aan één kant van een classificatielijn de klasse 0 krijgen, worden alle andere geclassificeerd als 1.

Een beperking van deze architectuur is dat zij slechts in staat is om datapunten met één enkele lijn te scheiden. Dit is jammer, omdat de XOr-ingangen niet lineair scheidbaar zijn. Dit is vooral zichtbaar als je de XOr ingangswaarden in een grafiek uitzet. Zoals te zien is in figuur 3, is er geen manier om de 1 en 0 voorspellingen te scheiden met een enkele classificatielijn.

Multilayer Perceptrons
De oplossing voor dit probleem is om verder te gaan dan de enkellaagse architectuur door een extra laag eenheden toe te voegen zonder enige directe toegang tot de buitenwereld, die bekend staat als een verborgen laag. Een dergelijke architectuur – weergegeven in figuur 4 – is een ander feed-forward netwerk dat bekend staat als een meerlagig perceptron (MLP).

Het is de moeite waard op te merken dat een MLP een willekeurig aantal eenheden kan hebben in de input-, verborgen en output-lagen. Er kan ook een willekeurig aantal verborgen lagen zijn. De hier gebruikte architectuur is specifiek ontworpen voor het XOr-probleem.

Gelijk aan de klassieke perceptron begint de voorwaartse voortplanting met het vermenigvuldigen van de invoerwaarden en de vertekeningseenheid van de invoerlaag met hun respectieve gewichten, maar in dit geval is er een gewicht voor elke combinatie van invoer (met inbegrip van de vertekeningseenheid van de invoerlaag) en verborgen eenheid (met uitzondering van de vertekeningseenheid van de verborgen laag). De producten van de waarden van de inputlaag en hun respectieve gewichten worden verwerkt als input voor de non-bias eenheden in de verborgen laag. Elke non-bias verborgen eenheid gebruikt een activeringsfunctie – gewoonlijk de klassieke sigmoid-functie in het geval van het XOr-probleem – om de som van hun invoerwaarden te verlagen tot een waarde die tussen 0 en 1 valt (gewoonlijk een waarde die heel dicht bij 0 of 1 ligt). De outputs van elke verborgen laag, inclusief de bias-unit, worden dan vermenigvuldigd met een andere set van respectieve gewichten en verwerkt tot een output-unit. De uitgangseenheid parseert ook de som van zijn ingangswaarden door een activeringsfunctie – ook hier is de sigmoïdfunctie geschikt – om een uitgangswaarde terug te geven die valt tussen 0 en 1. Dit is de voorspelde uitgang.

Deze architectuur is weliswaar complexer dan die van het klassieke perceptronnetwerk, maar is in staat een niet-lineaire scheiding tot stand te brengen. Met de juiste reeks gewichtswaarden kan het dus de scheiding aanbrengen die nodig is om de XOr-ingangen nauwkeurig te classificeren.

Backpropagation
De olifant in de kamer is natuurlijk de vraag hoe men aan een reeks gewichtswaarden komt die ervoor zorgen dat het netwerk de verwachte uitvoer produceert. In de praktijk zou het handmatig vinden van een aanvaardbare set gewichten voor een MLP netwerk een ongelooflijk arbeidsintensieve taak zijn. In feite is het NP-complete (Blum and Rivest, 1992). Gelukkig is het echter mogelijk om automatisch een goede set gewichtswaarden te leren door middel van een proces dat bekend staat als backpropagatie. Rumelhart et al. (1985) toonden voor het eerst aan dat dit goed werkt voor het XOr-probleem.

Het backpropagation-algoritme begint met het vergelijken van de werkelijke waarde die door het voorwaartse propagatieproces is verkregen met de verwachte waarde en gaat dan achteruit door het netwerk, waarbij elk van de gewichten lichtjes wordt aangepast in een richting die de grootte van de fout met een kleine graad vermindert. Zowel de voorwaartse als de achterwaartse propagatie worden duizenden keren op elke inputcombinatie herhaald totdat het netwerk de verwachte output van de mogelijke inputs met behulp van voorwaartse propagatie nauwkeurig kan voorspellen.

Voor het xOr-probleem is 100% van de mogelijke datavoorbeelden beschikbaar om in het trainingsproces te gebruiken. We kunnen dus verwachten dat het getrainde netwerk 100% accuraat is in zijn voorspellingen en het is niet nodig om bezorgd te zijn over zaken als bias en variantie in het resulterende model.

Conclusie
In deze post werd het klassieke ANN XOr probleem onderzocht. Het probleem zelf werd in detail beschreven, samen met het feit dat de inputs voor XOr niet lineair scheidbaar zijn in hun correcte classificatiecategorieën. Een niet-lineaire oplossing – met een MLP-architectuur – werd op hoog niveau onderzocht, samen met het voorwaartse propagatie-algoritme dat wordt gebruikt om een outputwaarde van het netwerk te genereren en het backpropagatie-algoritme, dat wordt gebruikt om het netwerk te trainen.

De volgende post in deze serie zal een Java-implementatie van de hier beschreven MLP-architectuur bevatten, inclusief alle componenten die nodig zijn om het netwerk te trainen om als een XOr-logische poort te fungeren.

Blum, A. Rivest, R. L. (1992). Het trainen van een neuraal netwerk met 3 knooppunten is NP-complete. Neurale netwerken, 5(1), 117-127.