Una de las estructuras de las redes Neuronales es el Perceptrón, aunque existen innumerables documentos y aportes entorno a la función de transferencia de ésta estructura, el presente artículo es el fruto del estudio hecho en una primera aproximación al concepto, generando un material didáctico, como estrategia de divulgación en la Corporación Internacional para el Desarrollo Educativo (CIDE), entorno al proyecto Redes Neuronales Artificiales (RNA), adscrito al grupo de Investigación de la Facultad de Ingenierías y Administración de la misma (IARN-CIDE). El presente material didáctico se aplicará en la fase exploratoria del concepto hacia la implementación del algoritmo en un prototipo robótico, específicamente un robot de tipo móvil, sin embargo, éste se puede usar en cualquier campo del conocimiento, de los programas ofertados en la CIDE, a nivel tecnológico, tales como Sistemas, Gestión Empresarial, Electrónica, Mecatrónica, Alimentos, entre otros.
2. CIDE. Programa de electrónica.
.
2
Figura 1. Estructura Biológica de una Neurona. [1]
Como se puede observar, la célula está dividida en
partes funcionales, cada una de ellas se describe a
continuación:
Axón: Rama principal que sale del cuerpo de la
Neurona, su principal función es la de transmitir la
información a las dendritas, éstas a su vez conectan
dicha información a las otras Neuronas.
Dendritas: Ramas más cortas que el axón, las
cuales llevan los impulsos nerviosos a otras neuronas. A
través de ellas se realizan las conexiones o Sinapsis con
otras Neuronas.
Soma: Es el cuerpo de la célula nerviosa, su
función es la de fabricar los elementos necesarios para
la vida de la Neurona, tal como sucede en las otras
células del cuerpo.
Una red Neuronal, se genera a partir de un proceso
de aprendizaje, es decir, cuando estamos aprendiendo
algo, se crea una conexión entre las neuronas,
constituyendo el aprendizaje, para luego ejecutar la
función de la red creada, cuando nos enfrentemos a una
situación similar, es decir, cuando aprendemos a leer se
generan una serie de conexiones neuronales que son
utilizadas, cada vez que nos enfrentamos a la misma
tarea.
De manera similar, se plantea el concepto de las
Redes Neuronales Artificiales, las cuales se usan cada
vez que el algoritmo se entrena, en una aplicación
específica, sin embargo no se debe compara las unas
con las otras, pues las RNA, solo emulan una de las
muchas funciones complejas de las redes neuronales
biológicas.
2.2 Redes Neuronales Artificiales: El
Perceptrón.
No es la única estructura conocida y concebida
para el desarrollo de las redes Neuronales, entre otras
se encuentran: Kohonen, ART, Hopfield, entre otros.
Para el caso que nos ocupa se realiza el estudio a partir
del Perceptrón multicapa.
El Perceptrón es concebido por el psicólogo Frank
Rosenblatt de la Universidad de Corell en 1959. Éste es
utilizado inicialmente para la solución de situaciones
donde los estados a la salida, son diferenciados y de
fácil separación. A partir de la estructura sencilla del
Perceptrón se pueden construir estructuras más
complejas, sin embargo, dada su simplicidad, su estudio
fue abandonado a mediados de los 70 pues se
descubrió que en tareas de clasificación como la XOR,
era incapaz de funcionar adecuadamente [Minsky y
Papert].
Como se indicó en la sección anterior las RNA,
funcionan de manera similar a su contraparte biológica,
con algunas características: aprendizaje, plasticidad y
procesamiento en paralelo. Aprendizaje: ya que la
neurona puede ser entrenada y aprender a responder
según las entradas a una situación específica, mediante
las salidas deseadas; Plasticidad: pues si alguna de las
estructuras funcionales llegase a fallar, existen otras que
respaldan la función de la neurona, evitando que ésta
responda de manera errada y Procesamiento en
paralelo: ya que al recibir varios estímulos al mismo
tiempo responde según el estímulo más fuerte o según
sea configurada.
Para explicar el funcionamiento del Perceptrón se
debe hacer referencia a su concepción matemática, éste
modelo, permite realizar una aproximación a la
programación necesaria que emulará el funcionamiento
de la Neurona.
Figura 2.2.1 Estructura de un perceptrón [1]
Como se observa en la Figura 2.1.1 las partes
constitutivas del Perceptrón son:
Capa de Entrada: Constituye las entradas de la
Neurona, las cuales se toman una a una y se
conectan a la capa oculta con sus pesos
respectivos.
Capa Oculta: Allí está configurada la función de
transferencia de la RNA, es decir, la forma como
toma cada entrada y la evalúa.
Capa de salida: Constituye la salida, en éste caso
es una sola.
Ahora bien, aunque es importante resaltar las
características más importantes de las Redes
3. CIDE. Programa de electrónica.
.
3
Neuronales Artificiales (RNA), en el presente artículo
solo haremos referencia al Perceptrón Básico.
Además de su estructura se debe reconocer en las RNA,
4 características importantes: Topología, mecanismo de
aprendizaje, asociación entre la información de entrada
y la información de salida y la forma como se representa
la información, de ello depende la comprensión del
funcionamiento de éste primer acercamiento al
Perceptrón.
A continuación se presenta una breve descripción de
tales características.
2.2.1 Topología:
Hace referencia a la forma como se conectan las redes
neuronales, el número de conexiones entre las
neuronas, la cantidad de neuronas en cada capa y el
grado de conectividad. En éste caso se habla de Redes
Monocapa y Redes Multicapa.
2.2.2 Mecanismo de aprendizaje:
Es la forma como la red actualiza los pesos de acuerdo
a la información de entrada; como analogía a los
sistemas biológicos, se puede pensar en la forma como
se conecta o desconecta una red neuronal; cuando se
produce un aprendizaje, se genera una conexión esto
quiere decir que para la RNA, el peso es distinto de
cero, pero cuando se realiza una desconexión por el
proceso de aprendizaje que sucede en el cerebro, esto
se interpreta en la RNA, como el equivalente a cero del
peso que conecta a la entrada respectiva.
Según esta característica las RNA pueden ser: con
aprendizaje supervisado o con aprendizaje no
supervisado. Cada uno de ellos tienen sus propias
características no se profundizará en ellos ya que ésta
intensión escapa a los límites del presente artículo.
2.2.3 Asociación de la información Entrada / Salida:
Es la forma como la red neuronal almacena los pesos
nuevos a partir de los aprendizajes, estos son formas de
representación del “nuevo conocimiento” para la RNA.
Es decir tiene un comportamiento similar al encontrado
en los sistemas biológicos y que se conoce como
memoria asociativa.
Según éste criterio, las RNA pueden ser:
Heteroasociativas (Mantienen la información gracias a la
existencia de dos capas una para captar la información y
otra para retenerla) y Autoasociativas (compara las
entradas actuales con los datos almacenados y escoge
el más parecido en el estado presente).
2.2.4 Representación de la información
Entrada/Salida:
Los datos a tratar pueden ser continuos o discretos, en
el primer caso se habla de datos tipo analógicos,
tomados de variables reales, por tanto la función de
activación debe ser de la misma naturaleza, es decir de
tipo lineal o Sigmoidal. En el caso de los datos discretos,
la función de activación debe ser de tipo escalón.
Tabla 2.2.4.1 Resumen de RNA según tipo de datos [1]
RNA CONTINUAS
E:ANALOGA
S:ANALOGA
RNA HIBRIDAS
E: ANALOGA
S: BINARIA
RNA
DISCRETAS
E: BINARIA
S: BINARIA
BACKPROPAGATIO
N
PERCEPTRON HOPFIELD
DISCRETO
LINEAR
ASOCIATIVE
MEMORY
ADALINE/MADA
LINE
ART
(ASOCIATIVE
RESONANCE
THEORY)
Como se observa en la tabla se escriben tres ejemplos
para que el lector profundice en el estudio de cada uno
de ellos, y de otros propuestos para cada una de las
clasificaciones presentadas.
2.3 Matlab en la modelación del Perceptrón
Para identificar la estructura del Perceptrón simple, (De
una sola capa), se debe partir de las características
mencionadas en el apartado anterior.
Figura 2.3.1 Estructura del Perceptrón Simple [1]
A continuación se realiza una descripción del algoritmo
usado para implementar un Perceptrón básico, bajo
entorno Matlab, se aplican conceptos de programación
estructurada, para que el código sea de fácil
comprensión y se realice la adaptación necesaria si se
quiere usar otro entorno de programación. Se hace
necesario mencionar, que Matlab ya trae en sus
herramientas (Toolbox), los algoritmos de algunas redes
neuronales, sin embargo en el presente artículo se
presenta un código genérico el cual se puede
implementar en diferentes ambientes de programación.
Para explicar la estructura del código, se plantea el
siguiente orden en el algoritmo planteado.
1. Se fijan los pesos aleatorios: Son valores que
multiplican a la entrada, generalmente entre 0 y
1, sin embargo estos valores son irrelevantes,
es decir su valor no interesa pero deben existir,
la única restricción es que no pueden ser cero,
esto indicaría que la entrada no se tiene en
cuenta.
2. Se establecen las entradas: Se configura la
matriz de entrada, según el número de entradas
y los valores que toman cada una de ellas.
4. CIDE. Programa de electrónica.
.
4
3. Se calcula la salida según la función de
aprendizaje. Para el Perceptrón se usará la
función hardlim, de Matlab®.
4. Se actualizan pesos según respuesta. De
acuerdo a la función determinada, se recalculan
los nuevos pesos, éstos ayudarán a reevaluar
las nuevas entradas.
5. Se regresa al paso 3 hasta obtener la
respuesta deseada.
A éste algoritmo se le conoce como aprendizaje por
refuerzo, la neurona repite el proceso hasta conseguir el
aprendizaje de las salidas deseadas.
3 DISEÑO DE LA APLICACIÓN EN MATLAB
Como se indicó anteriormente, Matlab® es la
herramienta por excelencia en el modelamiento e
implementación de la función de transferencia del
Perceptrón. Aunque en la sección 2.3 se planteó la
forma de hacerlo, en éste apartado se deja el código
para ser usado en diferentes contextos.
Para explicar el algoritmo usado, en éste caso
particular, se explica paso a paso la implementación en
Matlab ®, correlacionando mencionado código con las
ecuaciones que rigen cada una de las etapas de dicho
algoritmo, citadas en la sección 2.3.
1. Se fijan los pesos aleatorios: En Matlab, se
pueden usar los vectores de datos, el lector
debe estar familiarizado con el Algebra Lineal.
Para ello se digita en el editor de Matlab ®, la
línea de código:
W=rand(2,1).
Con éste comando se genera un vector
llamado “W”, que consta de dos datos
aleatorios organizado en dos filas y una
columna (2,1)
2. Se establecen las entradas: La matriz de
entrada debe estar organizada de tal forma
que el número de entradas designa el número
de columnas, las filas son designadas por las
posibilidades de combinación de las
mencionadas entradas. En nuestro caso se
pretende que la red se comporte como una
compuerta lógica de dos entradas. Esto indica
que el vector de entrada “X”, debe definirse en
Matlab como sigue:
X = [0 0; 0 1; 1 0; 1 1]
Se debe observar que al ejecutar esta línea de
código se genera una matriz de 2 columnas y
4 filas.
Luego se estableces el “BIas” o velocidad de
aprendizaje, esta es una constante entre 0 y 1,
se puede definir usando el comando: Th=0.1,
en éste caso el “Bias” tiene un valor de 0.1.
3. Calculo de la salida: Inicialmente se establece
la salida deseada, ésta debe estar conformada
por un vector “Y” que contenga por cada
estado de entrada una salida, en éste caso
será un vector de una columna con cuatro
filas, como se indica a continuación
Y=[0 0 0 1]
La salida deseada corresponde a una
compuerta AND, cuya salida depende de las
entradas
Tabla 3.1 Estados compuerta AND
X1 X2 Y
0 0 0
0 1 0
1 0 0
1 1 1
Observe como se resumen los datos de la
tabla, la columna “X1” corresponde a la primer
entrada, la columna “X2” la segunda entrada y
la columna “Y” a la salida, para definir el vector
de salida deseada, se puede usar el comando:
yd=[0;0;0;1], que es un vector columna, el lector
puede verificarlo usando el comando en
Matlab®.
Teniendo en cuenta la salida deseada, ahora se
calcula la salida a partir de la función de
activación de la red neuronal, en éste caso el
Perceptrón.
La función de activación que se usa es de tipo
escalón unitario, ésta función permite clasificar
en dos estados la respuesta del Perceptrón,
como se puede observar en la Tabla 3.1 solo
hay dos estados “0” o “1”. Para aplicar la
función escalón unitario, se usa en Matlab el
comando: Hardlim.
La estructura de la nueva salida, se escribe
como: y=Hardlim((X*W)-Th) si el lector en éste
punto está comprobando el resultado puede
observar que aún la respuesta no es la
deseada.
Para obtener la respuesta adecuada, se debe
realizar el proceso varias veces hasta que la
respuesta calculada “y” sea igual a la respuesta
deseada “yd”
4. Se actualizan los pesos, para ello se usa la
función de la red neuronal planteada en la
Ecuación:
𝑤𝑖(𝑡 + 1) = 𝑤𝑖(𝑡) + 𝛼[𝑑(𝑡) − 𝑦(𝑡)]𝑥𝑖(𝑡)
0 ≤ 𝑖 ≤ 𝑁
Dicha ecuación se puede escribir en Matlab de
la siguiente manera:
Wn(k,1)=Wn(k,1)+(n*(X(i,k)*e(i,1)));
El ciclo que debe realizarse se debe detener
cuando el error sea menor a 1, como se puede
observar el nuevo peso (Wn), se calcula a partir
del producto de la ganancia (α=n), por la
entrada (X(i,k)=xi(t)), por la diferencia entre la
salida deseada (d(t)), menos la salida calculada
(y(t)).
5. CIDE. Programa de electrónica.
.
5
El programa final, como se utilizó en Matlab ®
fue:
%1. Fijar pesos aleatorios
Wn=rand(2,1);
%2. Establecer los valores de entrada
X=[0 0; 0 1;1 0;1 1];
Th=0.1; %Bias o referencia del Perceptrón
%3. Calcular la salida de la neurona
yd=[0;0;0;1];
y=hardlim((X*Wn)-Th);
plot(X,y),grid on, hold on
e=yd-y; %Se calcula el error al restar la
salida deseada de la salida obtenida.
ed=0.1;% Se establece el error aceptado,
en éste caso 0.1
N=2; %se establecen las iteraciones,
pueden ser definidas por la velocidad de
aprendizaje
%Aquí empieza el entrenamiento de la
neurona, se hace de manera recursiva
%W(i,j) i=fila; j= Columna
n=0.9; %Factor de ganancia en el rango de
0.0 a 1.0
ent=2;
r=0;
% Se inician los nuevos pesos
for T=1:N %Ciclo for correspondiente a las
iteraciones del aprendizaje por refuerzo
if e==0
break
else
for i=1:4 %Ciclo for correspondiente a
las filas según no de entradas i=filas
for k=1:ent %Ciclo for para
actualizar pesos. k=columnas
Wn(k,1)=Wn(k,1)+(n*(X(i,k)*e(i,1)))
end
yn(i,1)=(hardlim((X(i,1)*(Wn(1,1)-
Th))+((X(i,2)*Wn(2,1)-Th))))
%Función para calcular las nuevas
salidas.
end
e=yd-yn
M=e-ed
T %si el error es mayor que la tolerancia
continua haciendo el proceso se define la
velocidad de aprendizaje para aplicar la
forma de calcular nuevos peso
end
end
%5. Continua hasta que el error sea menor
que la tolerancia
Se dejaron los comentarios para ubicar al lector
con respecto a los 5 pasos planteados en el
apartado anterior y el desarrollo de éste. Si se
quiere cambiar la salida deseada, solo se
deben modificar los datos del vector “yd”, que
para efectos del ejemplo, corresponde a una
compuerta OR y observar la respuesta en el
vector “yn”.
Para determinar el número de veces que la
neurona tuvo que realizar el ajuste de los pesos
hasta obtener la salida deseada, se establece el
ciclo “for”, donde “T” es el número de
iteraciones que el programa debe recalcular los
pesos hasta obtener los adecuados para que la
neurona aprenda a resolver la compuerta OR.
Se sugiere que el lector cambie las salidas
deseadas y revise el número de iteraciones que
el Perceptrón requiere para obtener las
respuestas a las compuertas AND.
4 EJEMPLO DE APLICACION
Como ejemplo de aplicación, se plantea el de
seleccionar una prenda de vestir, según sus
características en cuanto a la Calidad de la tela y Tipo
de Tela. Para la categoría “Calidad” se establecen dos
estados, Buena =1, Baja =0; para la categoría “Tipo”, los
estados son: No paño=0 y Paño=1.
La idea es que el Perceptrón seleccione dos
opciones, por costos, ya que de otra manera se
excedería en el presupuesto asignado para la compra de
las prendas, de tal forma que cuando las categorías Tipo
y Calidad sean las parejas ordenadas:
No Paño, Buena y Paño, Baja.
Respectivamente, pero que no seleccione los
estados:
No Paño, Baja y Paño, Buena
La situación se puede resumir en la Tabla 4.1:
Tabla 4.1. Resumen situación selección de una
prenda
Categoría de la Tela
Selección
Tipo Calidad
No Paño Baja No
No Paño Buena Si
Paño Baja Si
Paño Buena No
Ahora bien, si la Tabla 4.1 se interpreta en binario,
se puede representar así:
Tabla 4.2. Selección de una prenda en binario.
T C S
0 0 0
0 1 1
1 0 1
1 1 0
La función que se ajusta al comportamiento de la
situación anterior es la de una compuerta tipo XOR, se
sugiere revisar éste concepto si el lector no está
familiarizado.
Para ello solo se debe modificar en el programa
anterior el vector de salida deseada “yd”, y observar la
salida que la neurona calcula, al finalizar el aprendizaje
“yn”, analizar el error “M” y determinar el número de
iteraciones “T”, así cómo identificar los pesos en las
entradas ajustados a la respuesta deseada, permite
identificar la velocidad de respuesta y la capacidad de
aprendizaje.
6. CIDE. Programa de electrónica.
.
6
Al ejecutar el programa con las modificaciones
sugeridas anteriormente se obtienen los siguientes datos
de las variables analizadas:
Los pesos iniciales se asignan de forma aleatoria,
como se observa en el código, mediante el comando:
Wn =rand(2,1); el programa asigna los valores,
para éste caso:
Wn =
0.5688
0.4694
Se debe aclarar que cada vez que el programa se
ejecuta, los pesos iniciales cambian, pues estos valores
son aleatorios, los valores finales de este vector son los
que se ingresan a la función finalmente para que la Red
Neuronal (RNA), se comporte ahora como una
compuerta XOR.
5 CONCLUSIONES
A pesar de los múltiples recursos y programas que
se encuentran en torno a la implementación de un
algoritmo para implementar una Red Neuronal, muchos
no explican ampliamente los pasos a seguir, éste es un
ejercicio que permite al estudiante implementar un
Perceptrón de manera genérica.
A pesar de los esfuerzos por emular el
comportamiento de un Perceptrón, se debe aclarar que
para acercarse al comportamiento de una red neuronal
se debe implementar el procesamiento en paralelo, en
éste caso se usa un algoritmo secuencial, lo que debería
corregirse si se quiere realizar un ejercicio de
implementación más acertado, la mejor opción es usar
elementos de hardware para conseguir un resultado
aproximado.
Se debe tener especial cuidado al utilizar valores
adecuados para el Bias, ya que éste puede afectar el
comportamiento de la Red, toda vez que puede ofrecer
valores y comportamientos no adecuados, éste debe
estar entre 0 y 1 así como el factor de ganancia que se
observa en el programa de Matlab.
6 REFERENCIAS
[1] E. Marrero, «Página Profesor: Eddie Marrero,» Marzo
2005. [En línea]. Available:
http://academic.uprm.edu/eddiem/psic3001/id36.htm.
[Último acceso: 5 Febrero 2012].
[2] «Aldabas, Emiliano. Introducción al reconocimiento
de patrones mediante redes neuronales,» [En línea].
Available: www.eel.upc.es.. [Último acceso: 23 Marzo
2013].
[3] J. R. Hilera, Redes Neuronales Artificiales.
Fundamentos, Modelos y Aplicaciones, Madrid,
españa: Alfaomega, 1995.
[4] MathWorks, Inc., «Neuron Model,» 2013. [En línea].
Available:
http://www.mathworks.com/help/nnet/ug/neuron-
model.html?searchHighlight=neuron+model. [Último
acceso: 21 Octubre 2013].
Ancizar Paredes Ardila
Docente de tiempo completo desde 2008 hasta la fecha,
en la CIDE; ha orientado las materias relacionadas con
la Ingeniería Electrónica, en los programas de
Tecnología en la institución. Docente Universitario en
UNIMINUTO y TEINCO donde se ha desempeñado en
áreas afines a la disciplina de su titulación, Co-
investigador del grupo Neurociencia de la Universidad de
Antioquía, como pasante de Maestría; líder del grupo de
Investigación IARN-CIDE.
Docente en los niveles de formación del ciclo 5 en
colegios del distrito. Bachiller Pedagógico, (Normal
Nacional para varones de Pamplona N de S) Ingeniero
Electrónico (Universidad Antonio Nariño) y candidato a
Máster en Tecnologías de la Información Aplicadas a la
Educación (MTIAE-Universidad Pedagógica Nacional de
Colombia).