Вы находитесь на странице: 1из 8

1

Hardlim y Hardlims Utilizando Matlab


1. J. Banda, 2. J. Martnez, Tutor: Ing. Henry Paz
ResumenEn el presente Paper se abordara temas como
Hardlim, Hardlims, Red Neuronal, Perceptron, Perceptron Mul-
ticapa, Funciones de Activacion, Funcin de transferencia, tipos
de entrenamiento, y cdigo.
Index TermsHardlim, Hardlims, Perceptron, Perceptron
Multicapa, Funcin de Activacin.
I. INTRODUCCIN
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 funcin 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 ms lento.
II. ESTADO DEL ARTE
II-A. La Neurona Articial
El modelo de una neurona articial es una imitacin del
proceso de una neurona biolgica, puede tambin asemejarse
a un sumador hecho con un amplicador operacional tal
como se ve en la gura:
Fig 1.Neurona Articial
Existen varias formas de nombrar una neurona articial, es
conocida como nodo, neuronodo, celda, unidad o elemento
de procesamiento (PE). En la siguiente gura se observa un
PE en forma general y su similitud con una neurona biolgica:
1. J. Banda, Universidad Nacional de Loja, Loja, Ecuador, e-mail: jiban-
dab@unl.edu.ec
2. J. Martnez , 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 Biolgica
De la observacin detallada del proceso biolgico se han
hallado los siguientes anlogos con el sistema articial:
Las seales de entrada a una neurona articial x
1
, x
2
,.., x
n
son variables continuas en lugar de pulsos discretos, como se
presentan en una neurona biolgica. Cada seal de entrada
pasa a travs de una ganancia o peso, llamado peso sinptico
o fortaleza de la conexin cuya funcin es anloga a la de la
funcin sinptica de la neurona biolgica. Los pesos pueden
ser positivos (excitatorios), o negativos (inhibitorios), el nodo
sumatorio acumula todas las seales de entradas multiplicadas
por los pesos o ponderadas y las pasa a la salida a travs de
una funcin umbral o funcin de transferencia. La entrada
neta a cada unidad puede escribirse de la siguiente manera:
Las entradas Xi representan las seales 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 funcin umbral que la neurona debe sobrepasar
para activarse; este proceso ocurre biolgicamente en el
cuerpo de la clula.
Las seales de entrada a una neurona articial x
1
, x
2
,.., x
n
son variables continuas en lugar de pulsos discretos, como se
presentan en una neurona biolgica. Cada seal de entrada
pasa a travs de una ganancia o peso, llamado peso sinptico
o fortaleza de la conexin cuya funcin es anloga a la de la
funcin sinptica de la neurona biolgica. Los pesos pueden
ser positivos (excitatorios), o negativos (inhibitorios), el nodo
sumatorio acumula todas las seales de entradas multiplicadas
por los pesos o ponderadas y las pasa a la salida a travs de
una funcin umbral o funcin 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
gura, en donde puede observarse el recorrido de un conjunto
de seales que entran a la red.
2
Fig 3.Recorrido de conjunto de seales
Una vez que se ha calculado la activacin del nodo, el
valor de salida equivale a
Donde f
i
representa la funcin de activacin para esa uni-
dad, que corresponde a la funcin escogida para transformar
la entrada neta
i
en el valor de salida x
i
y que depende de las
caractersticas especcas de cada red.
II-B. Redes Neuronales
Las neuronas articiales 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 activacin para cada unidad equivalente a
la salida de la unidad.
3 Conexiones entre las unidades, generalmente denidas
por un peso que determina el efecto de una seal de
entrada en la unidad.
4 Una regla de propagacin, que determina la entrada
efectiva de una unidad a partir de las entradas externas.
5 Una funcin de activacin que actualiza el nuevo nivel de
activacin basndose en la entrada efectiva y la activacin
anterior.
6 Una entrada externa que corresponde a un trmino de-
terminado como bias para cada unidad.
7 Un mtodo para reunir la informacin, correspondiente
a la regla de aprendizaje
8 Un ambiente en el que el sistema va aperar, con seales
de entrada e incluso seales de error.
En muchas redes las unidades de proceso tienen respuesta
de forma:
x
k
:Seales de salida de otros nodos o entradas externas.
w
k
:Pesos de las ligas de conexin.
f
0
:Funcin no lineal simple.
La funcin f puede ser sigmoidal, tangente hiperblica,
escaln, entre otras. En Matlab se tiene diferentes funciones de
activacin 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 informacin para obtener una salida que se propaga a otras
unidades. Una red puede tener una estructura arbitraria, pero
las capas que contienen estas estructuras estn denidas de
acuerdo con una ubicacin en la topologa de la red neuronal.
Las capas internas que no se observan como entradas o salidas
se denominan capas ocultas. Por convencin 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, ms un bias
Si el peso w
j
es positivo se habla de una excitacin y si
el peso es negativo se considera una inhibicin de la entrada.
Si consideramos como funciones del tiempo, la expresin
anterior se convierte en:
II-C. Funcin de Activacin
La regla que logra establecer el efecto de la entrada total
u(t) en la activacin de la unidad k se denomina funcin de
activacin (F
k
):
En muchas ocasiones esta funcin es de la forma no
decreciente respecto a la entrada total de la unidad:
C,1. Funcin Escaln: La funcin de activacin escaln
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 activacin es 0 (o -1).
Fig.4 Funcin escaln
C,2. Cuadro comparativo de funciones: La siguiente tabla
hace una relacin de las principales funciones de transferencia
empleadas en el entrenamiento de redes neuronales.
3
Fig.5 Comparacin de funciones
II-D. Funciones de Transferencia.
Un modelo ms acadmico que facilita el estudio de una
neurona, puede visualizarse en la gura:
Fig 6. Neurona Didctica
Las entradas a la red sern 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 funcin de transferencia, la cual puede ser una funcin
lineal o no lineal de n, y que es escogida dependiendo de
las especicaciones del problema que la neurona tenga que
resolver; aunque las RNA se inspiren en modelos biolgicos
no existe ninguna limitacin para realizar modicaciones
en las funciones de salida, as que se encontrarn modelos
articiales que nada tienen que ver con las caractersticas del
sistema biolgico.
Limitador fuerte (Hardlim): la siguiente gura muestra
como esta funcin de transferencia acerca la salida de la red
a cero, si el argumento de la funcin es menor que cero y la
lleva a uno si este argumento es mayor que uno. Esta funcin
crea neuronas que clasican las entradas en dos categoras
diferentes, caracterstica que le permite ser empleada en la
red tipo Perceptrn
Fig 7. Funcin Hardlim
El cono para la funcin Hardlim reemplazara a la letra f
en la expresin general, cuando se utilice la funcin Hardlim.
Una modicacin de esta funcin puede verse en la siguiente
gura, la que representa la funcin de transferencia Hardlims
que restringe el espacio de salida a valores entre 1 y 1
Fig 8. Funcin Hardlims
II-E. Perceptrn Multicapa.
Un Perceptrn multicapa es una red con alimentacin
hacia delante, compuesta de varias capas de neuronas entre la
entrada y la salida de la misma, esta red permite establecer
regiones de decisin mucho ms complejas que las de dos
semiplanos, como lo hace el Perceptrn de un solo nivel.
En el problema de la funcin XOR se explic como un
Perceptrn multicapa haba sido implementado para hallar
una solucin. Las capacidades del Perceptrn multicapa con
dos y tres capas y con una nica neurona en la capa de salida
se muestran en la siguiente gura. En la segunda columna se
muestra el tipo de regin de decisin que se puede formar
con cada una de las conguraciones, en la siguiente se indica
el tipo de regin que se formara 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 ms generales para cada uno de los casos:
4
Fig 9. Perceptrones Multicapa
II-F. Aprendizaje de la Red Neuronal.
El Aprendizaje es la caracterstica ms importante de una
red neuronal. Durante este aprendizaje o entrenamiento de
la red y por aplicacin 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 despus 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 informacin 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 modican en el sentido de reducir el error cometido.
Se repite interactivamente, hasta que la diferencia entre
salida computada y deseada sea aceptablemente pequea. 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 informacin local durante todo el
proceso de aprendizaje. Es un modelo ms cercano al sistema
biolgico, 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 modica 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 caractersticas, abstrayendo las propiedades colectivas
subyacentes del conjunto de entrenamiento, y agrupa por
clases de similitudes.
III. IMPLEMENTACIN EN MATLAB
MATLAB R (Matrix Laboratory) es un software
desarrollado por MathWorks. Es un software especializado
de programacin matemtica idneo para la investigacin
cientca y para diversas aplicaciones en general. Dicho de
otra forma MATLAB es un lenguaje de alto nivel para la
computacin tcnica, tal y como lo denen sus creadores.
Esto integra computacin, visualizacin y una programacin
es un medio ambiente de fcil uso donde los problemas y
las soluciones son expresadas en una notacin matemtica
familiar.
Matlab integra un Toolbox (caja de herramientas) para tra-
bajar con Redes Neuronales Pesos y Umbrales simplicando
as la creacin y funcionamiento de redes neuronales.
A continuacin una lista de funciones principales utilizadas
para crear redes neuronales y sus respectivos parmetros:
Fig 10. Comandos Bsicos Matlab
La funcin que se utilizar en newff para crear una red
backpropagation
Fig 11. Interfaz del programa
La siguiente funcin 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
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 funcin se encuentra programada en el popup
menu con el nombre tag pum_func como se aprecia en la
siguiente gura:
Fig 12. Selector de funciones de activacin
Su funcin es permitir al usuario seleccionar el tipo de funcion
de activacin 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 funcin callback del componente
pum_entrenamiento:
Fig 13. Selector de tipos de entrenamiento
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 continuacin la funcin callback del botn 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 botn se basa en que luego de que el
usuario ingresa un numero de capas deseado, al hacer clic en
el botn, 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 funcin que se ver a continuacin esta en el callback del
botn btn_ejecutar con la etiqueta Gracar:
Fig 15. Botn Gracar
la funcionalidad del botn consiste en que una vez seleccio-
nada la funcin de activacin, el tipo de entrenamiento, hayan
sido ingresados los valores de entrada, las capas y las neuronas
para cada capa, se integra dentro de la funcin newff para
luego ser gracado, 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
%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 funcin en el callback del botn
btn_red_neuronal con la etiqueta Ver red Neuronal:
Fig 16. Botn Ver red Neuronal
este botn 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 bsico 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 articial es una
imitacin del proceso de una neurona biolgica.
El comportamiento de las neuronas esta dado por la
funcin de activacin la cual se encarga de calcular el
nivel o estado de activacin de la neurona en funcin de
la entrada total
Matlab es un lenguaje de programacin muy potente
de lo cual se puede destacar la inmensa cantidad de
funciones para distintos nes, resaltando la facilidad
para la creacin y mantenimiento de redes neuronales
en la parte de Inteligencia Articial
Integrar funcionalidades en una interfaz grca en
Matlab, facilita al usuario el proceso de gracacin
y generacin de redes neuronales a n de conseguir
un entendimiento completo del funcionamiento de las
mismas.
REFERENCIAS
[1] MATHWORKS, MATLAB,[En lnea]. Available:
http://www.mathworks.com. [ltimo acceso: 08 de Mayo 2014].
[2] M. Gonzlez, INTRODUCCIN A MATLAB,[En lnea]. Available:
http://www.araba.ehu.es/depsi/jg/imatlab.pdf. [ltimo acceso: 07 de
Mayo 2014].
[3] S. Gmez, APRENDIZAJE CON REDES NEU-
RONALES ARTIFICIALES,[En lnea]. 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, Implementacin y considera-
ciones prcticas, Universidad de Guanajuato: Mexico, 2010.
8
[5] Introduccin a las redes neuronales articiales [En lnea]. 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 Ingeniera 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 Martnez
Estudiante de la Carrera de Ingeniera en Sistemas de la
Universidad Nacional de Loja, Programador Nivel Medio en Java,
Nivel Bsico Python, Matlab y otros lenguajes Provincia de Loja,
Ciudad Loja, Ecuador, 2014.

Вам также может понравиться