Entradas

ALGEBRA LINEAR PERA TODOS [Parte 2]

Autor: Paolo Caressa     

Traductor: Paula Vidal

Puntos, vectores y su álgebra Hasta ahora hemos hablado de puntos como la totalidad de los puntos del plano que se identifican de una manera bidireccional con la totalidad de todos los pares posibles de números reales.En lo que respecta al aprendizaje automático, nos interesan los conjuntos de puntos finitos, ya que queremos representar objetos particulares para clasificar o fenómenos para relacionarlos como puntos en un espacio cartesiano. Para encontrar una regularidad o un “patrón” en estos puntos, a menudo nos interesa considerar líneas rectas, planos, así como figuras geométricas más complejas, como cónicas en el plano o cuadrículas en el espacio.Ya hemos visto, con un ejemplo, que algunas figuras geométricas se pueden representar individualmente o con sistemas de ecuaciones. Limitémonos al caso de las líneas rectas y de los planos para comprender en general cómo se representan, dado que a menudo estas representaciones se utilizan en el aprendizaje automático.   Una línea recta es intuitivamente un conjunto de puntos alineados: uno de los axiomas de Euclides establece que en dos puntos solo pasa una línea recta, es decir, que para determinar unívocamente una línea recta es suficiente para indicar dos puntos distintos. Para entender cómo se puede hacer esto en el plano cartesiano, consideremos dos puntos distintos P y Q de coordenadas P=(x1,y1) e Q=(x2,y2). Definimos el vector que va de P a Q como un par de números Cattura 6 Es decir, un vector es, por definición, una diferencia de puntos, donde el término diferencia significa la diferencia entre los componentes que tienen el mismo índice. Desde un punto de vista informático podemos pensar de esta manera: un punto es una matriz (o lista)que son números con dos elementos. Normalmente, una matriz A = [x, y] formadas desde 0, es decir, A [0] = x y A [1] = y. Luego, si A y B son matrices, el vector  \overline{AB}  se puede representar con la matriz [B [0] – A [0], B [1] – A [1]]. Queda por entender por qué llamamos “vector” a una diferencia de puntos: porque es un objeto dotado de dirección, verso e intensidad, como los vectores de la física. La dirección es simplemente la línea que pasa por P y Q; que va de P a Q (el vector opuesto sería \overline{PQ}  que va de Q a P: ¿cuáles son sus componentes?) La intensidad es la distancia entre los puntos P y Q. Por lo tanto, un vector determina una línea y en ella, una dirección: por supuesto, hay vectores infinitos que determinan la misma línea. Por ejemplo la recta que pasa por los puntos   P= (0,1)  y Q= (0,-2) entonces seria la recta \overline{PQ}= (-2,2) , pero también el vector (-1,1)  que tiene la misma dirección, pero tiene diferentes intensidades. En general, por cada numero  (-a,a) un no nulo representa esta línea. Decimos que dos vectores son paralelos si son un múltiplo del otro por un factor de escala distinto de cero. De hecho, otra forma de determinar una recta es identificar un punto P  y un vector \overline{v}  de modo que expresamos todos los puntos paralelos de la recta trasladados a los vectores paralelos de  \overline{v}  X= P+ \overline{av} Esto se denomina ecuación paramétrica de la recta, ya que expresa el punto genérico de la línea por medio de un parámetro que varía en todos los números reales. Tenga en cuenta que utilizamos la operación de suma entre un punto y un vector, definida de manera obvia: si P= (X,Y)  e  v= \overline{RS} entonces   P + \overline{RS} \left ( x+w-a,y+z -b\right ) , suponiendo  que las cordinadas de los puntos  R y  S sean  R=(a,b)  y S=(w,z) .  Osea sumamos las coordinadas  del punto y los componentes  del vector para obtener un nuevo punto. Cuando agregamos un vector a un punto, también decimos que aplicamos el vector en ese punto. Los vectores, además de permitir definir las líneas rectas y en dimensiones superiores, planos e hiperplanos, podemos observar que:

  1. Los vectores se pueden sumar y entre ellos obteniendo otros vectores:

\overline{PQ} + \overline{RS}= Q-P+S-R Entonces notamos que  \overline{PQ} + \overline{QP}=0  (el vector es 0) y  \overline{QP}   es el vector opuesto  \overline{PQ}. Además, esta operación de suma satisface las propiedades conmutativas y asociativas habituales. 2.  Los vectores se pueden multiplicar por un numero obteniendo otros vectores:  Además, esta operación del producto cumple con las propiedades conmutativas, asociativas y distributivas habituales. En particular el vector denominado nulo  \overline{0} se obtiene multiplicando por cero y  con un vector opuesto de un determinado vector  \overline{v}, es  decir aquel vector  \overline{w} tal que  \overline{v} + \overline{w}=0 , lo obtenemos   \overline{v}  multiplicamos  por -1.   El término espacio vectorial significa un conjunto de elementos con dos operaciones, de suma entre los elementos y de multiplicación de un elemento por un número, que satisface las mismas propiedades de las operaciones entre los vectores del plano.

vettore in un piano

Figura 3. El vector obtenido con la suma de dos vectores del plano se construye tomando la diagonal del paralelogramo identificado por los dos vectores si se aplica en el mismo punto.

En realidad, en el aprendizaje automático utilizamos invariablemente espacios vectoriales de dimensiones finitas cuyos vectores se expresan en coordenadas, en este caso los vectores son diferencias de puntos, como en el ejemplo que estamos discutiendo. De hecho, un elemento de confusión para los principiantes es que tanto los puntos como los vectores del espacio cartesiano se representan como pares de números.Queremos recordar que, incluso si están representados de la misma manera, son objetos conceptualmente distintos. Un punto identifica un solo punto en el espacio, un vector identifica un desplazamiento a lo largo de una dirección, hacia y cierta longitud donde es posible hacer que un punto corresponda con un vector y viceversa de la siguiente manera: al punto P podemos hacer que corresponda con el vector    \overline{OP}  este va desde el origen del plano cartesiano hasta el punto. P; si en cambio   \overline{v} ,  es un vector, podemos asociar el punto.  0+\overline{v} .   Esta distinción entre puntos y vectores a menudo se pasa por alto, pero mientras tanto es importante distinguir conceptos aparentemente idénticos, y luego porque ayuda a interpretar las aplicaciones de la teoría: por ejemplo, en la siguiente figura se representan, según un cierto algoritmo de aprendizaje automático, algunas palabras de un Cuerpo de documentos en inglés con los puntos del plano cartesiano:   italy   Como puedes ver los puntos representan palabras. ¿Qué representan los vectores en este caso? Tomemos el vector que va de “pizza” a “italia” y apliquemos a “sushi”: obtenemos indicativamente “japón”. Deducimos que ese vector representa la respuesta a una pregunta, que es “dado un plato típico, ¿cuál es su nación?”. En este caso, está claro que los puntos y vectores representan conceptos distintos. Longitud y ángulo entre vectores, similitud del coseno Para definir la longitud de un vector introducimos una notación ampliamente utilizada: el producto escalar (o dot-product). Sea  \overline{v} =(v_1,v_2) e  \overline{v} = (v_1,w_2) decimos que el productor escalar de   \overline{v}  y  \overline{w}   es el numero: ecuacion 1   Obtenemos la suma de los productos de los componentes del mismo índice de los dos vectores. En particular, el producto escalar de un vector por sí mismo es, por definición, el cuadrado de su longitud: ecuacion 2 La longitud de un vector también se llama norma: tenga en cuenta que la fórmula muestra claramente que la regla que hemos considerado es “euclidiana”, y la razón se debe al hecho de que si escribimos como diferencia de puntos, encontramos que nueva ecuacion 3 La longitud de un vector que hemos definido aquí es la que en física se llama su intensidad: además de la longitud, también podemos definir el ángulo entre dos vectores, implícitamente por medio de la fórmula: ecuacion 4 Usando la función coseno del arco es posible calcular este ángulo a partir del producto escalar de los dos vectores y sus longitudes: la razón por la cual esta fórmula define efectivamente el ángulo entre los vectores está relacionada con la trigonometría. Nostamos que   \theta  es un numero entre -1 y  1  tal que: imagen 3 Entonces, mientras la distancia compara la similitud entre dos puntos, que son tanto más similares cuanto más cerca está de cero, el coseno mide la similitud entre dos vectores, en el sentido de que cuanto más cerca está de 1 en valor absoluto y más los vectores determinan la misma recta. Esta medida se usa a menudo en el aprendizaje automático para clasificar objetos mapeados en espacios vectoriales. El espacio cartesiano en N dimensiones. En el tour del tal vez de la geometría cartesiana y vectorial que hemos seguido hasta ahora, nos hemos limitado al caso de la dimensión N = 2 para ayudarnos con los dibujos y desarrollar los conceptos en un entorno familiar: pero en las aplicaciones estamos tratando con espacios de dimensión. También muy alto. En este caso, debemos renunciar a la intuición, pero en realidad todas las fórmulas que hemos dado y todos los conceptos que hemos definido se transportan “en pie de igualdad” al caso de cualquier tamaño.De hecho, todas las fórmulas dependen de sumas y restas de las coordenadas de los puntos y los componentes de los vectores: si estos componentes son 2 o 20,000, no hay una diferencia real. Aún mejor, todo esto se implementa de manera muy eficiente en una computadora, donde podemos digerir puntos y vectores en espacios muy grandes sin problemas. Sin embargo, debemos explicar un concepto de hiperplano: en el caso del plan coincide con el concepto de línea y en el caso del espacio ordinario con el concepto de plano. Dada una dimensión N consideramos el espacio cartesiano R^n.   Una línea recta de este espacio está, como en el caso de la dimensión 2, determinada por un par de puntos o por un punto y por un vector: la ecuación paramétrica es la misma que en el caso bidimensional. Si N > 2 También podemos considerar ecuaciones paramétricas del tipo: ecuacion 5 En este caso tenemos dos parámetros que varían independientemente, por lo tanto, por intuición, el conjunto de puntos X que satisfacen esta ecuación en la variación de a y b en los números reales corresponde a los pares (a, b), es decir, al plano. En otras palabras, es un objeto bidimensional. En realidad pueden haber excepciones : por ejemplo    \overline{v}= \overline{w} la ecuación paramétrica anterior se reduce a ecuacion 6 Así que en realidad representa una recta. Entonces, si escribimos una ecuación paramétrica con múltiples parámetros, el tamaño del conjunto de puntos descrito por esta ecuación depende de las relaciones entre los vectores utilizados para escribirla: en el caso anterior, si los vectores son paralelos, la ecuación representa una línea recta y no un plano. Si en general, en un espacio de tamaño N, escribimos una ecuación paramétrica en los parámetros N – 1, tenemos: ecuacion 7 Si todos los vectores que aparecen en él son paralelos, ¡todavía tenemos una línea recta! Para asegurarnos de que tenemos un objeto de tamaño N-1, debemos encontrar un análogo de la condición de paralelismo entre dos vectores que se pueda expresar con más de dos. Digamos que n vectores: Cattura 1 son linealmente independientes si la única forma de satisfacer la ecuación ecuacion 8 Es que todos los coeficientes  a_1, a_2,a_n   son nulos! Es decir, la única solución a esta ecuación vectorial debe ser Cattura2 Ahora podemos definir un hiperplano de tamaño N – 1 en un espacio cartesiano de tamaño N como el conjunto de puntos definidos por la ecuación paramétrica ecuacion 9 Para variar en todas las formas posibles de los números: Cattura 3

y suponiendo que los portadores representados a continuación son linealmente independientes.

Cattura4 Un hiperplano también se puede describir mediante una ecuación cartesiana, es decir, mediante una relación lineal entre las coordenadas del punto genérico que le pertenece: ecuacion 10 donde b_i no todos son equivalentes a 0. Una forma de determinar esta ecuación es observar que la suma de los productos de los coeficientes y las coordenadas es el producto escalar entre el vector  \overline{b} = (b_1, b_2,..,b_n) y el vector \overline{x} = (x_1, x_2,..,x_n) de las coordenadas, para que podamos escribirlo. Cattura 5 Esto significa que el hiperplano está formado por vectores que son perpendiculares al vector que representa la dirección perpendicular al hiperplano, el que falta para llenar todo el espacio. Un hiperplano de tamaño N – 1 en un espacio de tamaño N separa el espacio en dos partes, exactamente como una línea recta separa el plano en dos y un plano separa el espacio tridimensional en dos: los puntos que pertenecen a una de las dos partes en las que el espacio está separado del hiperplano que tiene las coordenadas que satisfacen la desigualdad. ecuacion 13 Mientras que los puntos cuyas coordenadas satisfacen la desigualdad. ecuacion 14 Constituyen la otra parte del espacio delimitado por el hiperplano. Esta idea de usar un hiperplano para separar el espacio en dos partes es separable linealmente y se usa en algoritmos clásicos de aprendizaje automático, como árboles de decisión o máquinas de vectores de soporte. Las matrices y su álgebra. Una de las características del álgebra lineal es la facilidad y universalidad de sus métodos numéricos: en esencia, es suficiente haber implementado un algoritmo (o una variante de él), a saber, la eliminación de Gauss, para poder hacer básicamente cualquier cosa [una introducción a este algoritmo. Se encuentra por ejemplo en estas notas]. Estos algoritmos normalmente ya están implementados en todas las bibliotecas de cálculo numérico estándar, por ejemplo, numpy.linalg de Python. Para cerrar este tutorial (ahora demasiado largo) es apropiado introducir la noción clave que involucra a todos estos algoritmos, y que también es útil en todos los desarrollos conceptuales del álgebra lineal: el concepto de matriz. Una matriz es simplemente una tabla de números: o incluso definible como una matriz bidimensional. Por lo tanto, decimos que una matriz n × m es una tabla de números que denotamos mediante dos índices, iej, donde el primer índice identifica la fila y el segundo la columna: en la intersección de la fila i y la columna j encontramos el número identificado por estos índices (en matemáticas los índices comienzan en 1 y no en 0 como en informática) Cuando lo escribimos en su totalidad, una matriz se representa de la siguiente forma tabular: ecuacion15   Una matriz en la que n = m se llama matriz cuadrada. Desde un punto de vista práctico, una matriz parece simplemente un vector de longitud nm cuyos elementos están dispuestos en forma tabular en lugar de estar escritos en secuencia. Sin embargo, este cambio de notación es esencial para usar estos objetos. En particular, las matrices enriquecen el álgebra de los vectores con una operación de multiplicación propia: primero notamos que podemos sumarlos y multiplicarlos por un número, aún obteniendo matrices del mismo tipo Catturab6 Una matriz en la que n = m se llama matriz cuadrada. Desde un punto de vista práctico, una matriz parece simplemente un vector de longitud nm cuyos elementos están dispuestos en forma tabular en lugar de estar escritos en secuencia. Sin embargo, este cambio de notación es esencial para usar estos objetos. En particular, las matrices enriquecen el álgebra de los vectores con una operación de multiplicación propia: primero notamos que podemos sumarlos y multiplicarlos por un número, aún obteniendo matrices del mismo tipo Cattura66 Aparentemente no hay una diferencia sustancial, pero en realidad si interpretamos un vector como un tipo particular de matriz, el vector de fila es una matriz de 1 × 3 mientras que el vector de columna es una matriz de 3 × 1. Lo que se puede hacer es, de hecho, dada una matriz A del tipo n × my una matriz B del tipo n × r multiplicar A por B obteniendo una matriz n × r. El coeficiente de los índices i y j de la matriz AB se calcula como la siguiente suma: Cattura 12 Tenga en cuenta que este es el producto escalar del vector de fila dado por la i-ésima fila de A para el vector de columna dado por la j-ésima columna de B: esta es la razón por la cual el producto de las matrices de las llamadas filas de productos por columnas. Ejemplo: multiplicamos una matriz de 2 × 3 para una matriz de 2 × 3: image1 Ahora volvamos a nuestros vectores: podemos multiplicar el vector de fila por el vector de columna, y una matriz de 1 × 1 produce un número (el producto escalar). Pero también podemos multiplicar el vector de columna 3 × 1 por el vector de fila 1 × 3 obteniendo una matriz de 3 × 3: catura 12 Por lo tanto, observamos que al multiplicar dos vectores de un espacio de dimensión N obtenemos un vector de un espacio de otra dimensión: 1 o N × N. La matriz de identidad es la matriz cuadrada que contiene cero en todas partes excepto en la diagonal donde contiene 1 (los elementos diagonales de una matriz son aquellos cuyo índice de fila es igual al índice de columna :). Por ejemplo, en la dimensión 3 la matriz de identidad es   ecuacion 16   Como sugiere su nombre, multiplicar una matriz A por la matriz de identidad aún produce A. Además, el producto de la matriz es distributivo con respecto a la suma. Sin embargo, el álgebra matricial tiene una particularidad: el producto no es conmutativo, lo que significa que AB es diferente de BA (de hecho, BA podría no tener significado, por ejemplo, n ≠ m). Por ejemplo ultima ecuacion   Otra operación típica que se lleva a cabo es la multiplicación de una matriz n × m para un vector de columna de m componentes: resulta un vector de columna de n componentes.

Guía para arquitecturas de redes profundas

Autora: Joyce Xu

Tradutor: Paula Vidal

 

 

1

GoogLeNet, 2014

En los últimos años, gran parte del progreso realizado en el uso del aprendizaje profundo para la visión artificial se puede rastrear a un pequeño grupo de arquitecturas de redes neuronales. Dejando de lado las matemáticas, los códigos y los detalles de la implementación, en este artículo pretendemos analizar cómo funcionan estos modelos.

Por el momento, Keras domina con seis de estos modelos pre-entrenados que ya están incluidos en la biblioteca:

  • VGG16
  • VGG19
  • ResNet50
  • Inception v3
  • Xception
  • MobileNet

 

 

Las redes VGG, junto con la anterior AlexNet del 2012, siguen el esquema arquetípico de las redes convolucionales clásicas: una serie de convolucionces,max pooling, capas de activación y finalmente algunas capas de clasificación completamente conectadas. MobileNet es, esencialmente, una versión simplificada de la arquitectura Xception, optimizada para aplicaciones móviles. Sin embargo, los tres modelos restantes realmente han redefinido la forma en que actualmente observamos las redes neuronales. Este artículo se centrará en la intuición de las arquitecturas de ResNet, Inception y Xception, y en por qué se han convertido en el punto de referencia para los estudios posteriores de visión artificial.

ResNet

ResNet, nació de una simple observación: “¿por qué agregar más capas a las redes neuronales profundas no mejora la precisión, o incluso peor?”

Intuitivamente, las redes neuronales más profundas no deben funcionar peor que las superficiales, o al menos no durante el entrenamiento cuando no existe el riesgo de overfitting. Tomamos una red de ejemplo con n capas que alcanzan cierta precisión. Como mínimo, una red con n + 1 capas debería ser capaz de alcanzar el mismo grado de precisión copiando las primeras n capas y ejecutando un mapeo de identidad para la última capa. Del mismo modo, las redes de n + 2, n + 3 y n + 4 capas pueden, con el mismo método, obtener la misma precisión. Sin embargo, a medida que la profundidad de la red crece esto no siempre es cierto.

Los desarrolladores de ResNet han devuelto este problema a la hipótesis de que las asignaciones directas son difíciles de entrenar. Por lo tanto, propusieron un remedio: en lugar de tratar de aprender a partir de mapeos subyacentes de x y H (x), es posible aprender la diferencia entre los dos, que es el “residuo” y, posteriormente, ajustar el último a la entrada.

Supongamos que el residuo es F (x) = H (x) -x. Ahora nuestra red intenta aprender de F (x) + x.

Esto dio origen a los famosos bloques de ResNet (red residual):

2.jpg

ResNet block

 

ResNet block

Cada “bloque” ResNet consta de una serie de capas y un mapeo de identidad que agrega una entrada de bloque a la salida. Esta operación de “adición” se realiza elemento por elemento. Y si la entrada y la salida son de diferentes tamaños, se pueden utilizar técnicas de relleno cero o de proyección (a través de convoluciones de 1×1) para crear las dimensiones correspondientes.

Volviendo a nuestra red de ejemplo, este método puede simplificar enormemente la construcción de las capas de identidad de las que está compuesto. De hecho, es mucho más fácil aprender a presionar F (x) a 0 y dejar la salida como x. Por lo tanto, ResNet proporciona a las capas un punto de referencia x desde el cual aprender, en lugar de comenzar desde cero desde una transformación de identidad.

Esta idea es realmente efectiva en la práctica. Antes, en las redes neuronales profundas había un problema de cancelación del gradiente, cuyo descenso, dado por la minimización de la función de error, se reduce exponencialmente a través de la retropropagación de las capas anteriores. En esencia, el largo camino a través de las capas anteriores hizo que los signos de errores fueran tan pequeños que no permitieran que la red aprendiera. Sin embargo, gracias a la innovación introducida por ResNet, descrita anteriormente, ahora podemos construir redes de innumerables capas (potencialmente más de mil) que tienen un alto grado de precisión. Este fue un gran paso, considerando que el modelo más profundo creado hasta entonces fue de 22 capas (ganador de la competencia ILSVRC 2014).

Se han publicado muchos artículos posteriores sobre aprendizaje profundo, pero sin mayores mejoras. ResNet sigue siendo, fundamentalmente, el modelo que cambió nuestra comprensión de las redes neuronales y cómo aprenden

¡La red de 1000+ capas es de código abierto! Puedes encontrarlo aquí.

Inception

Si ResNet se concentra en la profundidad, Inception Family ™ se enfoca en la extensión. Entonces, los desarrolladores de Inception estaban interesados en la eficiencia computacional de entrenar redes más grandes. En otras palabras: ¿cómo podemos aumentar el ancho de las redes neuronales sin exceder la capacidad computacional de una computadora?

El trabajo original se refería a un componente conocido como el nombre de “Inception model”.  El corazón de este modelo contenía dos elementos innovadores.

  1. La primera intuición se refiere a las operaciones en las capas. En una CNN tradicional, cada capa extrae información de la capa anterior para transformar los datos de origen en un tipo diferente de información. La salida de una convolución de 5×5 extrae características diferentes de las de un 3×3 o un máximo de agrupación, y así sucesivamente. Para cada capa, ¿cómo podemos adivinar qué núcleo proporciona la información más relevante?

¿Por qué no dejar que el modelo elija?

Un módulo Inception elabora múltiples y diferentes transformaciones en los mismos datos de entrada, al mismo tiempo, vinculando los resultados en una sola salida. En otras palabras, cada  capa“Inception module”  consistira en una convolución de 5×5, una 3×3 y max-pool. La selección de las características más relevantes se deja a la siguiente capa.

3The increased

La mayor densidad de información de la arquitectura de este modelo tiene un problema relevante: el aumento drástico en la capacidad computacional requerida. No solo los filtros convolucionales más grandes (por ejemplo, 5×5) son exigentes y costosos de calcular, sino que la superposición de diferentes filtros aumenta el número de mapas de características para cada capa. Este es un verdadero impedimento para nuestro modelo.

Veámoslo de otra manera: para cada filtro que agreguemos, debemos realizar una convolución en todos los mapas de entrada para calcular una única salida. En la imagen a continuación vemos cómo la creación de un mapa de salida a partir de un solo filtro implica el cálculo en cada mapa de las capas anteriores.

4

Digamos que hay M mapas de entrada. Para cada filtro adicional, debemos hacer que se involocre a lo largo de todos los mapas de entrada M; de la misma manera, si tenemos más N filtros, deberíamos hacer que se convolucionen a lo largo de todos los mapas N * M. En otras palabras, “cualquier aumento uniforme en el número de [filtros] da como resultado un aumento al cuadrado en el cálculo”. Nuestro módulo Inception ha triplicado o cuadruplicado la cantidad de filtros. Desde un punto de vista computacional, es un problema real.

Esto lleva a la segunda intuición: use circunvoluciones 1×1 para una reducción en la dimensionalidad. Para resolver la dificultad computacional descrita anteriormente, los desarrolladores de Inception usaron convoluciones 1×1 para “filtrar” la profundidad de las salidas. Estas circunvoluciones tienen en cuenta un valor a la vez, pero a través de múltiples canales, y también pueden extraer información espacial y comprimirla en una dimensión más pequeña. Por ejemplo, con 2 x 1×1 filtros, una entrada de tamaño 64x64x100 (con 100 mapas de características) se puede comprimir a 64x64x20. Al reducir el número de mapas de entrada, los desarrolladores pudieron superponer las transformaciones de diferentes capas en paralelo, lo que generó redes que eran profundas (con numerosas capas) y amplias (con operaciones paralelas).

5

 

  1. a) modulo Inception,primera versión b) modulo Inception con reducción de dimensionalidad

la primera versión de Inception, llamada “GoogLeNet”, es la anteriormente mencionada que tiene 22 capas y que ganaron la competencia ILSVRC 2014. Inception v2 y v3, desarrolladas un año después, son mejores que la versión anterior por varios factores: el más relevante es el refactoring de circunvoluciones grandes en otras más pequeñas y consecutivas, que son más fáciles de aprender. Por ejemplo, en el Inception v3, la convolución 5×5 fue reemplazada por dos convulsiones consecutivas de 3×3.

El inicio se convirtió rápidamente en una referencia para la arquitectura de modelos posteriores. Su última versión, v4, también agrega conexiones residuales entre cada módulo, creando un híbrido entre Inception y ResNet. No obstante, el factor más importante es que este modelo demuestra la fortaleza de las arquitecturas red-red bien concebidas, que alcanzan un nuevo nivel en la legitimación del poder de las redes neuronales.

Vale la pena señalar que la investigación sobre las siguientes versiones v2 y v3 se publicó el día inmediatamente posterior a la fecha de renuncia en ResNet.

Xception

Xception, “extreme inception”, con diferencia de las arquitecturas anteriores, ha cambiado nuestra comprensión de las redes neuronales, particularmente las redes convolucionales.

La hipótesis fue: “las correlaciones espaciales y las que existen entre los canales son lo suficientemente libres para hacer que sea preferible no mapearlas juntas”.

Esto significa que en una CNN tradicional, los estados convolucionales identificaron correlaciones entre el espacio y la profundidad. En la siguiente imagen podemos revisar la operación.

4

El filtro considera simultáneamente una dimensión espacial (cada cuadrado de 2×2 colores) y un cross-channel o dimensión de “profundidad” (la pila de cuatro cuadrados). En la capa de entrada de una imagen, esto es el equivalente de un filtro convolucional que examina un grupo de píxeles de 2×2  que atraviesa los tres canales RGB. Entonces nos hacemos una pregunta: ¿qué razón tenemos para considerar la región de imagen y los canales simultáneamente?

6

Inception comienza a separar estos dos elementos: gracias a las convoluciones 1×1 proyecta la entrada original en múltiples espacios de entrada de menor tamaño, y de cada uno de estos utiliza diferentes filtros para transformar esos pequeños bloques de datos tridimensionales. Xception va aún más allá: en lugar de dividir los datos de entrada en múltiples grupos comprimidos, mapea  separadamente para realizar una convolución 1×1 en profundidad para capturar correlaciones cross-channel .

Esta operación se conoce como “depthwise separable convolution”  que consiste en una convolución espacial(depthwise convolution) realizada independientemente para cada canal, seguida de una convección 1×1 (pointwise convolution) entre los canales. Por lo tanto, es una búsqueda de correlaciones primero en un espacio bidimensional y luego en un espacio unidimensional. Esta asignación 2D + 1D es más fácil de aprender que una completamente 3D.

Xception supera el rendimiento de Inception v3 en los  dataset de ImageNet, y lo hace igualmente bien con los dataset para la clasificación de imágenes de 17,000 clases. Además, tiene la misma cantidad de parámetros del modelo Inception, lo que permite una eficienente. Aunque Xception es muy reciente, su arquitectura ya se ha convertido en parte de las aplicaciones de Google para visión móvil, a través de MobileNet.

Tenemos  que decir que el desarrollador de Xception, François Chollet, también es el autor de Keras.

 

 

 

Perspectivas y aplicaciones

 

El conocimiento de ResNet, Inception y Xception se ha vuelto más y más importante, tanto en investigación como en negocios. Una aplicación interesante es el aprendizaje por transferencia, una técnica de aprendizaje automático en la cual el conocimiento tomado de una fuente (por ejemplo, ResNet) se aplica a un dominio /o sector especifico que podria tener puntos de datos numéricamente mucho más pequeños. Esto generalmente incluye dos acciones: inicializar un modelo con pesos preinscritos por ResNet, Inception, etc., utilizándolo tanto para la extracción de características como para la optimización (fine-tuning) de las últimas capas en un nuevo dataset. A través del aprendizaje de transferencia, estos modelos pueden reutilizarse para cualquier operación relacionada con él, desde la detección de objetos para vehículos de conducción autónomos hasta la creación de etiquetas y subtítulos para grabaciones de video.

Puede encontrar una guía de Keras para a modelos de fine-tuning aquí.

 

Blockchain will make AI smarter by feeding it better data

AI in the UK:ready, willing and able?

Google TPU

Andrew Ng 175M

Long-Term Memory Neural Network 1 – Introducción

Autor: Daniele D’armiento

Traductor: Paula Vidal

Las habilidades cognitivas como el reconocimiento, la predicción, la elección de respuestas y las acciones implican la recuperación de información previamente almacenada.

El desafío para desarrollo de la inteligencia artificial es crear un modelo que pueda almacenar mucha información y que pueda rescatarse rápidamente.

Pero no es una novedad que las computadoras ya puedan almacenar grandes cantidades de datos (se estima que todos los datos almacenados hasta la fecha superan los ZettaByte, o 1021 bytes) incluso estos datos están indexados en un database de varios tipos, disponibles y recuperables con lenguajes potentes como SQL.

Además, el cerebro humano tiene una memoria que no estable como aquella del silicio, pero en esta “brecha” reside el potecial de procesar datos como intuitivamente sabemos, asi poder vencer la maldición de la llamada dimensionalidad.

zattabite

Ninguna investigación ha revelado completamente los secretos del cerebro humano, sin embargo no comprendiendo completamente el funcionamiento de nuestra inteligencia, el desarrollo de estos últimos años  a sido gracias al  Deep Learning (que tiene sus orígenes enraizados en la biología de las redes neuronales) nos permite acercarnos a este modelo de inteligencia, que aprende a reconocer señales codificadas en imágenes y sonidos, clasificarlas, construir representaciones internas para organizar estos pilares de datos, recuperar rápidamente la información que se almacena de forma distribuida en todos los nodos de la red (por lo tanto, en cada neurona, y no en direcciones de memoria precisas), todo en modo automático, sin instrucciones algorítmicas secuenciales.

foto 2

 

En los años previos al advenimiento del Deep Learning la velocidad del cálculo era muy limitada, y no hace falta decir que, si los procesos son lentos, lleva mucho tiempo procesarlos y memorizarlos. Es obvio pero no trivial, porque nadie había intentado experimentar con un modelo de red la cual habría requerido años para ser utilizada, pero la clave para descubrir este mundo ya existía. Dado que el modelo de aprendizaje que todavía se utiliza en la actualidad es Backpropagation, junto con Gradient Descent para lograr que no haya ningún error, se requirió muchos pasos de actualización de los pesos de la red, y muchos datos como ejemplos para el cual poder aprender. Todo esto hace que el proceso de aprendizaje sea muy difícil con los cálculos.

foto 3

Como resultado, los viejos modelos tenían que ser livianos, y no explotaban la enorme cantidad de datos necesarios, se limitaban a arquitecturas “shallow” es decir, no profundas o con menos parámetros de entrenamiento, uno o dos niveles de neuronas feed-forward. Pero para abstraer una representación válida de la realidad observada, es decir, memorizar datos en estructuras complejas capaces de preservar el mayor número de características observadas, y al mismo tiempo generalizar, es decir, reconocer esas características incluso en objetos nuevos nunca antes observados, se necesita un modelo más complejo.

Necesitas memorizar más datos, memorizar pero no “como máquina”, (dicen todos aquellos nacidos antes del advenimiento de la singularidad, (si alguna vez pasara … ¡cuando la realidad supera  toda ciencia ficción!), Eso no es como cuando aprendemos un poema de memoria, pero al contrario, es como cuando enciendes una lámpara y entiendes una estructura de cosas que unifica varias facetas de una sola entidad que anteriormente parecía no estar relacionada con ningún enlace.

foto 4

Cuando un modelo de aprendizaje profundo nos sorprende con su capacidad para reconocer objetos en imágenes, o para comprender las palabras que estamos pronunciando, o para responder de manera sensata a una pregunta escrita, significa que el modelo ha capturado la información necesaria para resolver ese problema en particular, a partir de los datos a los que se han enviado. No memorizó todos los datos en una base de datos clásica, pero los filtró, resumiendo un “concepto”, de una manera que se acerca a la manera en que pensamos nosotros los conceptos.

Esto es posible gracias a la estructura “deep” de los modelos actuales, que permite, de una manera que todavía no se entiende del todo, almacenar más información y conceptos en la red, en comparación con los modelos anteriores.

En cuanto a los modelos lingüísticos para las traducciones, la conversación y todas las aplicaciones NLP y NLU, ha habido un marcado aumento en el rendimiento gracias a Deep Learning.

foto 5

Estas actuaciones se pueden medir estadísticamente, pero también es intuitivo comprender cómo un cierto modelo puede realizar un chatbot decente o una buena traducción. Si lo hace, significa que la red neuronal tiene una memoria capaz de hacer que las conexiones semánticas sean más complejas que una simple tabla de referencia. Esto requiere una memoria a largo plazo, que pueda vincular palabras o frases o referencias semánticas que tengan sentido, y así generar una representación interna de un contexto, en lugar de crear estadísticas simples de palabras en n-gramas tales como sucedia años atras.

foto 6

En el siguiente análisis veremos un modelo muy interesante, las redes (DMN) Dynamic Memory Network, que están formadas en elementos compuestos de frases de entrada, preguntas y respuestas, cuyo potencial radica en la llamada memoria Episodica, capaz de realizar un procesamiento de múltiples pasos de las frases de entrada, a partir de las cuales elabora un contexto e intenta extraer la información solicitada.

 

Bibliografía

https://blogs.cisco.com/gov/internet-traffic-continues-to-explode-no-end-in-sight

https://thoughtsahead.com/2017/01/27/machine-learning-series-introduction-to-machine-learning-linear-regression-and-gradient-descent/

https://www.quora.com/What-is-the-difference-between-deep-and-shallow-neural-networks

https://research.googleblog.com/2017/05/using-machine-learning-to-explore.html

https://yerevann.github.io/2016/02/05/implementing-dynamic-memory-networks/

 

 

La GTX 745 y la instalación de tensorflow – gpu en Windows

Autora: Eleonora Bernasconi

 

Especificaciones de la tarjeta de gráficos NVIDIA GeForce GTX 745

Especificaciones: https://www.geforce.com/hardware/desktop-gpus/geforce-gtx-745-oem/specifications

Núcleos CUDA: 384

Base Clock (MHz): 1033

Velocidad de la memoria ( Gbps ): 1.8 Gbps

Cantidad de memoria: 4 GB

Interfaz de memoria: DDR3

Ancho de banda máx (GB/sec): 28.8

 

Figura 01 – nvidia-smi para el monitoreo de GPU

Abra el símbolo del sistema e ingrese:

cd C:\Program Files\NVIDIA Corporation\NVSMI

nvidia-smi

N.B. El porcentaje de uso de la GPU oscila entre 92% y 94%, en el Administrador de tareas de Windows permanece en 70%.

 

Instalación de Tensorflow con GPU para Windows 10

Requisitos

Python 3.5

Nvidia CUDA GPU. Verifique que la GPU sea compatible con CUDA.

Configurando la tarjeta GPU Nvidia

Instala Cuda Toolkit 8.0 e cuDNN v5.1.

Descarga e instalación de CUDA Toolkit

Toolkit 8.0 https://developer.nvidia.com/cuda-downloads

Ejemplo de directorio de instalación: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0

Descarga e instalación de cuDNN

Installa cuDNN versione 5.1 per Windows 10: https://developer.nvidia.com/cudnn

Extraiga los archivos cuDNN e ingréselos en el directorio Toolkit.

Variables de entorno

Después de instalar CUDA toolkit, asegúrese de que CUDA_HOME esté configurado en las variables de entorno; de lo contrario, agréguelo manualmente.

Figura 02 – Variables de entorno CUDA_HOME parte 01

 

Figura 03 – Variables de entorno CUDA_HOME parte 02

Instala Anaconda

Descarga : https://www.anaconda.com/download/

Cree un nuevo entorno con el nombre tensorflow-gpu y la versión 3.5.2 de python

conda create -n tensorflow-gpu python=3.5.2

N.B. En caso de que se encuentre con versiones incompatibles entre sí, simplemente active estos comandos para resolver el problema:

conda install -c conda-forge tensorflow-gpu

Anaconda instalará automáticamente las versiones requeridas de cuda, cudNN y otros paquetes.

Figura 04 – conda install -c conda-forge tensorflow-gpu

activate tensorflow-gpu

Figura 05 – activate tensorflow-gpu

 

Instala tensorFlow

pip install tensorflow-gpu

Figura 06 – pip install tensorflow-gpu

i Ahora ha terminado y tiene instalado con éxito tensorflow con la GPU !

i Recuerde activar el comando:activate tensorflow-gpu para entrar en modo GPU!

Prueba de GPU

python

import tensorflow as tf

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

 

Figura 07 – prueba de GPU

 

Prueba en CIFAR-10 con 10 épocas

Tiempo promedio por época:150 sec

Tiempo total: 25 min

Figura 08 – Prueba en CIFAR-10 con 10 épocas