Y Qué es el End to End Learning

Andres Felipe Ocampo
11 min readNov 25, 2023

Capítulo 2

Me gustaría continuar hablando sobre las diferencias entre el Machine learning y el Deep learning, explicando un concepto que todos debemos comprender. El denominado End to End learning. Eeste surge como consecuencia de un problema que tenemos con las características de entrada. Cuando hablamos de técnicas de machine learning, fijaros el rendimiento de los algoritmos de machine learning va a depender en gran medida de la representación de los datos que le proporcionamos.

En el anterior articulo veíamos cómo cuando nosotros utilizábamos un algoritmo de Machine Learning para resolver un problema concreto, por ejemplo, para diagnosticar la enfermedad de un paciente, lo primero que teníamos que hacer era recopilar información o experiencia pasada.

En este caso debíamos recopilar otros pacientes que habían tenido alguna enfermedad y los síntomas que tenían esos pacientes, esos síntomas, decíamos que eran las características de entrada al algoritmo con las que ese algoritmo iba a tomar la decisión de si ese paciente tenía una enfermedad o no. Una vez que nosotros habíamos entrenado nuestro algoritmo, entonces cuando llegaba un paciente nuevo, recopilamos esos mismos síntomas que teníamos para nuestro conjunto de datos de experiencia pasada.

Se los proporcionamos a nuestro algoritmo y nuestro algoritmo realizaba una predicción y lo mismo vimos para transacciones bancarias fraudulentas o legítimas. Fijaros que esta extracción de características, estos síntomas de los pacientes o esas características que nosotros extraemos de la transacción bancaria son fundamentales para que nuestro algoritmo realice buenas predicciones.

Si nosotros no seleccionamos el conjunto de características o hablando de un paciente, el conjunto de síntomas que puedan ser determinantes para que ese paciente tenga una enfermedad o no. Nuestro algoritmo, por mucho que le entrenemos, no va a ser capaz de distinguir si ese paciente está enfermo o no. Por lo tanto, esa extracción previa de las características es algo que depende de un analista.

El Analista

Un analista tiene que hacer primero esa extracción de qué características son relevantes en un problema. Como veis, muchos de los problemas con los que nos podemos encontrar y que queremos resolver aplicando machine learning van a poder resolverse de manera relativamente sencilla, extrayendo una serie de características que sean adecuadas para resolver ese problema.

Sin embargo, vamos a encontrarnos con otras tareas para las que va a ser realmente difícil identificar qué características deben ser extraídas. Y aquí os he puesto un ejemplo muy concreto que creo que ilustra bastante bien este problema.

Supongamos que quisiéramos escribir un programa basado en machine learning para detectar coches en fotografías. Sabemos que los coches tienen algunas características. Algunos componentes, por ejemplo, tienen retrovisores, por lo que nos gustaría utilizar la presencia de un retrovisor como una característica tienen focos, tienen ventanas. Sin embargo, fijaros lo difícil que es describir exactamente cómo se puede ver un retrovisor en términos, por ejemplo, de valores de píxeles. Un retrovisor puede ser de cualquier color, incluso un retrovisor que sea de un color específico para un tipo de coche puede cambiar de color si le da la luz de una determinada manera, si le da la sombra, y una larga lista de caracteristicas.

De hecho, fijaros que. Aquí os tengo puesto un caso específico en el que tenemos un coche que es el mismo modelo de coche visto desde diferentes ángulos, y si nosotros para este coche que tienen los retrovisores negros describiese lo siguiente

El retrovisor como un conjunto de píxeles con una determinada forma de color negro con esa intensidad. Fijaros que por ejemplo, en estas imagen de aquí este retrovisor es negro porque le está dando la sombra y en otra imagen el retrovisor que le da el reflejo de la luz es de color blanco o en este otro coche de esta colección de imágenes, como se encuentra en otra posición no podemos ver el retrovisor de la derecha y solo vemos el retrovisor de la izquierda. Y además lo vemos de manera contraria, lo vemos al revés que de otras imagenes vemos el retrovisor de un color, una parte y de otro color otra parte. O sea, hay determinados problemas al fin y al cabo, como por ejemplo la detección de objetos en una imagen que si tratamos de extraer características para identificar ese objeto, pues es una tarea realmente complicada.

Existen algoritmos de machine learning para los que tenemos que extraer estas características que probablemente no funcionarían bien. Para tratar de solucionar este problema surge una primera técnica que se denomina Representation learning.

Representation Learning

Esta técnica en concreto va a consistir en algoritmos de machine learning que lo que van a hacer es descubrir de alguna manera la mejor forma de describir esos datos, esa información en concreto. Bien, estos algoritmos van a coger esa imagen y te van a proporcionar una serie de características que muchas veces para los humanos no son comprensibles, no las entendemos, pero que de alguna manera con ese algoritmo digamos que tienen cierto sentido y que representan bien esa información.

El ejemplo por excelencia cuando hablamos de Representation learning es un algoritmo que se denomina Autoencoder y que veremos seguramente más adelante en un conjunto de articulos muy especializados.

A pesar de estas técnicas, en determinadas ocasiones, aún utilizando estos algoritmos de machine learning, sigue siendo muy complicado extraer características de alto nivel y abstractas sobre esos datos. En brutos, por ejemplo, uno de los casos más comunes es que nosotros queremos identificar el país de procedencia de una persona que está hablando en base a su acento, pues, por ejemplo, extraer estas características fonéticas, como por ejemplo el acento de un orador, pues es realmente difícil incluso para estos algoritmos y muchas veces solo solamente pueden ser identificadas si tenemos una comprensión bastante sofisticada casi a nivel humano de esos datos, en este caso del idioma.

Por lo tanto, y un poquito en conjunción con lo que hemos hablado, cuando es casi tan difícil obtener una representación como en el caso que hemos comentado anteriormente del acento de un orador.

Cómo resolver el problema original?

Las técnicas de Representation learning en general no suelen ser de utilidad. Bien, entonces qué vamos a utilizar para resolver este tipo de problemas? Pues lo que vamos a utilizar es una técnica denominada como End to End learning.

Fijaros, nosotros cuando tratábamos, por ejemplo, de transcribir a texto lo que estaba hablando una persona en un audio, nosotros lo que hacíamos utilizando técnicas clásicas de machine learning era cogíamos ese audio, identificábamos una serie de características de ese audio, se las proporcionaban a un algoritmo de machine learning con el que hacíamos una detección de fonemas. Después realizábamos una composición de palabras y por último ya teníamos ese texto traducido.

Cuando hablamos de End to End learning y concretamente este tipo de técnica es la que van a utilizar la mayoría de los algoritmos basados en Deep Learning. Lo que vamos a hacer es recibimos el audio en bruto, se lo proporcionamos al algoritmo de Deep Learning y este algoritmo va a ser capaz de darnos como output el texto directamente traducido.

Toda esta fase de identificación, extracción de características , va a realizarla el propio algoritmo. Y esto es en lo que consiste el End to End learning. Porque fijaros que recibimos la información y es un proceso End to End.

Desde que recibimos la información. El algoritmo se preocupa de todo hasta que nos proporciona el resultado o la predicción que nosotros estamos esperando.

Vamos a aplicar algo de lo que hemos visto, os proporcionaré una fichero alojado en mi Gist https://gist.github.com/phdafoe/9faa9e3458d8e456b96211ee197facc9

Concretamente este concepto de End to End learning y cómo podemos resolver un problema que mediante la creación de reglas o de extracción de características de manera manual puede complicarse bastante y con técnicas de Deep learning, aplicando este concepto End to End learning podemos llegar a una solución bastante aceptable, bastante buena en un tiempo muy, muy, muy reducido.

El conjunto de datos que os traigo es muy sencillo. Consiste básicamente en una serie de imágenes. En este caso de 28 por 28 píxeles, que se corresponden con imágenes en las que aparece una prenda de ropa.

Vale, pues, por ejemplo, en la primera imagen, que es el primer ejemplo de nuestro conjunto de datos, aparece una zapatilla. En la segunda imagen aparece una camiseta, en esta aparece una falda y así sucesivamente.

Concretamente aparecen 10 prendas diferentes y el objetivo o el problema que queremos resolver consiste en clasificar estas imágenes en una de esas diez categorías en función de la prenda que aparece en esa imagen.

Fijaros que a priori, si nosotros tratásemos de resolver este problema utilizando reglas estáticas, por ejemplo utilizando Python, una serie de fases, trata de resolver este problema y tratar de clasificar las imágenes en las que aparece, por ejemplo, una zapatilla dentro de la clase 1 y las que aparece una camiseta dentro de la clase 2. Es súper complicado porque tendríamos que ir viendo la intensidad de los píxeles. Si aparecen tantos píxeles con esta intensidad, a lo mejor puede ser una zapatilla, o podría ser otra cosa completamente distinta pero que se parece.

Pero qué ocurre si cambia de color? Bueno, podemos ver que es un problema muy complejo y que nos llevaría muchísimo tiempo resolverlo con técnicas tradicionales de programación, por ejemplo, o incluso con técnicas tradicionales de machine learning.

Si tenemos que hacer una extracción de características, qué características extraemos de estas imágenes? Vale, es bastante complicado encontrar características que a priori puedan ser significativas, de que en esa imagen aparece una prenda u otra. Bien, pues precisamente para esto se aplica este concepto de End to End Learning.

Ahora mismo no tenéis que entender nada de lo que aparece aquí. No os preocupéis por cómo he cargado el conjunto de datos en el contexto de nuestro Jupiter Notebook o Colab. Simplemente entended que he cargado este conjunto de datos que está formado por dos subconjuntos. Por un lado, un subconjunto de entrenamiento que tiene 60000 imágenes que están clasificadas, están etiquetadas como pertenecientes a una de esas diez clases en función de la prenda que aparece en ellas y otro subconjunto de pruebas con el que realizaremos pruebas.

Después, a ver qué tal se comporta nuestra red neuronal formada por 10000 imágenes. Simplemente tener esto en cuenta, pero no hace falta que lo comprendáis ahora mismo, porque vamos a ver en detalle todos estos conceptos más adelante.

Bien, pues una vez que tenemos nuestro conjunto de datos, incluido dentro del contexto de nuestro Jupiter Notebook o Colab, fijaros, decíamos que era muy complicado resolver este problema utilizando reglas estáticas o técnicas tradicionales de programación o de clasificación. Sin embargo, si nosotros aplicamos técnicas de deep learning, en este caso va a ser muchísimo, muchísimo más sencillo.

Concretamente, yo lo único que tendré que hacer es aplicar una serie de transformaciones sobre nuestros datos, que en este caso se corresponden con coger nuestras imágenes, que están formadas por 28 por 28 píxeles y transformarlas en un único vector que tendrá una longitud de 28 por 28.

  • Qué es lo que estamos haciendo aquí?

Únicamente hacer eso normalizó el valor de los píxeles.

  • Qué quiere decir?

Que lo voy a situar en una escala similar, normalmente entre cero y uno. Vamos a tener una sección específica sobre normalización. No os preocupéis chavales.

Esto transformó esas etiquetas a ese valor que nos dice si aparece una camiseta, si aparece una zapatilla que está ahora mismo, recibe un valor del cero al nueve. Lo voy a codificar de una manera diferente, en forma de vector. Pero fijaros que hacer esto me lleva segundos al ejecutado de estas celdas y programar esto es algo super estándar.

Se utiliza para la mayoría de los problemas de Deep Learning, con lo cual esto no lleva nada de tiempo. Bien! es aplicar una serie de transformadores y poco más. Una vez que tenemos esto, lo que yo voy a hacer es entrenar una red neuronal artificial que está formada en este caso por cuatro capas.

ok una primera capa formada por 300 neuronas. Una segunda capa formada por 100 neuronas. Otra última capa formada por 10 neuronas.

La primera capa, que es la input layer, que ya veremos más adelante con más detalle se refiere exactamente a, que son las características de entrada, que en este caso serían el valor de cada uno de los píxeles.

Con lo que quiero que os quedéis es que una vez que yo defino esta red neuronal y comienzo. A entrenarla. Fijaros que este es el proceso de entrenamiento de mi red neuronal en el momento en el que llega a 15 Epoch, me lo indica en el log, muy bien!!!!, ahora está entrenando 1/15.

Entonces mi red neuronal estará entrenada y lo que me va a decir es, por un lado, el la precisión y la exactitud que tiene a la hora de clasificar estas imágenes en las diferentes clases, de acuerdo??, en las diferentes categorías en función de lo que aparece, pues me dice cuánto ha acertado tanto en un subconjunto como en el otro.

Fijaros que cuando termine de entrenarse ya podemos ver que a medida que está entrenándose ya tenemos un valor de exactitud a la hora de clasificar de un 88 por ciento de precisión de un 90 por ciento.

Y lleva entrenándose. Cuánto? 30 segundos? 40 segundos?, Está llegando a un 88, 89 por ciento, 89, 90 por ciento de precisión y de exactitud. Y ahora, en cuanto termine el entrenamiento, vamos a comprobar cómo nosotros hemos sido capaces de resolver este problema, pues en un tiempo muy, muy, muy corto. Fijaros, obtenemos finalmente nuestra red neuronal ya terminado de entrenarse. Fijaros como la célula ya no está ejecutándose. Y en el último entrenamiento, en el último proceso de entrenamiento, hemos obtenido un 89 por ciento de exactitud y un 90 por ciento de precisión para ejemplos que no se han utilizado durante ese proceso de entrenamiento. Wawwww.

Vaya bicho no?, vale, simplemente quiero que os quedéis como utilizando una red neuronal artificial, en este caso una red neuronal que tampoco es tan profunda porque tenía tres capas. Vale, hemos conseguido resolver este problema de clasificación de imágenes en prácticamente 5 minutos, con un 89 por ciento de exactitud y un 90 por ciento de precisión.

No obstante debemos tener más teoría de base, para comprender mejor las cosas y las mazmorras de la IA.

--

--