[2] | 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}
|
---|