Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semestre: 2016-II
Autor: Kevin Christian Rodrguez Siu
Programa Profesional de Ciencia de la Computacin
Universidad Catlica San Pablo
Una forma de hacer la programacin de una Red Neuronal Perceptrn Multicapa es realizarla utilizando una serie
de opereaciones de matrices. Esto proviene desde el hecho de que las multiplicaciones que se pueden realizar
para el paso de informacin a travs de las neuronas pueden separase en forma de matrices tambin. Por ejemplo,
dada la Red Neuronal:
H1 w7
w1 w8 O1
I1 w2
w3 w9
H2 w10
w4
w5 O2
I2
w6
w11 w12
H3
b2
b1
1
1
Y recordando que tanto la capa oculta (Hidden, H) como la capa de salida (Output, O) tienen dos partes: Un NET,
que se da por la sumatoria de las entradas con los pesos y un OUT, que se da por la aplicacin de la funcin de
activacin a la parte NET. Calculando en este ejemplo como seran todos los valores NET, tendramos:
Entonces, con este sencillo mtodo, cualquier paso hacia adelante puede ser modelado como la multiplicacin de
matrices de estos elementos. Simplemente para obtener los valores OUT deberamos aplicar la funcin de
activacin a cada elemento de las matrices con los valores NET.
Ahora, presta atencin a las dimensiones de las matrices que contienen los datos que queremos entrenar al hacer
BackPropagation (las matrices del final con los valores w) Si te das cuenta, sus dimensiones tienen algo en
particular.
Curso: Tpicos en Inteligencia Artificial
Semestre: 2016-II
Autor: Kevin Christian Rodrguez Siu
Programa Profesional de Ciencia de la Computacin
Universidad Catlica San Pablo
Dimensiones Significado
3x3 2 Neuronas en la capa I + 1 por el bias = 3
3 Neuronas en la capa H = 3
4x2 3 Neuronas en la capa H + 1 por el bias = 4
2 Neuronas en la capa O = 2
Entonces no olvides aumentar en uno el orden de las filas de la matriz con la que trabajas para tener en cuenta el
bias.
Ahora veremos el proceso completo utilizando la Red Neuronal Perceptrn Multicapa vista arriba: 1 Capa de
Entrada, 1 Capa Oculta y 1 Capa de Salida.
Requerimientos Necesarios:
Inputs: Una lista de entradas para la Red Neuronal.
Targets: Una lista de salidas esperadas para cada entrada de la lista anterior.
I: Nmero de neuronas en la capa de Entrada (Input, I)
H: Nmero de neuronas en la capa Oculta (Hidden, H)
O: Nmero de neuronas en la capa de Salida (Output, O)
wIH: Matriz con los pesos que van desde la capa de entrada a la capa oculta, de orden: I+1 x H
wHO: Matriz con los pesos que van desde la capa oculta hasta la capa de salida, de orden: H+1 x O
b1, b2: Valores para el bias de cada paso de capas (De entrada a oculta y de oculta a salida)
alfa (): Coeficiente de aprendizaje del algoritmo de BackPropagation.
f_activacion() o f(): Funcin de activacin elegida. En este ejemplo, toda la red tendr la misma
funcin de activacin.
d_activacion() o d(): La derivada de la funcin de activacin elegida. Igualmente, toda la red tendr la
misma funcin de activacin.
Proceso de Entrenamiento de BackPropagation:
Durante cada poca de la Red Neuronal (es decir, para cada iteracin donde se ven TODAS las entradas presentes
en Inputs) se debera cumplir el siguiente proceso para cada entrada:
= [ 1 2]
Y tambin una matriz T basada en su respectivo target y sus componentes que, para este ejemplo,
tambin son 2:
= [1 2]
Ahora efectuaremos el paso de la Capa de Entrada para la Capa Oculta. Para esto, debemos crear
una nueva matriz, IExt (I Extendida) para que incluya el valor necesario para el bias.
= [1 2 1]
Curso: Tpicos en Inteligencia Artificial
Semestre: 2016-II
Autor: Kevin Christian Rodrguez Siu
Programa Profesional de Ciencia de la Computacin
Universidad Catlica San Pablo
Una vez realizado esto, podemos hacer el siguiente clculo de la matriz NET para la Capa Oculta:
1 2 3
[1 2 3 ] = [1 2 1] [4 5 6]
1 1 1
Y una vez hecho este clculo, podemos calcular la matriz OUT para la capa oculta:
= _( )
[1 2 3 ] = [( 1 ) ( 2 ) ( 3 )]
Ahora, nos toca hacer el pase de la Capa Oculta a la Capa de Salida. Para esto, necesitamos una
matriz HExt (H Extendida), que se va a basar en el resultado de la multiplicacin anterior de la
matriz OUT para la Capa Oculta y adicionndole el valor para el segundo bias.
= [1 2 3 1]
Una vez realizado esto, podemos hacer el siguiente clculo de la matriz NET para la Capa de
Salida:
Y una vez hecho este clculo, podemos calcular la matriz OUT para la capa oculta:
= _( )
[1 2 ] = [(1 ) (2 )]
La prediccin entonces para la entrada contenida en la matriz I segn nuestra red neuronal estara
contenida en la matriz OUT de la capa Oculta, o OUTO.
Curso: Tpicos en Inteligencia Artificial
Semestre: 2016-II
Autor: Kevin Christian Rodrguez Siu
Programa Profesional de Ciencia de la Computacin
Universidad Catlica San Pablo
b. Clculo del Error Total: Para calcular el Error Total que ha cometido nuestra Red Neuronal,
debemos utilizar la matriz OUTO y la matriz T. Nuestra matriz Error entonces sera calculada de
la siguiente forma:
1
= ( )2
2
1 1
[1 2 ] = [ ( 1 1 )2 ( 2 2 )2 ]
2 2
Y, finalmente, el ErrorTotal se dara por la sumatoria de todos los elementos presentes en la matriz
Error.
= ()
2
1
( 1 ) 1 1 (7)0 (1 1 )
2 1
7 +0 _(1 ) +0+0+0
_(1 )
= 1 1 = 1 1
0+ 2
1
( 2 ) 1 (8)0 (2 2 )
2 2
8 1 _(2 ) +0+0+0
_(2 )
= 2 2 = 1 1
2
1
( 1 ) 1 0 + 2 (1 1 )
2 1 (9)0 + 0 + 0
9 +0 _(1 ) _(1 )
= 1 1 = 2 2
0+ 2
1
( 2 ) 0 + 2 (2 2 )
2 2 (10)0 + 0 + 0
10 1 _(2 ) _(2 )
= 2 2 = 2 2
2
1
( 1 ) 1 0 + 0 + 3 (1 1 )
2 1 (11)0 + 0
11 +0 _(1 ) _(1 )
= 1 1 = 3 3
0+ 2
1
( 2 ) 0 + 0 + 3 (2 2 )
2 2 (12)0 + 0
12 1 _(2 ) _(2 )
= 2 2 = 3 3
Como volvemos a tener bastantes elementos comunes, podramos calcular la siguiente matriz,
UpdHO (Update from Hidden to Output), de la siguiente forma:
= ( ( ( ) _( )) ( ) )
7 8
= ( ( ([1 2 ] [1 2 ] ) [(1 ) (2 )]) [1 2 3 ] )
9 10
[ 11 12 ]
7 8
= ( ( [1 1 2 2 ] [(1 ) (2 )]) [1 2 3 ] )
9 10
[ 11 12 ]
7 8
= ( ( [(1 1 ) (1 ) (2 2 ) (2 )]) [1 2 3 ] )
9 10
[ 11 12 ]
7 8
(1 1 ) (1 )
=([ ] [1 2 3 ])
9 10 (2 2 ) (2 )
[ 11 12 ]
7 8
(1 1) (1) 1 (1 1) (1) 2 (1 1) (1) 3
=([ ])
9 10 (2 2) (2) 1 (2 2) (2) 2 (2 2) (2) 3
[ 11 12 ]
7 8
(1 1 ) (1 ) 1 (2 2 ) (2 ) 1
= [(1 1 ) (1 ) 2 (2 2 ) (2 ) 2 ]
9 10
(1 1 ) (1 ) 3 (2 2 ) (2 ) 3
[ 11 12 ]
Ahora, una vez que tenemos la matriz UpdHO, debemos crear una matriz UpdHOExt (UpdHO
Extendida) para poder tener en cuenta el efecto del bias que, como sabemos que no se actualiza,
es 0.
7 8
= 9 10
11 12
[ 0 0 ]
b. Clculo de las Gradientes de la Capa Oculta: Ahora debemos calcular las derivadas parciales
para el resto de nuestros pesos (w1,w2,w3,w4,w5 y w6). Lo interesante es que cada peso de la
capa oculta contribuye a la salida (y por tanto, al error) de varias neuronas en la capa de salida.
Por tanto, sus derivadas deben tomar en cuenta su efecto en todas las otras neuronas.
Curso: Tpicos en Inteligencia Artificial
Semestre: 2016-II
Autor: Kevin Christian Rodrguez Siu
Programa Profesional de Ciencia de la Computacin
Universidad Catlica San Pablo
ErrorTotal E1 E2
= +
OUTH1 OUTH1 OUTH1
E1 E1 OUTO1 NETO1
=
OUTH1 OUTO1 NETO1 OUTH1
E1
= (OUTO1 T1 ) (1 ) 7 ( (OUTO1 T1 )
OUTH1
E2 E2 OUTO2 NETO2 (1 ) 7
=
OUTH1 OUTO2 NETO2 OUTH1 1 (1)0 + 0
+ (OUTO2 T2 )
1 E2
= (OUTO2 T2 ) (2 ) 8 _(1 ) +0
(2 ) 8 )
OUTH1
= 1
_(1 )
= (OUTO1 T1 )
1
(1 ) 7
+ (OUTO2 T2 )
(2 ) 8
ErrorTotal E1 E2
= +
OUTH2 OUTH2 OUTH2
E1 E1 OUTO1 NETO1
=
OUTH2 OUTO1 NETO1 OUTH2
E1
= (OUTO1 T1 ) (1 ) 9
OUTH2
E2 E2 OUTO2 NETO2
( (OUTO1 T1 )
=
OUTH2 OUTO2 NETO2 OUTH2 (1 ) 9
E2 1 (2)0 + 0
= (OUTO2 T2 ) (2 ) 10 + (OUTO2 T2 )
2 OUTH2 _(2 ) +0
(2 ) 10 )
= 1
= (OUTO1 T1 ) _(2 )
(1 ) 9 1
+ (OUTO2 T2 )
(2 ) 10
ErrorTotal E1 E2
= +
OUTH3 OUTH3 OUTH3
E1 E1 OUTO1 NETO1
=
OUTH3 OUTO1 NETO1 OUTH3
E1
= (OUTO1 T1 ) (1 ) 11 ( (OUTO1 T1 )
OUTH3
E2 E2 OUTO2 NETO2 (1 ) 11
=
OUTH3 OUTO2 NETO2 OUTH3 1 (3)0 + 0
+ (OUTO2 T2 )
3 E2
= (OUTO2 T2 ) (2 ) 12 _(3 ) +0
(2 ) 12 )
OUTH3
= 1
_(3 )
= (OUTO1 T1 )
1
(1 ) 11
+ (OUTO2 T2 )
(2 ) 12
ErrorTotal E1 E2
= +
OUTH1 OUTH1 OUTH1
E1 E1 OUTO1 NETO1
=
OUTH1 OUTO1 NETO1 OUTH1
E1
= (OUTO1 T1 ) (1 ) 7 ( (OUTO1 T1 )
OUTH1
E2 E2 OUTO2 NETO2 (1 ) 7
=
OUTH1 OUTO2 NETO2 OUTH1 0 + 2 (4)0
+ (OUTO2 T2 )
4 E2
= (OUTO2 T2 ) (2 ) 8 _(1 ) +0
(2 ) 8 )
OUTH1
= 2
_(1 )
= (OUTO1 T1 )
2
(1 ) 7
+ (OUTO2 T2 )
(2 ) 8
ErrorTotal E1 E2
= +
OUTH2 OUTH2 OUTH2
E1 E1 OUTO1 NETO1
=
OUTH2 OUTO1 NETO1 OUTH2
E1
= (OUTO1 T1 ) (1 ) 9 ( (OUTO1 T1 )
OUTH2
E2
=
E2
OUTO2 NETO2
0
(1 ) 9
OUTH2 OUTO2 NETO2 OUTH2 0 + 2 (5)
+ (OUTO2 T2 )
5 E2
= (OUTO2 T2 ) (2 ) 10 _(2 ) +0
(2 ) 10 )
OUTH2
= 2
_(2 )
= (OUTO1 T1 )
2
(1 ) 9
+ (OUTO2 T2 )
(2 ) 10
Curso: Tpicos en Inteligencia Artificial
Semestre: 2016-II
Autor: Kevin Christian Rodrguez Siu
Programa Profesional de Ciencia de la Computacin
Universidad Catlica San Pablo
ErrorTotal E1 E2
= +
OUTH3 OUTH3 OUTH3
E1 E1 OUTO1 NETO1
=
OUTH3 OUTO1 NETO1 OUTH3
E1
= (OUTO1 T1 ) (1 ) 11 ( (OUTO1 T1 )
OUTH3
E2 E2 OUTO2 NETO2 (1 ) 11
=
OUTH3 OUTO2 NETO2 OUTH3 0 + 2 (6)0
+ (OUTO2 T2 )
6 E2
= (OUTO2 T2 ) (2 ) 12 _(3 ) +0
(2 ) 12 )
OUTH3
= 2
_(3 )
= (OUTO1 T1 )
2
(1 ) 11
+ (OUTO2 T2 )
(2 ) 12
Como podemos ver, tenemos un gran nmero de elementos comunes y de clculos que podemos
reusar del paso anterior. Podramos calcular la siguiente matriz, UpdIH (Update from Input to
Hidden), de la siguiente forma:
= ((((( ) _( )) ( )(32) )
_( )) )
Veamos cmo sera entonces el proceso de este clculo para ver la forma que toma la matriz.
1 2 3
[ 4 5 6 ]
7 8
= (([1 2 ] [1 2 ]) [(1 ) (2 )]) (([ 9 10 ]) )
11 12
2 2 (32)
((( )
[(1 ) (2 ) (3 )] [1 2 ]
) )
1 2 3
[ 4 5 6 ]
7 9 11 2
= (((([1 1 2 2 ] [(1 ) (2 )]) ([ ]) )
8 10 12 2 (32)
[(1 ) (2 ) (3 )]) [1 2 ])
1 2 3
[ 4 5 6 ]
7 9 11
= ((([(1 1 ) (1 ) (2 2 ) (2 )] [ ])
8 10 12
[(1 ) (2 ) (3 )]) [1 2 ])
Curso: Tpicos en Inteligencia Artificial
Semestre: 2016-II
Autor: Kevin Christian Rodrguez Siu
Programa Profesional de Ciencia de la Computacin
Universidad Catlica San Pablo
1 2 3
[ 4 5 6 ]
(1 1 ) (1 ) 7 + (2 2 ) (2 ) 8
= (([ (1 1 ) (1 ) 9 + (2 2 ) (2 ) 10 ] [(1 ) (2 ) (3 )]) [1 2 ])
(1 1 ) (1 ) 11 + (2 2 ) (2 ) 12
{(1 1 ) (1 ) 7 + (2 2 ) (2 ) 8} (1 )
1 2 3
= (([ {(1 1 ) (1 ) 9 + (2 2 ) (2 ) 10} (2 ) ]) [1 2 ])
{(1 1 ) (1 ) 11 + (2 2 ) (2 ) 12} (3 )
[ 4 5 6 ]
1 2 3
[ 4 5 6 ]
{(1 1 ) (1 ) 7 + (2 2 ) (2 ) 8} (1 ) 1 {(1 1 ) (1 ) 7 + (2 2 ) (2 ) 8} (1 ) 2
= ([ {(1 1 ) (1 ) 9 + (2 2 ) (2 ) 10} (2 ) 1 {(1 1 ) (1 ) 9 + (2 2 ) (2 ) 10} (2 ) 2 ])
{(1 1 ) (1 ) 11 + (2 2 ) (2 ) 12} (3 ) 1 {(1 1 ) (1 ) 11 + (2 2 ) (2 ) 12} (3 ) 2
1 2 3
[ 4 5 6 ]
{(1 1) (1) 7 + (2 2) (2) 8} (1) 1 {(1 1) (1) 9 + (2 2) (2) 10} (2) 1 {(1 1) (1) 11 + (2 2) (2) 12} (3) 1
= [ ]
{(1 1) (1) 7 + (2 2) (2) 8} (1) 2 {(1 1) (1) 9 + (2 2) (2) 10} (2) 2 {(1 1) (1) 11 + (2 2) (2 ) 12} (3) 2
Curso: Tpicos en Inteligencia Artificial
Semestre: 2016-II
Autor: Kevin Christian Rodrguez Siu
Programa Profesional de Ciencia de la Computacin
Universidad Catlica San Pablo
Ahora, una vez que tenemos la matriz UpdIH, debemos crear una matriz UpdIHExt (UpdIH
Extendida) para poder tener en cuenta el efecto del bias que, como sabemos que no se actualiza,
es 0.
1 2 3
=
4 5 6
[ 0 0 0 ]
Primero debemos actualizar la matriz wHO, para lo cual usamos la siguiente frmula:
7 8
7 8 7 8
[ 9 10] = [ 9 10]
9 10
11 12 11 12
2 2 2 2
11 12
[ 0 0 ]
7 8
7 8 7 8
[ 9 10] = [ 9 10]
9 10
11 12 11 12
2 2 2 2
11 12
[ 0 0 ]
7 8
7 8
7 8
[ 9 10 ]= 9 10
9 10
11 12
2 2 11
11 12 12
[ 2 0 2 0 ]
Y ahora, debemos actualizar la matriz wIH, para lo cual usamos la siguiente frmula:
= +
1 2 3 1 2 3 1 2 3
[4 5 6] = [4 5 6]
1 1 1 1 1 1 4 5 6
[ 0 0 0 ]
1 2 3 1 2 3 1 2 3
[4 5 6] = [4 5 6]
1 1 1 1 1 1
4 5 6
[ 0 0 0 ]
1 2 3
1 2 3 1 2 3
[4 5 6] =
1 1 1 4 5 6
4 5 6
[ 1 0 1 0 1 0 ]
Y listo! Ahora tienes una Red Neuronal Perceptrn Multicapa y su respectivo entrenamiento usando el algoritmo
BackPropagation usando slo operaciones con matrices.
Para su consideracin:
Cmo sera este proceso si es que tuviramos una Red Neuronal Perceptrn de 4 capas (1 Entrada, 2
Ocultas y 1 de Salida? Cmo seran las dimensiones de las matrices con las que tendras que trabajar?
Qu cambiara en el proceso?
Qu deberas tener en cuenta si decidieras usar dos funciones de activacin distintas (una para el OUT
de la capa oculta y otra para el OUT de la capa de salida)? Qu cambiara en el proceso presentado aqu?
Cmo crees que debera ser el proceso si, en lugar de hacer el clculo del error y la actualizacin de
neuronas por cada entrada, el aprendizaje fuera en batch o con un error general dado por todos los errores
calculados? Este proceso sera ms rpido o ms lento? Qu ventajas o desventajas crees que pueda
tener?