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 |
|
---|
35 | Dit verslag gaat over de derde programmeer-opgave van het vak
|
---|
36 | kunstmatige intelligentie~\cite{opdracht}. Welke als opdracht heeft om
|
---|
37 | een neuraal netwerk te bouwen, wat met \'e\'en verborgen laag Poker
|
---|
38 | handen kan classificeren. Dit alle met met als doel de bouw en
|
---|
39 | werking van neurale netwerken (\emph{NN}) uit het college
|
---|
40 | boek~\cite{collegeboek} beter te kunnen begrijpen.
|
---|
41 |
|
---|
42 | \section{Uitleg probleem}
|
---|
43 |
|
---|
44 | Om het probleem een visueel gestalte te geven is gekozen om een
|
---|
45 | pokerhand te bepalen. Als invoer wordt er 5 kaarten uitgegeven, waarvan
|
---|
46 | de waarde en kleur apart gecodeerd zijn in respectievelijk 13 en 4
|
---|
47 | mogelijke waardes.. Met deze kaarten kan er een van de 10 combinaties
|
---|
48 | van een pokerhand gevormd worden. Als er 5 willekeurige kaarten
|
---|
49 | aangeboden worden is het de taak van het NN daar de juiste combinatie
|
---|
50 | bij te zoeken. Er wordt geen informatie gegeven wat de regels zijn om
|
---|
51 | de combinaties te maken, maar er worden wel voorbeelden gegeven van
|
---|
52 | valide combinaties. Nadat alle voorbeelden gezien zijn worden er
|
---|
53 | willekeurige combinaties kaarten aangeboden, de taak is om deze set zo
|
---|
54 | goed mogelijk te clasifiseren.
|
---|
55 |
|
---|
56 |
|
---|
57 | \begin{figure}[!ht]
|
---|
58 | \begin{center}
|
---|
59 | \includegraphics[scale=0.25]{neuraal-netwerk}
|
---|
60 | \end{center}
|
---|
61 | \caption{
|
---|
62 | Voorbeeld van een 1-laags neuraal netwerk met 2 invoer nodes, 3
|
---|
63 | verbonden perceptronen, 2 uitvoer nodes.
|
---|
64 | }
|
---|
65 | \label{fig:feedforward}
|
---|
66 | \end{figure}
|
---|
67 |
|
---|
68 |
|
---|
69 | \section{Theorie}
|
---|
70 |
|
---|
71 | Voor de menselijke beleving is het relatief makkelijk om in \'e\'en opzicht
|
---|
72 | te zien welke pokerhand er in hand is of om dit aan te leren, door
|
---|
73 | voorbeelden aan te bieden, waarbij dan logische regels worden afgeleid.
|
---|
74 | Om in een algoritme hetzelfde \emph{lerende} gedrag te simuleren/cre\"eren
|
---|
75 | zijn NN uitgevonden in verschillende smaken en stijlen. Dit verslag
|
---|
76 | focust zich in feed-forward netwerken welke als voordeel hebben dat ze
|
---|
77 | een van de simpelste neurale netwerken zijn, waarbij de informatie maar
|
---|
78 | een richting op gaat.
|
---|
79 |
|
---|
80 | Bij een NN kan uit 3 of meerdere lagen onderscheiden worden. Als eerste
|
---|
81 | is er de \emph{invoer} laag met zijn invoer nodes, waar de gecodeerde
|
---|
82 | invoer op komt te staa. Bij gecodeerd wordt een waarde tussen 0 en 1
|
---|
83 | bedoeld de reden hiervan komt later aan de orde. De \emph{verborgen}
|
---|
84 | laag kan uit meerdere lagen bestaan, maar tijdens dit verslag zal focust
|
---|
85 | worden 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
|
---|
88 | tussen 0 en 1 bevinden.
|
---|
89 | Tussen alle nodes in de invoer laag en de
|
---|
90 | uitvoer laag zitten takken, zo ook tussen de verborgen laag en de
|
---|
91 | uitvoer laag. Zie ook figuur~\ref{fig:feedforward}.
|
---|
92 |
|
---|
93 | Een perceptronen heeft de eigenschap dat het een \emph{activatie}
|
---|
94 | functie bezit en een drempel waarde. Stel dit voor als een persoon die
|
---|
95 | je slaat, als iemand dit zachtjes doet zal je niets zeggen, als dit een
|
---|
96 | stuk harder is zal je 'auwch' roepen. De kracht die het nodig om je auwch te
|
---|
97 | laten roepen is de drempelwaarde. Van binnen voelde dat dit pijn deed
|
---|
98 | naar mate je harder werd geslagen ging je meer pijn voelen. Dit kan je
|
---|
99 | het beste vatten in een lineaire functie. Vanwege het feit dat een NN
|
---|
100 | een continue functie is ligt het voor de hand om een logaritmische
|
---|
101 | functie te krijgen, waarbij de activatie functie de vorm krijgt van
|
---|
102 | formule~\ref{eq:perceptron}. Dit verklaart tevens waarom de invoer en
|
---|
103 | uitvoer tussen 0 en 1 moeten liggen, gezien dit ook het uitvoer bereik
|
---|
104 | is.
|
---|
105 |
|
---|
106 | \begin{equation}
|
---|
107 | uit = \frac{1}{1 + e^{in}}
|
---|
108 | \label{eq:perceptron}
|
---|
109 | \end{equation}
|
---|
110 |
|
---|
111 | De $in$ in formule~\ref{eq:perceptron} is een gewogen invoer van alle
|
---|
112 | $inkomende takken * het gewicht van een tak$. De drempel waarde is
|
---|
113 | echter een vervelend feit, welke makkelijker op te lossen is met een
|
---|
114 | zogenoemde \emph{bias} knoop, de waarde op deze knoop is altijd $-1$,
|
---|
115 | waardoor deze samen met het gewicht was tussen deze bias knoop en de
|
---|
116 | knoop hangt zorgt voor de drempelwaarde die origineel gebruikt was nu
|
---|
117 | de drempelwaarde $0$ gebruikt kan worden.
|
---|
118 |
|
---|
119 |
|
---|
120 | De gewichten zijn het `magische' van het NN, deze gewichten kunnen
|
---|
121 | namelijk getraind worden waardoor de uitvoer van het neurale netwerk kan
|
---|
122 | veranderen. Deze training word \emph{backpropagation} genoemd en heeft
|
---|
123 | een correlatie met de fout in de uitvoer, het huidige gewicht en de
|
---|
124 | leer-snelheid en de invoer. Om deze fout in een koop te bepalen moet er
|
---|
125 | gekeken worden naar de fout in de uitvoer en het gewicht naar tak van
|
---|
126 | die knoop, zie formule~\ref{eq:gewicht}. Waarbij $\triangle_{uit}$
|
---|
127 | gelijk is aan $\triangle_{j} = g'(in_j)\sum_i W_{j,i}\triangle{i}$
|
---|
128 | Waarbij $i$ all opvolgende knopen van $j$ zijn.
|
---|
129 |
|
---|
130 | \begin{equation}
|
---|
131 | W_{in,uit} = \alpha * a_{in} * \triangle_{uit}
|
---|
132 | \label{eq:gewicht}
|
---|
133 | \end{equation}
|
---|
134 |
|
---|
135 | De fouten worden dus omgekeerd berekend, eerst de fouten van de uitvoer
|
---|
136 | laag, dan de verborgen lagen ervoor en als die zijn die van de invoer
|
---|
137 | laag.
|
---|
138 |
|
---|
139 | \section{Aanpak}
|
---|
140 | Er is gekozen gebruik te maken voorbeeld implementatie raamwerk gegeven
|
---|
141 | in de sheet \cite{web-sheet} tijdens het college kunstmatige
|
---|
142 | intelligentie welke een pseudo beschrijving geeft voor het programmeren
|
---|
143 | van een neuraal netwerk.
|
---|
144 |
|
---|
145 | \begin{verbatim}
|
---|
146 | herhaal
|
---|
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
|
---|
152 | totdat netwerk "geconvergeerd"
|
---|
153 | \end{verbatim}
|
---|
154 |
|
---|
155 | Als eerste stap is simpele Perl code gebruikt om van de training en
|
---|
156 | validatie sets een in- en uitvoer data voor het NN te schrijven waarbij
|
---|
157 | alle waarden tussen 0 en 1 liggen. Perl code is een stuk flexibeler als
|
---|
158 | het gaat om tekst verwerking dan C code.
|
---|
159 |
|
---|
160 | Om ook eens met een kritische noot naar de invoer te kijken en de
|
---|
161 | daadwerkelijke intelligentie van een NN, zal er extra knopen toegevoegd
|
---|
162 | worden om te kijken hoe deze presteren. Voor de poker set zijn dit een
|
---|
163 | paar specifieke combinaties namelijk de setjes -doubles, triples, four-
|
---|
164 | en de aantallen kaarten van elke soort kleur.
|
---|
165 |
|
---|
166 | Nadat het netwerk geschreven is kan deze getest worden met een het leren
|
---|
167 | van de zogenoemde XOR functie. Deze functie is niet lineair te scheiden,
|
---|
168 | maar is met een NN van 2 invoer, 3 verborgen, 1 uitvoer perfect te
|
---|
169 | berekenen/leren.
|
---|
170 |
|
---|
171 | \section{Implementatie}
|
---|
172 |
|
---|
173 | Het NN is geschreven in C, hevig hangend op globale array waar de data
|
---|
174 | in zit en losse functies om de programma flow duidelijker te maken. De
|
---|
175 | pre-parse is geschreven in Perl en Bourne shell code.
|
---|
176 |
|
---|
177 | \section{Experimenten}
|
---|
178 | Alle testen zijn uitgevoerd met een computer, waarbij gcc 4.01 als
|
---|
179 | compiler aanwezig was en Perl 5.8.8 als parser . Bij wijziging van de
|
---|
180 | input knopen of uitvoer knopen, is de pre-parse aangeroepen en de code
|
---|
181 | opnieuw gecompileerd met de nieuwe waardes.
|
---|
182 |
|
---|
183 | Tijdens alle simulaties het de trainingsset een grootte van 25000. De
|
---|
184 | eind validatie set -welke de eind kwaliteit van het NN bepaald- 1
|
---|
185 | miljoen. En de tussentijdse kwaliteit set heeft een grootte van 1000,
|
---|
186 | welke na elke 100 training invoeren draaien.
|
---|
187 |
|
---|
188 |
|
---|
189 | Tijdens de leersnelheid experiment is gebruik gemaakt van het de
|
---|
190 | standaard poker set, met 10 invoeren, 10 uitvoeren en 10 verborgen
|
---|
191 | perceptronen. De resultaten zijn te zien in figuur~\ref{fig:leersnelheid}.
|
---|
192 | De verborgen perceptronen test is gedaan om dezelfde data set, hierbij is de
|
---|
193 | leer-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 |
|
---|
211 | Tijdens de invoer variatie is gekozen voor vijf verschillende
|
---|
212 | combinaties, de randvoorwaarden zijn 10 uitvoer knopen, aantal verborgen
|
---|
213 | knopen 20, leersnelheid 0.5 De standaard set hierna afgekort met
|
---|
214 | \emph{STD} (1). STD met kleur tellingen (2), STD met paar tellingen (3),
|
---|
215 | STD 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}
|
---|
222 | Invoer variatie & Maximale kwaliteit in \% & Voorbeelden nodig \\
|
---|
223 | \hline
|
---|
224 | 1 & 49.92 & 400 \\
|
---|
225 | 2 & 49.82 & 600 \\
|
---|
226 | 3 & 92.26 & 1800 \\
|
---|
227 | 4 & 92.26 & 6800 \\
|
---|
228 | 5 & 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}
|
---|
238 | Er is gekeken naar verschillende aspecten van het neurale netwerk.
|
---|
239 | Heeft toevoegen van nieuwe knopen met extra informatie invloed
|
---|
240 | op de uitvoer? Heeft de leer-snelheid een positief effect op het NN?
|
---|
241 | Heeft het aantal verborgen perceptronen invloed op het netwerk? Dit
|
---|
242 | alle gecombineerd tot het originele probleem: Is het mogelijk goed
|
---|
243 | poker-handen te voorspellen aan te hand van een 1-laags NN.
|
---|
244 |
|
---|
245 | Het vari\"eren van leer-snelheid levert geen beter kwaliteit NN
|
---|
246 | op, als de leer-snelheid echter tussen 0 en 1 ligt zal het verloop minder
|
---|
247 | grillig zijn en zal het NN niet `te ver' doorschieten in een bepaalde
|
---|
248 | richting.
|
---|
249 |
|
---|
250 | Het vari\"eren van het aantal verborgen knopen levert een maximum op als het
|
---|
251 | aantal verborgen knopen groter of gelijk is aan het aantal invoer
|
---|
252 | knopen. In het kader van de efficient is het aan te raden, deze rond de
|
---|
253 | waarde van de invoer knopen te houden om zo het aantal berekeningen dat
|
---|
254 | uitgevoerd moet worden zo minimaal mogelijk te houden.
|
---|
255 |
|
---|
256 | Het grillige verloop van de grafiek in figuur~\ref{fig:leersnelheid} als
|
---|
257 | ook in figuur~\ref{fig:verborgen} is een gedag wat niet verklaard kan
|
---|
258 | worden. Verder onderzoek met bijvoorbeeld een andere data-set of de data
|
---|
259 | in een andere volgorde aan te bieden zou hier misschien uitsluitsel voor
|
---|
260 | kunnen bieden.
|
---|
261 |
|
---|
262 | Het vari\"eren van de invoer heeft groot effect op te effectiviteit van
|
---|
263 | het netwerk. Bij het kiezen van de juiste data verdubbeld het netwerk
|
---|
264 | zijn effectiviteit. Dit kan verklaard worden doordat op het moment de
|
---|
265 | paren van te voren bepaald worden deze intelligentie niet meer door het
|
---|
266 | systeem ontdekt hoeft te worden. Het probleem wordt dus eigenlijk
|
---|
267 | versimpeld. Wel is het noodzakelijk relevante versimpelingen te maken.
|
---|
268 | Het tellen van het aantal kaarten van een bepaalde kleur heeft duidelijk
|
---|
269 | geen enkel effect in het netwerk, wat logisch is als we dichter naar de
|
---|
270 | poker kaarten gaan kijken. Hiervoor is het enkel interessant om te weten
|
---|
271 | of er 5 dezelfde kleuren in zitten of niet. Elke andere tussenvorm
|
---|
272 | levert geen extra informatie op.
|
---|
273 |
|
---|
274 | Voor een vervolg verslag zou gekeken kunnen worden of een meer laags
|
---|
275 | NN een beter resultaat boekt bij het ontdekken van de poker kaarten.
|
---|
276 | Verder zouden er ook 'debug' sets ontwikkeld kunnen worden waarbij een
|
---|
277 | willekeurig NN netwerk getest kan worden op juiste werking, gegeven alle
|
---|
278 | randvoorwaarden. Deze optie wordt momenteel enkel voor een XOR voorbeeld
|
---|
279 | gegeven welke enkel maar een validatie set is van een zeer beperkt
|
---|
280 | probleem. Het is namelijk niet aan te tonen of het netwerk fout
|
---|
281 | geimplementeerd is.
|
---|
282 |
|
---|
283 | \begin{thebibliography}{10}
|
---|
284 |
|
---|
285 | \bibitem{opdracht}
|
---|
286 | W.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}
|
---|
290 | W.A.~Kosters, Kunstmatige intelligentie College neurale netwerken 2008,
|
---|
291 | \url{http://www.liacs.nl/~kosters/AI/neuraal.pdf}
|
---|
292 |
|
---|
293 | \bibitem{collegeboek}
|
---|
294 | S.J. Russell en P. Norvig, Artificial Intelligence, A Modern Approach,
|
---|
295 | Second ediion, Prentice Hall, 2003.
|
---|
296 |
|
---|
297 | \bibitem{website}
|
---|
298 | Asuncion, A. \& Newman, D.J. (2007). UCI Machine Learning Repository
|
---|
299 | \url{http://www.ics.uci.edu/~mlearn/MLRepository.html}. Irvine, CA:
|
---|
300 | University of California, School of Information and Computer Science.
|
---|
301 |
|
---|
302 | \bibitem{website-poker}
|
---|
303 | Robert Cattral (cattral@gmail.com) and Franz Oppacher (oppacher@scs.carleton.ca)
|
---|
304 | Carleton 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}
|
---|
318 | De 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}
|
---|