INDICE ., lntroducclon ........................................................................................................... 1 PARTE 1. RED DE HOPFIELD .......................................................................... 2 La Red Binaria de Hopfield: Estructura Básica ....................................... El Procedimiento de Actualizaci6n ...................................... 3 ....................4 Convergencia .............................................................................................. S Aplicacion de Hopfield : Reconocedor de Patrones ..............................................7 ., Funcional ................................................................................ Descripcmn 7 Programa dela aplicación de Hopfield ..................................................... 9 PARTE II.RED RETRO PROPAGACI~N........................................................ ., Propagaclon hacia adelante....................................................................... Aplicacion de la Red Retro Propagación .............................................................. ., Descripuon Funcional ................................................................................ Especificación de la Arquitectura de l a s redes .......................................... de . - 25 29 32 32 32 la apllcaclon .......................................................................... 33 Programa de la aplicación de Retro Propagacih ..................................... 34 Funciones .e Los sistemas neuronales artificiales toman su nombre dc las c6lulas nerviosas dentro del cerebro. Aunque una gran park dc detalles biol6gicos son eliminados en los modelos computacionales, los sistemas ncuronales mantienen gran parte de la cstructura del cerebro para proporcionar conocimiento andlogamenre al trabajo biol6gico de m a neurona. Asf estos modelos contribuyen a los importantes rctos cicntfficos (cl cercbro comprcndiendose a si mismo). Los sistemas neuronales proporcionan un efectivoaccrcamicnto a un amplio campo de aplicaciones. Los sistemas neuronalesresuelvenproblemas quc involucran patrones, mapeo de patrones, krminaci6n de patrones y claificaci6n de patrones (los patronespueden ser completados con un sistemaneuronal que ha sido adiestrado o educadopara recordar los modelos completos); puedenseraplicadosparatrasladar imsgenes, predicci6n de negocios, mapeode imiígenes visualesa comandos rob6ticos Las Redes Neuronales utilizan una estructura deprocesamiento paralelo que - tiene un gran número de elementos de procesamiento (neuronas) y muchas interconexiones entre ellos, estos elementos de procesamiento son demasiado simples como la CPU. Dentro de una red neuronal cada elementode procesamiento esa ligado a muchosde sus vecinos (normalmente cientos o miles), a s € que hay muchas m& interconexiones que elementos de procesamiento. Las redes neuronales existen ennuestraimaginaci6n y es inexorable desear comprenderlas, y en suma obtener una nueva íitileria tecnol6gica, con la cual podemos hacer computadoras con la capacidaddeproduciraproximaciones adecuadas a problemas anteriormente irresolubles. PARTE 1 PAgioa 2 Por medio de una publicaci6n John Ilopfield introduce en 1982 la arquitectura deunared a la cual pone su apcllido. En tCrminos claros y simples, describe como la capacidad computacional puedeser construida de componentes similarcs a las ncuronas. Describe una aplicacidn (Memoria Asociada) yuc pucde ser implementada con csta red, y dcmuestra la optimizacibn de problemas quc n o pueden ser resucltos por m6todos tradicionales. La aparici6n de la reddeHopfieldrenov6 el inter& entusiastapor las redes neuronalcs. La red binaria de Hopfieldtiene una capa simple deelementos de procesamicnto; o "cstado" que es cadaelemento de procesamientotieneuna"valordeactivaci6n" binario (uno de dos valores posibles). Aqui usaremos cl estado binario O y 1 (La red trabaja de la misma manera si se utilizan los valores de+1 y -1, pero se requiere de pequeñas modificaciones en la red). Toda la red es considerada para tener un "estado" en cada momento. Elestado es un vector de ceros y unos. Cada entrada en el vector corresponde a un elemento de procesamiento individual en la red. Asf en un momento dado, el estado total de la red esta representado porel vector : - u = ( UI,U2,U3 ,...yu,,) = (+ + - ... +) Este vector representa una red de n elementos de procesamiento,donde el elemento i tiene el estado U i ; en esta notaci6n, un + representa un elemento de procesamiento con el valor binario 1, y un - representa un elernento de procesamiento con un valor de O. La figura 1 muestra el diagrama de elementos de procesqiento enunared de Hopfield, junto con un ejemplo de estados. El estado de la redpuedecambiar al determinar los valores de los elementos individuales modificados. Los elementos deprocesamiento en la red de Hopfield estan totalmente interconectados (cada elemento esta conectado con cada uno de los demb elementos). En realidad las conexionesson"dirigidas", y cada par de elementos de procesamiento tiene una conexi6n en cada direcci6n (ver la figura 1). Esta topologia de interconexiones hace la red "recursiva" porquelas salidas de cada elemento alimenta entradas de otros elementos en la misma capa. Como veremos, esta organizacidn recursiva intenta permitir a la red un relajamiento en un estado estable en la ausencia de entradas externas. Phgina 3 Cada interconexih tienc un pcso awcido (cstc pcso es un valorescalar), el peso del clc~ncnroj al clemcnto i. En la rcd de Hopfield, el peso Denotaremos con Ti; Tjiy el Titienen el mismo valor, por consipicnic : T.. = T.. I' 'J El aniílilisis matcmfitico demuestra que cuando esta igualdad es verdadera, la red es capaz de converger - conseguir eventualmente en un estado estable-. La convergencia de la red es necesaria para representar computacionalmente tareas como optimizaci6n y memoriaasociativa.Muchasredesconpesosdiferentes (Tjj# TJ tambienconvergen afortunadamente. La figura 2 muestra un &todo alternativode dibujar lasinterconexiones: los eleme,ntos de procesamiento aparecen en una fila y las interconexiones en una matriz dctrabajo. Note quecon n elementos,hay n(n-1) interconexiones. Cada peso de la conexi6nes un puntointerconectadoen la matriz. El peso es representado por un circulo sombreado en la correspondiente interconexi6n(n6teseque en i=j no hay interconexi6n). El peso de1 elemento i al j se muestra debajo del elementoj donde la linea Elgura 2. debajo del elemento j intercepta la linea del deuna aplicaci6nen. elementooriginal i. Los pesosdelasconexionessonelinicio particular. EL PROCEDIMIENTO DE ACTUALIZACI~N Inicialmente, la red es asociada a un estado para cada elemento de procesamiento. Un procedimiento de actualimci6n es aplicado a los elementos de la red deHopfielden el cual un elemento es actualizado a lavez. El procedimientode actualizaci6n afecta el estado de cada elemento, cambiando a cada momento el resto de la red. La actudizaci6n de los elementos de procesamiento se continúan haciendo hasta lueno puedan hacerse mas cambic La figura 3 ilustra los procesos bhicos realizados por una red binaria de Hopfield durante el proceso de actualizacih de los elementos. Cada neurona toma la suma de los pesos de las entradas, de acuerdo a la siguiente ecuaci6n : n si = x u j Tjj (1) i=l i$j .I > Cuando esta suma es calculxi;1, la C V ~ I U ~ L C ~ O Idc I los clcmentos de procesamiento puede scr mayor o menor quc cero. Si I n S U I ~ cs L ~menor que ccm, entonces la salida dcl elemento es un conjunto de +l's. Si la suma es n m o r que cero, la salida de la unidad es un conjunto de ceros. En ternlinos matemdticos : Un sistema para el proceso de actualimci6n consiste en actualizar los elementos enserie, repitiendo la secuencia hasta lograr un estado estable. Los mccanisrnos de actualizacidnpropuestospor Hopfield nosonsimples. L a actualimci6n al azar tiene ventajas en la implementaci6n (cada elemento puede generar las siguientes actualizaciones) y en la funcidn (la actualimci6n lleva a la red a un estado estable). Normalmente, muchas actualizaciones tienen que ser realizadas para todos los. elementos de procesamiento antes de que la red alcance un estado estable. Hopficld en 1982demostr6 que esta red alcanza eventualmente dicho estadoestable. Laactualizacidn al azar utilizada en la red de Hopfield proporciona una en redes diferencia importante entre esta y otros paradigmas.Otrosparadigmas neuronales tienen a lo m& una capa de elementos de procesamiento actualizando al mismo tiempo (o casi al mismo tiempo). En contraste, la actualizaci6n bincrona de la red de Hopfieldes casi igual a la realidad biol6gica. CONVERGENCIA Cada estado de la red de Hopfield tiene un valorde "energia" asociado. Este valor es definido como : n 1 E =- 5 Ti, ujui (3) j i i$j La ecuaci6n se refiere a una "energid", aunque no crea energia en realidad como un sistema fisico. La funci6n energia en la ecuaci6n (3) es una funci6n objetivo que es minimizada porla red. Las siguientes actualizaciones de la red de Hopfield provocan una "convergencia": procedimiento en el cual la energia total de la red cada vez es menor. Eventualmente la red provoca un estado estable; en este estado estable, la energfa es mfnima. Esta energfa minima puede ser local o global. Es posible demostrar que a cada momento un elemento de procesamiento es actualizado. La energia de la red es la misma o se decrementa. El resultado del procedimiento de actualizaci6n intenta dejar siempre menos o igual energia en la red para converger a un minimo. PAgina 5 Sup,oniendo que cl elcnlento j 1:s cl prhxinlo clcmcnto dc prvccsamicnto para ser actualizado; entonces, la porcidn dc E afcctada por cl clcmcnto dcproccsamicnto j es dada por : n 1 Ej = - 5 T..u.u. I' J 8 (4) i&j ; la cual rearreglando queda : Cuando el elementoj esactualizado, si allf no es cambiado su estado, entonces la energfa Ej es la misma. Si hay cambio en el estado, entonces la di€ercncia cn Ej es : n 1 - E,vieja= - 5 Au, T,i ui A E j E Jnueva . i donde i#j - ~j . . = Jnueva vteJa AU. U. J (6) si uj cambia de O a 1, entonces : n i despues de la actualizaci6n de acuerdo con la ecuaci6n (2). Reacomodando la ecuaci6n (6), obtenemos: AEj'O Si ujcambia de l' a O, entonces : n i despues de la actualizaci6n en (2). Reordenando valoresen al ecuacidn (6), obtenemos : AEj< O puesto que AEjes el producto de tres números negativos. hi, .el cambio en E es siempre negativo o cero no importando que cambios haya en el estado del elemento j en la actualizaci6n. La red es garantizada para converger con E tomando valores mis y m& bajos hasta que la red alcanzaun estado estable. Pdgina 6 - I I I El número mAximo de Patrones que pucdc memorizar una Red de Hopfield cs de 0.15N donde N es el numero de elementos dc procesamiento de la Red. Este resultado fue obtenido experimentalmente por Hopfield en 1982. En dicho expcrimento, los patrones se gcneraron aleatoriamcntc y sc: almacenaron cn una red de Hopfield. El menu esta construido de tal manera que el usuario dice su nplicaci6n completa con solo recorrer cada una de las opciones del menú de arriba hacia abajo. Ademas; cada una de l a s opciones cuenta conayuda, la cual se activa pulsando la tecla FI. Las opciones dcl menú tambiCn se pucden activar oprimiendo l a lctra que esta resaltada en cada una de las opciones. " Se utiliza la tecla "ESC"para regresar al menú anterior (en el caso de la opci6n de consulta que tiene un submenu). OPCIONES DEI, MENU Listar Arauitecturas Existentes Muestra las arquitecturas existentes en el drive indicado por la opci6n de directorio; esto es, permite al usuario consultar las arquitecturas que se tienenen el directorio de trabajo. Crear Nueva Arauitectura Permite al usuario Crear una Nueva Arquitectura; proporcionando el nombre de la arquitectura y la-Longitud de los Patrones a guardar. Meter Patrones Permite al usuario introducir los Patrones (cadenas de O's y 1's) a una arquitectura que de antemano se haya creado. L a longitud de losPatrones es la establecida al Crear la arquitectura. Amender En esta opci6n, el programa"Memoriza los Patrones" de la arquitectura proporcionada; generandola Matriz de Pesos que sera utilizada en la Consulta. Pilgina 7 I 1 Consultar " Aquf el usuario puede efectuar dos tipos de Consultas : 1) Lote : Varios Patrones. Cadauno de los patrones quc crearon la Red es aplicado a lamisma;generandose o no el reconocimiento de cada uno dcellos. 1) lnteractiva : Un Patr6n a la vez. A partir de un Patr6n de entrada que se aplica a la Red de Hopfield activa en ese momento; la Red regresaraun patr6n, el cual es el Patr6n Aplicado (Patrbn Reconocido) o un Patr6n Aproximado (Patr6n no Reconocidoo Espurio). Directorio Permite al usuario cambiar deDrive y Directorio, eligiendo el PATH de trabajo. Terminar la Sesión - Finaliza la Sesi6n de Trabajo. Al termino de la Sesi6n se regresara al directorio y Drive inicial (Solo si es posible). I IBROfl,CJ'O TKRMIflM,. JJ W D mURONAI, M i J1OI'JJJJSJ.D Descripcion : El programa Miliza la E D NEURONAL DE HOFELD para resolver el problema deRECONOCER PAI'RONES. La red formada consta de capas (layers) y elementos de procesamienlo (neuronas). La red puede reconocer patrones de cerosy unos que el usuariole de. Los datos que requiere una red se guardan en los archivos con extensiones: .PES (Mauiz de pesos) .ARQ (Ndmero de entradas (neuronas)) .APR (Patrones a memoriSu) Datos necesarios para la construcci6n de una red: 1.- El nombre del problemao aplicaci6n. 2.- Indicar la longitud de los patrones. 3.- Número de patrones que va a contener el problema 4.- Una serie de patrones de cerosy unos. NOTAS : 1.- Los patrones que utiliza la red son cadenas de UNOS y CEROS. 2.- Todos los patrones de un problema deben ser de la misma lorlgitud. 3.- El numero maxim0 de'patrones que puede tenerun problema son 60 *. 4.- La longitud maxima que pueden tener los patrones es de 150 caracteres *. * Cuestiones de Metnoria. #include <stdlib.h> ##include <stdio.b ##include <string.b #include a n 3 t h . b #include <ctype.b #include "co1ores.h" Mefine pos-x-menspal PROFESOR : Rene Mackinney Romero. ALUMNOS : Arturo Galván Roque. 86328836. Alfred0 Gonzsllez Velez. 853227384. . 5 PAgina 9 #define x-ayu #dcfinc y-ayu 15 8 #define vent-ayud #define menu-ppal #define menu-cons #define menulong #define vent-arq #define arqs-cxi #define name-arq #define nume-Ion #define arqs-pat #define numegat #define acep-pat #define paw-rec #define paw-sal #define despgat #define vent-dir #define maw-ent #define matr-sal 1 2 3 #define num-arqs #define nun-paw #define Ion-arq #define max-ite #define mh-arqs #define ext-arq #define ext-pat #define e x t p s 10 13 8 30 "ARQS,HOP/CAT" ... I 4 5 6 7 8 9 10 11 12 13 14 15 16 17 r ".ARV ".APR" ".PES" /* constantes fundamjntales*/ #define MAXLONG 140 /* nút$ero m s b o delongituddepatronesenlecturaenMatriz */ #define MAXLONLIN 60 /* n*ero m k w o delongituddepatrones en lecturaenlinea */ #define MAXCOL 40 /* núm ro mhirqo de columnasdela matriz decapturadepatrones */ #define MAXREN 20 /* n t h ro rnbimo derenglonesde la matriz decapturadepatrones *I #define MAXPATRON 60 /* númbro m W o de patrones a memorizar */ #define FIN 2 'e typedef smct { char pW1; char ind; 1opts; extern char titO,dir-inicu,nomgr@bl]; extern char !lag,*su,*mem; void-(void); Pagina 10 A l I "ac, int Aprendi?aje(char,cl~ar,cl~ar); void Crca-Arq(ch,char); void Captura-Patrones(char,clm); voidLee_Mauiz(cIxu[],char); void cursor(cku,char,char *,char *); void Lect-LongPatr(char [],int *&a *,char *,char *,char,cl~ar); voidMemo-Patrontvoid); void Recupcra(char [],cliar [I); voidCons-lnt(char); voidCons-Pato; voidAprende(); voidGuarda-Pesostvoid); voidLxc-Arq(char [I); void Arqs-Exisrs(char,cha,char); void k-Pesos(void); void Mete-Patrones(char,char); voidCarga-Patrones(); int Menu(char,char,char,Opcs 0 , c h ar,char,char,char); intLee-Dato(char0,char.char.char.c void Desp_Opcs_Menu(char,~ar,cha char,Opcs n,char *,char *); void Captllfa_Text(in~in~in~infintir1; void DespIiega_Ayuda(cha,char); void Despliega_Texto(char,char); void Lin-x_y(char x,char,char,char *, ##include "glob-path" int pesos[MAXLONG]~AXLONG I* arreglo de apuntadores que controlara los renglones de la matriz de pesos */ I* Variables tilizadas en el aprendizajey la consulta para caract izar una red de Hopfield particular */ typedef stnrct{ char patron[MAXLONG+l]; ] Cadena; Cadena patrslMAxpATRONl; longitud; int char lin_ma~num,col,n~ren; patrones; int char nom-prob[lon-arq+l]; FILE *filel,*file2,*file3; I* arreglo con los patrones a memorizar (y para la consulta) *I I* longitud de los patrones de entrada. Ademasdefine el tamaño de la matriz (cuadrada de pesos). */ I* cantidad de patrones a memorizar *I /* nombre de un problema particular *I I* apunta res para la manipulacion de ficheros *I Pagina 11 { char car,nombrc[lon-arq+ 1J.i; Pos-Window(num-ven,x,y); Tils-Window(" Esc=Fín ","Arquitec "); gctcho; 1 Venma(O,O.O,""); else { do { for(i4; icnum-afqs; ++i) i f (!feof(file2)) else break; fclose(file2); 1 Desuipcion : Permite al problema del loslongitud de y la problema archivo "HOP-ARQS.CAT. void Crea-Arq(char x,char y) { int temp-lon,exist; temp[O]=lO'; cprintf(" Arquitectura : "); do else { exist=O; (una nuevadel nombre red); el es el guardado en ". - do ( fsccmf(file2," (!strcmp(lemp,nombre)) .if ) while (!feof(file2)); fclose(file2); I ~ 1 1 while*((lemp[0)==10"11 exist) && flpg); if (flag) { sp~U(fnombre,"%s%s",temp,c~t-arq); Lecr-~ngPatr(ternp,sremp-l~,&~rnif (flag) I Ventana( 1,O,O," Creando la E3 clura if ((file2 = fopcn(fnombre,"w"r= NI { Error(0," No se puede abrirel Arch else { fprintf(file2,"%d %c %d %flln",ten - fclose(file2); P Coloca el nombre de la red ab el fich if ((file2=fopen(arch-arqs,'I/a")) = : { Error(0,'' No se puede ahif el A else { fprintf( file2,"%sb",tem)p); fclo: 1 Ventana(O,O,O,""); 1 1 )1 %S Red %s",tqmp); ",fnombre)l; flag=O; ) de nombres *I' AL, 1 ro %S ",fnomtin); flag=O; } lc2); } - Current-Window(); clrscro; Clo: if (flag) { sucpy(nomgrob,temp); ,longitud num-col=tem-col; nuq-ren=te ) I* CreaArq */ . I la -3ec IJindow0; np-bn; lin-mpt=tem-cap; en; 1 ' , FUNGI< Description : Perinite al usupio met sea en Linea o en Matriz. ,ect-Long_P/ltrO 1 longitud de los patrones para ser capturados ,sea ya void Lect-~ng_Patr(temp,tem_looi,tem-~~ char tempU; iot *km-lon; char *tem-cap,*tem_col,*tem-i n,x,y; { char aux~lon[3],aux~co1[3J,aux' en[3],op '! #definen 2 Mefine d3 18 Opcs ArrO={"Captura en Linea"4 '2. "Captura enMatriz",l2};1, JF P Desp-Opcs-Menu(menu-lonlong,x,Si(ji3,An;" while (opc) PAgina 13 i switch(opc) { case 1: Pos-Window(nun~e-lon,x+2,y ",~cmp); cprintf(" Longitud de los I%~lroncs do { selcursor(1); Lec-Dato(aux-lon, *tem-lon=abs(atoi(aux-lon)); if (*lem-lon>MAXLONLIN & { *temlon=O;Error(0," ) while((aux-lon[O]==70' II *LCI CumenlWindowO; clrscro; *tern-cap='L'; *Lem-col=*tem-rc " ,l. I , 1 ,ty*,~); setcursor(()); I dc los Pauones = %d ",MAXLONLIN); ] :-Widdlow(); Esc=Cancela ","Arquitectura case 2: Pos~Window(nume~lon,x+2,y ",temp); cprintf(" Matriz del Patron de ( do { *tern-lon=O; do I setcursor( 1); . *tern-col=abs(atoi(aux,col)); if (*tern-cobMAXCOL && { *tem-col=O; Error(0," ",MAXCOL); } } while ((aux~col[O]==lOII * if (flag) I { do { i setcursor( 1); Lee-Dato(au$ if (*tem-ren>MAMZEN ",MAXREN); 1 ~, una lbpgitud de Columnas en la Matriz = %d &=o) k&flag); ,2,29,1, , l . 1,'N.O); setcursor(0); -ren+O) Current-Windowo; clrsc1-0; *tem-cap='"; break; } if (flag) ope@ else flag=l; 1 ~ i 1 Current-Window(); M,1,1:I~,w,o); sctcursor(0); ," as) clrscr0; close-U 1 Renglones en la Matriz = %d && flag); I Long! de } while (*tern-lon==O && flag){ 1 ; au~,?on[O]=aux~col[O]=aux~rcn[O]=lO'; ixima~Longitud de if (*tem-lon>MAXLONG *tem-lon=O; } ~ .S) { *ternwren=@ %S los Patrones = %d ",*tern-lon,MAXLONG); ,e-WibpowO; I ~ ~ OW(); I I 1 ; I I - L o Pagina 14 Descripcion : Lee del <non problema. void Lee-Arq(char nom-arq[]) .[ int c; char horn[ 131; sprinU(fnom,"%s%s",nom,arq,ext. if (( file1 = fopen(fnom,"r")) == N { Emr(0," No Existe la Arquitecl else { fscanf(filel,"%d%c %d%d,& fclose(file1); ) ) /* Lee-Arq */ Descripci6n : Permite al us6 <nom-prob>.APR. void Mete-Pauones(char x,char y) t char temp[lon_arq+l],fnombre[l3: int ij,c,exist,temp_pat; Pos-Window(arqs-pat,x,y); strcpy(temp,nom-prob); Tits-! wring( do { setcursor(1); Lee-Dato(temp.8, if (flag) if ((file2=fopen(arch-arqarsq"f": { Error(0," No se puede abri else { exist=O; do { fscanf(file2,"%sb",nomi if (!sacmp(temp,nombre) } while (!feof(file2)); fclose(file2); if (!exist) Error(0," Arquitc 1 1 while ((temp[O]=lO II !exist) && if (flag) Lcc-Arq(tcmp); if (flag) . J i { sprintf(fnombre,"%s~s",~mp,c~ if ((filel=fopcn(fnombrc,"w")) =: { EIYM(O,"NO se p u d e abrir el else { Pos-Window(nwne_~at,x.t13 ",longitud); cpfintf(" N" de Patrones Entrar do t sclcursor(1); Lcc-Dato(auxtcmpgat=abs(atoi(aux-pat): if (kmp-pat > MAXPATRC { ternp-pat=O; Error(0," Ni ] while ((auxgat[O]==lO II tc if (flag) { patrones=abs(atoi(aux_pat): Captura-Patrones(x,y+4); if (flag) ' { Venlana(l,O,18,"Insem fpr"tf(filel,"%'od",patn for (i=O; i c patrones; +-I sleep( 1); Venma(O.0. I ' 1 * fclose(file1); Current-Windowo; clrsc 1 1 CurrentWindowO; chao; if (flag) strcpy(nomgrob,temp); ) /* Mete-Patrones */ F1 Descripci6n :Captura de los 1 void Captura.-Patrones(char x,char y { register int i j ; char aux [151; ++x; switchOhunat) { case z ': Recreate-Window(ace Pos_Window(acepgat,(6 if (longitud > 5) Tits-WiE else Tits-Windol for (i=O; iqtrones; ++i)i for ( i a . icpatrones;) { cprintf(" PatronN"%) . setcursor(0); switcb(flag) if (!flag) break; if (num-col c 8) Kecreal.e-Window(ma else Recreate-Window(ma if (25-y > nurnfeni-4) Pos-Window(matr-ent, else Pos-Window(matr-en for (i=O; kpatrones; +-ti) { for (i=O; jclongitud; + for (i=O; kpatrones;) Lce”auiz@atrs[i].pa { case -115: if (i > O) case -111: if (i <pa if (!flag) break; Current-Windowo; break; for(j=O; j<num-ren; ++j) c b for(i=@printf(”bb “); icnum-cc ~ntf(”%c”,pauon~num_col*. ) I x=y=2; i=j=O; gotoxy(x+i,y+j); sctcursor(1); while(bmd && flag) { let=getch(); if ( let=’O II lel==’l’ II le1 =32) b if (!b && let!=O && let!=13 && I { sound(2000); delay( 100); noso if (iscntrl(1et) && let==O) { lel=getch(); switch (let) { case 71: --j;- 4 ; cursor(x,y,&i case 72: --j; cursor(x,y,&i, case 73: --j; ++i; cursor(x,y,& case 75: 4 ; cursor(x,y,&i, case 77: ++i; cursor(x,y,& case 79: ++j;-4; cursor(x,y,& case 80: ++j; cursor(x,y,&. case 81: ++j; ++i; cursor(x,y,( case -1 11: if (func) flag=let; ba case -115: if (func) flag=let; ba 1 -1 else switch (let) { case 13: band=O; case 27: flag=& b a n d * ; default: if (let=’O II let : palron[num-col*j+ else if @atron[num-co let=patron[numelse let=palron[nun gotoxy(x+i,y+j); putcl 1. 1 setcurs0r(0); 1 void cursor(char x,char y,char*i,cha { if (*id) { *i=num-col-1; --(*j); if else if (*i>num-col-l) { *i=O; ++( else if (*j<O) { *j=num-ren-1; else if (*j>num-ren-l) { *j= gotoxy(x+*i,y+*j); 1 PAgina18 -._ ISpone cri la matriz de pesos. Arq. %S ",nom-prob); 1 Matriz de pesos "); } rificar si es 6 no reconocido por la red PAgina 2 1 s-Window(aux,””); Pagina 23 Descripcion : a t a funcion st parte de Memo-PauonO. La salida es calculada utilizar ser) los pauoncs que aprendio en I; Esta funcion tambien puede (cuando la consulta es intcractiva). c el usuario IC dc desde el tccladc nwl) : void Recupera(char enlradan,char si { registerint i j ; int retorna,numjte=0; in1 SFIAXLONG]; char nsalida[MAXLONG+l] sucpy(salida,ent; do { /* calcula la salida de sucpy(nsalida,salida); for (id jciongitud; ; j++) - for(i=SU]=O, klongitud; i+ Su] += (2 * (salida[i]++num-ite; for + O ; jclongitud; j++) if (Su] >= O) salidati] = else salidab] = 'o' /* Comparando con la salic if (!strcmp(dlda,nsalida) II !S@( retoma=FIN, else retorna = O; 1while (retorna != FIN); } /* Recupera */ *ma&) Wgina 24 I CIÓN Pdgina 25 Una simulacidn anima R ........ ......:.: De'.&m, ...... ..... ... me. m10 0.75 ; 1.00 0.25 : 0.50 om : 0.25 mles de :tivocibo actualizacidn. Las 2 rejas re cuadro determinamos el valor es y los pesos. Los cuadros de niento con diferentes valoresde sos, con el sombreado de cada erconexi6n. La escala numCrica Ir de actualizaci6n y sus pesos, porque cadatipo de parhetro Una red retro propag En cada presentacidn, los pes la red y la salida objeto. Un pares de patrones) es utiliza DespuCs de que la enseñanza Forward' (hacia adelante) seg propagaciones son realizad propagacidn hacia adelante capa de entrada de la red, y haciaadelante por medio d do aprendizaje supervisado. La apareado con una salida objeto). ir la diferencia entre la salida de In conjunto de entradas .objeto; R presenta a la redamenudo. iento de la red es comprobado. n comprende una propagaci6n Retroward (hacia at&). Ambas Itado durante la enseñanza.La de un patron de entrada para la dores de activacidn propagando cadacapasiguiente,todos los mces aplican la funcidn senoidal Phgina 28 16n de los patrones de salida de es calculado. Calcula entonces :tualiza los pesos, comenzando as capas de atrb por medio de corrigc los pesos haciendo que dc procesamiento es utilizado )r grande de 6 indica que una lcja la dirccci6n en la cual los l LANTE ltando un patron a la red. Cada 'ector. DespuCs de actualizar la an los pesos de la propagaci6n S capas. ".ci ...... ...... .:........... .... .... .....:....,...:.:...... KSJ lacia adelante. ....,:..:. . .. ...... .... . .... . . : i ..... ... I ropagaci6n hacia adelante. Los de procesamiento y wji es el lrocesamiento j (el elemento de xesamiento 39. DespuCs de que calcular F(Sj). La funci6n F es n sus puntas, y tiene un rapid0 3 Pagina 29 lcmcntodeprocesamiento j, tda son un caso especial; estos 50s dc entrada,solotoman el de procesamiento extra como muestra lafig 8 y 9). Estos tctuaci6n de l. Cada elemento esamiento de la siguiente capa pagacidn Retro-Error. I ~ que el resultado se mejore rcionan un "umbral" eficiente. e con un termino constante en :noidal. Esto esequivalentea or ejemplo, suponiendo que el igual a 1.0 y su peso es: ?tos de procesamiento de la fig la suma que llega al elemento loidal f(2) (ver fig loa) y la .e C trasladadala grflka a la ' de la curva senoidal, del valor ;o extra proporciona un umbral elemento de procesamiento j PAgina 30 I La red esta formada por ;nan aleatoriamentc. ;lMis. C.-Constante d X.- Posici6n de 'ntal. V.-Velocidad 1 zrtical. Fuerza : Fuerzaaplicadapor 1 tratar de mantener e Grado : Indica el ndmerode (izquierda 6 derecha), para palito (con respecto a la i)N red aleatoriamen zando todos las variables de la ver a presionar "Alto". ca, permitiendo ver en detalle )r la foca y los cambiosen las GUARDAR : Guarda el estado CARGAR: Recupera un esta SALIR: Finalizaci6n de 1 # LSTENTOS: Indica el n~mero TIEMPO: Indica el tiempo de los intentos. intentos, matriz de pesos). i6n (#intentos, matriz de pesos) :ho estado. tr la foca para equilibrar el quilibrio el palito en cada uno Pggina 33 . URONAI, DE RETROPI10 oblcma dc ADIESlR ' AR A UNA RDO UN PALITO SOBRE SU 110sde procesamiento (neuronas). alcs) :uronas)) i n Roque 86328836. talez Velez 85327384. Pagina 34 I 1 para construirla red , y hace una le se almacenara la informacion dc la PAgina 36 I de atributos de entrada,el numero L estructura de la red. Pagina 37 " IN : p :d utili ropagacion bottom-up del patron dc - I , umbr I e salid unid I ** cac *' bral */ 3 cap aril*/ k[mlidad I nplo i cap3 - - ultima capa esc. = sal*/ Mgina 38 i I a red y los almacena en variables a ra verificar el adiestramiento. PAgina 40 red de la send de error en cl 146259 PAgina 41 ( *(salidas[m-l]+n )) /** reuop: cambio dC los pesos ** for ( m = 1;m < cap-escs+2; m++ ) { for ( n = O; n < uni-capas[nl]; n t c ) { for ( p = O; p < uni_capas[m-l]; p++ { offset = ( uni-capas[m-11) * n + p; *( pcsoslm-l]+offset ) += *( d e l k 1 1 I* retrop: calculando el error de ejenl err-ejemp[i] = 0.0; for ( m = O; m < uni-capas[cap-escs+ { err-ejemp[i] += fabs(( sal-esp[i][m 1 err-red 1 += err-ejemp[i] * .err-ejemp[ /** reudp: error de sistema normali err-red = 0.5 * err-red 7 ejemps; I* Liberando memoria:delb e m */ free( delts); free( em); I** retrop: Actualizando la salidaco for ( i = desde0; i < hastan; i++ ) pqW(i); I* Liberando memoria: sals *I /* free( sals ); *I guarda_pesoso; free(pess 1 ; } /* reuopropag */ PftSina 42 is y umbrales aprendidios duranteel @s.da1 . I " i creada durante el aprendizaje. Phgina 43