KELA Presentacion Costa Rica 2024 - evento Protégeles
Hardlim hardlims en_matlab
1. 1
“Hardlim y Hardlims Utilizando Matlab”
1. J. Banda, 2. J. Martínez, Tutor: Ing. Henry Paz
Resumen—En el presente Paper se abordara temas como
Hardlim, Hardlims, Red Neuronal, Perceptron, Perceptron Mul-
ticapa, Funciones de Activacion, Función de transferencia, tipos
de entrenamiento, y código.
Index Terms—Hardlim, Hardlims, Perceptron, Perceptron
Multicapa, Función de Activación.
I. INTRODUCCIÓN
La red tipo Perceptron emplea principalmente dos funciones
de transferencia, hardlim con salidas 1, 0 o hardlims con
salidas 1, -1; su uso depende del valor de salida que se
espera para la red, es decir si la salida de la red es unipolar
o bipolar; sin embargo la función hardlims es preferida sobre
la hardlim, ya que el tener un cero multiplicando algunas de
los valores resultantes del producto de las entradas por el
vector de pesos, ocasiona que estos no se actualicen y que el
aprendizaje sea más lento.
II. ESTADO DEL ARTE
II-A. La Neurona Artificial
El modelo de una neurona artificial es una imitación del
proceso de una neurona biológica, puede también asemejarse
a un sumador hecho con un amplificador operacional tal
como se ve en la figura:
Fig 1.Neurona Artificial
Existen varias formas de nombrar una neurona artificial, es
conocida como nodo, neuronodo, celda, unidad o elemento
de procesamiento (PE). En la siguiente figura se observa un
PE en forma general y su similitud con una neurona biológica:
1. J. Banda, Universidad Nacional de Loja, Loja, Ecuador, e-mail: jiban-
dab@unl.edu.ec
2. J. Martínez , Universidad Nacional de Loja, Loja,Ecuador, e-mail:
jamartinezg@unl.edu.ec
Manuscrito recibido el 9 de Mayo, 2014; revisado el 9 de Mayo, 2014.
Fig 2. Neurona Biológica
De la observación detallada del proceso biológico se han
hallado los siguientes análogos con el sistema artificial:
Las señales de entrada a una neurona artificial x1, x2,.., xn
son variables continuas en lugar de pulsos discretos, como se
presentan en una neurona biológica. Cada señal de entrada
pasa a través de una ganancia o peso, llamado peso sináptico
o fortaleza de la conexión cuya función es análoga a la de la
función sináptica de la neurona biológica. Los pesos pueden
ser positivos (excitatorios), o negativos (inhibitorios), el nodo
sumatorio acumula todas las señales de entradas multiplicadas
por los pesos o ponderadas y las pasa a la salida a través de
una función umbral o función de transferencia. La entrada
neta a cada unidad puede escribirse de la siguiente manera:
Las entradas Xi representan las señales que provienen de
otras neuronas y que son capturadas por las dendritas.
Los pesos Wi son la intensidad de la sinapsis que conecta
dos neuronas; tanto Xi como Wi son valores reales.
θ es la función umbral que la neurona debe sobrepasar
para activarse; este proceso ocurre biológicamente en el
cuerpo de la célula.
Las señales de entrada a una neurona artificial x1, x2,.., xn
son variables continuas en lugar de pulsos discretos, como se
presentan en una neurona biológica. Cada señal de entrada
pasa a través de una ganancia o peso, llamado peso sináptico
o fortaleza de la conexión cuya función es análoga a la de la
función sináptica de la neurona biológica. Los pesos pueden
ser positivos (excitatorios), o negativos (inhibitorios), el nodo
sumatorio acumula todas las señales de entradas multiplicadas
por los pesos o ponderadas y las pasa a la salida a través de
una función umbral o función de transferencia. La entrada
neta a cada unidad puede escribirse de la siguiente manera:
Una idea clara de este proceso se muestra en la siguiente
figura, en donde puede observarse el recorrido de un conjunto
de señales que entran a la red.
2. 2
Fig 3.Recorrido de conjunto de señales
Una vez que se ha calculado la activación del nodo, el
valor de salida equivale a
Donde fi representa la función de activación para esa uni-
dad, que corresponde a la función escogida para transformar
la entrada netai en el valor de salida xi y que depende de las
características específicas de cada red.
II-B. Redes Neuronales
Las neuronas artificiales simples fueron introducidas por
McCulloch y Pitts en 1943. Una red neuronal se caracteriza
por los siguientes elementos:
1 Un conjunto de unidades de procesamiento o neuronas.
2 Un estado de activación para cada unidad equivalente a
la salida de la unidad.
3 Conexiones entre las unidades, generalmente definidas
por un peso que determina el efecto de una señal de
entrada en la unidad.
4 Una regla de propagación, que determina la entrada
efectiva de una unidad a partir de las entradas externas.
5 Una función de activación que actualiza el nuevo nivel de
activación basándose en la entrada efectiva y la activación
anterior.
6 Una entrada externa que corresponde a un término de-
terminado como bias para cada unidad.
7 Un método para reunir la información, correspondiente
a la regla de aprendizaje
8 Un ambiente en el que el sistema va aperar, con señales
de entrada e incluso señales de error.
En muchas redes las unidades de proceso tienen respuesta
de forma:
xk:Señales de salida de otros nodos o entradas externas.
wk:Pesos de las ligas de conexión.
f0:Función no lineal simple.
La función f puede ser sigmoidal, tangente hiperbólica,
escalón, entre otras. En Matlab se tiene diferentes funciones de
activación como tansig, hardlim y perelin, entre otras, lo cual
facilita las aproximaciones que se requieran hacer, empleando
RNA. Cada unidad de procesos tiene una tarea simple: recibe
la entrada de otras unidades o de funciones externas y procesa
la información para obtener una salida que se propaga a otras
unidades. Una red puede tener una estructura arbitraria, pero
las capas que contienen estas estructuras están definidas de
acuerdo con una ubicación en la topología de la red neuronal.
Las capas internas que no se observan como entradas o salidas
se denominan capas ocultas. Por convención las entradas no
se consideran como capas porque no realizan procesamiento.
La entrada total u de una unidad k es la suma de los pesos de
las entradas conectadas, más un bias θ
Si el peso wj es positivo se habla de una excitación y si
el peso es negativo se considera una inhibición de la entrada.
Si consideramos como funciones del tiempo, la expresión
anterior se convierte en:
II-C. Función de Activación
La regla que logra establecer el efecto de la entrada total
u(t) en la activación de la unidad k se denomina función de
activación (Fk):
En muchas ocasiones esta función es de la forma no
decreciente respecto a la entrada total de la unidad:
C,1. Función Escalón: La función de activación escalón
se asocia a neuronas binarias en las cuales, cuando la suma
de las entradas es mayor o igual que el umbral de la neurona
es 1; si es menor, la activación es 0 (o -1).
Fig.4 Función escalón
C,2. Cuadro comparativo de funciones: La siguiente tabla
hace una relación de las principales funciones de transferencia
empleadas en el entrenamiento de redes neuronales.
3. 3
Fig.5 Comparación de funciones
II-D. Funciones de Transferencia.
Un modelo más académico que facilita el estudio de una
neurona, puede visualizarse en la figura:
Fig 6. Neurona Didáctica
Las entradas a la red serán ahora presentadas en el vector
p, que para el caso de una sola neurona contiene solo un
elemento, w sigue representando los pesos y la nueva entrada
b es una ganancia que refuerza la salida del sumador n, la
cual es la salida neta de la red; la salida total está determinada
por la función de transferencia, la cual puede ser una función
lineal o no lineal de n, y que es escogida dependiendo de
las especificaciones del problema que la neurona tenga que
resolver; aunque las RNA se inspiren en modelos biológicos
no existe ninguna limitación para realizar modificaciones
en las funciones de salida, así que se encontrarán modelos
artificiales que nada tienen que ver con las características del
sistema biológico.
Limitador fuerte (Hardlim): la siguiente figura muestra
como esta función de transferencia acerca la salida de la red
a cero, si el argumento de la función es menor que cero y la
lleva a uno si este argumento es mayor que uno. Esta función
crea neuronas que clasifican las entradas en dos categorías
diferentes, característica que le permite ser empleada en la
red tipo Perceptrón
Fig 7. Función Hardlim
El ícono para la función Hardlim reemplazara a la letra f
en la expresión general, cuando se utilice la función Hardlim.
Una modificación de esta función puede verse en la siguiente
figura, la que representa la función de transferencia Hardlims
que restringe el espacio de salida a valores entre 1 y –1
Fig 8. Función Hardlims
II-E. Perceptrón Multicapa.
Un Perceptrón multicapa es una red con alimentación
hacia delante, compuesta de varias capas de neuronas entre la
entrada y la salida de la misma, esta red permite establecer
regiones de decisión mucho más complejas que las de dos
semiplanos, como lo hace el Perceptrón de un solo nivel.
En el problema de la función XOR se explicó como un
Perceptrón multicapa había sido implementado para hallar
una solución. Las capacidades del Perceptrón multicapa con
dos y tres capas y con una única neurona en la capa de salida
se muestran en la siguiente figura. En la segunda columna se
muestra el tipo de región de decisión que se puede formar
con cada una de las configuraciones, en la siguiente se indica
el tipo de región que se formaría para el problema de la
XOR, en las dos últimas columnas se muestran las regiones
formadas para resolver el problema de clases mezcladas y las
formas más generales para cada uno de los casos:
4. 4
Fig 9. Perceptrones Multicapa
II-F. Aprendizaje de la Red Neuronal.
El Aprendizaje es la característica más importante de una
red neuronal. Durante este aprendizaje o entrenamiento de
la red y por aplicación de un conjunto de entradas, se van
ajustando adecuada e internamente todos y cada uno de los
pesos asociados a cada rama para obtener la salida deseada (o
al menos una salida consistente), de forma que la red pueda
responder después por si sola a situaciones diferentes a las
aprendidas.
F,1. Aprendizaje Supervisado y No Supervisado:
Aprendizaje Supervisado: es un caso de entrenamiento
con Profesor y utiliza información global. Se presentan dos
vectores (entradas y salidas deseadas). La salida computada
por la red se compara con la salida deseada, y los pesos de la
red se modifican en el sentido de reducir el error cometido.
Se repite interactivamente, hasta que la diferencia entre
salida computada y deseada sea aceptablemente pequeña. Con
n parejas de este tipo se forma un Conjunto de Entrenamiento.
Aprendizaje No Supervisado: es un caso de entrenamiento
Sin Profesor y solo usa información local durante todo el
proceso de aprendizaje. Es un modelo más cercano al sistema
biológico, no se utiliza vector de salida esperada, y solo hay
vectores de entrada en el conjunto de entrenamiento, y solo
hay vectores de entrada en el conjunto de entrenamiento. El
algoritmo modifica los pesos de forma que las salidas sean
consistentes, es decir, que a entradas muy parecidas, la red
compute la misma salida. Las salidas se asocian a las entradas
de acuerdo con el proceso de entrenamiento. El proceso
extrae características, abstrayendo las propiedades colectivas
subyacentes del conjunto de entrenamiento, y agrupa por
clases de similitudes.
III. IMPLEMENTACIÓN EN MATLAB
MATLAB R (Matrix Laboratory) es un software
desarrollado por MathWorks. Es un software especializado
de programación matemática idóneo para la investigación
científica y para diversas aplicaciones en general. Dicho de
otra forma MATLAB es un lenguaje de alto nivel para la
computación técnica, tal y como lo definen sus creadores.
Esto integra computación, visualización y una programación
es un medio ambiente de fácil uso donde los problemas y
las soluciones son expresadas en una notación matemática
familiar.
Matlab integra un Toolbox (caja de herramientas) para tra-
bajar con Redes Neuronales Pesos y Umbrales simplificando
así la creación y funcionamiento de redes neuronales.
A continuación una lista de funciones principales utilizadas
para crear redes neuronales y sus respectivos parámetros:
Fig 10. Comandos Básicos Matlab
La función que se utilizará en newff para crear una red
backpropagation
Fig 11. Interfaz del programa
La siguiente función se ejecuta al momento de iniciar la
interfaz, su principal objetivo es desactivar la mayor parte de
componentes.
function HardlimProject_OpeningFcn(
hObject,eventdata,handles, varargin)
%Codigo de la interfaz
handles.output = hObject;
guidata(hObject, handles);
%Centrar interfaz en la pantalla
scrsz=get(0,’ScreenSize’);
pos_act=get(gcf,’Position’);
xr=scrsz(3)-pos_act(3);
xp=round(xr/2);
yr=scrsz(4)-pos_act(4);
5. 5
yp=round(yr/2);
set(gcf,’Position’,[xp yp pos_act(3) pos_act(4)]);
%Desactivacion de componentes iniciales
set(handles.txt_P,’Enable’,’off’);
set(handles.txt_T,’Enable’,’off’);
set(handles.lbl_pum_entrenamiento,’Enable’,’off’);
set(handles.pum_entrenamiento,’Enable’,’off’);
set(handles.lbl_txt_capas,’Enable’,’off’);
set(handles.txt_capas,’Enable’,’off’);
set(handles.btn_capas,’Enable’,’off’);
set(handles.btn_ejecutar,’Enable’,’off’);
set(handles.btn_red_neuronal,’Enable’,’off’);
%Guardar entrenamiento por defecto
handles.entrenam_guardado = ’traingd’;
guidata(hObject,handles);
La siguiente función se encuentra programada en el popup
menu con el nombre tag pum_func como se aprecia en la
siguiente figura:
Fig 12. Selector de funciones de activación
Su función es permitir al usuario seleccionar el tipo de funcion
de activación a utilizar:
function pum_Func_Callback(
hObject, eventdata, handles)
%Se obtine el valor del componete poupmenu
%denominado pum_Func
valor=get(handles.pum_Func,’Value’);
switch valor
case 1
%La priemra opcion esta en blanco,
%mantiene componentes desactivados
set(handles.txt_P,’Enable’,’off’);
set(handles.txt_T,’Enable’,’off’);
set(handles.lbl_pum_entrenamiento,
’Enable’,’off’);
set(handles.pum_entrenamiento,
’Enable’,’off’);
set(handles.lbl_txt_capas,
’Enable’,’off’);
set(handles.txt_capas,’Enable’,’off’);
set(handles.btn_capas,’Enable’,’off’);
set(handles.btn_ejecutar,’Enable’,’off’);
set(handles.btn_red_neuronal,
’Enable’,’off’);
case 2
%Activacion de todos los componentes
set(handles.txt_P,’Enable’,’on’);
set(handles.txt_T,’Enable’,’on’);
set(handles.lbl_pum_entrenamiento,
’Enable’,’on’);
set(handles.pum_entrenamiento,
’Enable’,’on’);
set(handles.lbl_txt_capas,
’Enable’,’on’);
set(handles.txt_capas,’Enable’,’on’);
set(handles.btn_capas,’Enable’,’on’);
%El boton graficar y ver red neuronal se
%mantienen desactivados
set(handles.btn_ejecutar,
’Enable’,’off’);
set(handles.btn_red_neuronal,
’Enable’,’off’);
%En caso de seleccionar un nuevo tipo de
%funcion se borra el campo de capas
%para que sean ingresadas nuevamente
set(handles.txt_capas,’String’,’’);
%Se guarda el nombre de la funcion ’hardlim’
%en func_activ_guardada para ser
%utilizada luego
handles.func_activ_guardada = ’hardlim’;
guidata(hObject,handles);
case 3
%Activacion de todos los componentes
set(handles.txt_P,’Enable’,’on’);
set(handles.txt_T,’Enable’,’on’);
set(handles.lbl_pum_entrenamiento,
’Enable’,’on’);
set(handles.pum_entrenamiento,
’Enable’,’on’);
set(handles.lbl_txt_capas,
’Enable’,’on’);
set(handles.txt_capas,’Enable’,’on’);
set(handles.btn_capas,’Enable’,’on’);
%El boton graficar y ver red neuronal se
%mantienen desactivados
set(handles.btn_ejecutar,’Enable’,’off’);
set(handles.btn_red_neuronal
,’Enable’,’off’);
%En caso de seleccionar un nuevo tipo de
%funcion se borra el campo de capas para
%que sean ingresadas nuevamente
set(handles.txt_capas,’String’,’’);
%Se guarda el nombre de la funcion ’hardlims’
%en la misma variable func_activ_guardada
%para ser utilizada luego
handles.func_activ_guardada = ’hardlims’;
guidata(hObject,handles);
end
Seguidamente la función callback del componente
pum_entrenamiento:
Fig 13. Selector de tipos de entrenamiento
6. 6
que parecido al anterior, permite seleccionar el tipo de entre-
namiento que se dará a la red:
function pum_entrenamiento_Callback(
hObject, eventdata, handles)
%Se obtiene el valor del componente popupmenu
%denominado pum_entrenamiento
valor_entrenam = get(
handles.pum_entrenamiento,’Value’);
switch valor_entrenam
case 1
%Guarda valor ’traingd’
%en entrenam_guardado
handles.entrenam_guardado = ’traingd’;
guidata(hObject,handles);
case 2
%Guarda valor ’traingdm’
%en entrenam_guardado
handles.entrenam_guardado = ’traingdm’;
guidata(hObject,handles);
case 3
%Guarda valor ’traingdx’
%en entrenam_guardado
handles.entrenam_guardado = ’traingdx’;
guidata(hObject,handles);
end
A continuación la función callback del botón btn_capas que
se le asignó como etiqueta Agregar neuronas a las capas:
Fig 14. Ingresar capas y neuronas de la red
la funcionalidad del botón se basa en que luego de que el
usuario ingresa un numero de capas deseado, al hacer clic en
el botón, este permite agregar las neuronas deseadas para dicha
capa:
function btn_capas_Callback(
hObject, eventdata, handles)
%Obtenemos el numero de
%capas ingresadas por el usuario
%y se lo transforma a numerico
temp_1 = get(handles.txt_capas,’String’);
temp_2 = str2num(temp_1);
%Entrada del numero de neuronas
%por capa, Se utiliza una matriz
vector_capas=[];
%La funcion que tendra cada capa,
% igual numero de capas
%y de funciones. Se utiliza un array
vector_func_por_capa={};
%Se recupera la
%funcion de activacion seleccionada
%por el usuario
funcion_recuperada=
handles.func_activ_guardada;
for n=1:1:temp_2
%Mediante un inputdlg se ingresa
%el numero de
%neuronas para cada capa
texto_1=’Numero de neuronas para la capa ’;
texto_2=num2str(n);
texto_completo = [texto_1 texto_2];
prompt = {texto_completo};
dlg_title = ’Numero de neuronas por capa’;
num_lines = 2;
def = {’1’};
answer = inputdlg(
prompt,dlg_title,num_lines,def);
%Se crea el vector con las capas
%y la cantidad de
%neuronas para cada capa
vector_capas=[vector_capas str2num(
answer{1,1})];
%Se crea el array con el numero
%de funciones necesarias
vector_func_por_capa(n)={
funcion_recuperada};
end
%Se guardan los resultados para
%integrarlos en la funcion newff
handles.num_capas = vector_capas;
guidata(hObject,handles);
handles.vector_func_por_capa_guardada=
vector_func_por_capa;
guidata(hObject,handles);
%Se activa el boton para ejecutar
set(handles.btn_ejecutar,’Enable’,’on’);
set(handles.btn_red_neuronal,’Enable’,’off’);
La función que se verá a continuación esta en el callback del
botón btn_ejecutar con la etiqueta Graficar:
Fig 15. Botón Graficar
la funcionalidad del botón consiste en que una vez seleccio-
nada la función de activación, el tipo de entrenamiento, hayan
sido ingresados los valores de entrada, las capas y las neuronas
para cada capa, se integra dentro de la función newff para
luego ser graficado, mostrando así los resultados esperados:
function btn_ejecutar_Callback(
hObject, eventdata, handles)
valor = get(handles.txt_capas,’String’);
valor = str2double(valor)
%verificacion para asegurar que se
%hayan ingresado las capas
if ~isnan(valor)
%Se obtienen los valores de las entradas
7. 7
%transformando de cadena
% a numero para realizar
%operaciones con los mismos
P=str2num(get(handles.txt_P,’String’));
T=str2num(get(handles.txt_T,’String’));
%De igual manera con el entrenamiento
entrenam_recuperado =
handles.entrenam_guardado;
%Recuperar las funciones para
%cada una de las capas.
%Cada capa tiene una funcion
%es decir si existen 5 capas
%entonces existiran 5 funciones
%hardlim o hardlims para cada
%capa de la red
func_por_capa =
handles.vector_func_por_capa_guardada;
%Recuperar numero de capas con sus neuronas
capas_y_neuronas = handles.num_capas;
%Creacion de la red neuronal u
%tilizando newff
net = newff(
minmax(P),capas_y_neuronas,
func_por_capa,entrenam_recuperado);
%pesos
net.IW(1);
%bias
net.b(1);
%simulacion de la red
Y = sim(net,P);
%Grafica
plot(handles.axis_grafica,P,T,P,Y,’o’);
%Se guarda el estado actual de la red
%para uso posterior
handles.net_guardada = net;
guidata(hObject,handles);
%se activa el boton presentar red neuronal
set(handles.btn_red_neuronal,’Enable’,’on’);
else
%Mensaje de error en
%caso de no ingresar capas
errordlg(
’Debe ingresar un numero de
capas valido para la red’);
end
Por último la función en el callback del botón
btn_red_neuronal con la etiqueta Ver red Neuronal:
Fig 16. Botón Ver red Neuronal
este botón permite recuperar el estado de la red guardado con
anterioridad y a su vez generar la vista de la estructura de la
red neuronal:
function btn_red_neuronal_Callback(
hObject, eventdata, handles)
valor = get(handles.txt_capas,’String’);
valor = str2double(valor)
%verificacion para asegurar que se
%hayan ingresado las capas
if ~isnan(valor)
%Se recupera el estado
%de la red y se presenta la
%vista con la red neuronal
%y sus componentes
net_recuperada = handles.net_guardada;
view(net_recuperada);
else
%Mensaje de error en
%caso de no ingresar capas
errordlg(
’Debe ingresar un numero de capas
valido para la red’);
end
IV. CONCLUSIONES
El elemento mas básico del cerebro es la neurona,
la cual por si sola no hace mucho pero si juntamos
millones de ellas, entonces se vuelven poderosas. El
modelo computacional de una neurona artificial es una
imitación del proceso de una neurona biológica.
El comportamiento de las neuronas esta dado por la
función de activación la cual se encarga de calcular el
nivel o estado de activación de la neurona en función de
la entrada total
Matlab es un lenguaje de programación muy potente
de lo cual se puede destacar la inmensa cantidad de
funciones para distintos fines, resaltando la facilidad
para la creación y mantenimiento de redes neuronales
en la parte de Inteligencia Artificial
Integrar funcionalidades en una interfaz gráfica en
Matlab, facilita al usuario el proceso de graficación
y generación de redes neuronales a fin de conseguir
un entendimiento completo del funcionamiento de las
mismas.
REFERENCIAS
[1] MATHWORKS, MATLAB,[En línea]. Available:
http://www.mathworks.com. [Último acceso: 08 de Mayo 2014].
[2] M. González, INTRODUCCIÓN A MATLAB,[En línea]. Available:
http://www.araba.ehu.es/depsi/jg/imatlab.pdf. [Último acceso: 07 de
Mayo 2014].
[3] S. Gómez, APRENDIZAJE CON REDES NEU-
RONALES ARTIFICIALES,[En línea]. Available:
http://www.uclm.es/ab/educacion/ensayos/pdf/revista9/9_19.pdf. [Último
acceso: 08 de Mayo 2014].
[4] S. Ledesma, LAS REDES NEURONALES, Implementación y considera-
ciones prácticas, Universidad de Guanajuato: Mexico, 2010.
8. 8
[5] Introducción a las redes neuronales artificiales [En línea]. Available:
http://magomar.webs.upv.es/rna/tutorial/RNA_marcos.html [Último acce-
so: 08 de Mayo 2014]
Jairo Banda
Estudiante de la Carrera de Ingeniería en Sistemas de la
Universidad Nacional de Loja, Experto en Mantenimiento Preventivo
y Correctivo, Analista de Sistemas, Provincia de Loja, Ciudad Loja,
Ecuador, 2014.
Jhymer Martínez
Estudiante de la Carrera de Ingeniería en Sistemas de la
Universidad Nacional de Loja, Programador Nivel Medio en Java,
Nivel Básico Python, Matlab y otros lenguajes Provincia de Loja,
Ciudad Loja, Ecuador, 2014.