Professional Documents
Culture Documents
Treball
Treball
Cornellà de Llobregat
Juny 2010
INDEX
Abstract! 5
Introducció i Antecedents ! 6
Objectius! 6
Part Teòrica
Les Xarxes Neuronals Biològiques ! 7
Entrades! 17
Pesos Sinàptics! 17
Regla de Propagació! 17
Funció d'activació! 17
Funció de sortida! 18
Arquitectures! 18
Dinàmica d'actualització! 19
Entrenament! 19
El Perceptró Multicapa! 25
2
Algoritme de Retropropagació (Back-Propagation)! 27
Problemes de lʼaprenentatge! 32
Mapes de Kohonen! 37
Entrenament! 38
LʼAlgoritme dʼaprenentatge! 39
Part Experimental
Objectius! 41
Implementació i Resultat! 44
Conclusions! 47
Implementació! 48
Resultats! 49
Conclusions! 50
Preprocessament de dades! 52
Implementació! 54
Resultats! 56
3
Conclusions! 56
Conclusions! 57
Annex A! 58
Funcionament del Simulador de Perceptró Multicapa! 58
Bibliografia! 64
4
Abstract
Les xarxes neuronals artificials són un dels mecanismes que ha trobat la ciència de la
computació per a crear programes intel·ligents. Els seu funcionament es basa en el del
cervell i una de les seves característiques principals és la capacitat dʼaprendre a partir
dʼexemples.
En aquest treball sʼestudien alguns dels tipus més comuns de xarxes artificials, les seves
semblances i diferencies amb el cervell i amb els ordinadors convencionals i les
avantatges i desavantatges que tenen sobre aquests. A més, sʼutilitza tota la informació
adquirida per crear i utilitzar xarxes en aplicacions pràctiques aplicables a la vida real.
5
Introducció i Antecedents
Marvin Lee Minsky diu “La Intel·ligència Artificial (IA) es troba en un estat irrisori ja que
podem fer que les màquines facin les coses que fa un “expert” però no podem fer que faci
la majoria de coses que fa un nen de 4 anys.”
Això és cert i ja fa temps que la IA no aconsegueix superar aquest estat tot i les constants
millores en el camp de la informàtica. Les Xarxes Neuronals Artificials són una branca de
la IA que intenta copiar els mecanismes adoptats per la naturalesa desprès de milers
dʼanys dʼevolució per a solucionar problemes complexos.
No estic dient que les xarxes neuronals siguin una solució al problema de la IA, les xarxes
existeixen des de fa molt de temps i també semblen estar estancades. Però si podem
solucionar problemes millor que un “expert” perquè costa fer que una màquina faci coses
que un nen de 4 anys ja sap fer? Potser sʼhauria de mirar com ho fem nosaltres per
aplicar-ho a la pràctica. I és que un ordinador té un funcionament molt diferent al dʼun
cervell.
Objectius
Aquest treball es divideix en dues parts. La primera, teòrica, té com a objectiu estudiar
alguns dels tipus més comuns de xarxes neuronals artificials, veure les seves semblances
i diferències amb la biologia, les semblances i diferències amb la informàtica
convencional, les seves aplicacions pràctiques i les seves avantatges i desavantatges.
La segona part, que és més pràctica i experimental, té com a objectiu implementar les
xarxes estudiades en programes informàtics amb finalitats útils i comprovar de primera mà
la fiabilitat i lʼeficàcia que tenen i els problemes que poden sorgir.
Lʼobjectiu global del treball és estudiar el funcionament de les xarxes neuronals artificials i
veure quina utilitat poden tenir avui en dia i en el futur.
6
Part Teòrica
Aquest treball tracta sobre els sistemes neuronals artificials. Aquests sistemes es basen,
en gran part, en el sistema nerviós animal. Per això, abans de començar a explicar el
funcionament dels sistemes artificials, explicarem una mica el funcionament dels sistemes
originals.
El sistema nerviós està compost per una xarxa de cèl·lules individuals, les neurones,
connectades entre si que és transmeten informació constantment. Aquesta xarxa és
immensa, el sistema nerviós humà està format per entre 1010 i 1011 neurones amb un
nombre similar de cèl·lules de suport.
Tot i que les neurones poden arribar a ser molt variades totes tenen aquestes tres parts:
• Soma: el cos de la cèl·lula, dʼentre 10 i 80 micres de longitud.
• Arbre dendrític: Ramificacions que surten del soma.
• Axó: fibra tubular allargada que surt de lʼarbre dendrític i que al final acaba
ramificant-se un altre cop. Pot tenir entre 100 micres i 1 metre. Els axons
constitueixen els nervis.
7
Una neurona es pot veure com un processador senzill on les dendrites són el canal
dʼentrada dʼinformació i l'axó nʼés el canal de sortida, passant pel soma.
La sinapsis és el punt dʼunió entre dues neurones. En les sinapsis les neurones no es
toquen, acostumen a estar separades unes 0,2 micres, i la informació només hi pot
circular en un sentit.
Quan una neurona envia informació a una altra la punta de lʼaxó allibera
neurotransmissors que travessen lʼespai sinàptic. Al arribar als canals sensibles de la
neurona receptora produeixen un pas dʼions creant un corrent elèctric, que pot ser
excitador o inhibidor. Si hi ha suficient excitació i el potencial de la neurona sʼeleva per
sobre del llindar dʼactivació (-45 mV) la neurona sʼactiva passant del seu potencial normal
en repòs de -60 mV a uns +50 mV. Aquest potencial alliberat sʼanomena potencial dʼacció.
Això dura uns instants i desprès la neurona torna a la seva situació de repòs. Durant uns
moments després la neurona no pot tornar a activar-se.
8
Per aquest mecanisme és pot crear un tren dʼimpulsos elèctrics a una determinada
freqüència que variarà segons la intensitat dʼestimulació que rebi la neurona. El potencial
dʼacció que crea la neurona és desplaça des de la soma cap a la punta de lʼaxó on hi ha
unes vesícules amb neurotransmissors que transformen la senyal elèctrica en emissions
químiques de nou. La intensitat i el nombre de neurotransmissors dependran de la
freqüència dels impulsos elèctrics del potencial dʼacció.
La codificació en impulsos elèctrics fa que la senyal no perdi qualitat i que es pugui
transmetre a més distància.
Les xarxes neuronals tenen la capacitat dʼaprendre. Durant la vida dʼun ésser viu el cervell
es va modelant per adquirir nous coneixements. Les formes possibles de modelar el
cervell són:
• Establir noves connexions entre neurones.
• Trencar connexions entre neurones.
• Variar les intensitats sinàptiques.
• Destrucció de neurones.
La variació dʼintensitats sinàptiques és el mètode més usat per les xarxes neuronals
artificials.
9
Què és la Intel·ligència Artificial?
La IA Forta defensa que una màquina pugui arribar a pensar a un nivell igual o superior a
l'humà. La defensa d'aquest argument és que "Tot és material i, per tant, pot emular-se".
Seguint aquest argument, i descartant l'existència de l'ànima, les màquines fins hi tot
podrien arribar a tenir consciència, que podria ser útil com un mètode d'autocontrol per a
millorar el seu rendiment. Que les màquines puguin tenir consciència, pot sobtar a primera
vista, però últimament, alguns estudis en neurociencia [Mark Hallett, http://
www.ncbi.nlm.nih.gov/pmc/articles/PMC1950571/?tool=pubmed] apunten que la nostra
pròpia consciencia és una sensació generada per el nostre cervell.
Així, segons els defensors de la IA Forta, si una màquina té les entrades correctes i dona
les sortides correctes, pensa. En resposta els defensors de la IA Dèbil diuen que no per
saber les respostes s'és més intel·ligent. Un humà és més intel·ligent que una calculadora
però tindria més dificultats a l'hora de dir el quadrat de 42. La IA Dèbil diu que les
màquines poden arribar a actuar com si fòssin intel·ligents, però no ho són.
10
Història de la Intel·ligència Artificial
Als anys 70 van arribar els sistemes experts, programes on es codifica tot el coneixement
dʼexperts (gent amb amplis coneixements en un àrea) en una base de dades (base de
coneixement) en forma de regles de decisió i que, per mitjà de lʼanomenat motor
dʼinferència, efectua raonaments en base als coneixements que té adquirits. Aquests
programes són molt eficaços, però la creació dʼun sistema expert requereix molt dʼesforç i
temps per a poder abocar tots els coneixements de lʼexpert a la base de coneixement. Tot
i així són molt útils i s'utilitzen avui en dia per assessorar i ajudar als "experts humans" en
la presa de decisions. Però tots els programes que la IA havia fet fins la època fallaven a
la que sortien del seu marc de treball i també fallaven al enfrontar-se a problemes del
“mon real”.
11
mèdica seria com quantificar les respostes vagues de l'usuari com molt, poc, bastant… No
seria difícil (tot i que seria laboriós) abocar en el programa tot el coneixement mèdic
existent, en canvi si que representaria un repte quantificar adequadament el dolor del
pacient.
Així, després de lʼèxit dels sistemes experts, es van adonar que tot i que la capacitat de
computació havia augmentat exponencialment des dels inicis de la IA, els programes no
havien augmentat tant la seva intel·ligència i que la informació del món real seguia sent
molt superior a la capacitat de càlcul. Es comença a mirar cap a altres alternatives i
apareix el que és denomina com Soft Computing o Intel·ligència computacional, un
conjunt de tècniques inspirades sobretot en la natura que inclouen les Xarxes Neuronals
Artificials, la lògica difusa i els algorismes genètics, entre dʼaltres.
Les Xarxes Neuronals Artificials (XNA) són una de les tècniques de computació
inventades des de la intel·ligència artificial que copia l'estructura adoptada per l'evolució
per solucionar problemes que el cervell humà resol amb relativa facilitat i tenen la
particularitat d'aprendre i generalitzar conceptes a partir d'exemples (són entrenables).
Les XNA són un sistema de computació format per un gran nombre de processadors
simples (neurones) interconnectats entre si, imitant el sistema nerviós dels animals. Cada
neurona artificial produeix una sortida en funció de totes les entrades que rep. Les
connexions entre neurones tenen un pes que pot variar i que modifica el valor de sortida
respecte el valor d'entrada de les neurones que connecten, donant més o menys
importància a unes connexions que a dʼaltres.
Així quan una xarxa neuronal opera, el que fa es processar el conjunt de dades d'entrada
a traves de les múltiples neurones que la formen i dóna una sortida X com a resultat. El
valor de la sortida depèn del valor de l'entrada, del tipus de xarxa i de neurona i, dels
pesos de les connexions.
Les xarxes son dispositius entrenables, és a dir, els valors dels pesos i, a vegades, les
distribucions de les connexions i les neurones varien per ajustar-se a realitzar la tasca que
ens interessa. L'entrenament es fa a partir d'exemples i seguint uns algoritmes i és una
part molt important de les xarxes.
12
Xarxes Neuronals i Ordinadors Convencionals
Tot i que es sol comparar els ordinadors amb el cervell, a nivell operatiu són bastants
diferents. Com hem dit abans, un ordinador convencional basat en lʼArquitectura de Von
Neumann té un processador que executa instruccions dʼun programa seqüencialment
manipulant símbols i utilitzant una memòria fixa. En canvi una xarxa neuronal utilitza molts
processadors simples que actuen paral·lelament interconnectats entre si que sʼauto-
organitzen i aprenen dʼexemples, a més tenen el seu coneixement distribuït per tota la
xarxa.
Per últim és important veure que les xarxes neuronals no segueixen un algorisme o
programa en el sentit que ho fa un ordinador. El coneixement de les XNA està
emmagatzemat en els pesos de les connexions i les xarxes tenen la capacitat dʼaprendre
a partir dʼexemples i de la experiència i dʼextrapolar conceptes a partir dʼaquests, són
adaptatives i entrenables.
13
El pare de la IA, Alan Turing, va idear un model de màquina teòrica capaç de tractar
informació seguint un programa. La Màquina de Turing és
capaç de desplaçar-se per una cinta infinita i llegir i escriure
informació en cada casella. Les accions que duu a terme estan
escrites en un programa o algoritme que la màquina segueix.
La màquina de Turing pot tractar informació a nivell analític i pot
resoldre qualsevol problema computable. La majoria de
problemes són computables, un exemple de problema no
computable serien els problemes indecidibles, com el problema
de decisió (Entscheidungsproblem) que consisteix en saber si
una fórmula de càlcul de primer ordre és un teorema.
De la mateixa manera, les xarxes neuronals són també màquines de Turing. Això es
demostra veient que una xarxa neuronal pot realitzar qualsevol tasca que faci un circuit
digital ja que una xarxa neuronal es capaç d'implementar qualsevol funció booleana.
Tant un ordinador, com una xarxa neuronal son maquines de Turing però no tenen la
mateixa eficàcia en les mateixes tasques. Un ordinador convencional és molt més eficaç
en tasques d'alt nivell com lògica, càlcul o raonament. En canvi les xarxes neuronals són
millors per a resoldre tasques de baix nivell com percepció o classificació de patrons i per
a tractar amb grans quantitats d'informació.
14
Aplicacions Pràctiques de les Xarxes Neuronals
Les XNA són bastant útils en aplicacions on no es coneix lʼalgoritme o funció a programar
però es disposen de múltiples exemples dʼentrada. Són útils a la hora de donar respostes
a temps real i són útils a lʼhora de realitzar processos susceptibles a soroll de fons i
imperfeccions en les entrades.
Sʼha de tenir molt en compte que les xarxes no són la solució directa a un problema. La
implementació dʼuna xarxa en una aplicació sol anar acompanyada dʼaltres mecanismes
per optimitzar les dades dʼentrada i simplificar la tasca de la xarxa.
15
Bases de les Xarxes Neuronals Artificials
La unitat bàsica d'una xarxa neuronal artificial és la neurona, les neurones es poden
organitzar en capes i un conjunt de capes forma la xarxa neuronal. La xarxa neuronal,
juntament amb les entrades i sortides i els processos auxiliars que siguin necessaris per
adaptar les entrades i sortides constitueixen el sistema neuronal de processament.
A més de les neurones, un sistema neuronal necessita un patró que marqui les
connexions de les neurones (arquitectura) i un patró que marqui l'ordre en què les
neurones s'activen, a més d'una regla d'aprenentatge.
La Neurona
Una neurona és un processador simple que a partir d'un vector d'entrada procedent de
l'exterior o d'altres neurones proporciona una resposta o sortida.
Entrades
Les entrades, igual que les sortides, poden ser binaries (discretes), normalment 0 o 1, o
bé contínues depenent del tipus de xarxa. Les sortides de les neurones continues
solen estar limitades dins d'un interval definit.
Pesos Sinàptics
Per les connexions, sinapsis, que uneixen les neurones, la informació només pot
circular en un únic sentit. Així podem parlar de neurones presinàptiques, les que envien
la informació, i postsinàptiques, les que la reben.
Els pesos són valors que tenen les connexions entre neurones i que modifiquen
l'entrada de la neurona postsinàptica. Representen la intensitat d'interacció entre la
neurona presinàptica i la neurona postsinàptica. Si el pes és positiu és, amb més o
menys grau, excitador. Si és negatiu es inhibidor. Si una connexió és excitadora o
inhibidora sʼacostuma a decidir durant l'entrenament, no de manera explícita a l'hora de
planificar la xarxa.
Regla de Propagació
La regla de propagació és una funció que obté el potencial postsinàptic, el potencial
total que arriba a la neurona, a partir de les entrades i els pesos.
La funció més habitual és la suma de les entrades multiplicades cada una pel seu pes
corresponent. O el que és el mateix, el producte escalar dels vectors entrada i pes
sinàptic:
Funció d'activació
Dóna com a resultat l'estat d'activació actual a partir del potencial postsinàptic i de
l'estat d'activació anterior, tot i que moltes vegades l'estat d'activació anterior no es té
en compte (només tindria rellevància si la xarxa tingués en compte el factor temps a
lʼhora d'operar).
17
sigui derivable, com en el cas de l'algoritme de retropropagació del perceptró multicapa,
que veurem més endavant.
Funció de sortida
Proporciona la sortida final de la neurona en funció de l'estat d'activació. Normalment, o
bé la funció d'activació es considera com la sortida final o bé la funció de sortida és de
tipus esglaó, fent que la neurona es dispari a partir d'un cert valor.
Arquitectures
L'arquitectura d'una xarxa és l'estructura o patró amb que es connecten les neurones
d'aquesta. Aquesta estructura de connexions determina el comportament de la xarxa, és a
dir, si es canvia, les respostes i, possiblement, les capacitats de la xarxa canviaran.
Com ja hem dit les neurones s'agrupen en capes, i les neurones de les capes es poden
subdividir en altres grups.
De la mateixa manera que abans hem distingit tres tipus de neurones biològiques, també
podem, amb el mateix criteri, distingir diferents tipus de capes:
- Capa Oculta: Les neurones reben informació d'altres neurones i envien les seves
sortides a altres neurones. Es la única capa de la que n'hi pot haver mes d'una i
cada capa oculta dóna la possibilitat a la xarxa de trobar representacions internes
pròpies i diferents de l'entrada donada, és a dir, tenir un altre punt de vista de les
dades d'entrada, cosa que dóna més capacitat i llibertat a la xarxa (com veurem
amb el perceptró).
18
Podem classificar les xarxes segons les seves capes en xarxes monocapa (amb una sola
capa) i xarxes multicapa (dividides en varies capes). I segons les seves connexions en
xarxes unidireccionals, on la informació circula en un únic sentit, i xarxes realimentades
(feedback) on la informació pot circular en qualsevol sentit. Lʼesquema dʼuna xarxa
neuronal artificial que hem presentat abans correspondria a una xarxa realimentada i
multicapa.
Dinàmica d'actualització
• Dinàmica asíncrona: les neurones s'activen sense tenir en compte quan ho fan les
altres. Normalment les dinàmiques asíncrones s'utilitzen amb neurones de resposta
contínua, model que s'apropa més al biològic.
Entrenament
L'entrenament és el procés pel qual s'ajusten alguns dels paràmetres de la xarxa neuronal
per què realitzi un processament determinat utilitzant un conjunt de patrons d'entrada
establerts com a exemples.
19
Normalment aquests paràmetres a ajustar són els pesos de les connexions tot i que
l'entrenament també es pot fer creant i destruint neurones o connexions. Escollir
l'arquitectura adequada per a la xarxa, és a dir, escollir la distribució de neurones i
connexions també es pot considerar part de l'entrenament, si bé això no es fa de manera
automàtica.
Cal veure que si normalment l'únic que és modifica durant l'entrenament són els pesos,
són aquests els que tenen, d'alguna manera, emmagatzemada tota la informació que
permet a la xarxa operar correctament. Durant cada iteració, en què es planteja una
entrada exemple, el que la regla d'aprenentatge fa és guardar informació sobre aquesta
entrada en els pesos. D'aquesta manera, a més, la informació queda distribuïda per tota
la xarxa.
Clàssicament els algoritmes d'aprenentatge s'han dividit en dos grups, tot hi que seʼn
poden diferenciar més:
20
• Aprenentatge No Supervisat: Aquí no es proporciona més informació apart de les
entrades. El que fa la xarxa es organitzar d'alguna manera les diferents entrades.
Troba regularitats, extreu característiques comuns o organitza les entrades segons
algun tipus de similitud (fa clustering). Normalment aquestes xarxes realitzen una
estimació de la funció densitat de probabilitat, p(x). p(x) és la funció que defineix la
distribució que tenen els patrons x de l'espai d'entrada a partir de mostres.
L'aprenentatge no supervisat s'utilitza normalment per organitzar grans quantitats de
dades i en estadística.
21
El perceptró i el perceptró multicapa
El 1959 Rosenblatt va introduir el model del perceptró simple inspirat en les primeres
etapes de processament dels sistemes sensorials biològics. El perceptró va gaudir de molt
èxit durant els anys seixanta, però la publicació del treball de Minsky i Papert Perceptrons
l'any 1969 en va evidenciar les limitacions. La solució per a les limitacions del perceptró
era afegir més capes ocultes de neurones, creant el perceptró multicapa, però no se sabia
com entrenar una xarxa amb capes ocultes. El problema de l'entrenament dels
perceptrons multicapa es va resoldre per primer cop el 1974 per Werbos en la seva tesis
doctoral. Però el seu descobriment no va transcendir, segurament perquè en aquella
època els ordinadors encara no eren suficientment potents per a demostrar totes les
possibilitats dels perceptrons multicapa. Més tard, al 1984 D. Parker va redescobrir
l'algoritme d'entrenament, però qui li va donar la fama va ser el grup PDP (Parallel
Distributed Processing Research Group, Universitat de Califòrnia), que també va
redescobrir l'algoritme el 1985 i el va utilitzar en la resolució de problemes complexos.
El perceptró
El perceptró està format per dues capes, una d'entrada i una de sortida. Cada neurona de
la segona capa esta connectada a totes les de la primera, que no realitzen cap càlcul,
només serveixen com a entrada de la informació de l'exterior. La sortida de les neurones
de la segona capa és la sortida de la xarxa. En principi, el perceptró només accepta
entrades i sortides binaries (0 o 1 o bé -1 o 1 depenent de la funció d'activació de les
neurones).
22
Les neurones de cada capa s'actualitzen al mateix temps i les capes s'executen en ordre
des de l'entrada fins a la sortida. La tasca que duu a terme el perceptró es pot resumir
amb la formula:
On n són les neurones dʼentrada, m les de sortida, w es el vector de pesos, Θ els llindars i
x el vector dʻentrada de la xarxa.
És a dir, cada neurona de la segona capa realitza la suma de totes les entrades (de totes
les entrades de la xarxa, ja que cada neurona està connectada a totes les neurones
d'entrada) multiplicades pel seu pes. A el valor obtingut hi resta el llindar. El llindar és com
els pesos de les connexions, un valor lliure que es calibra durant l'entrenament de la
xarxa. I al resultat de la resta s'hi aplica la funció d'activació, que en el perceptró sol ser la
funció unitària de Heaviside:
23
Per a l'entrenament necessitem una xarxa amb els pesos i llindars aleatoris i un conjunt
de n patrons xu amb les sortides ideals tu on u = (1,...,n). El procés d'aprenentatge
consistiria en entrar un patró patró xu a la xarxa. Si la sortida de la xarxa no coincidís amb
tu actualitzaríem els pesos de la xarxa seguint la regla:
L'aprenentatge és iteratiu, així que aquesta tasca s'ha de realitzar amb tots els patrons xu
fins que el perceptró quedi ben ajustat. Com les entrades i les sortides són discretes, les
actualitzacions en els pesos també ho seran.
24
Per tant, el perceptró pot resoldre amb èxit qualsevol problema separable linealment, però
fracassarà en els que no ho són. Si el problema és separable linealment l'algoritme
d'aprenentatge acabarà trobant una solució en un nombre finit d'iteracions, si no, anirà
oscil·lant indefinidament.
El Perceptró Multicapa
Com ja hem dit, la manera de solucionar les limitacions del perceptró és afegint capes
ocultes. La següent imatge mostra les diferents regions de decisió possibles en funció de
si el perceptró té dues, tres o quatre capes.
Extret de http://www.willamette.edu/~gorr/classes/cs449/Classification/perceptron.html
Si les neurones són de resposta discreta els contorns de les regions de decisió tindran els
costats rectes, amb cantonades marcades. Si les neurones en canvi són de resposta
continua, els contorns no tindran cantonades.
S'ha demostrat matemàticament que un perceptró multicapa amb una capa oculta pot
aproximar qualsevol funció arbitraria donada. Això és molt important perquè, normalment,
quan es parla de resoldre un problema del món real el que es vol és trobar una funció que
transformi les entrades donades en les sortides desitjades.
25
En un perceptró multicapa cada neurona està connectada a totes les de la capa anterior
(excepte les dʼentrada, que tampoc realitzen cap càlcul). La operació és igual que en el
perceptró simple, però repetint-se per a cada capa i utilitzant com a entrada les sortides
de la capa anterior. Per a obtenir la sortida dʼuna capa donada que no sigui la d'entrada, el
calcul que duria a terme la xarxa seria:
Suposem una xarxa de quatre capes, una capa dʼentrada de dues neurones, dues capes
ocultes de tres i dues neurones i una de capa sortida dʼuna neurona. Amb uns pesos wmn
on m es la neurona presinàptica i n la postsinàptica. I amb una entrada x i una sortida y.
27
Cada neurona suma el producte de les seves entrades pels seus pesos obtenint e i aplica
la funció f(x) a e obtenint la sortida y.
Presentem una entrada i calculem successivament les sortides de totes les neurones
(capa a capa) fins a la última capa. Com a mostra, en la primera imatge es veu com
calcula la sortida y1 de la neurona 1 i en la segona la sortida y (la total) de la neurona 6.
28
Un cop hem calculat la sortida de la xarxa busquem lʼerror total.
Lʼerror total surt de restar a lʼobjectiu z la sortida de la xarxa y. Ara propaguem lʼerror cap
enrere. A mostra dʼexemple posem el càlcul de lʼerror de la sortida de la neurona 4 i de la
neurona 3.
Lʼerror només es propaga per les capes ocultes. Un cop tenim tots els errors propagats
comencem a actualitzar els pesos de cada capa. La formula per actualitzar els pesos és:
29
On wʼmn és el pes actualitzat, wmn el pes antic, δn és lʼerror en la neurona n, dfn(e)/de és la
derivada de la funció activació en e. e és el potencial postsinàptic, es a dir, la suma de
totes les entrades de la neurona multiplicades pels seus pesos, que ja ha estat calculat
quan buscàvem la sortida de la xarxa. xm és la sortida de la neurona presinàptica m i η és
un valor que determina la velocitat de lʼaprenentatge, com en el perceptró simple es
decideix arbitràriament.
En aquesta última imatge sʼhan actualitzat els pesos entre la primera capa i la neurona 1,
w(x1)1 i w(x2)1. El procés es repeteix amb tots els pesos fins a lʼultima capa.
30
Les regles dʼaprenentatge sʼacostumen a deduir a partir dʼalguna funció dʼerror o
dʼoptimització de la xarxa. En la retropropagació la formula és dedueix a partir de lʼerror
quadràtic mitjà. Lʼerror quadràtic és el quadrat de lʼerror total. Ens interessa anular per
igual tant lʼerror per excés com lʼerror per defecte, podríem aplicar el valor absolut de
lʼerror per eliminar el signe, però matemàticament el valor absolut és difícil de tractar i per
tant resulta més fàcil elevar al quadrat lʼerror. La formula de lʼerror quadràtic mitjà en
funció dels pesos i dels llindars és:
31
Aquesta gràfica (extreta de Redes Neuronales y Sistemas Borrosos, Martín del Brío y
Sanz Molina 2006) representa una funció dʼError E(w). Mitjançant el descens per gradient
es busca en quina direcció hi ha un gradient més elevat i es mou la posició actual en
sentit contrari, baixant cap al fons de la vall. La regla dʼaprenentatge sempre acabarà
arribant a un mínim local de la funció dʼerror, però aquest mínim no té perquè ser el mínim
global de la funció. Pot passar que durant lʼaprenentatge sʼarribi a un mínim local (com la
vall de lʼesquerra en el gràfic) i que lʼalgoritme es quedi estancat sense disminuir més
lʼerror.
Problemes de lʼaprenentatge
A part de la possibilitat dʼestancar-se, lʼalgoritme de retropropagació té dos problemes
més, lʼentrenament és lent i hi ha la possibilitat de sobreaprenentatge, ja que si sʼentrena
massa la xarxa, aquesta sʼadapta massa als patrons dʼexemple i perd capacitat de
generalització.
La inèrcia fa que si un pes té sempre un increment amb el mateix signe aquest sigui cada
vegada més gran. En cas contrari si el signe va variant, ara més ara menys, la inèrcia
tindrà un efecte contrari tendint a anular aquestes variacions. Millora la velocitat de
lʼaprenentatge i, a més, en alguns casos pot evitar caure en mínims locals.
Hi ha altres algoritmes que utilitzen un ritme dʼaprenentatge diferent per a cada pes que a
més a més va canviant amb el temps. Uns altres analitzen el ritme de canvi del pendent
fent la segona derivada. Aquests algoritmes poden reduir bastant el temps dʼexecució,
però són molt més complexos.
33
!"#$%&'()( ( *+%,&-.//01("('23(4",423(+2.,&+"'3(
!
!
"#$%!&%&%!'()*+,)!-./01!(12(1!1*3!45)267#88#0$!9432)+491-1!1!/01!(12(1!3)0!)082)01-1%!
!
!
La gràfica (extreta de http://upcommons.upc.edu/) mostra una relació entre lʼentrada i la
:400)(#409!
sortida! dʼuna xarxa. Els punts marquen entrades dʼexemple. La línia contínua seria fruit
;),!</)!71!1!,1!=400)=8#5#818>!/01!0)/2401!+48!)9812!=400)=81-1!1!/0)9!+4</)9!
dʼun entrenament correcte, ja que ha captat la forma que transmeten els patrons. En canvi
5)?0)9>! 1! 848)9! ,)9! 0)/240)9! -)! ,1! =1+1! +2@5#1! 4! 1! 848)9! ,)9! 0)/240)9! -)! ,1!
(12(1%!
la línia A42*1,*)08!
discontinua )9! -#99)0B)0!
representa una xarxa (12()9! 40! /01! 0)/2401!
sobre-entrenada ja que )98C! 8481,*)08!
sʼadapta massa als
#08)2=400)=81-1!1*3!,)9!0)/240)9!-)!,)9!=1+)9!=409)=/8#5)9!+)2D!04!E4!)98C!
patrons, perdent la forma general.
1*3!,)9!-)*F9!0)/240)9!-)!,1!9)51!*18)#(1!=1+1%!!
G01!(12(1!40!),!7,/(!-H#0742*1=#I!F9!-H/01!0)/2401!=1+!1!/01!1,821!</)!+)2810B!
1!,1!=1+1!+498)2#42!F9!/01!(12(1!J7))-6742K12-L!4!-)!=400)(#409!=1+!)0-15108!
Per controlar quin és el punt òptim on sʼha de deixar dʼentrenar la xarxa és fa una
M7#$%!&%NO%!
P1*3F!
validació )(#98)#()0!
creuada 9#98)*)9! 2)=/22)089>!
(cross-validation), </)! dos
tenint en compte =408)0)0!
errors, =400)(#409! =1+! amb
lʼerror de la xarxa
)0-122)21%! '0! 1</)98! 8#+/9! -)! (12()9! +4-)0! )(#98#2! 81*3F! =400)(#409! -)! ,)9!
els patrons utilitzats per a lʼentrenament i lʼerror de generalització de la xarxa amb altres
0)/240)9!1*3!),,)9!*18)#()9%!
!
patrons. Sʼagafen dos conjunts dʼexemple, un sʼutilitzarà per a lʼentrenament i lʼaltre
!
sʼutilitzarà per controlar lʼerror de generalització de la xarxa. A la que lʼerror de
Q+2)0)0818$)!
!
generalització comenci a augmentar vol dir que ja sʼestà sobre-entrenant la xarxa.
RH1+2)0)0818$)! -H/01! (12(1! 0)/2401,! F9! ),! +24=F9! +),! </1,! 1-</#2)#(! ),!
=4*+4281*)08! -)9#8S18>! 1! 8215F9! -)! 512#12! ),9! +)949! -)! =400)(#I! )082)!
Per al 0)/240)9%!'(#98)#()0!-49!8#+/9!-H1+2)0)0818$)T!
sobre-entrenament de la xarxa també sʼhan de tenir en compte les dimensions
!
dʼaquesta. Una xarxa molt gran necessitara molts més patrons exemple que una més
6!R.1+2)0)0818$)!9/+)25#918>!40!,1!(12(1!9.)082)01!1*3!-1-)9!-.)0821-1!#!1*3!
petita.-1-)9!-)!9428#-1!1994=#1-)9%!;)2!1!2)1,#8U12!1</)98!1+2)0)0818$)!F9!0)=)9912#!
Una xarxa gran amb pocs exemples, tindrà el risc de sobre-entrenar-se molt més
/0! =40S/08! -.),)*)089! 2)+2)9)0818#/9! -),! =4*+4281*)08! -)9#8S18>! -)! +12),,)9!
ràpid-.)98V*/,!
que una que té més +)2!
6! 2)9+4981! exemples o que,1!
1! )09)0B12! és(12(1%!
més petita. Sʼestima
'0! +2#*)2! ,,4=! la
E#!següent relació entre
E1! /0! +)2V4-)!
-H)082)01*)08%!W/2108!1</)981!719)!9H1-1+8)0!),9!+)949!-)!,1!(12(1!)0!7/0=#I!
els patrons dʼexemple, lʼerror i els factors lliures de la xarxa (pesos i llindars):
-)!,)9!-1-)9!1+4281-)9!1!8215F9!-)!*#0#*#8U12!/01!7/0=#I!-.)2242!)0!),!=40S/08!
-)! -1-)9! -.)082)01*)08%! :4*+12108! ,1! 2)9+4981! -)! ,1! (12(1! 1*3! ,1! 2)9+4981!
-)9#8S1-1! )9! *4-#7#</)0! ),9! +)949! -)! *10)21! </)! *#0#*#8U#0! 1</)98! )2242!
*#8S10X108!2)824+24+1$1=#I%!R.1+2)0)0818$)!=408#0/1!7#09!</)!,.)2242!F9!*)042!1!
/0!51,42!)9813,)28!4!7#09!</)!F9!*V0#*%!Q!=408#0/1=#I>!-/2108!,1!719)!-.)()=/=#I>!
,1!(12(1!0)/2401,!7/0=#401!1*3!),9!+)949!7#(189%!
On p !és el nombre dʼexemples dʼentrenament, w els factors lliures i ε lʼerror desitjat.
( 34 56
Això és un problema, ja què si per exemple volem una xarxa amb un error del 10%
(ε=0,1). Això vol dir que necessitem deu vegades més patrons que el nombre de factors
lliures per establir correctament el mapa de decisió. Normalment és necessitaran més
exemples dels que es poden disposar. Així que la tendència serà a reduir la mida i els
factors lliures de la xarxa. Hi ha varies tècniques per reduir els pesos de la xarxa com
compartir pesos entre varies neurones, eliminar els pesos que aporten poc a la xarxa...
35
Mapes Auto-organitzats de Kohonen
El perceptró i el perceptró multicapa tenen uns algoritmes dʼentrenament supervisats
(sʼespecifiquen les sortides desitjades durant lʼentrenament), els mapes de Kohonen, en
canvi, tenen un entrenament auto-organitzat o no supervisat.
En lʼentrenament no supervisat no sʼindiquen les sortides objectiu per a cada patró
dʼentrada. La sortida de la xarxa reflexa les similituds i diferències entre els patrons
dʼentrada. Els models no supervisats solen ser més simples, monocapa i amb algoritmes
senzills i ràpids que sʼapropen més als models biològics. Es solen dividir en dos grups:
Treballs experimentals posteriors han demostrat que aquest tipus dʼaprenentatge està
present en les neurones biològiques juntament amb altres mecanismes.
36
Mapes de Kohonen
Sʼha observat que en el cervell alguns tipus de neurones detectores es distribueixen
ordenades topològicament, representant la informació espacialment. Per exemple les
neurones que reben senyals de llocs pròxims de la pell també estan properes en el
cervell. Els mapes de trets auto-organitzats (Self-Organizing Feature Maps, SOFM)
tracten dʼimitar això.
Els mapes de Kohonen són unidireccionals i estan formats per dues capes. La primera
capa, dʼentrada, està formada per m neurones que, com en el perceptró no realitzen cap
càlcul. Cada neurona de la primera capa està connectada a totes les de la segona capa
mitjançant pesos sinàptics.
37
Durant la fase dʼexecució no es modifiquen els pesos. Per a un vector p dʼentrada cada
neurona calcula la similitud entre p i el seu propi vector de pesos sinàptics utilitzant una
mesura de distància o algun criteri de similitud. La neurona amb més semblança és
declara vencedora i és la única que sʼactiva, donant una sortida binaria, 1. Mentre que les
altres queden inhibides i donen com a sortida 0. Els pesos de cada neurona de la segona
capa fan que aquesta es relacioni amb un determinat patró de lʼentrada, i quan aquesta
neurona sʼactiva, ens indica la presencia dʼaquest.
Entrenament
Aquests pesos que fan que cada neurona detecti uns trets concrets sʼassignen durant
lʼentrenament.
38
LʼAlgoritme dʼaprenentatge
No nʼhi ha un algoritme estàndard, i, a més, la regla dʼaprenentatge varia segons el
mètode usat per calcular la distància o similitud entre el patró dʼentrada x i els pesos w.
Nosaltres utilitzarem la distància euclídia per a mesurar la separació entre els dos vectors:
En començar lʼentrenament sʼinicien els pesos sinàptics, que poden ser nuls, aleatoris o
predeterminats. A partir dʼaquí comença el procés iteratiu, es van presentant patrons, per
a cada patró:
1) Cada neurona calcula la distància (en el nostre cas utilitzant la distància euclídia) entre
el patró dʼentrada x i els pesos wij, és declara guanyadora la neurona amb menor
distància.
2) Sʼactualitzen tots els pesos de totes les neurones seguint la norma:
39
La funció h(|I-g|, t) és la funció de veïnatge que crea un entorn al voltant de la neurona
guanyadora on totes les neurones també actualitzen els seus pesos. |I-g| és la
distància entre la neurona on sʼestan actualitzant els pesos (I=(i,j)) i la neurona
guanyadora, g. Hi ha diferents tipus de funcions de veïnatge, nosaltres utilitzarem la
més simple, una de tipus esglaó o Heaviside:
R(t) és la funció radi que dona el radi del veïnatge. Si la distància és major al radi h=0 i
lʼactualització dels pesos serà nul·la. En cas contrari, h=1 i els pesos sʼactualitzaran. El
radi és una funció monòtonament decreixent amb les iteracions. La funció R(t) que hem
utilitzat en la part pràctica és similar a la funció α(t) :
El nombre dʼiteracions a fer depèn del nombre de neurones del mapa i és independent del
nombre de patrons dʼentrada. Sʼestima que una xifra ideal són 500 iteracions per neurona,
tot i que normalment nʼhi ha prou amb entre 50 i 100 per a la majoria de problemes. Això
representa més iteracions que en els algoritmes de retropropagació, però aquí els càlculs
a realitzar són molt més simples i ràpids.
Sʼha demostrat que els mapes de forma quadrada poden ser inestables i és recomanen
mapes rectangulars. Tot i això, la forma rectangular del mapa fa que en els extrems la
funció de veïnatge trobi menys veïnes i poden quedar patrons aïllats. Per això a vegades
sʼutilitzen mapes en forma dʼesfera o toroide que eliminen els extrems i les cantonades.
40
Part Experimental
Objectius
De la teoria a la pràctica hi ha un salt. Els objectius de la part experimental són posar en
pràctica tota la informació obtinguda durant aquest treball, intentar realitzar aplicacions
útils i veure de primera mà els algoritmes utilitzats i els problemes que poden sorgir ja
que , per exemple, per a obtenir un bon rendiment sʼha dʼafinar el nombre de neurones de
la xarxa i durant lʼentrenament sʼha de tenir molta cura amb el nombre dʼexemples, el
nombre dʼiteracions i els paràmetres assignats i no hi ha cap regla exacta per a
determinar aquestes variables que a més poden variar molt dʼun cas a un altre.
Com ja he dit un ordinador convencional és una màquina de Turing i per tant pot simular
xarxes neuronals tot i que perdent la capacitat de processament en paral·lel. Poder
simular les xarxes en un ordinador és molt més ràpid i barat que realitzar implementacions
especifiques en xips.
Tant per al simulador de xarxes de Kohonen com per al de perceptrons multicapa he creat
tres programes.
- Un programa sʼencarrega de la fase dʼexecució de la xarxa.
- Un altre, el més complex, de lʼentrenament.
- I un últim sʼencarrega dʼinicialitzar les xarxes.
Hi ha, a més, un arxiu que conté la informació referent a la xarxa: nombre de capes,
nombre de neurones per capa i els valors dels pesos. Aquest arxiu es crea amb el
41
programa encarregat dʼinicialitzar les xarxes segons el que lʼusuari demani. El programa
dʼentrenament en llegeix tota la informació i en varia els pesos, i el programa dʼexecució
tan sols nʼextreu la informació.
El problema era que, degut a lʼalt nivell de PHP i a que cada cop que necessitava un pes
sʼhavia de connectar amb la base de dades, lʼentrenament de xarxes una mica grans
trigava hores en completar-se.
Així, vaig decidir què, ja que havia de refer el programa, el faria en C++. Un llenguatge
orientat a aplicacions dʼordinador i de més baix nivell que PHP. A més, per agilitzar el
procés, el nou programa carregaria tot lʼarxiu amb els pesos a la memòria en un inici,
evitant haver dʼanar a buscar cada pes cada vegada que es necessiti. Això estableix un
límit en la mida de la xarxa (determinat pels límits de memòria del sistema), però un límit
suficientment gran com per a no plantejar cap problema per a les aplicacions que sʼhan fet
posteriorment. Recordem que com més gran és una xarxa més capacitat té, però més
exemples és necessiten. El programa en C++ reduïa el temps dʼinicialització dʼuna xarxa
gran respecte al de PHP en una proporció de 16 a 1. A lʼannex A hi ha una explicació
detallada del funcionament de tots els programes en pseudocodi, i en el CD hi ha el codi
font de tots els programes.
Un cop tenim els simuladors fets, què? És poden fer petits experiments com entrenar una
xarxa per simular les funcions booleanes. Però, ja que tenim els simulador, no podríem fer
implementacions una mica més tangibles i grans de les xarxes neuronals? En vaig fer
tres:
42
Organització de Colors amb els Mapes Auto-Organitzats
de Kohonen
Introducció
Vaig trobar una web [Tom Germano, 1999, http://davis.wpi.edu/~matt/courses/soms/] que
per explicar de manera gràfica el funcionament dels mapes de Kohonen fa aquesta
implementació i vaig decidir repetir-la ja que crec que mostra molt clarament el
funcionament dels mapes auto-organitzats. Però aprofitant que els ordinadors han
avançat molt des del 1999 en la meva implementació el mapa és molt més gran i utilitza
molts més colors.
43
Hi ha tres paràmetres, hi ha tres dimensions, els colors, per tant, es podrien representar
en un espai tridimensional, en un cub.
Però aquesta representació dels colors no ens permet veureʼls amb claredat (no podem
veure lʼinterior del cub).
Els mapes de Kohonen serveixen per reduir les dimensions i escalar lʼespai dʼentrada,
representant ordenadament els patrons dʼentrada. Així que, perquè no provem dʼordenar
els colors amb un mapa de Kohonen?
Implementació i Resultat
La implementació va ser la següent. Lʼentrada de la xarxa consta de tres neurones (una
per a cada paràmetre de color). La sortida és un mapa rectangular de 150 x 75 neurones.
El mapa sʼinicia amb uns pesos aleatoris entre 0 i 255. El mapa té per tant 11.250
neurones i 33.750 connexions.
44
Si a cada neurona assignem un color segons els pesos que té. La visió del mapa seria
una cosa així després de donar valors aleatoris a les connexions:
El mapa té 11.250 neurones, lʼidoni és realitzar uns 5,6 milions dʼiteracions (unes 500 per
neurona). Però, tenint en compte que les entrades són bastant simples, lʼentrenament
realitzat al final ha estat de: 4 milions dʼiteracions, un radi inicial de 17, una velocitat
dʼaprenentatge inicial de 0,99 i una velocitat final de 0,02.
45
Aquest és el resultat si assignem el valor Blue a la primera neurona, el Green a la segona
i el Red a la tercera. Aquests valors és poden variar arbitràriament un cop fet
lʼentrenament ja que no hem especificat a la xarxa a quin paràmetre correspon cada
neurona, s'obtindrien imatges diferents, però només variarien els colors, no els canvis de
colors. Podem aplicar un filtre dʼescala de grisos a la imatge. Així es pot apreciar on es
concentren els punts amb més o menys lluminositat. A més aquesta imatge serà igual
independentment de com assignem els valors RGB.
46
També podem aplicar un filtre Posterize per a limitar el nombre de colors en la imatge tal
que:
Així, es pot veure millor la ordenació que ha seguit la xarxa. Aproximadament ha distribuït
tots els colors al voltant de dos focus, un de blanc i un de negre, seguint lʼordre en sentit
horari: verd, groc, vermell, blau. Tant al voltant del focus blanc com al voltant del focus
negre (en el negre és més difícil de veure ja que ha quedat a la vora del mapa).
Conclusions
Realment la utilitat dʼaquesta implementació és poca. Però resulta una manera molt
gràfica de veure la tasca que fan els mapes de Kohonen. També ha servit per veure les
limitacions dʼun mapa rectangular ja que al quedar el negre en un costat hem perdut una
mica la ordenació. Això es podria arreglar utilitzant un mapa esfèric o toroïdal o bé repetint
lʼentrenament a veure si amb sort queda una posició més favorable.
En el CD, dins lʼapartat “Colors Kohonen” hi ha una aplicació que permet veure diferents
passos entre la primera i lʼúltima iteració que sʼhan donat durant lʼentrenament i a més hi
ha el codi font de les aplicacions utilitzades.
47
Detecció de Caràcters amb un Perceptró Multicapa
Objectius
Lʼobjectiu dʼaquesta implementació és que una xarxa de Perceptró Multicapa pugui
detectar la presència dʼun caràcter determinat en una entrada.
Implementació
El caràcter sʼescriu en una quadrícula de 15x15. Cada punt de la quadrícula és una
entrada a la xarxa i pot tenir dues posicions, 0 (vuit) o 1 (escrit). Això proporciona 225
dades dʼentrada a la xarxa. La mida de la quadrícula sʼha decidit arbitràriament, una més
gran hagés requerit una xarxa molt més gran (i més exemples) i una més petita potser
hagués perdut alguns detalls importants.
La sortida de la xarxa és de tan sols una neurona i utilitza la funció sigmoide (interval 0,1),
així que la sortida pot interpretar-se com la probabilitat que lʼentrada sigui el caràcter
desitjat.
Un cop tenim totes les mostres dʼexemple podem començar a entrenar la xarxa. Arribats a
aquest punt trobem problemes. La xarxa té 225 neurones dʼentrada. Si tenim en compte la
norma de p = w / e (p = nombre dʼexemples, w = nombre de pesos i e = error desitjat).
Sabem que la xarxa tindrà per força moltes més de 225 connexions i, per tant,
necessitaríem més de 2.250 exemples per tenir un error del 10%. No podem tenir tants
exemples, així que durant lʼentrenament tindrem molt de risc de sobre-entrenar la xarxa.
Cal dir que en altres implementacions de detecció de caràcters (com la feta per Kohonen
amb mapes auto-organitzats) el que es fa és entrar a la xarxa els traços que componen
els caràcters no el dibuix del caràcter com es fa aquí. Això redueix molt el nombre de
neurones dʼentrada, però la detecció de traços és més complexa, requereix més
tractament de les dades dʼentrada i queda fora del tema que volem tractar, així que
seguirem amb aquest mètode.
Desprès de provar amb diferents combinacions de capes i neurones, una de les que ha
donat millors resultats és una estructura de 3 capes: 225 neurones dʼentrada, 225 en la
capa oculta i 1 de sortida. El que ens dona un total de 50.850 connexions. Com hem dit
abans el risc de sobre-entrenament és molt alt. També ha funcionat correctament una
xarxa sense cap capa oculta, però donava més error que aquesta.
Resultats
Un cop la xarxa està entrenada sʼha creat un nou programa, que es diu XnPlay, a partir de
XnCapture amb la diferència què, en lloc de guardar la informació del caràcter escrit en un
arxiu, carrega els arxius de pesos resultants de lʼentrenament, agafant com a entrada de
la xarxa les dades sobre el caràcter, simula una xarxa, calcula la sortida i la mostra en
pantalla.
49
Abans el requadre on ara hi ha una A tipogràfica servia per indicar al programa quina lletra
sʼestava escrivint. Ara el requadre serveix per a que el programa indiqui quina lletra sʼha
escrit. El número que hi ha al costat és la sortida de la xarxa. Després de fer varies proves
hem establert el tall a 0,75. Si la sortida és superior a 0,75 és considera que lʼentrada
conté el caràcter (en aquest cas A). Si la xarxa no reconegués el caràcter escrit en
lʼentrada tornaria un ?.
Conclusions
La xarxa sʼha entrenat només per a detectar el caràcter A. Si sʼentrena un conjunt de
xarxes com aquesta de la mateixa manera, assignant a cada xarxa un caràcter diferent i
desprès sʼimplementen totes en un programa com aquest, es pot obtenir fàcilment un
programa que detecti tots els caràcters.
50
Tot i que el nombre total de pesos utilitzats és molt gran, lʼerror en els resultats és
acceptable, però es corre el risc, bastant infreqüent, que davant determinats dibuixos el
programa respongui de manera totalment errònia.
51
Detector de parla amb un mapa auto-organitzat
Introducció i objectius
Lʼobjectiu dʼaquesta implementació era crear un programa que detectés la parla dʼuna
persona per un micròfon i que la transcrigués a temps real en caràcters a lʼordinador.
Degut a les dificultats en el preprocessament de dades i a lʼhora dʼobtenir uns bons
exemples vaig limitar el programa a la detecció de les vocals castellanes ja que només
són cinc i són més diferenciades que les catalànes, que són 8 (en el català central).
Per fer el programa em vaig basar en el mapa fonètic del finlandes fet per Teuvo Kohonen.
Com va fer éll, utilitzo una xarxa auto-organitzada que distribuirà els diferents fonemes per
tot lʼespai del mapa, amb els fonemes similars en posicions properes.
Sabem que si passem els paràmetres de cada fonèma a un mapa de Kohonen aquest els
organitzarà i els reconeixerà, però quins paràmetres són els que sʼhan dʼenviar a la xarxa?
Preprocessament de dades
A través del programa dʼordinador podem obtenir les dades del só captat pel micrófon. A
lʼordinador el só es representa en un vector que conté les altures de la ona en cada
instant de temps. El nombre dʼaltures per segón és la freqüència de mostreig (o sample
rate).
52
Ona original i mostres de lʼona.
Però no podem entrar les mostres de lʼona directament a la xarxa neuronal bàsicament
per dos motius: en primer lloc són masses (per representar 10 mseg en un sample rate de
8 KHz sʼutilitzen 80 mostres) i en segón lloc són dades que están molt subjectes a
variacions independentment del fonema que es pronuncii (volum de la veu, timbre del
parlant, soroll de fons...).
53
Finalment, les tasques que duu a terme el programa abans de passar lʼentrada a la xarxa
són:
• Captura del micròfon a 44,1 KHz de sample rate1 i un buffer de 512 samples.
• Sʼaplica un filtre LowPass a la freqüència de 5,3 KHz per reduir el soroll de fons.
• Per a cada vector de 512 samples de senyal (corresponents a 11,6 milisegons):
• Se li resta la mitjana estadística del vector.
• Dividim el vector per la seva màxima amplitud (per a eliminar la influència del
volum de la veu).
• Es passen les dades per una finestra Hamming, reduïnt el soroll de fons.
• Es calcula la Transformació complexa discreta de Fourier utilitzant lʼalgoritme que
proporciona la llibreria Minim.
• Sʼagrupen logarítmicament les freqüències obtingudes de la transformació en 21
grups (3 grups per octava començant a partir dels 200 Hz).
Implementació
Com en el detector de caràcters he realitzat dos programes, un per obtenir els exemples i
lʼaltre simular la xarxa i donar les sortides, i he utilitzat el simulador de xarxes de Kohonen
per a entrenar la xarxa.
1En el nostre programa en tindriem suficient amb un sample rate de 8 KHz però com ens sobra la capacitat
de processament hem utilitzat el sample rate per defecte, evitant perdre possible informació important,
(Kohonen en va utilitzar un de 13,02 KHz).
54
El programa Speak_Play sʼencarrega de processar lʼentrada i mostrar la sortida de la
xarxa, que té la informació guardada en lʼarxiu info.ko, resultat del simulador. La seva
aparença és mol similar al Speak_Capture però mostra a més la sortida de la xarxa.
Mostra el mapa complet de la sortida, cada cuadre representa una neurona, i il·lumina la
neurona guanyadora en cada instant. Per acabar el programa sʼhauria de comprovar
(manualment) amb quin fonema correspon cada neurona i mostrar la lletra a la que
correspon la neurona guanyadora enlloc del mapa complet. Però aquestes assignacions
poden variar a cada entrenament, i com la finalitat del programa no és lʼaplicació pràctica
en si no he cregut convenient fer-ho.
55
Resultats
El programa detecta sense problemes les vocals a i i en la majoria dels casos i en la
majoria dʼentrenaments. La u sʼacostuma a confondre amb la i, el mateix passa amb la e i
la o que es poden confondre o entre elles o amb la a. Desprès de varis entrenaments i la
millor opció ha estat un mapa de 5 neurones en una fila.
Lʼentrenament ha constat de 2500 iteracions amb una velocitat inicial de 0.4, final de
0.001 i un radi inicial de 2. La xarxa resultant ha pot diferenciar sense problemes les
vocals a, e i i i té dificultats per identificar la u, que confon amb la i i la o que confon amb
la a.
A més, com els exemples i la validació de lʼentrenament sʼhan fet únicament amb la meva
veu, el programa presenta més dificultats davant de veus dʼaltres persones.
Es comprova que el to i el volum amb que es pronuncia la vocal o el soroll de fons (si no
és gaire elevat) no afecten a la detecció.
Conclusions
Els resultats obtinguts no són gaire satisfactoris. Una de les causes principals de les
mancances del programa és el preprocessat de dades, que sens dubte sʼhauria de
millorar.
Una altra causa és lʼentrenament de la xarxa i els exemples utilitzats. En lʼaplicació feta
per Kohonen la xarxa sʼentrenava dos cops, primer amb lʼalgoritme normal dels mapes
auto-organitzats i després amb lʼalgoritme LVQ (Learning Vector Quantization) per afinar
(supervisadament) el comportament del mapa.
56
Conclusions
El camp de les xarxes neuronals artificials ja és un camp força madur, prova dʼaixò és que
sʼutilitzen en moltes aplicacions amb finalitats no experimentals. Per altra banda, si mirem
més la part biològica, sembla un camp amb molt de terreny per investigar, i és que encara
desconeixem molt del nostre cervell. La investigació en xarxes artificials i la investigació
del cervell semblen estar molt lligades i potser una pot donar la clau per entendre lʼaltre.
El fet que una xarxa sigui capaç dʼaprendre dʼexemples és molt més del que pot semblar
quan veiem els algoritmes dʼaprenentatge que sembla que només modifiquin errors i
pesos. Quan una xarxa aprèn, entén un concepte i nʼextrapola dʼaltres. Mostra, dʼalguna
manera, un comportament intel·ligent. I podem dir que una xarxa és intel·ligent ja que
troba la solució a un problema, a diferència dʼun programa dʼordinador convencional on
prèviament sʼha programat la solució.
Però queda clar, que les xarxes neuronals no són la solució a qualsevol problema ni ara ni
quan estiguin més avançades. Per a moltes tasques, com operacions aritmètiques,
lʼestructura convencional de Von Newmann és molt més eficient. A més, per exemple, tot i
que un perceptró multicapa pot aproximar qualsevol funció, en alguns casos la mida de la
xarxa és massa gran o no hi ha suficients exemples.
57
Annex A
Funcionament del Simulador de Perceptró Multicapa
Començarem explicant el funcionament del programa encarregat dʼinicialitzar la xarxa, el
mlp_creator.cpp.
El programa crea varis arxius amb la informació de la xarxa a partir dels designis de
lʼusuari. El primer arxiu és diu rna.info i conté la informació sobre les capes i les neurones
que hi ha dins cada capa. Cadascun dels altres arxius (anomenats n.weights) conté un
seguit de nombres aleatoris que corresponen als pesos entre la capa n i n+1.
Per a cada capa n (menys per a lʼúltima) obrim lʼarxiu “n.weights” i hi creem x
nombres aleatoris on x és el producte del nombre de neurones de la capa n pel
nombre de neurones de la capa n+1↵
Finalitza el programa↵
58
Obrim lʼarxiu “rna.info” i llegim el nombre de capes↵
59
Obrim lʼarxiu “rna.info” i llegim el nombre de capes↵
Comencem lʼentrenament↵
Finalitzem el programa↵
Lʼentrenament és on line ja que, tot i que els pesos només sʼescriuen en els arxius al final
per estalviar temps, els pesos que sʼutilitzen en cada iteració són els que estan a la
memòria i sʼactualitzen en cada iteració. Estrictament no és un perceptró multicapa ja que
aquesta implementació no utilitza llindars, tan sols pesos.
60
Funcionament del Simulador de Mapes Auto-organitzats de Kohonen
Seguirem el mateix ordre que amb el perceptró multicapa per a explicar els programes.
kohonen_creator.cpp, encarregat dʼinicialitzar la xarxa, és més senzill que el del perceptró
multicapa ja que aquí sempre hi ha dues capes. Només permet la implementació de
mapes quadrats o rectangulars. Les dades és guarden en lʼarxiu “info.ko” seguint lʼordre:
Tanquem lʼarxiu↵
Finalitza el programa↵
61
El programa kohonen_calculate.cpp, sʼencarrega de calcular la sortida de la xarxa que es
presenta també en pantalla (dient les coordenades de la neurona guanyadora). Això no és
gaire útil per als mapes de kohonen, però aquest programa serveix per a controlar que la
sortida de la xarxa és més o menys correcte. Per a visualitzar els mapes correctament en
cada cas especific ja és dissenyarà una aplicació especial. Lʼentrada de la xarxa també és
presenta en un arxiu.
Carreguem lʼentrada↵
Calculem la distància dels pesos de totes les altres neurones amb lʼentrada un a
un. Si la distància és menor que M, guardem aquesta distància com a M↵ (de tal
manera que un cop calculada la distància de totes les neurones la distància M
serà la menor).
Finalitzem el programa↵
62
Per últim kohonen_trainer.cpp:
Comencem lʼentrenament↵
Finalitzem el programa↵
Per a la implementació pràctica dels mapes de kohonen que vaig realitzar (lʼordenament
dels colors), vaig modificar el programa dʼentrenament per a que presentes
automàticament nombres aleatoris entre el 0 i el 255 com a entrada, i el programa
dʼinicialització perquè inicies la xarxa amb valors aleatoris entre 0 i 255 i no amb valors
petits (entre -1 i 1) com fa normalment. Per a la implementació pràctica del transcriptor
fonètic vaig crear un petit programa kohonen_examples.cpp que escriu automàticament
lʼarxiu que conté tots els exemples, va ser necessari ja que en ocasions el nombre
dʼexemples arribava a desenes de milers i fer lʼarxiu dʼexemples manualment resultava
impossible.
63
Bibliografia
-AGH University, Department of electronics, Virtual laboratory of artificial intelligence,
(2005), <http://galaxy.agh.edu.pl/~vlsi/AI/index_nowy_en.html>
-Estupinya, P., “Tu libertad es una ilusión del cerebro”, (2009), <http://
lacomunidad.elpais.com/apuntes-cientificos-desde-el-mit/2009/2/19/tu-libertad-es-ilusion-
del-cerebro>
-Hilera González, J.R.; Martínez V.J., (1995) Redes Neuronales artificiales: fundamentos,
modelos y aplicaciónes.
-Martín del Brío, B.; Sanz Molina, A., (2006) Redes Neuronales y Sistemas Borrosos, (3a
Edició), Ra-Ma, Madrid.
-Salvador Figueras, M.; Gargallo, P. (2003): “Análisis Exploratorio de Datos”, [en línea]
5campus.com, Estadística <http://www.5campus.com/leccion/aed/>
-Teuvo Kohonen, “The “Neural” Phonetic Typewriter”, (Març 1988), Computer, Volum 21,
pagines 11-22, <http://www.computer.org/portal/web/csdl/abs/mags/co/1988/03/
r3011abs.htm>
-Teuvo Kohonen, “The Self-Organizing Map”, (Setembre 1990), Proceeding of the IEEE,
vol. 78, Num. 9.
65