Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Trabajo de grado
Autor: Supervisor:
Felipe Suárez Colmenares Prof. Fernando Lozano
13 de junio de 2016
iii
Agradecimientos
Agradezco profundamente a mis padres y mi hermano por acompañarme y soportarme en todo
momento. Su compañı́a es invaluable y con ellos estaré eternamente agradecido. Agradezco a mi
asesor Fernando Lozano por su gran labor como profesor en varias ocasiones y como mentor de
este proyecto. A todos mis amigos en Ingenierı́a muchı́simas gracias por tenerme paciencia. A mis
amigos de Matemáticas les agradezco por mostrarme el valor de la amistad, por compartir conmigo
su amor por el conocimiento y por su constante ambición de superación.
v
Índice general
Agradecimientos III
Introducción 1
1. Marco Teórico 3
1.1. Aprendizaje de Máquinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1. Enfoque de Estadı́stica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2. Enfoque de Optimización . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. Redes Neuronales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.1. Redes Convolucionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3. Transformada de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.1. Transformada Discreta de Fourier . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2. Transformada Dispersa de Fourier . . . . . . . . . . . . . . . . . . . . . . . 8
2. Metodologı́a 11
2.1. Algoritmo de Entrenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1. Backpropagation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2. Convolución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3. Evaluación Computacional 19
3.1. CUDA y Programación Paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2. CUFFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3. Convolución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.1. Discusión de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.4. Entrenamiento de redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4.1. DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4.2. KTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4.3. Kylberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.4.4. Retinopatı́a Diabética . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4.5. STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4.6. Discusión de Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Bibliografı́a 39
vii
Índice de figuras
Índice de cuadros
Introducción
La historia del hombre nos ubica en una época atravesada por decenas de años de crecimiento
exponencial en capacidad de cómputo al mismo tiempo que por siglos de rigurosas construcciones
de conocimiento matemático. Esta coincidencial conjunción dio origen al estudio sobre el aprendi-
zaje de máquinas e inteligencia artificial desde hace casi cuarenta años. Desde entonces, el hombre
ha sido capaz combinar el soporte teórico pertinente con técnicas avanzadas de diseño para desa-
rrollar dispositivos con capacidades sobrehumanas que constituyen un amplio espectro habilidades
como inferencia y reconocimiento de patrones.
Entre los algoritmos de aprendizaje de máquinas más exitosos se encuentra el algoritmo de redes
neuronales [1]. El éxito de este algoritmo radica en su gran versatilidad sobre el tipo de informa-
ción que utiliza, su simple formulación, su sencillo algoritmo de aprendizaje y su gran desempeño.
Conforme crece la capacidad de almacenamiento de información, procesamiento de datos y abs-
tracción teórica; también crecen los deseos por crear máquinas más inteligentemente ambiciosas.
Es por esto que uno de los retos más grandes consiste de acelerar dichas etapas de aprendizaje.
Por lo tanto, el objetivo de este trabajo es desarrollar un algoritmo más rápido para llevar a cabo
el entrenamiento de Redes Neuronales Convolucionales.
En el capı́tulo 1 explicaremos los conceptos básicos necesarios para entender al algoritmo pro-
puesto. Estos incluyen definiciones básicas de aprendizaje estadı́stico y su versión como problema
de optimización. También introduciré los conceptos de convolución, redes neuronales y transforma-
da de Fourier explicando, en cada caso, las versiones que son más apropiadas para el entendimiento
del algoritmo y mostrando algunos ejemplos pertinentes.
Capı́tulo 1
Marco Teórico
En casos pequeños una opción válida podrı́a ser graficar los datos en un plano y tratar de
responder estas preguntas empı́ricamente. Normalmente, sin embargo, todas las aplicaciones son
solo tratables por medio de implementaciones computacionales. Ası́, en el aprendizaje de máquinas
el objetivo es diseñar un algoritmo que aprenda por sı́ solo a partir de datos preexistentes algún
tipo de fenómeno, algún patrón. Los problemas clásicos se pueden categorizar en Clasificar, Inferir,
Ordenar y validar dependencia.
En el fondo, nos estamos preguntando por la distribución conjunta (X, Y ). Entonces, sur-
gen varias preguntas pertinentes como: ¿Cómo encontrar una función c a partir de los datos
{(X1 , Y1 ), . . . , (Xn , Yn )} con el menor error de clasificación E = P(c(X) 6= Y )? ¿Qué tan rápi-
do puedo encontrar esta función c si tengo n datos? ¿Para una clasificación c fija, cómo se puede
calcular o estimar dicho error E?
El teorema Bayes nos garantiza que lo mejor que se podrı́a clasificar a X en Y está dictado
por las distribuciones condicionales de Y . Suponiendo que las variables admiten una función de
densidad f(X,Y ) , el clasificador de Bayes se define:
El teorema de Bayes dio lugar a que los estadı́sticos se enfocaran en formas de estimar dicho
clasificador. El concepto general del teorema es intuitivo, si pensamos a fY |X=x (y) como la proba-
bilidad relativa de que la clasificación sea y dado que x es la realización, entonces la clasificación es
el valor de la clase que maximiza esta probabilidad. No obstante, el teorema también nos dice que
hay un lı́mite para el error de clasificación; y este está dado por el error del clasificador de Bayes.
Considere el siguiente ejemplo,
Ejemplo 1.1.1. Suponga que hay dos clases, Y = {0, 1}, y la variable aleatoria X es tal que
X|Y =0 ∼ N (1, 1), y X|Y =1 ∼ N (−1, 1). Suponiendo que la cantidad de elementos en cada clase
es la misma (fy (y) = 0,5δ0 + 0,5δ1 ), entonces, fY |X=x (y) = fX|Y =y (x) ffX
Y (y) 1
(x) = fX|Y =y (x) 2fX (x) .
Por lo tanto, ( (
1, si fX|Y =1 (x) > fX|Y =0 (x), 1, si x < 0,
c(x) = =
0, si fX|Y =1 (x) < fX|Y =0 (x). 0, si x > 0.
1.0
Y=0
Y=1
0.0
−3 −2 −1 0 1 2 3
X
Figura 1.1: Muestra X para dos clases Y = 0, 1.
F_0
F_1
0.10
0.00
−3 −2 −1 0 1 2 3
t
Figura 1.2: Densidades marginales FX|Y =0 , FX|Y =1 .
n
1X
M SE(c) = (c(Xi ) − Yi )2 . (1.3)
n i=1
Ahora bien, es útil restringir el clasificador c a una familia de posibles clasificadores F. De este
modo, el problema de encontrar un buen clasificador se puede reescribir formalmente de la manera
siguiente:
Dados {(Xi , Yi )}i=1,...,n , c = arg min E(f ). (1.4)
f ∈F
Para que estos problemas sean matemáticamente tratables, es necesario imponer condiciones
sobre los datos, la familia de clasificadores y la formulación de los errores. Naturalmente, estamos
interesados en encontrar una solución óptima en un tiempo razonable. Normalmente se utiliza el
MSE para resolver este problema por sus propiedades de diferenciabilidad. Sin embargo, a veces es
mejor utilizar otras funciones, también diferenciables, como n1 i ||c(Xi ) − Yi ||p . Por estas razones,
P
a la familia de funciones F se le exige que se sea diferenciable con respecto a algún parámetro
de modo que el problema original, c = arg minf ∈F E(f ), se pueda representar como un problema
de optimización que se haya estudiado y su solución —o sus métodos para encontrar soluciones
aproximadas— sea conocida. Por ejemplo, es deseable poder obtener una representación Lineal,
Cuadrática, Semidefinida o Convexa en general. Cada uno de los cuatro tipos de problemas men-
cionados anteriormente ha sido ampliamente estudiados y son áreas activas de investigación en
optimización. Algunos de los métodos más famosos para resolverlos son Simplex, SMO, Goemans-
Williamson, Lagrange-KKT, entre otros. [2]
Σ = w0 + w1 X1 + · · · + wn Xn , Y = f (Σ)3 .
problema original se vuelve equivalente un problema de regresión lineal, pero cuando Y toma va-
lores en un conjunto discreto, las aproximaciones usuales para resolver el problema de regresión no
sirven. Cuando, por ejemplo, f (t) = 1(t ≥ 0), entonces, considerados (1, X1 , . . . , Xn ) como puntos
en Rn , la clasificación c representará la pertenencia del vector (1, X1 , . . . , Xn ) al lado positivo del
semiplano con normal (w0 , w1 , . . . , wn ).
Intuitivamente, aumentar la cantidad de neuronas hasta formar una red puede mejorar la
capacidad del algoritmo para clasificar acertadamente. De ahı́, una red neuronal —también llamada
perceptrón multicapa en el contexto particular clasificación binaria— consiste de utilizar varias
neuronas para generar múltiples activaciones Σ1 , . . . , Σm , de las cuales se extraen también múltiples
excitaciones f1 , . . . , fm . Aunque fi puede ser una función arbitraria, para el problema especı́fico de
clasificación es recomendable utilizar funciones que tomen valores en [0, 1]. Utilizar varias capas de
neuronas para formar una red neuronal nos conlleva a mejorar la resolución al discernir los datos
en sus clases correspondientes. De hecho, cualquier función es aproximable por medio de funciones
de activación. Este es un hecho importante que vale la pena tener en cuenta y se le llama por
Teorema de Aproximación Universal.
Teorema 1.2.1. (Teorema de Aproximación Universal [4]) Sea φ : R → R una función monótona
creciente y continua. Sea I ⊆ Rm un conjunto compacto. Entonces, para toda toda función continua
sobre I, f ∈ C(I), y > 0 existen N ∈ N, α1 , . . . , αN , b1 , . . . , bN ∈ R, w1 , . . . , wN ∈ Rm tales que,
X
fˆ(x) := αi φ(wiT x + bi ), sup |fˆ(x) − f (x)| = ||fˆ − f ||∞ < .
i x∈I
Recordemos que la convolución entre dos señales X ∈ Rn y Y ∈ Rm nos forma otra señal en
m+n
R dada por X X
(X ∗ Y )i = Xk Yi−k = Xr Ys . (1.5)
k r+s=i
Para matrices tenemos la siguiente definición para la convolución entre una imagen X y un filtro
F . Considere una imagen X ∈ RM ×N y un filtro F ∈ Rm×n , entonces Y := X ∗ F es la matriz en
en R(M +m)×(N +n) en donde,
X X X
Yij = Xk,l Fi−k,j−l = Xk,r Fl,s . (1.6)
k,l k+l=i r+s=j
1.3. Transformada de Fourier 7
Ejemplo 1.2.1. Se calcula el resultado de la convolución entre una imagen de 512×512 y un filtro
de 3×3.
−1 −2 1
∗ 3 2 −1 =
1 1 −2
Una capa de la red convolucional está conformada, entonces, por varias secciones de covolución.
Para generalizar esta idea a imágenes representadas por tres canales —RGB— se consideran tam-
bién tres canales de filtros y el resultado final se suma. Esto es, si XRGB ∈ RM ×N ×3 , F ∈ Rm×n×3
f ∈ (H, h·, ·i) con base ortonormal (ex )x∈I , F(f )(x) := hf, ex i. (1.8)
Ejemplo 1.3.1. Se consideran los casos particulares L2 (C)[0, 2π], l2 (C), que son conocidos como
CTFT y DTFT respectivamente.
Z 2π
f ∈ L2 (C)[0, 2π], F(f )(x) := f (t)e−2πixt dt. (1.9)
0
∞
X
f ∈ l2 (C), F(f )[n] := f [k]e−2πink . (1.10)
k=−∞
8 Capı́tulo 1. Marco Teórico
El algoritmo de Cooley-Tukey permite calcular esta transformación en tiempo O(n log n). La
versión d dimensional de esta transformada es natural:
d i i0 +···+id i0d
X
X ∈ Rn×···×n = Rn , X 7→ X̂, X̂(i1 ,...,id ) = X(i01 ,...,i0d ) ωn1 1 . (1.12)
(i01 ,...,i0d )∈[n]d
En particular para una imagen, la transformada se reescribe como una transformada primero
por filas(o columnas) y luego por columnas(o filas).
M X
N
X 0 0
ii jj
X ∈ RM ×N , F(X)(i, j) = X(i0 , j 0 )ωM ωN . (1.13)
i0 =1 j 0 =1
F
−→
F
−→
máximo la propiedad de dispersión para utilizar métodos estocásticos de estimación. Dicho algorit-
mo es capaz de encontrar con alta probabilidad la transformada en señales exactamente k dispersas
en tiempo O(k log n). Para señales aproximadamente k-dispersas el tiempo que le toma algoritmo
es O(k log n log(n/k)). La idea del algoritmo es simple: estimar las posiciones de los coeficientes
grandes InnerLoop locate; estimar el espectro en estas posiciones InnerLoop estimate; repetir
la localización hasta tener una estimación casi exacta, y recuperar el valor del espectro en estas
posiciones.
Capı́tulo 2
Metodologı́a
Los parámetros que se aprenden durante el proceso de aprendizaje son entonces los paráme-
tros wi de cada capa ci . Consiguientemente nuestro clasificador, c, está parametrizado por w :=
(w1 , . . . , xn ). Para ello, se propone el siguiente esquema de solución:
Dependiendo de las condiciones de la red, calcular ∇w M SE(cw ) puede ser muy complicado si se
utiliza
P la fórmula entera de todas las capas para el error. Sin embargo, es claro que ∇w M SE(cw ) =
i (c w (X i )−Yi )(∇w (cw )). Ası́ que el problema se transforma en calcular ∂cw /∂wi . Ahora, el hecho
de que la red esté divida en capas una tras otra, c = cn ◦ cn−1 ◦ · · · ◦ c1 , nos permite calcular esta
derivada de manera iterativa utilizando la regla de la cadena. A este proceso se le conoce como
BackPropagation. El concepto general de BackPropagation se basa en:
Ahora bien, cada uno de los términos ∂M SE(cw )/∂wi en el algoritmo de descenso de gradiente
incluye toda la muestra de entrenamiento train. Esto no solo puede hacer el proceso más lento y
más pesado computacionalmente, sino que puede resultar en soluciones que no son óptimas [7]. Por
esta razón se ha pensado en que es mejor realizar cada paso durante Backpropagation utilizando
submuestras de train denominadas batches. Al algoritmo basado en entrenamiento por batches
se le conoce como Stochastic Gradient Descent.
2.1.2. Convolución
Las redes convolucionales revolucionaron las máquinas de clasificación en cuanto los compu-
tadores fueron mejorados, pues, aunque la teorı́a de BackPropagation para redes convolucionales
fue creada desde hace más de treinta años, no fue posible implementarla eficientemente sino hasta
hace menos de diez. Desde entonces, se han creado áreas en las que se busca cómo aplicar estas
redes en otras ramas de las ciencias y al mismo tiempo se han concentrado muchos esfuerzos por
tratar de mejorar su desempeño y disminuir el costo computacional y temporal. Veamos breve-
mente por qué es pesado computacionalmente.
2.1. Algoritmo de Entrenamiento 13
Para facilitar los cálculos asumiremos de aquı́ en adelante que la imagánes y los filtros serán
cuadrados, M = N , m = n. Ası́, la expresión para la complejidad de la convolución por batch es,
La convolución es, por lo tanto, la operación que domina el tiempo de ejecución del algoritmo
de aprendizaje. La propuesta de este trabajo es optimizar dicho proceso combinando las ideas de
transformada dispersa de Fourier, convolución y procesamiento paralelo en tarjetas gráficas. Va-
rios autores [8, 9] ya han explorado la viabilidad de utilizar transformadas de Fourier para facilitar
labor extensiva y repetida de la convolución.
La propuesta, siguiendo las ideas de los autores en [9], es transformar las imágenes X → F(X),
F → F(F), para que las convoluciones se puedan hacer más rápidamente apelando al teorema que
relaciona la transformada de Fourier y las convoluciones.
Teorema 2.1.1. (Teorema uni-dimensional Convolución Fourier) Sean X ∈ RN , F ∈ Rn . Defina
N −n+1
P
X ∗ F =: Y ∈ R , como Yi = j Xi+j Fn−j . Si FN denota la FFT N -dimensional, entonces,
∀i = n + 1, . . . , N : FN (X)i FN (F )i = FN (X ∗ F )i−n .
Ası́ que para efectuar la convolución entre X y F, solo tenemos que hacer 3(D)(BX ) productos
directo de F(X) y F(F) que requieren M 2 operaciones. Transformar cada imagen (filtro) toma
O(2M 2 log M ), ası́ que en total la complejidad de transformar, hacer producto directo y posterior-
mente hacer la transformación inversa es,
Entonces, se puede notar que la complejidad está dominada por el tiempo que toma la primera
transformación de X y F. Ası́ que nos enfocaremos en optimizar este proceso en particular. Para
tal fin vamos a construir una transformada más rápida, sfft, basada en la idea de la transformada
dispersa de [6] y el hecho que las imágenes grandes son dispersas en frecuencia. Vea, por ejemplo,
las figuras 1.4 y 1.5. Para construir el algoritmo tendremos en cuenta las siguientes definiciones.
Definición 2.1.1. Para n := (n1 , . . . , nd ) ∈ Nd definimos, n-transformada discreta de Fourier
como:
Fn : Cn1 ×···×nd → Cn1 ×···×nd ,
X
X 7→ X̂, X̂(i1 , . . . , id ) = X(j1 , . . . , jd )ωni11j1 . . . ωniddjd .
(j1 ,...,jd )∈[n1 ]×···×[nd ]
√
2π −1
Donde ωa = e a .
Definición 2.1.2. ara K := (k1 , . . . , kd ) ∈ Nd definimos, k-submuestra como:
X 7→ Y, Y(j1 , . . . , jd ) = X(σ1 j1 , . . . , σd jd ).
Con estas definiciones ya podemos construir el algoritmo. Antes de esto, consideremos los
siguientes dos teoremas que relacionan la transformada de Fourier n dimensional Fn con la trans-
formada k dimensional Fk ; la k submuestra Sk ; la k módulo suma Σk ; y la σ permutación Pσ .
Teorema 2.1.2. Sean k, n, con ki |ni . Sean Fn , Sk , Σk , Fk como en las definiciones 2.1.1-2.1.4.
Entonces, el siguiente diagrama es conmutativo:
Fn
Cn Cn Q
Sk αΣk , donde α = Qk.
n
Fk
Ck Ck
La conclusión de este teorema es que si, en lugar de calcular transformada de Fourier completa,
calculamos la transformada de una submuestra, entonces es lo mismo que hacer una módulo suma
de la transformada completa. O sea que, si quisiéramos reconstruir la transformada de Fourier de
una señal grande, podemos solo calcular la transformada de una submuestra y luego mapear los
coeficientes a las posiciones reales —escalando apropiadamente por α−1 — sabiendo que provienen
de una suma módulo.
2.1. Algoritmo de Entrenamiento 15
Teorema 2.1.3. Sean k, n, con ki |ni . Sean Fn , Sk , Σk , Fk , Pσ como en las definiciones 2.1.1-2.1.4,
siendo (σ, n) = 1. Sea G ∈ Cn . Entonces, el siguiente diagrama conmuta:
Fn
Cn Cn
Pσ Pσ−1
Fn
Cn Cn
Q
nG· Ĝ∗
n Fn n
C C
ΣK SK
Fk
Ck Ck
Este teorema es esencialmente el corazón del algoritmo de la transformada dispersa del MIT.
El primer diagrama captura el hecho que permutar en espacio y luego transformar es equivalente
a transformar y luego efectuar la permutación inversa. Este paso es el que se repite O(log n) veces.
En el siguiente diagrama se resume el hecho que filtrar en espacio —multiplicar punto a punto—
y luego transformar es equivalente a transformar y luego hacer convolución con la transformada
del filtro. En este paso del algoritmo la señal, que está permutada en frecuencia, se le aplica la
convolución con un filtro cuya función es visibilizar las frecuencias altas. Para esto se escoge un filtro
lo más parecido a una ventana exacta para que cuando se efectúe la convolución cada frecuencia se
repita uniformemente sobre un intervalo de dimensión k —también llamado bucket por los autores
originales. Finalmente, en el último diagrama se captura el hecho inverso al teorema 2.1.2, a saber,
sumar módulo y luego transformar es equivalente a transformar y luego submuestrear. En este
paso, ya que hemos “agrandado” cada coeficiente grande en el paso previo al filtrar, vamos ahora
a submuestrear de tal forma que, con alta probabilidad recuperemos los coeficientes agrandados.
En resumen podemos resumir que el algoritmo disperso, descrito en el teorema 2.1.3 realiza lo
siguiente:
Se describen los dos algoritmos propuestos que denominaré sfft1 y sfft2. El primer algoritmo
asume que todos los coeficientes se encuentran, posiblemente aproximadamente, concentrados sobre
la ventana de tamaño k y por lo tanto al k-submuestrear en frecuencia se suman módulo k, pero
solo el término de la ventana es no nulo.
Para la construcción de sfft2 vamos a asumir que la señal X está espectralmente concentrada
en una kventana centrada en 0, y los coeficientes que no están dentro de la ventana son pocos
—dispersos. Entonces, primero se estiman dichos coeficientes que están por fuera de la ventana
utilizando la transformada dispersa original [6], pero adaptada para dos dimensiones. Luego se
efectúa sfft1 para reconstruir la ventana.
16 Capı́tulo 2. Metodologı́a
Ası́, podremos cambiar la transformación de los BX batches de XRGB en tiempo O(k log k)
con sfft1 y en tiempo O(k log k + k log n) con sfft2. Además, el filtro G que se utilizará será la
ventana exacta de tamaño k, pues la multiplicación punto a punto en GPU toma solamente O(1).
A continuación se muestra la complejidad temporal teórica de cada proceso de estos dos diagramas.
La demostración de estos hechos la puede encontrar en el apéndice.
Fn O(n log n) n
Cn Cn Cn C
GP U
Sk αΣk
−→ O(1) O(log k)
Fk kO(k log k) k
Ck Ck C C
Fn O(n log n) n
Cn Cn Cn C
Pσ Pσ−1 O(1) O(1)
n Fn n nO(n log n) n
C C GP U C C
−→
Q
nG· Ĝ∗ O(1) O(1)
n Fn n nO(n log n) n
C C C C
ΣK SK O(log k) O(1)
k Fk k kO(k log k) k
C C C C
En conclusión, se implementará la convolución utilizando el siguiente diagrama,
Para las capas diferentes a convolución – y por lo tanto no lineales– la derivada se puede calcular
fácilmente y la implementación ya viene dada para Matlab por [10]. Nos enfocaremos en el análi-
sis de ∂c/∂wi cuando c es una convolución y veremos cómo se traduce esta derivada a su versión
frecuencial.
Y = X ∗ F.
∂L ∂L ∂L
Por 2.2, tenemos que ∂X y ∂F se pueden calcular conociendo ∂Y . De hecho, dado que la
operación ∗ es lineal, para cada i ∈ [BX ],
∂L X ∂L ∂Yf i X ∂L
= ∗ = ∗ Ff .
∂Xi ∂Yf i ∂Xi ∂Yf i
f ∈[BF ] f ∈[BF ]
∂L X ∂L ∂Yf i X ∂L
= ∗ = ∗ Xi .
∂Ff ∂Yf i ∂Ff ∂Yf i
i∈[BX ] i∈[BX ]
Ahora bien, la transformada de Fourier también es lineal y también podemos utilizar el dominio
frecuencial para calcular las derivadas. Las versiones frecuenciales de ∂L/∂wi son por consiguiente:
∂L X ∂L
Fn = Fn Fn (Ff )l . (2.6)
∂Xi l ∂Yf i l
f ∈[BF ]
∂L X ∂L
Fn = Fn Fn (Xi )l . (2.7)
∂Ff l ∂Yf i l
i∈[BX ]
19
Capı́tulo 3
Evaluación Computacional
En esta sección vamos evaluar los algoritmos descritos en la sección anterior. La implementación
de estos algoritmos se llevó a cabo en una máquina con sistema operativo Windows con una CPU
que consiste de 8 procesadores AMD FX-8350, con 8Gb de memoria RAM y GPU GeForce GTX
750 con capacidad de cómputo 5.0. Se utilizó el toolbox de versión libre MatConvNet [10], sobre
Matlab R 2015a. Para la implementación de los algoritmos dispersos nos basamos en el algoritmo
implementado sobre C++ [6] transferido a CUDA y Matlab. Las bases de datos utilizadas para
demostrar la efectividad del algoritmo las puede encontrar en [5, 11, 12, 13, 14].
El primer banco de imágenes, DTD , fue recopilado por Cimpoi et al. [11]. Este consiste de 47
clases de texturas diversas presentes en la naturaleza. Las imágenes están a color y cada clase con-
tiene 120 instancias de imágenes de distintos tamaños, lo que equivale a un total de 5640 imágenes
de entrenamiento.
En el segundo banco de imágenes, KTH , hay una pequeña colección de imágenes con texturas
de ambientes de hogar [13]. Las imágenes están escala de grises y tienen dimensión 640 × 480
pixeles. Hay un total de 15 clases y 40 instancias por clase. La cantidad total de instancias en la
base de datos es, por lo tanto, 600.
La cuarta base de datos, Diabetic Retinopathy , fue obtenida del desafı́o de detección de
Diabetes realizado por Kaggle [14]. Esta base de datos contiene las fotografı́as a color de la retina
de alrededor de 9000 pacientes. Cada paciente está clasificado en una de 5 clases dependiendo del
estado de su Diabetes Retinopática. Las clases son Sin DR, DR Dócil, DR Moderada, DR Severa y
DR proliferativa. El tamaño original de 2496 × 1664, pero acá utilizamos una reducción a 256 × 256.
En muchos casos resulta mejor tener pocos procesadores con más velocidad de operación por
segundo y con gran capacidad de memoria que tener muchos procesadores no tan rápido. Para
algoritmos que necesiten operar muchos procesos de forma serial es recomendable utilizar im-
plementaciones en CPU. Si, por el contrario, necesitemos hacer operaciones sencillas sobre cada
elemento de un arreglo y las operaciones entre arreglos son todas independientes entonces podrı́a
explorarse qué tan eficiente serı́a la implementación sobre GPU. Cabe notar que para realizar ope-
raciones sobre la GPU es necesario primer transferir los datos a la memoria global de la GPU,
efectuar las operaciones y luego trasferir los datos procesados de la GPU a la CPU. De aquı́ en
adelante llamaremos a las memorias del CPU y GPU como host y device respectivamente como es
común en literatura.
3.2. CUFFT
Nuestra propuesta para la optimización del algoritmo está centrada en la capacidad de realizar
rápidamente la trasformada de Fourier. Dado que en los algoritmos sFFT1 y sFFT2 realizamos
Fk (X), donde k|n y ki ni , debemos tener presente la complejidad intrı́nseca de Fk . Tanto
Matlab como CUDA tienen versiones ya implementadas basadas en la versión original del algo-
ritmo de Cooley-Tukey. Vale la pena tener en cuenta las siguientes consideraciones sobre cada una
de las dos implementaciones:
1. Matlab utiliza versiones optimizadas del algoritmo de Cooley-Tukey para inputs con di-
mensiones que son potencias de primos pequeños: {2a , 3b , 5c }.
2. Matlab precompila implementaciones apropiadas de FFTW en CPU. En CPU utiliza ver-
siones de CUFFT.
3. CUDA por sı́ solo no contiene comandos para realizar esta operación por lo cual necesita
incluir la librerı́a cufft.
4. CUDA necesita crear un planificador para la transformada en cada operación y para esto es
necesario realizar lo siguiente:
Instanciar un planificador plan de tipo cufftHandle.
Inicializar el planificador definido previamente por medio de cufftPlanMany. Acá se
definen todos los parámetros de la transformada (Dimensión, muestreo, batches).
Liberar el espacio de memoria para el plan por medio de cufftDestroy.
5. CUDA permite realizar transformadas C → R (transformada directa) y R → C (transformada
inversa) aprovechando las simetrı́as de cada una.
6. Matlab y CUDA permiten arreglos de tipo single y double solamente.
22 Capı́tulo 3. Evaluación Computacional
Dimensión
64 128 256
4 0.15(1.49) 0.15(2.03) 0.34(2.61)
16 0.29(2.01) 0.38(2.61) 1.11(6.12)
Batch 64 0.72(2.60) 1.27(7.79) 3.57(21.20)
256 2.99(7.68) 4.61(21.32) 78.19(76.98)
512 10.38(15.61) 8.98(39.05) 153.43(152.19)
Se puede notar que es el para dimensiones inferiores a 256 y bathces de tamaño menores que 512,
el tiempo que le toma a Matlab llevar a cabo la fft es menor. Matlab optimiza los llamados de
FFT en dimensiones pequeñas y a eso se debe esta discrepancia. Sin embargo, cuando la cantidad
de batches aumenta y en imágenes más grandes ambos procesos toman el mismo tiempo. Veamos
qué ocurre en profiler cuando (Batch, Dimension) = (64, 256), (512, 256).
El comando utilizado en el NVIDIA visual profiler es
3.3. Convolución
En esta sección pondremos a prueba la diferentes versiones para realizar la operación X ∗ F, en
el que X ∈ RM ×M ×1×BX , F ∈ Rk×k×1×Bf sobre el rango
A continuación vamos a contrastar los tiempos de los algoritmos vl nnconv [10], fftconv, y
sfftconv 5. La primera tabla muestra el tiempo de ejecución de vl nnconv y en la imagen si-
guiente se muestran un mapa de color con la relación de este tiempo con los de vl nnconv y
fftconv sfftconv respectivamente.
3.3. Convolución 23
M 64 128 256
k 4 8 12 16 4 8 12 16 4 8 12 16
BF BX
32 1.30 2.06 3.58 5.52 2.44 6.40 11.58 17.68 7.32 20.12 41.63 71.15
2 64 2.44 3.85 6.80 9.76 4.19 11.56 21.04 35.09 13.89 39.95 83.02 141.92
128 4.66 7.52 11.67 18.96 8.10 22.09 41.65 69.91 27.83 79.62 165.70 283.78
32 1.29 2.08 3.57 5.55 2.51 6.44 12.05 17.66 7.47 20.19 41.68 71.13
4 64 2.37 3.86 6.77 10.73 4.27 11.27 21.93 35.03 14.14 40.07 83.09 142.10
128 4.57 7.41 13.24 21.28 7.97 22.20 41.76 69.77 28.99 79.77 165.72 283.88
32 1.28 2.08 3.55 5.54 2.30 5.85 10.71 17.76 7.63 21.03 41.76 71.20
6 64 2.38 3.86 6.72 10.77 4.28 11.38 21.10 35.05 16.27 49.36 83.31 142.09
128 4.04 7.15 12.28 19.11 9.39 23.23 41.92 69.87 29.53 80.35 165.88 283.89
32 1.28 2.09 3.53 3.20 2.55 6.16 10.79 17.73 9.00 20.49 41.85 71.31
8 64 2.40 3.91 6.83 10.71 4.61 11.71 21.28 35.15 15.65 40.79 83.40 142.23
128 4.24 6.65 11.77 21.35 8.99 22.94 42.21 70.05 31.84 81.13 166.53 284.29
32 1.29 2.13 3.57 5.59 2.81 6.16 10.83 18.53 9.28 21.21 42.10 71.37
10 64 2.42 3.74 6.95 10.21 5.83 12.40 22.27 35.24 17.69 41.64 83.84 142.55
128 4.15 6.80 11.69 19.20 10.00 23.62 42.49 70.29 131.28 175.80 258.90 372.11
M, k
64 128 256
4 8 12 16 | 4 8 12 16 | 4 8 12 16
---------
32 2.5
2 64
128
---------
32 2
4 64
128
---------
32 1.5
BF, B X
6 64
128
---------
32 1
8 64
128
---------
32 0.5
10 64
128
---------
M 64 128 256
k 4 8 12 16 4 8 12 16 4 8 12 16
BF BX
32 1.16 1.13 1.14 1.13 3.498 3.43 3.38 3.24 12.91 12.11 12.11 12.66
2 64 1.93 1.97 1.96 1.87 6.42 6.12 6.39 6.03 23.61 23.46 23.48 23.92
128 3.55 3.43 3.26 3.22 12.24 11.51 11.54 11.53 - - - -
32 1.87 1.88 1.89 1.91 6.09 6.1 6.1 5.78 23.79 22.78 22.28 22.35
4 64 3.28 3.29 3.29 3.26 11.36 11.12 10.95 11.23 108.64 108.1 109.29 107.69
128 6.1 6.07 6.06 6.05 21.71 21.62 22.53 21.24 - - - -
32 2.54 2.52 2.53 2.56 8.17 8.17 8.72 8.7 81.35 81.79 80.72 81.65
6 64 4.59 4.59 4.62 4.61 16.05 15.74 15.65 15.73 222.2 221.15 220.26 223.66
128 8.1321 8.64 8.66 8.08 82.35 79.44 78.79 80.67 - - - -
32 3.23 3.16 3.24 5.55 11.27 11.3 10.84 10.61 112 109.17 107.55 112.39
8 64 5.89 6 5.9 5.89 21.45 21.66 20.55 20.61 - - - -
128 11.27 10.56 10.99 11.32 105.76 105.57 106.18 107.18 - - - -
32 3.89 3.9 3.88 3.89 13.98 13.3 13.08 13.91 135.97 136.9 134.62 134.72
10 64 7.27 7.25 6.41 6.92 66.96 67.55 67.32 65.05 - - - -
128 13.44 13.01 12.99 12.97 133.33 130.64 129.44 125.76 - - - -
M, k
64 128 256
4 8 12 16 | 4 8 12 16 | 4 8 12 16
--------
32
2 64 0.6
128
-------- 0.4
32
4 64 0.2
128
-------- 0
32
BF B X
6 64 -0.2
128
-------- -0.4
32
8 64 -0.6
128
--------
-0.8
32
10 64
-1
128
--------
M 64 128 256
k 4 8 12 16 4 8 12 16 4 8 12 16
BF BX
32 0.63 0.63 0.63 0.63 1.31 1.31 1.31 1.31 4.07 4.07 4.07 4.07
2 64 0.924 0.924 0.924 0.924 2.22 2.22 2.22 2.22 7.54 7.54 7.54 7.54
128 1.43 1.43 1.43 1.43 3.99 3.99 3.99 3.99 80 80 80 80
32 0.93 0.93 0.93 0.93 2.22 2.22 2.22 2.22 7.62 7.62 7.62 7.62
4 64 1.4 1.4 1.4 1.4 3.97 3.97 3.97 3.97 79.43 79.43 79.43 79.43
128 2.36 2.36 2.36 2.36 7.42 7.42 7.42 7.42 - - - -
32 1.19 1.19 1.19 1.19 3.12 3.1215 3.12 3.13 74 74 74 74
6 64 1.92 1.92 1.92 1.92 5.7 5.7 5.7 5.7 143 143 143 143
128 3.28 3.28 3.28 3.28 60.69 60.69 60.69 60.69 - - - -
32 1.52 1.52 1.52 1.52 3.96 3.96 3.96 3.96 81.37 81.37 81.37 81.37
8 64 2.36 2.36 2.36 2.36 7.4 7.4 7.4 7.4 - - - -
128 4.13 4.13 4.13 4.13 78.8 78.8 78.8 78.8 - - - -
32 1.74 1.74 1.74 1.74 4.86 4.86 4.86 4.86 101.98 101.98 101.98 101.98
10 64 2.88 2.88 2.88 2.88 50.99 50.99 50.99 50.99 - - - -
128 5.19 5.19 5.19 5.19 99.43 99.43 99.43 99.43 - - - -
M, k
64 128 256
4 8 12 16 | 4 8 12 16 | 4 8 12 16
-------
32
2 64
1
128
-------
32
4 64
0.5
128
-------
32
BF, B X
6 64
0
128
-------
32
8 64
128 -0.5
-------
32
10 64
128
-1
-------
hecho mostrando los tiempos más grandes (colores claros) a medida que aumenta M, k, BX , BF y
tiempos relativamente cortos (colores oscuros) en el caso contrario.
La implementación de vl nnconv sobre las GPU y CPU descritas al comienzo de esta sección
favorecen al tiempo consumido por la GPU. Este hecho es plausible y obedece a la naturaleza
lineal de la convolución que es aprovechada al máximo por implementaciones rápidas lineales en
paralelo. El lector interesado puede mirar la documentación de CUBLAS. Una de las consecuencias
de realizar la convolución en el dominio frecuencial es que la complejidad permanece inalterada a
variaciones de k (ver 2.4). Esto se hace evidente en el segundo mapa de colores y la segunda tabla.
De esta manera, aunque para tamaños de kernel k pequeños sea más rápido hacer la convolución
directa, la FFT nos da la posibilidad de utilizar kerneles más grandes sin sacrificar más tiempo. En
la mayorı́a de casos, resulta ser más conveniente utilizar fft conv que vl nnconv, puede observarse
los cuadros que están en azul en el segundo y tercer mapa. Sin embargo, este umbral depende
también de M, BX y BF . Esta dependencia se atenúa con la implementación de sfft, pues en
principio, las imágenes más grandes resultarán ser más dispersas y por lo tanto no será necesario
calcular Fn (X) sino Fk (Sk (X)).
3.4.1. DTD
La red que mejor dio resultados fue:
Capa Conv bnorm max Conv Bnorm max Conv ReLu SoftMax
64 8 1 3 4 1 3 5 1 1
Batch 2 2 2 16 16 16 16 47 1
Velocidad de vl nnconv:759 Hz
Velocidad de sfft conv:977 Hz
objective error
0.95 objective error
0.96
train traintop1err
3.76 train traintop1err
val traintop5err
0.9 val traintop5err
4 valtop1err 0.94
valtop1err
valtop5err
valtop5err
0.85 3.74
0.92
3.8
0.8
3.72 0.9
0.75
0.88
3.6
3.7
energy
energy
error
error
0.7
0.86
0.65 3.68
3.4 0.84
0.6 0.82
3.66
3 3.62
0.45 0.76
0 10 20 30 40 50 0 10 20 30 40 50 0 20 40 60 80 100 0 20 40 60 80 100
training epoch training epoch training epoch training epoch
Capa Conv bnorm max Conv Bnorm max Conv ReLu SoftMax
128 12 1 6 4 1 4 4 1 1
Batch 2 2 2 16 16 16 16 47 1
Velocidad de vl nnconv: 34 Hz
Velocidad de sfft conv: 95 Hz
energy
3.3 3.3
error
error
0.7 0.7
3.2 3.2
3
3
0.5 0.5
2.9
2.9
0.4 0.4
0 10 20 30 40 50 0 10 20 30 40 50 0 10 20 30 40 50 0 10 20 30 40 50
training epoch training epoch training epoch training epoch
3.4.2. KTH
La red que mejor dio resultados fue:
Velocidad de vl nnconv:500 Hz
Velocidad de sfft conv: 3 kHz
0.7 0.7
2.6 2.3
0.6 0.6
2.2
2.4
energy
energy
error
error
0.5 0.5
2.1
2.2
0.4 0.4
2
2
0.3 0.3
1.9
1.8
0.1 0.1
0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100
training epoch training epoch training epoch training epoch
Capa Conv bnorm max Conv Bnorm max Conv Bnorm max Conv ReLu SoftMax
128 16 1 3 4 1 3 4 1 3 2 1 1
Batch 2 2 2 2 2 2 2 2 2 15 15 1
Velocidad de vl nnconv:60 Hz
Velocidad de sfft conv:711 Hz
0.7
0.7 10 1
0.6
energy
energy
error
error
10 1 0.6
0.5
0.5 10 0
0.4
0.4
0.3
10 0 0.3 10 -1 0.2
0 20 40 60 80 100 0 20 40 60 80 100 0 50 100 150 200 0 50 100 150 200
training epoch training epoch training epoch training epoch
3.4.3. Kylberg
La red que mejor dio resultados fue:
Velocidad de vl nnconv:227 Hz
Velocidad de sfft conv:657 Hz
0.7
0.6
10 0
0 0.6
10
0.5
energy
energy
error
error
0.5
0.4
10 -1 0.4
0.3
0.3
0.2
10 -2 0.2
0.1 0.1
10 -3 0 0
0 50 100 150 0 50 100 150 0 20 40 60 80 100 120 0 20 40 60 80 100 120
training epoch training epoch training epoch training epoch
Capa Conv bnorm max Conv Bnorm max Conv Bnorm max Conv ReLu SoftMax
128 12 1 3 4 1 3 4 1 3 3 1 1
Batch 2 2 2 20 20 20 20 20 20 19 19 1
Velocidad de vl nnconv: 88 Hz
Velocidad de sfft conv: 462 Hz
objective error
objective error 0.9
0.9 2.6
2.4 train traintop1err
train traintop1err
val traintop5err
val traintop5err 2.2 0.8 valtop1err
0.8 valtop1err 2 valtop5err
valtop5err
1.8 0.7
0.7 1.6
1.4 0.6
0.6
1.2
0.5
energy
error
energy
error
0.5 1
0.4
0.4 0.8
0.3
10 0 0.3
0.6 0.2
0.2 0.1
0
0.1 0 20 40 60 80 100 0 20 40 60 80 100
0 20 40 60 80 100 0 20 40 60 80 100
training epoch training epoch
training epoch training epoch
Velocidad de vl nnconv:932 Hz
Velocidad de sfft conv:2.3 kHz
0.6 2.5
1.8
1.7 0.4
0.5
2
1.6
energy
energy
error
error
0.4 0.3
1.5
1.5
1.4 0.3
0.2
1.3
0.2
1.2 0.1
1
0.1
1.1
0 0
0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100
training epoch training epoch training epoch training epoch
Capa Conv bnorm max Conv Bnorm max Conv max Conv SoftMax
128 8 1 3 4 1 3 4 3 3 1
Batch 2 2 2 4 4 4 8 8 15 1
Velocidad de vl nnconv:168 Hz
Velocidad de sfft conv:697 Hz
1.8 1.8
0.5 0.5
1.6 1.6
0.4 0.4
energy
energy
error
error
1.4 1.4
0.3 0.3
1.2
1.2
0.2 0.2
0.1 0.1
1
1
0 0
0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100
training epoch training epoch training epoch training epoch
3.4.5. STL
La red que mejor dio resultados fue:
Velocidad de vl nnconv:170 Hz
Velocidad de sfft conv:787 Hz
1.8 1.8
0.6 0.6
energy
error
error
0.3 0.3
1.5 1.5
0.2 0.2
1.4
1.4
0.1 0.1
0 0
0 10 20 30 40 50 0 10 20 30 40 50 0 20 40 60 80 100 0 20 40 60 80 100
training epoch training epoch training epoch training epoch
El error cuadrático medio también fue similar para ambas formas de entrenar la red, pero el
mismo error, para el conjunto de validación, fue notoriamente mejor en el caso disperso. Esto nos
sugiere que la red en el caso disperso tiene un comportamiento más robusto en términos de con-
vergencia. Probablemente, esto es consecuencia de que, por una lado, entrenar por medio de la red
dispersa es equivalente a realizar un filtro sobre la imagen que elimina frecuencias pequeñas que
ayuda para la clasificación y, por otro lado, la capa dispersa no es completamente lineal (al no ser
la transformada completa) y por ende puede pensarse que hace el papel de capa lineal y capa no
lineal al mismo tiempo.
Las gráficas demuestran que el aprendizaje basado en redes convolucionales por medio una
transformada dispersa es posible y además tiene consecuencias favorables. Dado que el tiempo de
entrenamiento es mucho menor y el error de generalización, en muchos casos, es similar o menor al
error de generalización usual, entonces una posible utilidad de esta red es utilizarla para estimar
el error real de generalización al entrenar una red con la convolución directa, en un tiempo mucho
menor. Otra posible aplicación es reemplazar del todo la primera capa convolucional por la capa
dispersa y enfocarse en tratar de sintonizar esta red para obtener mejores resultados.
33
Capı́tulo 4
El conjunto de objetivos que se trazaron al comienzo, y que dieron nacimiento a este proyecto,
se cumplieron enteramente en forma satisfactoria. En este proyecto logramos entrenar una red
convolucional para clasificar imágenes en Matlab utilizando los procesadores principal y gráfico.
También logramos utilizar la transformada de Fourier para acelerar las etapas que involucran con-
voluciones en ciertos casos. Finalmente, conseguimos diseñar una versión de la transformada de
Fourier, basada en el algoritmo original por Katabi et al. [6], para calcular el espectro en imágenes
espectralmente dispersas más rápidamente que los algoritmos del estado del arte.
La clausura de este proyecto deja abierta varias preguntas interesantes que valen la pena con-
siderar y al mismo tiempo pueden constituir el inicio en proyectos nuevos. La reducción en tiempo
y memoria al utilizar transformadas dispersas hace que la complejidad por hacer convolución por
métodos espectrales recaiga sobre la capacidad de hacer la transformada inversa. La transformada
inversa debe aplicarse a un arreglo que proviene del producto entre el filtro y la imagen dis-
persa, y por consiguiente también es dispersa. Ası́, una posible alternativa de mejora serı́a pensar
en algoritmos más rápidos para calcular la transformada sobre señales que son dispersas en espacio.
La naturaleza del algoritmo disperso basada en calcular múltiples transformadas pequeñas su-
giere crear circuitos integrados especı́ficamente diseñados para operar sobre dicha transformada.
Otra alternativa de mejora es diseñar bloques optimizados de hardware que efectúen FFT, sub-
muestreo, y suma módulo, por ejemplo, en una ASIC o FPGA. Con esto, no solo mejorarı́amos el
rendimiento y utilización de recursos, sino que se disminuirı́a el costo del procesador y la energı́a
consumida por operación.
Dado que algoritmo propuesto para calcular el espectro sobre imágenes espectralmente exac-
tamente dispersas tuvo tan buen desempeño, otra propuesta de trabajo futuro es enfocarse en
métodos que generalicen dicho algoritmo para señales en dimensiones mayores. El algoritmo ac-
tual no es determinı́stico, pero la probabilidad con la que falla es exponencialmente pequeña si
se asume una señal uniforme sobre cada coordenada. Podrı́a pensarse en heurı́sticas más robustas
para garantizar probabilidad de error aún más pequeña. Por ejemplo, gracias el teorema Chino del
Residuo, se podrı́an utilizar más subtransformadas para mejorar la sesgo en la estimación de la
localización a expensas de lograr menos reducción en tiempo.
Apéndice A
Los teoremas enunciados en la sección sobre metodologı́a para la construcción de los algoritmos
se demuestran en este apéndice.
Teorema 2.1.1
Demostración. Sean X ∈ RN , F ∈ Rn . Defina X ∗ F =: Y ∈ RN −n+1 , como Yi = j Xi+j Fn−j .
P
i
PN
donde z = ωN . Visto de esta forma, es fácil darse cuenta que el coeficiente de z i en ( j=1 Xj z j )·
Pn k
P
( k=1 Fk z ) es j+k=i Xj Fk . Por ende,
! N +n
XN n
X X X
Xj z j Fk z k = Xj Fk z i ,
j=1 k=1 i=1 j+k=i
N
X +n
= Yi−n z i ,
i=1
N
X
= Yi z i−n = FN (Y )i−n .
i=1
Teorema 2.1.2
Demostración. Sean k, n, con ki |ni . Sean Fn , Sk , Σk , Fk como en las definiciones 2.1.1-2.1.4. Sea
Y = Sk (X), entonces Y (j) = X(j nk ). Por la definición,
k k
X X n
Fk (Y )i = Y (j)ωkij = X(j )ωkij ,
j=1 j=1
k
n/k n
X X X
Σk (Fn (X))i = Fn (X)l = X(j)ωnj(i+kl) ,
l≡k i l=1 j=1
n/k
n X
X
= X(j)ωnj(i+kl) ,
j=1 l=1
n n/k
X X
= X(j)ωnij ωnjkl .
j=1 l=1
36 Apéndice A. Demostración de los teoremas
Pn/k n/k
Ahora bien, l=1 ωnjkl = z + z 2 + · · · + z n/k = z z z−1−1 , donde z = ωnjk siempre que z 6= 1,
Pn/k Pn/k
es decir, cuando nk 6 |j. En tal caso z n/k − 1, por tanto l=1 ωnjkl = 0. Cuando nk |j, l=1 ωnjkl =
1 + · · · + 1 = nk . Entonces,
n/k
(
X
jkl 0, nk 6 |j,
ωn = n n
l=1 k, k |j.
Por tanto,
k k
X n nX n ij n nX n n
Σk (Fn (X))i = X(j)ωnij = X(j )ωn k = X(j )ωkij = Fk (S(X))i .
n k k j=1 k k j=1 k k
k |j
n
Σk (Fn (X))i = Fk (S(X))i .
k
El caso en varias dimensiones n, k es análogo.
Teorema 2.1.3
Demostración. Sean k, n, con ki |ni . Sean Fn , Sk , Σk , Fk , Pσ como en las definiciones 2.1.1-2.1.4,
siendo (σ, n) = 1. Sea G ∈ Cn . Para ver que el primer diagrama es conmutativo nótese que,
n n n
X X X −1
Fn (Pσ (X))i = Pσ (X)j ωnij = Xσj ωnij = Xj ωniσ j
= Pσ−1 (Fn (X))i .
j=1 j=1 j=1
Para ver que se cumple el hecho en el segundo diagrama, recordemos que para convolución
entre señales, X
(G ∗ X)i = Gj Xk .
j+k=i
Entonces,
!
n n
1 X 1 X
Fn−1 (G)i · Fn−1 (X)i = Gj ωn−ij Xk ωn−ik ,
n j=1 n
k=1
!
n n
1 X X
= 2 Gj z j Xk z k ,
n j=1 k=1
2n
1 X X
= 2 Gj Xk z i ,
n i=1
j+k=i
2n
1 X 1 −1
= (G ∗ X)i z i = F (G ∗ X)i .
n2 i=1
n n
k n/k
k X
X X
Fk (Σk (X))i = Σk (X)j ωkij = Xlk+j ωkij . (A.1)
j=1 j=1 l=1
i(j+lk)
Nótese que ωklk = 1, de manera que ωkij = ωk . Si reemplazamos esto en A.1,
n/k
k X n
i(lk+j)
X X
Fk (Σk (X))i = Xlk+j ωk = Xj ωkij ,
j=1 l=1 j=1
n
n
ij
X
= Xj ωn k
= Sk (Fn (X))i .
j=1
Apéndice A. Demostración de los teoremas 37
!
1 X t 1 X t
Fn−1 (G)i · Fn−1 (X)i = Q Gj ωn−ij Q Xk ωn−kj ,
n n
j∈I k∈I
2 X
1 X
= Q Gj zj X k zk ,
n
j∈I k∈I
2 X
1 X
= Q Gj Xk zi ,
n
i∈2I j+k=i
1
= Q Fn−1 (G ∗ X)i .
n
39
Bibliografı́a
[1] Christopher M Bishop. Neural networks for pattern recognition. Oxford university press.
[2] Bernhard Korte y col. Combinatorial optimization. Springer.
[3] Richard O Duda, Peter E Hart y David G Stork. Pattern classification. John Wiley & Sons.
[4] George Cybenko. ((Approximation by superpositions of a sigmoidal function)). En: Mathema-
tics of control, signals and systems 2.4 (1989), págs. 303-314.
[5] Gustaf Kylberg. The Kylberg Texture Dataset v. 1.0. External report (Blue series) 35. 2011.
url: http://www.cb.uu.se/~gustaf/texture/.
[6] Haitham Hassanieh y col. ((Simple and practical algorithm for sparse Fourier transform)).
En: Proceedings of the twenty-third annual ACM-SIAM symposium on Discrete Algorithms.
SIAM, págs. 1183-1194.
[7] Yann A LeCun y col. ((Efficient backprop)). En: Neural networks: Tricks of the trade. Springer,
págs. 9-48.
[8] Nicolas Vasilache y col. ((Fast convolutional nets with fbfft: A GPU performance evaluation)).
En: arXiv preprint arXiv:1412.7580 (2014).
[9] Michael Mathieu, Mikael Henaff y Yann LeCun. ((Fast training of convolutional networks
through FFTs)). En: arXiv preprint arXiv:1312.5851 (2013).
[10] Andrea Vedaldi y Karel Lenc. ((MatConvNet: Convolutional neural networks for matlab)).
En: Proceedings of the 23rd Annual ACM Conference on Multimedia Conference. ACM,
págs. 689-692.
[11] M. Cimpoi y col. Describing Textures in the Wild. 2014.
[12] Adam Coates, Andrew Y Ng y Honglak Lee. ((An analysis of single-layer networks in unsuper-
vised feature learning)). En: International conference on artificial intelligence and statistics.
2011, págs. 215-223.
[13] Mario Fritz y col. The kth-tips database. 2004.
[14] Diabetic Retinopathy Detection. 2015. url: https : / / www . kaggle . com / c / diabetic -
retinopathy-detection.
[15] CUDA NVIDIA. C Programming Guide, version 7.5. 2015.