ALGEBRA LINEAR PERA TODOS [Parte 2]

Autor: Paolo Caressa     

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.

ALGEBRA LINEAL PARA TODOS[Parte 1]

Autor: Paolo Caressa

 

Premisa

 Como en cualquier otro sector interdisciplinario en  el  aprendizaje automático y en el  aprendizaje profundo, necesariamente debemos utilizar nociones, conceptos y formalismos que provienen de diferentes fuentes y  en muchos casos, requieren que se comprendan diferentes tipos  de mentalidades. Por esta razón, es costumbre decir que el científico de datos debe ser un “mezcla” entre un científico de computación, un estadístico y un matemático, pero pocos se adentran en comprender  estas  tres materias y al mismo  las tres no resultaran igualmente fáciles, intuitivas y hermosas para una mente. En particular, las principales nociones matemáticas que son indispensables para un científico de datos, como para  también para aquellos que están interesados únicamente en comprender cómo funciona un sistema de aprendizaje automático para lograr administrarlo mejor, uno de la némesis es el álgebra lineal

Es sorprendente que para los matemáticos consideran que el álgebra lineal es una cosa muy fácil. Me atrevo a decirlo, citando la frase del matemático I.M. Herstein, ¡el álgebra lineal tiene solo tres características, es fácil, útil y hermoso! El propósito de este tutorial es explicar las nociones básicas de álgebra de una manera simple pero rigurosa, por lo que si ya sabe cómo calcular los vectores propios y los valores propios de una matriz o tal vez una descomposición en valores singulares (SVD) o un análisis de los componentes (PCA) si no sabe de lo que estoy hablando nos despedimos aquí. De lo contrario, ¡disfrute de su lectura!

El plano y el espacio cartesiano

Vamos atrás en el tiempo y recordémonos cuando íbamos a la  escuela secundaria: “geometría analítica (o cartesiana)” Inventado por Descartes y Fermat en el siglo XVII, la idea básica de la geometría cartesiana es proporcionar un modelo numérico para el plano y el espacio. En resumen, el descubrimiento consiste en identificar el conjunto de puntos del plano (es decir, mapeado de manera biunica para que no se pueda distinguir) con el conjunto de pares de numéricos (x, y) con x e  independientes. Primero, recordemos que los puntos de la línea se identifican con el conjunto de números reales (es decir, racional e irracional) ordenados por la relación habitual <. Fijamos un punto O en la línea recta y correspondiente a 0, fije un punto U (diferente de O) y haga que corresponda a 1; Todos los demás puntos están determinados por la posición relativa con respecto a estos:

 

recta

Por lo tanto, queda claro lo que significa la distancia entre dos puntos P y Q en la línea: si x e y son los números correspondientes, la distancia PQ es igual a | x – y | (valor absoluto de la diferencia):

 

Cattura 1 1

 

 

Así que basta que una resta línea se fijen los puntos  cero y uno, en un parte estarán  los números positivos (aquellos que están todos en un lado de O e incluyen U) y los números negativos (aquellos que están todos en un lado de O y no incluyen U).

Observemos este ejemplo:

La recta de geometría está completamente representada en el conjunto R de números reales un punto corresponde a uno y solo un número, donde cada número real que podemos imaginar como un número decimal que tiene un número finito de dígitos después de la coma, que tiene un número finito de dígitos después de la coma que se repiten indefinidamente, o que tiene un número infinito no dígitos periódicos después de la coma (estrictamente hablando, deben excluirse las secuencias que terminan con un 9 periódico).

Pasemos ahora al plano

Fijamos un punto O en el plano y toma una recta x que pase a través del punto y una segunda línea ortogonal a x, llamada y. Tanto como en  x e  y se elige la misma unidad de medida (es decir, un punto U distinto de O y se establece convencionalmente que la distancia OU es 1).De esta manera, es posible medir la distancia entre dos puntos que están en x con respecto a la unidad de medida establecida.La correspondencia entre un punto P del plano y un par (a, b) de números se produce de la siguiente manera:

  1. El punto P se proyecta en el eje x obteniendo un punto P’ y se pone a = a la distancia entre  P’ y  O.
  2. El punto P se proyecta en el eje y obteniendo un punto P ’’ y b = distancia entre P ’’ y O.

Entonces asociamos el punto  P con los puntos (a, b): para pasar de las coordenadas (a, b) a los puntos, será suficiente encontrar los puntos P ‘y P’ ‘en las líneas rectas x e y que están alejadas para a y b desde el origen O, trazamos los ejes perpendiculares para estos puntos y determinar P como su intersección.

Plano cartesiano

Figura 1. Tres puntos en un plano cartesiano, con sus coordinadas y con sus proyecciones en los ejes de la recta.Fuente: wikipedia

 

 

Entonces:

 

El plano de la geometría se identifica completamente con el conjunto R2 de los pares de números reales:  a un punto corresponde a uno y solo un par.

La notación R2 indica los pares ordenados de elementos de R. Si X es un conjunto, Xn es generalmente el conjunto de n-ple de elementos de X.

¿Cuál es la ventaja de considerar el plano como el conjunto de pares de números (a, b)?

  • En primer lugar, podemos decir qué es, un conjunto de parejas precisamente, no necesitamos axiomas ni nada más.
  • En segundo lugar, transformamos los problemas geométricos, que normalmente involucran construcciones complicadas y razonamientos muy largos, en cálculos.

La geometría cartesiana es, por lo tanto, la geometría ideal para hacer en la computadora: podemos reducir todo a números y cálculos. No es sorprendente que las bibliotecas 2D que se utilizan para dibujar en la pantalla de la computadora, o en una ventana de la aplicación, representen puntos como pares de números (las coordenadas) y un atributo que represente su color.

Por ejemplo: ¿cómo representas una curva en el plano cartesiano?

Hay dos maneras:

  • A través de una ecuación cartesiana, una relación única que enlaza las coordenadas de un punto genérico.
  • A través de una ecuación paramétrica, que muestra el punto genérico de la línea en función de un parámetro.

Por ejemplo, consideremos la ecuación x2 + y2 = 1 y la ecuación 2x + y = 0. La primera representa una circunferencia central del origen y el radio 1, la segunda es una línea recta que pasa por el origen.

Supongamos que queremos calcular las intersecciones: utilizando la geometría clásica deberíamos construir estas intersecciones de alguna manera, mientras que con la geometría cartesiana nos hacemos la siguiente pregunta: ¿cuáles son los puntos de coordenadas (x, y) sujetos simultáneamente a las relaciones x2 + y2 = 1 y 2x + y = 0?

La segunda ecuación es equivalente a  y = –2x, que se reemplazó en el primero y  es igual a x2 + (- 2x) 2 = 1, es decir x2 + 4×2 = 1 que es x2 = 1/5, que tiene dos soluciones x = 1 / √5 ex = –1 / √5, con el que encontramos las dos intersecciones requeridas: los puntos (1 / √5, –2 / √5) y (–1 / √5, 2 / √5). En este punto, identificamos el espacio cartesiano en tres dimensiones con el conjunto de triples (x, y, z) de números reales, es decir, con el conjunto R3. Por lo tanto, un punto en el espacio está determinado únicamente por sus tres coordenadas cartesianas, en las que podemos trabajar para resolver problemas geométricos, después de haberlos traducido en problemas algebraicos.

 

Distancia entre dos puntos

Hemos dicho que a lo largo de una recta, identificada con el conjunto de números reales, las distancias se calculan con el valor absoluto de la diferencia. ¿Cómo calculamos las distancias en un plano ? Lo interesante es que hay diferentes maneras de hacerlo, todas las cuales son generalizaciones de la distancia en la recta, mencionamos las tres principales, todas pertenecientes a la familia de distancias Minkonski:

  • la distancia euclidiana la distancia a manhattan
  • Distancia uniforme.

La distancia euclidiana entre dos puntos P = (x1, y1) y Q = (x2, y2) en el plano viene dada por la siguiente fórmula:

Cattura 2

Mientras tanto, vemos que si P y Q están en la misma línea, por ejemplo, el eje x, esta distancia se reduce al valor absoluto de la diferencia de coordenadas: de hecho, si suponemos que  P = (x1,0) e Q = (x2,0) ) La fórmula anterior nos ofrece (como es habitual cuando tomamos la raíz cuadrada de un número que consideramos positivo).

La distancia euclidiana en realidad se llamaría pitagórica, como se desprende del teorema de Pitágoras: supongamos que tenemos un triángulo rectángulo OPQ, con un vértice en el origen, un lado en el eje x   y el otro perpendicular al eje x.

cattura 3

(como es habitual cuando tomamos la raíz cuadrada de un número consideramos la positiva).

La distancia euclidiana en realidad se llamaría pitagórica, como se desprende del teorema de Pitágoras: supongamos que tenemos un triángulo rectángulo OPQ, con un vértice en el origen, un lado en el eje xy el otro perpendicular al eje x.

Así, las coordenadas de P serán del tipo (x, 0) y las de Q del tipo (x, y): la distancia entre O y P es x y la que entre Q y P es y, con lo cual, para el teorema de Pitágoras, d (O, Q) 2 = d (O, P) 2 + d (P, Q) 2 = x2 + y2. Así que en este caso, tomando la raíz cuadrada,

Cattura 4

y la fórmula se verifica. En el caso general, el razonamiento es análogo, pero también participan las coordenadas de O (que en nuestro caso llegar a ser cero). Así la distancia euclidiana se reduce a la distancia entre dos puntos en una línea recta y tiene un contenido geométrico obvio.

recta.opq

 

La distancia en el espacio se calcula de manera similar, teniendo en cuenta que los puntos tienen una coordenada adicional: si  P = (x1,y1,z1) e Q = (x2,y2,z2) Son puntos del espacio cartesiano, su distancia es:

Cattura 5 1

Para los más curiosos, en el resto de este párrafo explico otras dos formas de calcular la distancia en el plano, que dan lugar a diferentes valores de la distancia euclidiana pero que siguen siendo formas válidas de medir la distancia entre dos puntos.

Otra distancia que a veces se usa en el aprendizaje automático es la “distancia de Manhattan”, también conocida como “distancia de taxi”:

d_1\left ( P,Q \right )= \left \| X_1-X_2 \right \| + \left \| Y_1-Y_2 \right \|

Nuevamente, si P y Q están en el eje x, esta distancia coincide con el valor absoluto de la diferencia. La distancia del nombre de los taxis viene dada por el hecho de que la distancia entre P y Q no se mide con el teorema de Pitágoras, que busca un atajo diagonal entre P y Q, pero que comienza desde P y se mueve a lo largo del eje x hasta llegar arriba o debajo de Q, luego moviéndose a lo largo del eje y y alcanzando Q.

 

 

 

 

 

DITANZA EUCLIDEA TRIANGULO

Figura 2. Distancia euclidiana (verde) vs. distancia de taxi (rojo)

Es la maniobra que debe hacer un taxi para ir desde un punto en una cuadra hasta el punto opuesto: no puede pasar en la mitad de la cuadra, sino que debe ir por sus lados.

Otra distancia, que a veces se usa, es la “distancia uniforme”, que la escribimos en la siguiente formula \left \{ |x_1-x_2 | \right \}\left \{ |y_1-y_2 | \right \}

Es decir, esto se calcula tomando la longitud máxima del segmento obtenido al proyectar los dos puntos en los ejes x e y: nuevamente, es obvio que si los puntos se encuentran en el eje x, esto se reduce al valor absoluto de la diferencia entre dos puntos. Una notación de color: en el espacio, una “bola” se define como el conjunto de puntos que tienen una distancia menor que un número fijo, el radio, desde un punto fijo, el centro: es decir, si O es el centro y el radio, todos los puntos tales que d (P, O) <r constituyen la bola. Esta terminología es clara si usamos la distancia euclidiana.Pero, usando la distancia de los taxis, ¿qué figura geométrica sale considerando todos los puntos P de modo que d1 (P, O) <r? (pista: se dice que esta distancia tiene las bolas cuadradas …).

Aprendizaje profundo con Apache Spark — Parte 1

Autor: Favio Vázquez

Este artículo representa la primera parte de una discusión sobre Distributed Deep Learning con Apache Spark. Analizaremos principalmente qué es Spark y los conceptos básicos de Spark + DL. Puedes encontrar la segunda parte aquí: Deep Learning With Apache Spark — Part 2.

  Introducción de  Apache Spark

 

apache spark

 

Apache Spark TM

Spark sus creadores lo definen como una tecnología rápida y genérica para el procesamiento de datos a gran escala.

Rápido en comparación con los enfoques anteriores en la gestión de grandes volúmenes de datos, como el clásico MapReduce. El secreto de Spark radica en la memoria (RAM) que hace que el procesamiento sea más rápido que el realizado en el disco

Generica significa, que se puede usar para múltiples funciones tales como: ejecución de SQL distribuido, creación de canalizaciones de datos, asimilación de datos en bases de datos, ejecución de algoritmos de aprendizaje automático, trabajo con estructuras gráficas, etc.

 

 

RDD

 

 

 

image 1

Imagen sacada de PySpark-Pictures de Jeffey Thompson

El punto de partida de Apache Spark es el Resilient Distributed Dataset (RDD), un set de datos dividido en particiones.

Un RDD es un conjunto de elementos, con tolerancia a fallas (fault-tolerant) , que se pueden ejecutar en paralelo. Puede crearlos paralelizando una colección que ya tienen en su programa driver o haciendo referencia a un dataset en un sistema de memoria externo como HDFS, HBase o cualquier fuente de datos que ofrezca un formato de entrada Hadoop.

 

rdd

 

Una cosa para recordar acerca de Spark es que en todas las transformaciones los resultados no se contaran de inmediato, sino que se aplica una estructura de gráfico. Las transformaciones se calculan solo cuando se define el gráfico.

 

Por defecto, cada RDD se puede recalcular cada vez que se realiza una acción en él. Sin embargo, también puede mantener un RDD en la memoria utilizando el método de caché, y en este caso Spark mantendrá los elementos alrededor del clúster en la memoria para un acceso futuro más rápido. También ofrece soporte para almacenar RDD en un disco o replicarlos en múltiples nodos

 

Si desea obtener más información sobre las transformaciones y acciones de RDD en Spark, consulte en la documentación oficial:

RDD Programming Guide – Spark 2.3.0 Documentation
Spark 2.3.0 programming guide in Java, Scala and Pythonspark.apache.org

Dataframe

image 2

 

Imagen sacada de PySpark-Pictures de Jeffey Thompson

Comenzando con la versión Spark 2.0.0 DataFrame, el dataset está organizado en columnas con nombre. Conceptualmente es equivalente a una base de datos relacional o un data frame en R / Phyton, pero con sistemas de optimización más sofisticados.

En este artículo no profundizaremos sobre el dataset, pero digamos que lo podemos definir como una colección distribuida de datos que pueden derivarse del  JVM object y luego manipularse mediante transformaciones funcionales. También están disponibles en Scala y Java.

Los dataframe se pueden se puede obterner de una variedad de fuentes tales como: datos estructurados, tabla en Hive, bases de datos externas o RDD existentes.

image 3

 

https://aspgems.com/blog/big-data/migrando-de-pandas-spark-dataframes

En resumen, el dataframe API es el medio utilizado por los desarrolladores de Spark para facilitar el trabajo con datos en el framwork. Es muy similar a los de Pandas y R pero con muchas ventajas. En primer lugar es que pueden distribuirse alrededor de los clusters, para que puedan trabajar con muchos datos; en segundo lugar  es que están optimizados.

Este fue definitivamente el paso más importante, que hizo que el uso de Spark fuera mucho más rápido con Java o Scala.

 

 

image 4

 

 

La persona responsable de esta optimización es Catalyst. Este último toma set de queries y crea un plan optimizado y distribuido para el cálculo.

 

 

 

 

 

 

image 5

Deep Learning y Apache Spark

 

image 6

https://becominghuman.ai/building-an-image-classifier-using-deep-learning-in-python-totally-from-a-beginners-perspective-be8dbaf22dd8

Si quiere saber más sobre el aprendizaje profundo, lea primero los siguientes artículos:

 

A “weird” introduction to Deep Learning

My journey into Deep Learning

¿Por qué utilizar Deep Learning en Apache Spark?

  1. Apache Spark es un framework  para el cálculos distribuido en un clúster.
  2. Hay partes del aprendizaje profundo que son computacionalmente pesadas y la distribución de estos procesos es problemática; Apache Spark es una gran solución.

Hay varias maneras de utilizar el aprendizaje profundo con Apache Spark, los enumeramos a continuación:

  1. Elephas: Distributed DL con Keras e PySpark:

maxpumperla/elephas

  1. Yahoo! Inc.: TensorFlowOnSpark lleva los programas de Tensorflow a los clusters de Apache Spark:

yahoo/TensorFlowOnSpark

 

  1. CERNDistributed DL con un enfoque en distributed training usando Keras y Apache Spark:

cerndb/dist-keras

  1. Qubole el aprendizaje profundo ha demostrado producir modelos altamente efectivos de aprendizaje automático en diferentes áreas (tutoriales Keras + Spark):

Distributed Deep Learning with Keras on Apache Spark | Qubole

  1. Intel Corporation: BigDL (Distributed Deep Learning Library for Apache Spark)

intel-analytics/BigDL

Deep Learning Pipelines

 

 

 

 

image 7

 

 

Databricks

En lo que nos enfocaremos en estos dos artículos  Deep Learning Pipelines.

databricks/spark-deep-learning
spark-deep-learning – Deep Learning Pipelines for Apache Sparkgithub.com

Deep Learning Pipelines es una biblioteca de código abierto creada por Databricks que proporciona API de alto nivel para el aprendizaje profundo escalable en Phyton con Apache Spark.

No pasará mucho tiempo antes de que se convierta en una API oficial, así que vale la pena echarle un vistazo.

Algunas de las ventajas de esta biblioteca, en comparación con las enumeradas anteriormente, son:

  • Proporciona API listas para usar que permiten el uso de aprendizaje profundo con unas pocas líneas de código.
  • Se centra en la integración de fácil uso sin sacrificar el rendimiento.
  • Esta creado por los desarrolladores de Apache Spark, por lo que es más probable que surja como una API oficial.
  • Está escrita en Python, por lo que se integra con las librerias más importantes y utiliza la potencia del Tensorflow y Keras, son dos de los más utilizados en el el aprendizaje profundo.

En la siguiente parte nos enfocaremos completamente en la DL pipelines library  y cómo usarlas. Veremos en particular algunos temas tales como: transfer learning en una simple pipelibe, cómo usar modelos pre entrenados para trabajar con una cantidad “pequeña” de datos y hacer predicciones, etc.

 

Si desea obtener más información sobre Pipeline en Data Science con Python, eche un vistazo a estos artículos de Matthew Mayo:

Managing Machine Learning Workflows with Scikit-learn Pipelines Part 1: A Gentle Introduction

Managing Machine Learning Workflows with Scikit-learn Pipelines Part 2: Integrating Grid Search

Managing Machine Learning Workflows with Scikit-learn Pipelines Part 3: Multiple Models, Pipelines…

 

Para Pipeline en Spark, mire aquí:

 

ML Pipelines – Spark 2.3.0 Documentation

 

Mi viaje hacia el Deep Learning

Autor: Favio Vázquez

mi viaje 1

Un poco sobre mí y Deep Learning

Vengo de la física y la ingeniería en computación. Estudié en Venezuela, y luego hice una Maestría en Física en México. Pero me considero un Científico de Datos. ¿Interesante no? Así que, aunque tengo una amplia experiencia en matemáticas, cálculo y estadísticas, no fue fácil comenzar con el machine learning y el deep learning .

Estas asignaturas no son nuevas, pero la forma en que las estudiamos, cómo construimos el software y las soluciones que las usan, y también la forma en que las programamos o interactuamos con ellas, han cambiado dramáticamente.

Hice un artículo antes donde cubro parte de la teoría del deep learning y por qué es tan importante en este momento, pero algo que decir de nuevo es que los factores que hicieron que el deep learning fuera el “boom” del momento fue el desarrollo de varias simples pero importantes mejoras algorítmicas, los avances en hardware (principalmente GPU) y la generación y acumulación exponencial de datos en la última década.

 

mi viaje 2

¿Dónde comencé?

Cuando estudiaba Ingeniería en Computación, tuve una clase sobre Inteligencia Artificial (ese era el nombre del curso) alrededor del 2012. En ese momento, estaba realmente confundido con el tema. Quiero decir, sabía que era importante (en ese momento “por razones”), pero era extraño.

Estudié sistemas expertos, redes neuronales, algoritmos genéticos, y leí algunos artículos, dos que encontré realmente interesantes fueron:

Cuando leí esos artículos (no sabía sobre los avances en el machine learning, o incluso si existían), pensé que realmente estábamos muy lejos de alcanzar la Inteligencia Artificial “real”. Sigo pensando que no estamos tan cercanos como pensamos, y hay algunas cosas que tenemos que resolver, pero más sobre eso más adelante.

Entonces, porque para mí en ese momento (22 años) la IA era una esperanza perdida, comencé a estudiar computación cuántica, para mí era lo que venía antes de la IA, por supuesto que estaba equivocado:

 

mi viaje 3

Pero bueno, fue realmente interesante para mí porque mezcló mucha ciencia e ingeniería.

Mi interés en la IA

Entonces, volviendo a IA y todo eso, ¿qué pasó? ¿Por qué ahora soy tan apasionado de la IA, el machine learning, el deep learning cuando estaba seguro de que estábamos lejos de todo eso?

 

 

mi viaje 4

 

Lo que me sucedió fue Apache Spark y Andrew Ng . ¿Qué?

En 2014 (24 años), acababa de graduarme en Física, haciendo mi tesis sobre simulaciones de agujeros negro en Ingeniería, y luego, ¡boom! Descubrí Coursera, Machine Learning, Andrew Ng y Apache Spark.

 

Estaba tan asombrado con el aprendizaje serio en línea, algo que no probé antes (todavía no sé por qué), y comencé a hacer cursos sobre todo, desde genómica a astronomía, desde Scala a Python, desde el machine learning hasta las teorías filosóficas de Søren Kierkegaard (él es increíble por cierto).

No tenía un camino o un mentor, así que solo estaba explorando el mundo, tratando de descubrir qué quería hacer con mi vida .

Y luego, al mismo tiempo (finales de 2014), descubrí el curso de Andrew Ng sobre Machine Learning y el proyecto Apache Spark . Hice el curso en 2 semanas, no podía creer lo increíble que era este campo. Luego comencé a codificar lo que aprendí en Scala y Apache Spark, así que aprendí sobre computación distribuida, Hadoop, HDFS y todas esas cosas geniales.

Algunos de mis proyectos iniciales (no tan buenos) sobre machine learning y Spark pueden encontrarlos en mi GitHub. ¡Ve a mi primer repositorio!

Mi primer trabajo de Data Science

 

 

 

 

mi viaje 5

 

Conseguí mi primer trabajo como un trabajo de Data Science que finaliza en 2014, fui el único científico de datos en la empresa que intentaba averiguar qué puede hacer con los datos. Estaba muy confundido, ¡las cosas no estaban como en los cursos! Ya no estaba importando el conjunto de datos de Iris en R, estaba lidiando con datos extraños y no tenía idea de que los datos estaban “sucios” en la vida real.

Pero seguí aprendiendo todo el tiempo. De hecho, no estaba seguro (¡en absoluto!) De qué era la ciencia de datos en aquel entonces.

Construí algunos modelos simples, y los más complejos, principalmente en Scala y Python. Scala fue mi vida en 2015.

 

Las aventuras cosmológicas

mi viaje 6

Teoría de Roger Penrose de la Cosmología Cíclica Conformada

La ciencia de los datos fue mi segunda pasión después de la Física y la Cosmología (creo que ahora están en el mismo lugar), así que vine a México para hacer una Maestría en Física. Fue una experiencia increíble, pero aún faltaba algo. ¡Necesitaba codificar! ¡Me encantaba la programación!

Tomé cursos de Física fundamental, como Mecánica clásica, Mecánica cuántica, pero también Métodos numéricos, Computación de alto rendimiento y luego Razonamiento Bayesiano y Machine learning.

 

Así que al final mi maestría se dividió en mis dos pasiones. Y codifiqué mucho en mi tesis en Python, así que estaba muy feliz.

Convertirse en un científico de datos

Cuando terminé mi maestría (2017) decidí que lo que quería hacer era ayudar a la sociedad a ser un Científico de Datos. Sí, me tomó un tiempo.

Si deseas conocer mi viaje sobre cómo obtuve un trabajo increíble en el campo, echa un vistazo a esta publicación en el blog que hice hace tiempo: ¿Cómo conseguir un trabajo como Científico de Datos?

También comencé a compartir mi experiencia, pensamientos y conocimiento en mi LinkedIn , algo que era muy importante. Conocí gente increíble, eso me ayudó mucho, y ahora estoy ayudando a la gente, devolviendo :).

Todos los días estudio, código, contribuyo en proyectos de código abierto y también ayudo a la gente, así que estoy muy contento con lo que estoy haciendo.

¿Qué hay del deep learning?

 

mi viaje 7

 

¿No era esta una publicación sobre Deep Learning?

Sí, pero tenía que decirte por qué el deep learning es importante para mí ahora. Todos esos pasos que tomé me permitieron llegar a este punto.

Como Científico de Datos, así como en la mayoría de las carreras, necesitas estar al día con las teorías, tecnologías y frameworks; así que el año pasado vimos la explosión en Deep Learning, justo cuando me sentía cómodo con Machine Learning, algo completamente nuevo de aprender. Increíble pero estresante.

 

 

 

 

Entonces, ¿sabías dónde comencé? Adivina…

¡SÍ! ¡Con Andrew Ng de nuevo!

 

 

 

mi viaje 8

 

https://www.deeplearning.ai

Estoy realmente asombrado con él. Cuando estoy empezando en un campo, él ya lo está enseñando.

Pero bueno, todavía estoy haciendo estos cursos. Pero no me detuve allí. Necesitaba más información práctica también. Entonces comencé a aprender TensorFlow y luego Keras .

Para aquellos que no saben, Keras es una API de redes neuronales de alto nivel, escrita en Python y capaz de ejecutarse sobre TensorFlow , CNTKoTheano . Fue desarrollado por François Chollet con el objetivo de permitir la experimentación rápida. Poder pasar de la idea al resultado con la menor demora posible es la clave para hacer una buena investigación.

Existen excelentes recursos para el aprendizaje práctico de deep learning, como repositorios y libros en GitHub. En este momento estoy leyendo este libro, y ha sido una adición increíble a mi biblioteca:

 

https://www.manning.com/books/deep-learning-with-python

Como usar PySpark en el computador

Autor Favio Vázquez

 

spark 2

 

 

https://www.mytectra.com/apache-spark-and-scala-training.html

Supongamos que ya sabe de Apache Spark y PySpark, pero si desea ver una breve introducción la puede encontrar aquí.

El simbolo $ esta ejecutando el comando en el shell, por lo que no tienen que copiarlo.

 

Ejecutar PySpark in Jupyter

 

jupiter

 

  1. Instalar Jupyter Notebook

$ pip install jupyter

  1. Instalar PySpark

 

Comprueben si tienen Java 8 o versiones posteriores en su computadora. También necesitarás Python. (aconsejamos Python 3.5 de Anaconda).

Ahora vayan a la  pagina download di Spark. Seleccione la última versión, un paquete predeterminado para Hadoop, descárguelo.

Si quieren un apoyo Hive o si lo desea, tendrá que crear la distribución de spark usted mismo. Para hacerlo, vaya aquí.

Abra el archivo zip y muévalo a la carpeta directory / opt:

$ tar -xzf spark-2.3.0-bin-hadoop2.7.tgz
$ mv spark-2.3.0-bin-hadoop2.7 /opt/spark-2.3.0

Crea un enlace simbólico que te permita tener múltiples versiones de Spark:

$ ln -s /opt/spark-2.3.0 /opt/spark̀

Finalmente, insértalo en su  shell bash (o zsh ecc.) donde encuentre Spark de esta manera: configuren sus variables $PATH agregando las siguientes líneas en su archivo ~/.bashrc (o ~/.zshrc):

export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$PATH

Ahora, para realizar  PySpark in Jupyter, necesitan actualizar las variables de entorno a PySpark. agregando las siguientes líneas en su archivo ~/.bashrc (or ~/.zshrc):

export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS=’notebook’

Reiniciar la terminal y lanzar PySpark:

$ pyspark

Este comando debería reiniciar Jupiter Notebook en su browser. Luego crea un nuevo notebook haciendo click ‘New’ > ‘Notebooks Python [default]’. Entonces les aparecera SparkContext y SqlContext (o solo SparkSession per Spark > 2.x)  en su computadora y ahora puede comenzar  a usar PySpark del pc. aqui algunos ejemplos para probar el ambiente.

Ejecutar PySpark nell’IDE  elejido (Integrated Devolopment Environment)

A veces necesitarás un entero IDE para crear códigos más complejos y PySpark no es de dafult en sys.path. pero esto no significa que no puedas usarlo como una biblioteca normal: simplemente agrégalo a la sys.path en la fase de ejecución.  El paquete findspark posee esta función.

$ pip install findspark

Después, para reiniciar PySpark en su IDE, escriban:

import findspark
findspark.init()

 

 

import pyspark
sc = pyspark.SparkContext(appName=”myAppName”)

Esto es todo. A continuación se muestra un ejemplo para probar PySpark localmente:

import findspark
findspark.init(“/opt/spark”)
import random
from pyspark import SparkContext
sc = SparkContext(appName=”EstimatePi”)
def inside(p):
    x, y = random.random(), random.random()
    return x*x + y*y < 1
NUM_SAMPLES = 1000000
count = sc.parallelize(range(0, NUM_SAMPLES)) \
             .filter(inside).count()
print(“Pi is roughly %f” % (4.0 * count / NUM_SAMPLES))
sc.stop()

view rawsimple_spark.py hosted with ❤ by GitHub

Si tiene alguna duda o pregunta, ¡no dude en hacer comentarios y solicitar aclaraciones!

 

Jupyter Notebook Python, Scala, R, Spark, Mesos Stack

docker

 

 

Docker es similar a una “máquina virtual” liviana (Dockers proporciona “imágenes” y “cointainer” y no máquinas virtuales),  como si tuviéramos una segunda computadora con su propio sistema operativo dentro de nuestra máquina. Podemos acceder a esta máquina virtual desde nuestra computadora y usarla como si estuviéramos accediendo a una computadora remota a través de ssh.

jupyter/docker-stacks
docker-stacks – Opinionated stacks of ready-to-run Jupyter applications in Docker.github.com

hagan click en el link  y siga los pasos indicados para tener una versión “contenerizada”  de Spark (2.3 con Hadoop 2.7)

Uso básico

El comando que sigue starts a container with the Notebook server listening for HTTP connections on port 8888 con un token de autenticación generada aleatoriamente

$ docker run -it –rm -p 8888:8888 jupyter/pyspark-notebook

 

Instalación de Pip

pip

 

Este paquete aún es experimental y puede cambiar en versiones futuras.

El paquete Python para Spark no pretende reemplazar todos los demás casos de uso. Esta versión     Python packaged de Spark es adecuado para interactuar con un clúster existente, que puede ser Spark, YARN o Mesos, pero no contiene las herramientas necesarias para configurar nuovos cluster.

Para instalarlo, ejecuta:$ pip install pyspark

Introducción a los métodos de reducción de dimensionalidad y elementos de álgebra lineal (Parte 2)

Autor: Matteo Alberti

 

Sumario

Métodos lineales para la reducción:: 2

Identificación a través de la individualización de los subespacios. 2

Aproximaciones de las matrices usando el método de reducción. 10

Casos de aplicación básicos: Descomposición en valores singulares (SVD). 11

Reglas de matrices. 11

Reglas de vectores. 13

Reglas de inducción. 13

Reglas de Schatten. 13

Reglas de Frobenius. 13

Casos de aplicación básicos: análisis de Cluster. 16

Definición de una métrica. 16

Distancias Minkowski (Manhattan, Euclidea, Lagrange). 16

 

 

El objetivo de este primer tutorial es introducir las nociones básicas de reducción de la dimensionalidad desde el punto de vista matemático (espacios, subespacios, mapas lineales) y recuperar los elementos necesarios de álgebra lineal (normas, isometría, isomorfismo …) para cada uno de los algoritmos de aprendizaje automático.

 

 

Reglas de matrices

En este punto, hemos establecido el problema de reducir la dimensionalidad de los datos como un problema de aproximación entre matrices, ahora debemos evaluar y luego calcular la distancia entre la matriz de los datos originales y los aproximados a través del estudio de las diferentes normas:

Hay tres tipos principales de reglas:

  • Reglas de vectores
  • Reglas inducidas
  • Reglas Schatten

 

Cuando en el campo del análisis de datos nos referimos esencialmente, en algunas excepciones, a la norma Frobenius (distancia euclidiana)

 

Elemento de algebra:

Norma

Un norma(comúnmente viene marcada con ‖ ‖) es una función del espacio vectorial de matriz si:

 

ecuation 18

 

 

 

Reglas vectoriales

La familia de reglas vectoriales trata la matriz   X_n_x_k  como un vector   de  componentes donde podemos definir la norma usando cualquiera de las siguientes reglas:

pic 10

 

Nota:

Configurando p = 2 estamos conectados a la norma euclidiana

 

 

Reglas de inducción

 

pic 11

 

Regla de Schatten

 

La norma Schatten, de orden p, de una matriz X simplemente está dada por:

ecuation 21

 

Donde w_i   tiene valores singulares

 

 

Regla de Frobenius  

La norma Frobenius de nuestra matriz   X_n_x_k  inicial está dada por:

ecuation 22

 

Vamos a calcular, explicando el producto de matriz que obtenemos:

 

ecuation 23

 

Corresponde que la norma de Frobenius es igual a la raíz cuadrada de la suma al cuadrado de los elementos osea es una norma euclidiana vista como un vector que concuerda con la regla de vector de X de orden 2.

 

Elementos de algebra:

pista:

El operador de seguimiento, indicado por Tr (∙), se define como la suma de los elementos diagonales de la matriz de argumentos

 

 

 

Casos de aplicación básicos: análisis de Cluster

 

El análisis de Cluster es una técnica de análisis multivariado mediante la cual es posible agrupar unidades estadísticas, a fin de minimizar la “distancia lógica” interna de cada grupo y maximizar la que existe entre los grupos.

Es una de las técnicas de aprendizaje no supervisadas.

Por lo tanto, es espontáneo tener que definir qué se entiende por distancia lógica y en función de qué métrica.

 

Definición de métrica

pic 13

 

Si, por el contrario, presenta las tres primeras propiedades, podemos definirlo como un índice de distancia

 

Distancias Minkowski (Manhattan, Euclidea, Lagrange)

En este punto vamos a analizar los principales casos de distancias pertenecientes a la familia de distancias Minkowski donde:

ecuation 25

 

 

Destacamos los siguientes casos:

  • k=1 Distancia de Manhattan
  •  k=2 Distancia euclidiana
  • k\mapsto \propto  Distancia Lagrangiana (Čebyšëv)

 

Como por ejemplo:

ecuation 26

 

Por lo tanto, comenzando con el ejemplo de Cluster Analysis, es esencial definir el tipo de distancia con la que queremos trbajar en nuestro análisis.

Principalmente en los paquetes ya implementados se encuentran las tres variantes de las distancias de Minkowski (para variables cuantitativas)

Importar desde sklearn:

AgglomerativeClustering(n_clusters=2, affinity=’euclidean’, memory=None, connectivity=None, compute_full_tree=’auto’, linkage=’ward’

 

 

ecuation 27

Introducción a los métodos de reducción de dimensionalidad y elementos de álgebra lineal ( Parte 1)

Autor: Matteo Alberti

 

Sumario

Métodos lineales para la reducción:: 2

Identificación a través de la individualización de los subespacios. 2

Aproximaciones de las matrices usando el método de reducción. 10

Casos de aplicación básicos: Descomposición en valores singulares (SVD). 11

Reglas de matrices. 11

Reglas de vectores. 13

Reglas de inducción. 13

Reglas de Schatten. 13

Reglas de Frobenius. 13

Casos de aplicación básicos: análisis de Cluster. 16

Definición de una métrica. 16

Distancias Minkowski (Manhattan, Euclidea, Lagrange). 16

 

 

El objetivo de este primer tutorial es introducir las nociones básicas de reducción de la dimensionalidad desde el punto de vista matemático (espacios, subespacios, mapas lineales) y recuperar los elementos necesarios de álgebra lineal (normas, isometría, isomorfismo …) para cada uno de los algoritmos de aprendizaje automático.

 

 

Métodos lineales para la reducción:

Por lo tanto, vamos a presentar con términos generales la lógica de los procesos de reducción lineal e dimensionalidad yendo en la primera fase para identificar subespacios “óptimos”.

 

 

pic 1

ecuation 1

 

Elementos de algebra:

Espacio vectorial

Definimos un espacio vectorial en R en un conjunto V, cuyos elementos se denominan vectores y presentan las siguientes propiedades vector.

                                                                                 

xiste en V una operación definida suma vectorial que se asocia en x,y \in V vector x+y \in V

  • La suma del vector es conmutativa, asociativa
  • Hay un vector en V, indicado con 0 y definido como origen
  • Cada vector X \in V   tiene su simbolo opuesto, indicado con –x t.c. x+(-x)= 0

Existe en V una operación definida multiplicación para los escalares que asocian en  con cada  X \in V  y a cada   I a \in V el vector   ax \in V en tal modo que:

  • La multiplicación entre escalares es asociativa
  • 1x = X, \forall X \in V

También vale para:

  • La multiplicación escalar es distributiva con respecto a la adición de vectores

Subespacio de vectores

S es un conjunto no vacío del subespacio de V si para cada  X-X=O \in      y cada uno de su combinación lineal    ax+\beta y =\in S

 

 

Nucleo e imagen

Sean V y W dos espacios vectoriales y que sean   L: V W una aplicación lineal

El núcleo de L es el conjunto de vectores de V cuya imagen es el vector nulo de W.

Este conjunto está indicado con ker L

pic 2

 

 La imagen de L es el conjunto de los vectores de W que son imágenes de algún vector que pertenece al dominio V, es decir:

 

pic 3

 

Mapa lineal

Un mapa lineal (o aplicación) f: V -> W entre espacios vectoriales reales es una función para la cual las propiedades son válidas:

ecuation4

por cada

pic 4

 

 

 

Vamos a definir solo los casos de relevancia principal:

Sean f: V -> W un mapa lineal. Entonces f es:

  • un monomorfismo si es inyectivo
  • un epimorfismo si es sobreyectiva
  • un isomorfismo si es biyectivo (inyectivo + sobreyectiva)
  • un endomorfismo si V = W
  • un automorfismo si V = W y es biyectiva.
  • de rango r si r = dim f(V).

 

Supongamos a este punto que hemos identificado un subespacio ( que especificaremos más adelante) V_p   que resulte suficientemente “aproximado” y que sea  V_1,..V_P  una base de V_P  (Nota: la base esta formata por vectores k-dimensionales porque    V_P es el subespacio de   R^k)

El mapa lineal \varphi\left ( . \right )  asociamos la entrada x_i  al elemento \varphi\left ( x_i \right ) de V_p , obtenemos la seguiente formula:

 

ecuation 5

a_i_j elejidos apropidamente

 

pic 5

 

 

A través de nuestro mapa, los vectores k-dimensionales de entrada se representan en vectores p-dimensionales que son elementos de  R^p .

 

En este punto podemos proceder a un análisis adicional de R^p

 

Así que investiguemos cómo esta reducción en la dimensionalidad sirve para mantener y perder como por ejemplo veamos el siguiente caso:

 

  • R^k \mapsto V_P
  • De V_p \mapsto R^P

 

 

R^k\mapsto V_p

 

 

 

Naturalmente pasar de k a p dimensiones con p <k implica una pérdida de información y una deformación de la geometría original del dato. De particular relevancia es que cualquier mapa lineal no puede ser un isomorfismo o una isometría.

 

Ciò comporta che tutte le norme, prodotti scalari e distanze non vengono preservate

Esto significa que todas las reglas, productos escalares y distancias no se conservan

Ejemplo:

pic 6

 

 

Elementos de algebra:

                               

Complemento octogonal:

Sea   S\subseteq V un subespacio de V, representamos un complemento ortogonale de D en V indicandolo con  S^\bot  el subconjunto de V los expresamos en la siguiente formula:

pic 7

 

 

Osea es un subconjunto de todos los vectores de V ortogonal a todos los vectores de S

 

 

 

 

 

V_P\mapsto R^P

 

 

El mapa lineal  \varphi (.) es un isomorfismo de los espacios vectoriales  V_p y R^p   , esto significa que no habrá pérdida de información.

 

 

pic 8

 

 

 

Elementos de algebra:

 

ortonormal:      

Una base se define como ortonormal cuando se compone de vectores uniformemente unitarios y ortogonales

 

 

 

Aproximaciones de las matrices usando el método de reducción

Queremos ofrecer una segunda visión sobre la reducción a la dimensionalidad basada en la aproximación matricial (esto es lo que se utilizará en la práctica en todos los lenguajes de programación)

Data:

 

pic 9

 

 

Entonces podemos escribirlo como:

 

ecuation 17

 

Las columnas de θ están dadas por las combinaciones lineales de las filas de B que provienen de nuestra base, con los coeficientes dados por las filas de A, las coordenadas de la base elegida.

Por lo tanto, nuestro problema de reducir la dimensionalidad corresponde a identificar un subespacio vectorial de dimensión p (p <k)  denuestra base elegida (B) y de las coordenadas relativas dadas por la matriz A.

 

En el análisis de los datos, donde nuestro punto de partida es la matriz de datos, las diferentes técnicas de reducción  se difirencian según el tipo de aproximación, descomposición y elección entre las muchas bases posibles.

 

 

Casos de aplicación básicos: Descomposición en valores singulares (SVD)

Implementemos en Python una simple descomposición en valores singulares (SVD), es decir, dividamos nuestra matriz de inicio X en las dos matrices A y B vistas anteriormente:

 

import numpy as np

X = np.array([3,2,4],[3,6,7],[2,1,4])

autoval, autovett = np.linalg.eig(X)

 

 

 

 

 

 

 

 

¿Cómo encontrar un trabajo como data scientist?

Autor: Favio Vázquez

Tradutor: Paula Vidal

 

 

1 1

Este artículo es el resultado de 3 publicaciones que publiqué recientemente en LinkedIn. Puedes encontrarlos aquí: parte 1parte 2, y parte 3.

Esta es una pregunta que a menudo recibo de personas que conozco y de aquellos que forman parte de mi red en LinkedIn.

Te contaré sobre mi experiencia. He trabajado como Data Scientist desde hace un tiempo, pero te contaré cómo obtuve mi trabajo actual en BBVA Data & Analytics

El año pasado terminé mi maestría en física, especializándome en cosmología bayesiana y aprendizaje automático. Justo antes de graduarme, me detuve para reflexionar sobre lo que quería hacer y me di cuenta de que me atraía el area de data science.

Envié alrededor de 125  solocitudes, recibiendo solo treinta respuestas, de las cuales muchas fueron amables “no, gracias”. No estaba preparado para recivir todas estas cantidades de respuesta negativas. Así que participé en 15 entrevistas y tomé valiosas lecciones de cada una de ellas; Estudié mucho, programé todos los días, leí innumerables artículos y publicaciones, cada uno de los cuales me ayudó a mejorar.

Entonces llegamos a la gran  pregunta, ¿cómo conseguí este trabajo?

 

2.jpg 1

Con mucha paciencia No fue fácil, pero en la séptima entrevista finalmente me di cuenta de que:

  • Mucha gente no tenía idea de qué se trataba el data science.
  • El recluter es tu mejor amigo durante el tiempo de la entrevista, lo que él quiere es ayudarte a sentirte cómodo. Así que créeme, déjanos ayudarte y no temas hacer preguntas.
  • Las personas están mucho más interesadas en cómo puede resolver un problema y cómo se relaciona con diferentes situaciones, en lugar de su conocimiento técnico.

En ese momento estaba muy preparado para responder cualquier pregunta sobre algoritmos, aprendizaje automático,  Python, Spark, pero no a otros que probaron mis habilidades para resolver problemas.

En la octava entrevista, conte todo lo que había hecho como Data Scientist, como ingeniero de información, como físico, pero también como persona. Ahora podía responder cualquier pregunta que me hiciera: cómo manejar situaciones difíciles o nuevos datos e información, cómo explicar conceptos complejos a los gerentes, etc.

Esto me permitió mejorar considerablemente y hablar con calma y serenidad. Ya sabía que la gente de recursos humanis querían ayudarme a ingresar a la empresa.

 

 

Así que aquí hay algunos consejos personales sobre cómo obtener un puesto como Data Scientist:

  • Mantén la calma. Probablemente enfrentará cien distintas entrevistas de trabajo antes de conseguir un trabajo.
  • Prepárese, no solo estudiando conceptos y teoría, y recuerde que será una pieza importante de la compañía en la que se unirá y en la que tendrá que tratar con múltiples personas y situaciones. Prepárese para responder preguntas sobre su comportamiento en posibles escenarios de trabajo.

 

  • Cree una cartera con algunos de sus proyectos y datos reales, que puede publicar convenientemente en GitHub. Además de las competiciones de Kaggle, encuentre algo que le interese, un problema para resolver y aplicar todo su conocimiento.
  • El entrevistador es tu amigo, tiene las mejores intenciones y puede darte consejos valiosos.

 

  • No tema hacer preguntas a otras personas, preguntar qué hacen y cómo llegaron allí. Personalmente, le recomiendo que lea el mensaje por Matthew Mayo Así que aquí hay algunos consejos personales sobre cómo conseguir una posición de Data Scientist
  • No tema hacer preguntas a otras personas, preguntar qué hacen y cómo llegaron allí. Personalmente, sugiero que lea la publicación de Matthew Mayo “A day in the life of a Data Scientist” para tener una mejor idea del trabajo que va a hacer.

 

  • Si está buscando una pasantía, resalte sus experiencias académicas, para tener una mejor idea del trabajo que vas a hacer.

Les deseo el mayor de los éxitos

 

Siganme en : https://www.linkedin.com/in/faviovazquez/.

Uso del aprendizaje profundo para el reconocimiento de objetos

Autor: Joyce Xu

Traductor: Paula Vidal

 

1

1

Con la aparición de los vehículos autónomos, sistemas inteligentes de videovigilancia y diversas aplicaciones, como el conteo de personas, la demanda de sistemas de reconocimiento facial está creciendo. Estos sistemas se refieren no solo al reconocimiento y la clasificación de los objetos en las imágenes, sino también a la ubicación de cada uno de ellos, trazando a su alrededor un cuadro delimitador apropiado. Esto hizo que el sistema de reconocimiento de objetos fuera una tarea cada vez más compleja en comparación con su predecesora en el campo de la visión artificial: clasificación de imágenes.

Afortunadamente, los enfoques más apropiados para el reconocimiento de objetos son, actualmente, extensiones modelo para la clasificación de imágenes. Hace unos meses, Google lanzó una nueva API de reconocimiento de objetos (interfaz de programación de aplicaciones) en Tensorflow. En este lanzamiento, encontramos modelos pre-entrenados con pesos relativos:

En el articulo anterior, hablamos sobre las tres arquitecturas de redes neuronales mencionadas anteriormente (MobileNets, Inception y ResNet), pero hoy veremos los modelos de reconocimiento de objetos para Tensorflow: Faster R-CNN, R-FCN y SSD. A través de este artículo, entenderemos cómo se aplica el aprendizaje profundo a estos modelos para el reconocimiento de objetos, cómo son diferentes unos de otros y qué puntos son comunes.

Faster R-CNN

El R-CNN más rápido es ahora un modelo de referencia para la detección de objetos basado en el aprendizaje profundo, que ha inspirado muchos modelos posteriores de detección y segmentación, incluidos los dos que examinaremos. Desafortunadamente, no podemos entender completamente el R-CNN más rápido sin analizar R-CNN y Fast R-CNN, sus predecesores.

R-CNN

Podemos decir que el R-CNN, Region-based Convolutional Neural Network, es la red que dio vida los juegos. Consiste en tres fases:

  1. Escaneando la imagen de entrada para detectar objetos posibles, usando un algoritmo llamado Selective Search, que extrae aproximadamente 2000 regiones de esta imagen (Region Proposal).
  2. Implementación de la red neuronal convolucional (CNN) en la parte superior de cada región.
  3. Extrapolación de la salida de cada CNN para ingresarla en:
    1. una SVM (Support Vector Machine) para clasificar la región
    2. Realice una regresión lineal para restringir el cuadro delimitador del objeto, si existe.

Las fases estan ilustradas (de abajo hacia arriba) en la figura siguiente:

 

2

2

En otras palabras, primero generamos las regiones posibles, luego extraemos las características y luego clasificamos esas regiones en función de las características extraídas. Básicamente, hemos convertido la detección de objetos en un problema de clasificación. El R-CNN es muy intuitivo pero, lamentablemente,  muy lento.

 

Fast R-CNN

La version creado sucesiva es el Fast R-CNN. Este se parece al original en muchas de sus características, pero es mejor en términos de velocidad de detección para dos aspectos:

  1. La extracción de características se lleva a cabo antes de extraer las regiones de interés, pero usando solo una CNN para toda la imagen en lugar de 2000 CNN en las 2000 regiones sobrepuestas .
  2. SVM se reemplaza por una función softmax , además, la red neuronal también se usa para realizar pronósticos en lugar de crear un nuevo modelo

 

El modelo se ve más o menos así:

 

3 1

3 1

Como podemos ver en la imagen, ahora estamos generando propuestas regionales basadas no en la imagen original, sino en el último mapa de las características extrapoladas de la red. Esto nos permite entrenar solo una CNN para toda la imagen.

Además, en lugar de entrenar diferentes SVM para clasificar cada objeto, hay una sola capa de softmax que genera directamente la probabilidad para la categoria de referencia. Entonces, ahora tenemos una sola red para entrenar, con la diferencia de lo que sucedió anteriormente donde en cambio había una red neuronal flanqueada por múltiples SVM.

El Fast R-CNN se desempeña, por lo tanto, mejor en términos de velocidad. Sin embargo, queda un defecto importante: el algoritmo de selective search que propone posibles regiones.

Faster R-CNN

Ahora hemos alcanzado el objetivo inicial de nuestro artículo: Faster R-CNN. La intuición fue aquella de reemplazar el lento algoritmo de  selective search con una red neuronal rápida. Específicamente, se introdujo la region proposal network  (RPN), una red de propuesta regional.

Cómo funciona el RPN:

  • En la última capa de una CNN inicial, una ventana deslizante de 3×3 se mueve a través del mapa de características para asignarle un tamaño más pequeño (por ejemplo, 256-d).
  • Para cada posición de ventana deslizante, el RPN genera múltiples regiones posibles basadas en uniones espaciales de dimensiones fijas llamadas cajas de anclaje. (anchor boxes).
  • Cada propuesta regional consiste en:
  • un puntaje (score) para la presencia del objeto en esa región en particular
  • 4 coordenadas que representan el cuadro delimitador de la región.

En otras palabras, veamos nuestra región en el último mapa de características, teniendo en cuenta los diferentes k caudros de anclaje que lo rodean. Para cada cuadro, se muestra si esta tiene un objeto y  caules son las coordenadas del cuadro. En la imagen, se representa como aparece desde la posición de una ventana deslizante:

 

4 1

4 1

La puntuación de 2k representa la probabilidad dada por softmax para cada caja k debido a la presencia de un objeto. Cabe señalar que, aunque el RPN procesa las coordenadas de los cuadros delimitadores, no clasifica los posibles objetos de todos modos: tiene el único propósito de identificar regiones en las que hay objetos presentes , por lo tanto, comunicar las coordenadas con los cuadros relacionados. Si un cuadro de anclaje tiene una puntuación, relativa a la presencia de un objeto, por encima de un cierto umbral, entonces esa casilla dada se seleccionará como una posible región.

Teniendo ahora nuestras posibles regiones, las presentamos directamente en el Fast R-CNN. Agregamos una capa de Pooling, algunas capas completamente conectadas, finalmente una capa de clasificación softmax y un regresor de  cuadros delimitadores (cuadro delimitador regresivo). Podemos decir que Faster R-CNN = RPN + Fast R-CNN.

 

5 1

5 1

El Faster R-CNN logra asi una  mejor velocidad y precisión. Aunque ha habido múltiples intentos de aumentar la velocidad de reconocimiento de los objetos, solo unos pocos modelos han sido capaces de superar esta red. En otras palabras, el Faster R-CNN ciertamente no es el método más fácil y rápido para la  object detection, pero aún presenta uno de los mejores rendimientos. Por lo tanto, el  Faster R-CNN en Tensorflow con  la Inception ResNet es el modelo más lento pero también el más preciso.

Aunque el la Faster R-CNN puede parecer complejo, es posible observar que en el corazón de su estructura es el mismo su original el R-CNN: identifica las posibles regiones de objetos y las clasifica. Este es el enfoque dominante de la mayoría de los modelos actuales de detección de objetos, incluido el que vamos a analizar ahora.

R-FCN

Regresemos  atras por un momento. Hemos dicho que Fast R-CNN ha mejorado mucho su velocidad de detección al compartir una sola CNN para todas las regiones. Este mecanismo básico es el mismo que el de la R-FCN: aumente la velocidad maximizando el numero de parámetros compartidos.

La Region-based FullyConvolutional Net (R-FCN) comparte la totalidad del cálculo para cada salida individual.

Por un lado, cuando clasificamos un objeto queremos que el modelo sea invariante con las traducciones, para identificarlo donde sea que aparezca. Por otro lado, sin embargo, necesitamos saber también una posible variación de las traducciones: si nuestro objeto está en la esquina superior izquierda, el modelo debe dibujar un cuadro delimitador en ese punto. Entonces, ¿cómo encontrar un compromiso entre los dos extremos, la varianza y la invarianza?

La solución dada por R-FCN es representada por la position-sentitive score maps: mapas de puntuación (relativo a los features, extraer a través de convoluciones, a las que se les asigna un puntaje basado en la presencia una determinada clase dada) sensibles a la posición de los objetos que intentemos clasificar.

Cada uno de estos mapas representa una posición relativa a una clase de objetos. Por ejemplo, un cuadro mapa de puntos podría activarse si identifica el lado superior derecho de un gato, mientras que otro podría activarse cuando detecta el lado inferior izquierdo de una máquina. Esencialmente, estos mapas de puntuación son mapas de características convolucionales que han sido entrenados para reconocer ciertas partes de cada objeto.

La R-FCN funciona de la siguiente manera:

Ejecuta una CNN (en este caso un ResNet) en la imagen de entrada.

Agregue una capa convolucional que incluya todos los mapas generados a partir del paso anterior para obtener un conjunto de puntuaciones de las imágenes generales  . Obtenemos k²(C+1) puntuación de mapas, donde k² representa el número de posiciones relativas para dividir un objeto (por ejemplo 3²  para una cuadrícula 3×3), donde C+1

  1. Ejecute una RPN para generar regiones de interés (RoI)
  2. Divide cada una RoI en el mismo k² subregiones el cual está compuesto por mapas de puntuaciones
  3. Ahora debemos verificar si en la suma de los puntajes generales, de cada subregión coincide con la posición relativa correspondiente de un objeto. Por ejemplo, si queremos considerar la subregión en la esquina superior izquierda, debemos tomar el mapa de puntuación que corresponde a la esquina superior izquierda de un objeto y convertirlo en un promedio dentro del ROl. Este proceso se repite para cada catergoria.
  4. Despues que cada k² subregión tiene un valor de “object match” por cada categoria, se obtiene un promedio de las subregiones para obtener un puntaje para cada categoria.

5.Clasifique los RoI con una función softmax en los restantes C + 1 vectores dimensionales

 

Un R-FCN, que tiene un RPN que genera los RoI, aparecerá más o menos así:

6 1

6 1

Comprender cómo funciona este modelo es más fácil si realmente puede visualizar concretamente lo que hace. A continuación tenemos un ejemplo de cómo funciona mientras busca de dectectar un recién nacido.

 

7

7

Figura 4: podemos observar una RoI que no se superpone correctamente con el objeto
Figura 3: Observamos una R-FCN (k x k = 3 x 3) por la categoria persona

En términos simples: el R-FCN considera cada región, subdividiéndolas en subregiones y preguntando a cada una de ellas si corresponden a la porción relativa de la imagen de entrada. Por ejemplo, “¿Se parece a la parte centro derecha de un niño?”. Esto se repite en cada categoria. Si la mayoría de las partes de las subregiones resultan correspondientes, entonces el RoI lo clasifica como recién nacido, después que la función softmax lo ha realizado en en todas las categorias.

De esta forma, el R-FCN puede identificar simultáneamente la varianza de las traducciones, proponiendo diferentes regiones de objetos y la invariabilidad de las traducciones a través de la referencia de cada región a los mismos mapas de puntuación. Estos mapas de puntuación deberian aprender a clasificar un gato como tal, donde sea que aparezca. Además, es completamente convolucional: esto significa que el cálculo se comparte en toda la red.

Esto permite que el R-FCN sea s más rápido que el FasterR-CNN , logrando el mismo grado de precisión.

SSD

El último modelo que vamos a analizar es el Single-Shot Detector (SDD) . Como el R-FCN alcanzó una velocidad mucho más alta que el Faster R-CNN pero de una forma diferente.

Los primeros dos modelos realizan una  region proposal y region classification en dos fases distintas. En primer lugar, utilizan una RPN (region proposal network) para generar las regiones de interés, luego clasifican estas regiones a través de sus capas totalmente conectadas o las capas convolucionales sensibles a la posición de los objetos que se van a clasificar. El SSD combina estos dos procesos en un solo paso, al tiempo que proporciona los cuadros de delimitación y las categoria, en el momento que examina la imagen.

 

 

Dada una imagen de entrada y un conjunto de etiquetas para al dataset, la SSD actúa de esta manera:

1) Pasa la imagen a través de una serie de capas convolucionales, produciendo mapas de las características a diferentes escalas (por ejemplo, 10×10, luego 6×6 y nuevamente 3×3, etc.)

2) Por cada posición en cada uno de estos mapas de características, se usa un filtro convolucional de 3×3 para evaluar un pequeño conjunto de requadros delimitadores predefinidos. Estos últimos son el equivalente a cuadros de anclaje(anchor boxes) del Faster R-CNN

3)Por cada requadro establece al mismo tiempo:

  1. El recuadro del bounding box
  2. La probabilidad para cada categoria.

Durante el entrenamiento se hace coincidir el requadro real con el predicho sobre Intersection over Union (IoU), que es el índice de Jaccard. Los recuadros mejores pr se etiquetarán como “positivos”, así como todos los demás recuadros con un valor de IoU> 0.5.

Durante el entrenamiento de la SSD, sin embargo, existe una dificultad peculiar en comparación con los modelos anteriores. En los primeros dos modelos, el RPN permitió considerar solo lo que tenía la más mínima posibilidad de ser un objeto. Con la SSD, sin embargo, se elimina el primer filtro: clasifica y rastrea cuadros delimitadores en cada posición de la imagen, usando recuadros de diferentes formas y escalas múltiples. Esto da como resultado  un número mucho mayor de recuadros  donde la mayoría de estos son negativos (ya que no detecta objetos).

El SSD corrige este problema de dos maneras. Primero, utiliza la no-maximum suppression  (NMS) para agrupar varias requadros superpuestos en una unico recuadro. Entonces, por ejemplo, cuatro recuadros de forma y tamaño similares contienen el mismo objeto, el NMS le permite mantener el mejor rquadro, el más preciso, y descartar los restantes. En segundo lugar, utiliza una técnica llamada  para hard negative mining para equilibrar las categorias durante el entrenamiento. Con esta técnica, solo se utiliza un subconjunto de ejemplos negativos con la mayorloss in fase di training  (los denominados falsos positivos)  que se  usa para cada iteración durante el entrenamiento. El SSD mantiene una relación de 3: 1 entre negativos y positivos.

 

 

 

Su arquitectura se ve así:

8

Como se mencionó anteriormente, vemos que hay “extra feature layers. Estos mapas de características de tamaño variable ayudan a identificar objetos de diferentes tamaños. Aquí hay un ejemplo:

9

En mapas de funciones más pequeñas (4×4), cada cuadro cubre una región más amplia de la imagen, lo que le permite identificar objetos más grandes. La region proposal y la clasificación se ejecutan al mismo tiempo: teniendo categorias p de objetos, cada cuadro delimitador se asocia con un vector dimensional (4 + p) que produce 4 recuadros de coordenadas y probabilidad de categorias p. En última instancia, una función sotmax también se usa para clasificar objetos.

Por lo tanto, podemos decir que el SSD no es tan diferente de los dos modelos anteriores. Sin embargo, omite el paso de la identificación de la región, considerando cada cuadro en cada posición de la imagen junto con su clasificación. Al realizar todos estos procesos simultáneamente, el SSD es sin duda el más rápido de los tres modelos considerados.

 

 

 

 

Conclusión

El  Faster R-CNN , el R-FCN y el SSD son tres de los mejores y más usados modelos para la detección de objetos. Todos ellos confían en las redes neuronales convolucionales para las primeras etapas del proceso y siguen, más o menos, el mismo método de proponer regiones y clasificación.

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í.