source: liacs/ai/poker/report.tex@ 31

Last change on this file since 31 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

File size: 12.7 KB
Line 
1%
2% $Id: report.tex 557 2008-04-08 22:57:09Z rick $
3%
4
5\documentclass[12pt,a4paper]{article}
6
7\frenchspacing
8\usepackage[english,dutch]{babel}
9\selectlanguage{dutch}
10\usepackage{graphicx}
11\usepackage{url}
12\usepackage{multicol}
13\usepackage{fancybox}
14\usepackage{amssymb,amsmath}
15
16\author{Rick van der Zwet, Universiteit Leiden}
17\title{Kunstmatige Intelligentie 2008 --- opdracht 3 \\
18\large{Neurale netwerken}}
19\author{Rick van der Zwet\\
20 \texttt{<hvdzwet@liacs.nl>}\\
21 \\
22 LIACS\\
23 Leiden University\\
24 Niels Bohrweg 1\\
25 2333 CA Leiden\\
26 The Netherlands}
27\date{\today}
28
29\begin{document}
30
31\maketitle
32
33\section{Inleiding}
34
35Dit verslag gaat over de derde programmeer-opgave van het vak
36kunstmatige intelligentie~\cite{opdracht}. Welke als opdracht heeft om
37een neuraal netwerk te bouwen, wat met \'e\'en verborgen laag Poker
38handen kan classificeren. Dit alle met met als doel de bouw en
39werking van neurale netwerken (\emph{NN}) uit het college
40boek~\cite{collegeboek} beter te kunnen begrijpen.
41
42\section{Uitleg probleem}
43
44Om het probleem een visueel gestalte te geven is gekozen om een
45pokerhand te bepalen. Als invoer wordt er 5 kaarten uitgegeven, waarvan
46de waarde en kleur apart gecodeerd zijn in respectievelijk 13 en 4
47mogelijke waardes.. Met deze kaarten kan er een van de 10 combinaties
48van een pokerhand gevormd worden. Als er 5 willekeurige kaarten
49aangeboden worden is het de taak van het NN daar de juiste combinatie
50bij te zoeken. Er wordt geen informatie gegeven wat de regels zijn om
51de combinaties te maken, maar er worden wel voorbeelden gegeven van
52valide combinaties. Nadat alle voorbeelden gezien zijn worden er
53willekeurige combinaties kaarten aangeboden, de taak is om deze set zo
54goed mogelijk te clasifiseren.
55
56
57\begin{figure}[!ht]
58\begin{center}
59\includegraphics[scale=0.25]{neuraal-netwerk}
60\end{center}
61\caption{
62Voorbeeld van een 1-laags neuraal netwerk met 2 invoer nodes, 3
63verbonden perceptronen, 2 uitvoer nodes.
64}
65\label{fig:feedforward}
66\end{figure}
67
68
69\section{Theorie}
70
71Voor de menselijke beleving is het relatief makkelijk om in \'e\'en opzicht
72te zien welke pokerhand er in hand is of om dit aan te leren, door
73voorbeelden aan te bieden, waarbij dan logische regels worden afgeleid.
74Om in een algoritme hetzelfde \emph{lerende} gedrag te simuleren/cre\"eren
75zijn NN uitgevonden in verschillende smaken en stijlen. Dit verslag
76focust zich in feed-forward netwerken welke als voordeel hebben dat ze
77een van de simpelste neurale netwerken zijn, waarbij de informatie maar
78een richting op gaat.
79
80Bij een NN kan uit 3 of meerdere lagen onderscheiden worden. Als eerste
81is er de \emph{invoer} laag met zijn invoer nodes, waar de gecodeerde
82invoer op komt te staa. Bij gecodeerd wordt een waarde tussen 0 en 1
83bedoeld de reden hiervan komt later aan de orde. De \emph{verborgen}
84laag kan uit meerdere lagen bestaan, maar tijdens dit verslag zal focust
85worden op \'e\'en laag. In deze verborgen laag zitten de
86\emph{perceptronen}, welke de intelligentie zijn van het NN. In de
87\emph{uitvoer} laag zitten de uitvoer nodes, welke hun waarde weer
88tussen 0 en 1 bevinden.
89Tussen alle nodes in de invoer laag en de
90uitvoer laag zitten takken, zo ook tussen de verborgen laag en de
91uitvoer laag. Zie ook figuur~\ref{fig:feedforward}.
92
93Een perceptronen heeft de eigenschap dat het een \emph{activatie}
94functie bezit en een drempel waarde. Stel dit voor als een persoon die
95je slaat, als iemand dit zachtjes doet zal je niets zeggen, als dit een
96stuk harder is zal je 'auwch' roepen. De kracht die het nodig om je auwch te
97laten roepen is de drempelwaarde. Van binnen voelde dat dit pijn deed
98naar mate je harder werd geslagen ging je meer pijn voelen. Dit kan je
99het beste vatten in een lineaire functie. Vanwege het feit dat een NN
100een continue functie is ligt het voor de hand om een logaritmische
101functie te krijgen, waarbij de activatie functie de vorm krijgt van
102formule~\ref{eq:perceptron}. Dit verklaart tevens waarom de invoer en
103uitvoer tussen 0 en 1 moeten liggen, gezien dit ook het uitvoer bereik
104is.
105
106\begin{equation}
107uit = \frac{1}{1 + e^{in}}
108\label{eq:perceptron}
109\end{equation}
110
111De $in$ in formule~\ref{eq:perceptron} is een gewogen invoer van alle
112$inkomende takken * het gewicht van een tak$. De drempel waarde is
113echter een vervelend feit, welke makkelijker op te lossen is met een
114zogenoemde \emph{bias} knoop, de waarde op deze knoop is altijd $-1$,
115waardoor deze samen met het gewicht was tussen deze bias knoop en de
116knoop hangt zorgt voor de drempelwaarde die origineel gebruikt was nu
117de drempelwaarde $0$ gebruikt kan worden.
118
119
120De gewichten zijn het `magische' van het NN, deze gewichten kunnen
121namelijk getraind worden waardoor de uitvoer van het neurale netwerk kan
122veranderen. Deze training word \emph{backpropagation} genoemd en heeft
123een correlatie met de fout in de uitvoer, het huidige gewicht en de
124leer-snelheid en de invoer. Om deze fout in een koop te bepalen moet er
125gekeken worden naar de fout in de uitvoer en het gewicht naar tak van
126die knoop, zie formule~\ref{eq:gewicht}. Waarbij $\triangle_{uit}$
127gelijk is aan $\triangle_{j} = g'(in_j)\sum_i W_{j,i}\triangle{i}$
128Waarbij $i$ all opvolgende knopen van $j$ zijn.
129
130\begin{equation}
131W_{in,uit} = \alpha * a_{in} * \triangle_{uit}
132\label{eq:gewicht}
133\end{equation}
134
135De fouten worden dus omgekeerd berekend, eerst de fouten van de uitvoer
136laag, dan de verborgen lagen ervoor en als die zijn die van de invoer
137laag.
138
139\section{Aanpak}
140Er is gekozen gebruik te maken voorbeeld implementatie raamwerk gegeven
141in de sheet \cite{web-sheet} tijdens het college kunstmatige
142intelligentie welke een pseudo beschrijving geeft voor het programmeren
143van een neuraal netwerk.
144
145\begin{verbatim}
146herhaal
147 voor elke E in trainings set doe
148 voorzie de invoer knopen
149 bereken de waardes in de perceptronen en uitvoer-knopen
150 bereken de delta fouten van de knopen en perceptronen
151 pas de takken aan
152totdat netwerk "geconvergeerd"
153\end{verbatim}
154
155Als eerste stap is simpele Perl code gebruikt om van de training en
156validatie sets een in- en uitvoer data voor het NN te schrijven waarbij
157alle waarden tussen 0 en 1 liggen. Perl code is een stuk flexibeler als
158het gaat om tekst verwerking dan C code.
159
160Om ook eens met een kritische noot naar de invoer te kijken en de
161daadwerkelijke intelligentie van een NN, zal er extra knopen toegevoegd
162worden om te kijken hoe deze presteren. Voor de poker set zijn dit een
163paar specifieke combinaties namelijk de setjes -doubles, triples, four-
164en de aantallen kaarten van elke soort kleur.
165
166Nadat het netwerk geschreven is kan deze getest worden met een het leren
167van de zogenoemde XOR functie. Deze functie is niet lineair te scheiden,
168maar is met een NN van 2 invoer, 3 verborgen, 1 uitvoer perfect te
169berekenen/leren.
170
171\section{Implementatie}
172
173Het NN is geschreven in C, hevig hangend op globale array waar de data
174in zit en losse functies om de programma flow duidelijker te maken. De
175pre-parse is geschreven in Perl en Bourne shell code.
176
177\section{Experimenten}
178Alle testen zijn uitgevoerd met een computer, waarbij gcc 4.01 als
179compiler aanwezig was en Perl 5.8.8 als parser . Bij wijziging van de
180input knopen of uitvoer knopen, is de pre-parse aangeroepen en de code
181opnieuw gecompileerd met de nieuwe waardes.
182
183Tijdens alle simulaties het de trainingsset een grootte van 25000. De
184eind validatie set -welke de eind kwaliteit van het NN bepaald- 1
185miljoen. En de tussentijdse kwaliteit set heeft een grootte van 1000,
186welke na elke 100 training invoeren draaien.
187
188
189Tijdens de leersnelheid experiment is gebruik gemaakt van het de
190standaard poker set, met 10 invoeren, 10 uitvoeren en 10 verborgen
191perceptronen. De resultaten zijn te zien in figuur~\ref{fig:leersnelheid}.
192De verborgen perceptronen test is gedaan om dezelfde data set, hierbij is de
193leer-snelheid 0.5 gekozen, deze resultaten staan in figuur~\ref{fig:verborgen}.
194
195\begin{center}
196\begin{figure}
197\includegraphics[width=0.75\textwidth]{test-learn}
198\caption{NN training verloop bij variabele leersnelheden}
199\label{fig:leersnelheid}
200\end{figure}
201\end{center}
202
203\begin{center}
204\begin{figure}
205\includegraphics[width=0.75\textwidth]{test-perceptrons}
206\caption{NN training verloop bij variabele verborgen invoer laag grootte}
207\label{fig:verborgen}
208\end{figure}
209\end{center}
210
211Tijdens de invoer variatie is gekozen voor vijf verschillende
212combinaties, de randvoorwaarden zijn 10 uitvoer knopen, aantal verborgen
213knopen 20, leersnelheid 0.5 De standaard set hierna afgekort met
214\emph{STD} (1). STD met kleur tellingen (2), STD met paar tellingen (3),
215STD met kleur en paar tellingen (4), de paar tellingen + kleur tellingen
216(5) . Resultaten staan in tabel~\ref{tab:invoer-variatie}.
217
218\begin{center}
219\begin{table}
220\caption{Prestaties NN bij verschillende invoer data types}
221\begin{tabular}{l|r|r}
222Invoer variatie & Maximale kwaliteit in \% & Voorbeelden nodig \\
223\hline
2241 & 49.92 & 400 \\
2252 & 49.82 & 600 \\
2263 & 92.26 & 1800 \\
2274 & 92.26 & 6800 \\
2285 & 92.26 & 600 \\
229\end{tabular}
230\label{tab:invoer-variatie}
231\end{table}
232\end{center}
233
234
235%%Resultaten
236
237\section{Conclusie}
238Er is gekeken naar verschillende aspecten van het neurale netwerk.
239Heeft toevoegen van nieuwe knopen met extra informatie invloed
240op de uitvoer? Heeft de leer-snelheid een positief effect op het NN?
241Heeft het aantal verborgen perceptronen invloed op het netwerk? Dit
242alle gecombineerd tot het originele probleem: Is het mogelijk goed
243poker-handen te voorspellen aan te hand van een 1-laags NN.
244
245Het vari\"eren van leer-snelheid levert geen beter kwaliteit NN
246op, als de leer-snelheid echter tussen 0 en 1 ligt zal het verloop minder
247grillig zijn en zal het NN niet `te ver' doorschieten in een bepaalde
248richting.
249
250Het vari\"eren van het aantal verborgen knopen levert een maximum op als het
251aantal verborgen knopen groter of gelijk is aan het aantal invoer
252knopen. In het kader van de efficient is het aan te raden, deze rond de
253waarde van de invoer knopen te houden om zo het aantal berekeningen dat
254uitgevoerd moet worden zo minimaal mogelijk te houden.
255
256Het grillige verloop van de grafiek in figuur~\ref{fig:leersnelheid} als
257ook in figuur~\ref{fig:verborgen} is een gedag wat niet verklaard kan
258worden. Verder onderzoek met bijvoorbeeld een andere data-set of de data
259in een andere volgorde aan te bieden zou hier misschien uitsluitsel voor
260kunnen bieden.
261
262Het vari\"eren van de invoer heeft groot effect op te effectiviteit van
263het netwerk. Bij het kiezen van de juiste data verdubbeld het netwerk
264zijn effectiviteit. Dit kan verklaard worden doordat op het moment de
265paren van te voren bepaald worden deze intelligentie niet meer door het
266systeem ontdekt hoeft te worden. Het probleem wordt dus eigenlijk
267versimpeld. Wel is het noodzakelijk relevante versimpelingen te maken.
268Het tellen van het aantal kaarten van een bepaalde kleur heeft duidelijk
269geen enkel effect in het netwerk, wat logisch is als we dichter naar de
270poker kaarten gaan kijken. Hiervoor is het enkel interessant om te weten
271of er 5 dezelfde kleuren in zitten of niet. Elke andere tussenvorm
272levert geen extra informatie op.
273
274Voor een vervolg verslag zou gekeken kunnen worden of een meer laags
275NN een beter resultaat boekt bij het ontdekken van de poker kaarten.
276Verder zouden er ook 'debug' sets ontwikkeld kunnen worden waarbij een
277willekeurig NN netwerk getest kan worden op juiste werking, gegeven alle
278randvoorwaarden. Deze optie wordt momenteel enkel voor een XOR voorbeeld
279gegeven welke enkel maar een validatie set is van een zeer beperkt
280probleem. Het is namelijk niet aan te tonen of het netwerk fout
281geimplementeerd is.
282
283\begin{thebibliography}{10}
284
285\bibitem{opdracht}
286W.A.~Kosters, Kunstmatige intelligentie Programmeer-opgave 3 van 2008
287-- Neurale netwerken, \url{http://www.liacs.nl/~kosters/AI/nn08.html}
288
289\bibitem{web-sheet}
290W.A.~Kosters, Kunstmatige intelligentie College neurale netwerken 2008,
291\url{http://www.liacs.nl/~kosters/AI/neuraal.pdf}
292
293\bibitem{collegeboek}
294S.J. Russell en P. Norvig, Artificial Intelligence, A Modern Approach,
295Second ediion, Prentice Hall, 2003.
296
297\bibitem{website}
298Asuncion, A. \& Newman, D.J. (2007). UCI Machine Learning Repository
299\url{http://www.ics.uci.edu/~mlearn/MLRepository.html}. Irvine, CA:
300University of California, School of Information and Computer Science.
301
302\bibitem{website-poker}
303Robert Cattral (cattral@gmail.com) and Franz Oppacher (oppacher@scs.carleton.ca)
304Carleton University, Department of Computer Science, Intelligent Systems Research Unit
305\url{http://archive.ics.uci.edu/ml/datasets/Poker+Hand}
306
307\end{thebibliography}
308\newpage
309\advance\textwidth by 8cm
310\advance\oddsidemargin by -3cm
311\advance\evensidemargin by -3cm
312\advance\topmargin by -2cm
313\advance\textheight by 4cm
314\advance\footskip by -4cm
315\marginparwidth 0cm
316\twocolumn
317\section*{Appendix}
318De NN code en pre-parse.pl code zagen er als volgt uit:
319\newline
320\tiny
321%preformatted with `source-highlight -n -f latex bridge.cc`
322\input{nn.c}
323\input{data/pre-parse.pl}
324\onecolumn
325
326\end{document}
Note: See TracBrowser for help on using the repository browser.