Kijk eerst de sheets en volg het bijbehorende college.
Het is allereerst de bedoeling een eenvoudig Neuraal Netwerk (NN) te programmeren met één verborgen laag dat simpele Booleaanse functies, zoals XOR, kan leren.
Maak een netwerk voor 2-inputs (X)OR- en AND-problemen. Houd het wel algemeen.
Gebruik het skelet-programma
en bekijk deze hints.
Zorg er altijd voor dat de voorbeelden in random volgorde
worden aangeboden.
Bestudeer de verschillen, gebruik verschillende leersnelheden, activatiefuncties, aantallen verborgen knopen, epochs, etcetera. Wanneer gaat het fout? Is er verschil tussen OR en XOR?
Leg duidelijk uit over welke fout gerapporteerd wordt.
Rapporteer ook over een "serieuze" dataset, namelijk Poker Hand, met per vijf kaarten de bijbehorende poker-classificatie (0=Nothing..9=RoyalFlush).
Zo betekent 2,5,3,1,3,13,4,13,3,8,1 een pokerhand met Schoppen 5, Ruiten 1 (aas), Ruiten 13 (koning), Klaver 13 (koning) en Ruiten 8: 1 (One Pair).
Deze dataset is afkomstig van de UCI Machine Learning repository.
Voor alle zekerheid staat hier een kopie.
In totaal zijn er wel een miljoen voorbeelden. Het is lastig om een volledige classificatie te verwachten, dus neem verstandig een aantal uitvoeren = classificaties bij elkaar; de meest eenvoudige is Nothing versus Something (waarbij 1..9 wordt opgevat als 1), maar misschien kan het netwerk beter!
Probeer wellicht eerst of het netwerk in staat is één of meer gelijke te detecteren in 3, 4 of 5 getallen. Waarschijnlijk heb je veel verborgen knopen nodig (vergroot zonodig MAX). Denk aan de normalisatie van de target. En probeer iets origineels. Let er ook op dat de file goed ingelezen wordt, soms gaat er iets mis met de regelovergangen (Windows versus Linux).
Voor gnuplot zie bij de vorige opgaven.
Leg in het verslag ook kort BackPropagation uit, met de formules (geen bewijs),
en uiteraard een referentie naar het juiste hoofdstuk in Russell en Norvig.
En een referentie voor de dataset.
In te leveren: een geprint exemplaar van het verslag
(alleen eigen C++-code in de appendix)
tijdens het college,
en de volledige C++-code via Brightspace => Assignments.
Het verslag moet aan verschillende
eisen voldoen.
Deadline: woensdag 15 mei 2024, 13:15 uur.
Vragen en/of opmerkingen kunnen worden gestuurd naar: aicollege@liacs.leidenuniv.nl.
23 april 2024 — https://www.liacs.leidenuniv.nl/~kosterswa/AI/nn24.html