1. INTELIGENCIA ARTIFICIAL
Trabajo Práctico nº 5
Profesores:
Ing. Mario Figueroa
Ing. Pablo Rovarini
Alumnos:
José Daniel Muccela
Comisión: 5 k 2
Año 2008
Facultad Regional Tucumán
Universidad Tecnológica Nacional
Redes Neuronales
Reconocedor Óptico de
Caracteres
2. Inteligencia Artificial 2008 - TPNº5 - R. Neuronales - Muccela José Daniel
UTN FRT
1
TP Nº 5 – Redes Neuronales
Problema: Reconocedor Óptico de Caracteres
Desarrollo
Una de las aplicaciones que más se usa de las Redes Neuronales es el
Reconocimiento Óptico de caracteres. Esto es posible por la naturaleza de las
Redes Neuronales.
Al hablar de naturaleza de las redes neuronales nos referimos a que es
unos de las ramas de la Inteligencia Artificial capaz de aprender patrones y de
acuerdo a una entrada de datos puede predecir los resultados. Esto es, la red
aprende un conjunto de patrones y luego de acuerdo a las entradas posteriores
la red puede deducir la salida gracias al aprendizaje que hizo de esos patrones.
Una Red Neuronal trata de simular a un cerebro humano.
Estas redes imitan en cierto modo el funcionamiento de las neuronas
naturales, y son un campo que está dando grandes resultados en los últimos
años; son especialmente buenas cuando se trata de reconocer patrones con un
cierto "ruido" de fondo. Por ejemplo, una palabra nunca se pronuncia
exactamente igual dos veces, siempre hay pequeñas variaciones.
Otro ejemplo es una letra escaneada de un papel (incluso letra de
imprenta), que debido a suciedad en el papel, errores en su impresión, e
incluso al propio proceso de escaneado nunca es exactamente igual. Sin
embargo una persona generalmente no encuentra dificultades a la hora de
entender una palabra que le digan o una letra impresa, salvo que sean muy
confusas; pues esta ventaja es la que aportan las redes neuronales,
posibilitando programas como los OCR.
Para entrar más en detalle veamos como está compuesta una neurona
artificial y luego la forma en que trabaja.
Donde:
• “X1…Xn” indican un bit que corresponden al carácter que estoy
tratando de reconocer y son las entradas de la red.
• “W1…Wn” son los pesos de las entradas de la red. Cada X tiene
su peso. El valor para W varía entre 0 y 1.
• “Y” es la salida de la red y está en función de las entradas y sus
respectivos pesos.
3. Inteligencia Artificial 2008 - TPNº5 - R. Neuronales - Muccela José Daniel
UTN FRT
2
En el contexto de las redes neuronales lo que está dentro de la elipse es
el proceso interno de la red y es donde se encuentra lo que se conoce como el
“Umbral”. Este es un escalón unitario y determina si se dispara o no una celular
neuronal.
Cuando la sumatoria es mayor que “a” cambia de estado; es decir,
atraviesa o no el umbral.
Ahora que ya hablamos de las neuronas, pasemos a las redes
neuronales propiamente dicha, la cual está constituida por un conjunto de
neuronas interconectadas.
a
umbral
Y
X1
X2
Xn
W1
W2
Wn
0 >= Wi <= 1
∑ Xi * Wi > a
n
0 1
∑ > a
∑ > a
4. Inteligencia Artificial 2008 - TPNº5 - R. Neuronales - Muccela José Daniel
UTN FRT
3
Como se puede apreciar en el gráfico la capa de entrada corresponde a
lo que viene del ambiente (como por ejemplo el nervio óptico). En esta capa se
encuentran los patrones de enseñanza.
Las neuronas de la capa intermedia propagan su efecto a través de las
diferentes capas sucesivas y como consecuencia produce un vector de salida.
Durante este proceso, los pesos de las entradas de la red son fijos y no se
modifican.
En el reconocimiento de patrones hay un número fijo de categorías en
las cuales las muestras de entrada deben clasificarse. Para ello primero se
requiere una fase de entrenamiento en la que se presenta a la red los patrones
que debe aprender y la categoría en cual clasificarlo. Entonces se le presenta a
la red un patrón nuevo y desconocido pero que pertenece a alguna de las
categorías aprendidas y esta debe decidir a que categoría se parece más.
Para el desarrollo de la aplicación OCR usamos la Red Neuronal de
Kohonen. Esta es un tipo de red No Supervisada. Lo más importante en este
tipo de redes es que el resultado no lo conozco.
Funcionamiento de la red:
Si ocupamos un vector para definir las neuronas, por ejemplo de 30
elementos, tendremos:
x = X [1..30]
A esta matriz la ocuparemos para determinar un carácter. Cada cuadro
de la matriz puede tener un valor 0 ó 1. Si es igual a 0 no tiene nada, caso
contrario el cuadro está lleno.
Vamos a ocupar además un círculo unitario donde estarán
representados todos los vectores, uno por cada neurona.
En este círculo habrá 30 vectores.
Los vectores pueden tener cualquier dirección. Al hacer que todos los
vectores tengan módulo 1, sólo nos preocupamos por calcular el ángulo con la
abcisa.
1
Ángulo
Vector
5. Inteligencia Artificial 2008 - TPNº5 - R. Neuronales - Muccela José Daniel
UTN FRT
4
El uso del círculo y los ángulos de los vectores sirve para
normalizarlos (que tengan módulo 1) y para determinar el ángulo. Este ángulo
determinará cuán cerca está una neurona (vector) u otra del patrón de entrada
que se quiere reconocer.
Supongamos que el patrón de entrada a la red es la letra “A”.
Se puede apreciar que hay cuadros llenos (1) y cuadros vacíos (0).
Este patrón ingresa a la red neuronal para que esta lo aprenda. Este proceso
se conoce como el entrenamiento de la red.
Luego de aprender viene un segundo paso que consiste en el
reconocimiento del caracter. Se supone que con el entrenamiento la red es
capaz de reconocer un carácter igual o similar que ingrese nuevamente a ella.
Siempre habrá un margen de error.
Supongamos que ingresamos un documento escaneado y le pedimos
al sistema que reconozca los caracteres impresos en él. Nos centremos en la
letra “A”.
Supongamos que hay cierto ruido o suciedad en la hoja y la letra ”A”
aparece en el documento como muestra la siguiente figura:
En ella vemos que falta parte de la letra.
Lo que hará la red en este caso es buscar el vector más próximo
(gracias al ángulo) para obtener el resultado deseado. En otras palabras la red
buscará entre los vectores lo que más se aproximen para completar el caracter
que queremos. De aquí surge que hay neuronas ganadoras y neuronas
perdedoras. Las ganadoras son las que se activan y se disparan para obtener
el resultado deseado. Si entre las neuronas no hay proximidad con el caracter
que se pretende reconocer no hay un resultado posible por lo que no hay
neuronas ganadoras, es decir no hay vectores próximos.
Respecto de la aplicación, se desarrolló en Builder C++ Versión 6.0.
Tiene dos funciones principales que consisten en los pasos
mencionados:
1. Aprender
2. Reconocer
6. Inteligencia Artificial 2008 - TPNº5 - R. Neuronales - Muccela José Daniel
UTN FRT
5
Al abrir el programa (fig.1) nos encontramos con tres botones a la
izquierda las cuales contienen las 2 funciones principales antes mencionadas y
una tercera función consistente en reiniciar o volver a enseñar a la red lo que
queremos que aprenda.
Para comenzar presionamos el botón Enseñar. Inmediatamente se
activa el sector de dibujo a la derecha para que por medio del Mouse
dibujemos/escribamos lo que deseamos “enseñarle” a la Red. Una vez que
dibujamos (por ejemplo la letra o patrón “A”) elegimos del combo el
número/letra/símbolo que pertenece al dibujo realizado (Buscamos la letra “A”
en el combo). Esta acción constituye el patrón de enseñanza nombrado al
comienzo. Luego de seleccionar un carácter del combo a la derecha se
mostrará gráficamente como la Red representa al patrón ingresado (Fig. 2).
Esto completa el proceso de enseñanza.
Ahora queremos que la red reconozca un caracter ingresado
nuevamente a partir del sector de dibujo/escritura.
Para ello presionamos el botón Reconocer que se encuentra a la
izquierda. Se borra el dibujo anterior y se activa nuevamente el sector de dibujo
Fig. 1
Fig. 2
7. Inteligencia Artificial 2008 - TPNº5 - R. Neuronales - Muccela José Daniel
UTN FRT
6
para que ingresemos nuevamente la representación del patrón. Supongamos
que dibujamos algo parecido a la letra “A”.
Una vez dibujada presionamos el botón Reconocer en el medio de la
pantalla. Si la Red reconoce el dibujo que acabamos de ingresar nos mostrará
a la derecha el patrón que le enseñamos al comienzo (en el proceso de
enseñanza). Caso contrario nos avisa que no reconoce el dibujo que acabamos
de ingresar.
También observamos que nos muestra un número al lado de la
etiqueta Patrón. Este número corresponde con el caracter ASCII. Esto es
porque en el código del programa consideramos como “caracteres” a los
posibles patrones de entrada al sistema. El número al lado de la etiqueta
Neurona Elegida corresponde al número de la neurona dentro de toda la Red
Neuronal. Esto significa que la neurona 86 es la ganadora y por lo tanto la que
se activo. Esta neurona es la que más cerca estuvo del patrón que
pretendíamos reconocer.
Ahora supongamos que ingresamos una letra “A” pero con mucho
ruido (ó suciedad). Para ello presionamos el botón Borrar y queda limpio el
sector de dibujo.
8. Inteligencia Artificial 2008 - TPNº5 - R. Neuronales - Muccela José Daniel
UTN FRT
7
Este dibujo contiene partes incompletas de la letra “A”. De todas
maneras la Red tratará de reconocer este dibujo. Presionamos el botón
Reconocer y como vemos la Red interpretó y reconoció el dibujo. Por lo tanto
nos muestra el resultado a la derecha junto con el número de patrón que ella
aprendió y la neurona que estuvo más cerca de reconocer el patrón.
Intentamos nuevamente ingresar un dibujo incompleto o con ruido de
la letra “A”. Esta vez la letra está más borrosa. Cuando presionamos el botón
Reconocer vemos que la Red no interpreta el dibujo y por lo tanto no reconoce
el caracter.
Para enseñar nuevamente a la Red un nuevo Patrón presionamos el
botón Volver a Educar a la izquierda de la pantalla. Esta acción provocará que
se descarte la Red que está funcionando hasta ese momento.
9. Inteligencia Artificial 2008 - TPNº5 - R. Neuronales - Muccela José Daniel
UTN FRT
8
Muchas veces la Red cae en la memorización de los Patrones. En
estos casos la solución puede venir dada por:
1. Aumentar el número de Neuronas, ó
2. Agregar capas intermedias.