El presente curso es el curso basico de Machine Learning elaborado por Google pero que en este caso ha sido editado, adaptado y ampliado por juanbarrios.com
DEFINICIONES
¿Qué es el aprendizaje automático (supervisado)?
A continuación, se incluye una definición concisa:
Los sistemas de AA aprenden cómo combinar entradas para producir predicciones útiles sobre datos nunca antes vistos.
Exploremos la terminología básica del aprendizaje automático.
A.) Etiquetas
Una etiqueta es el valor que estamos prediciendo, es decir, la variable y
en la regresión lineal simple. La etiqueta podría ser el precio futuro del trigo, el tipo de animal que se muestra en una imagen, el significado de un clip de audio o simplemente cualquier cosa.
b.) Atributos
Un atributo es una variable de entrada, es decir, la variable x
en la regresión lineal simple. Un proyecto de aprendizaje automático simple podría usar un solo atributo, mientras que otro más sofisticado podría usar millones de atributos, especificados como:
En el ejemplo del detector de spam, los atributos podrían incluir los siguientes:
- palabras en el texto del correo electrónico
- dirección del remitente
- hora del día a la que se envió
- presencia de la frase «un truco increíble» en el correo electrónico
c.) Ejemplos
Un ejemplo es una instancia de datos en particular, x. (La x se coloca en negrita para indicar que es un vector). Los ejemplos se dividen en dos categorías:
- ejemplos etiquetados
- ejemplos sin etiqueta
Un ejemplo etiquetado incluye tanto atributos como la etiqueta. Esto significa lo siguiente:
labeled examples: {features, label}: (x, y)
Los ejemplos etiquetados se usan para entrenar el modelo. En nuestro ejemplo del detector de spam, los ejemplos etiquetados serían los correos electrónicos individuales que los usuarios marcaron explícitamente como «es spam» o «no es spam».
Por ejemplo, en la siguiente tabla se muestran 5 ejemplos etiquetados de un conjunto de datos que contiene información sobre los precios de vivienda en California:
housingMedianAge (atributo) |
totalRooms (atributo) |
totalBedrooms (atributo) |
medianHouseValue (etiqueta) |
---|---|---|---|
15 | 5,612 | 1,283 | 66,900 |
19 | 7,650 | 1,901 | 80,100 |
17 | 720 | 174 | 85,700 |
14 | 1,501 | 337 | 73,400 |
20 | 1,454 | 326 | 65,500 |
Un ejemplo sin etiqueta contiene atributos, pero no la etiqueta. Esto significa lo siguiente:
unlabeled examples: {features, ?}: (x, ?)
Estos son 3 ejemplos sin etiqueta del mismo conjunto de datos de viviendas, que no incluyen medianHouseValue
:
housingMedianAge (atributo) |
totalRooms (atributo) |
totalBedrooms (atributo) |
---|---|---|
42 | 1686 | 361 |
34 | 1226 | 180 |
33 | 1077 | 271 |
Una vez que el modelo se entrena con ejemplos etiquetados, ese modelo se usa para predecir la etiqueta en ejemplos sin etiqueta. En el detector de spam, los ejemplos sin etiqueta son correos electrónicos nuevos que las personas todavía no han etiquetado.
d.) Modelos
Un modelo define la relación entre los atributos y la etiqueta. Por ejemplo, un modelo de detección de spam podría asociar de manera muy definida determinados atributos con «es spam». Destaquemos dos fases en el ciclo de un modelo:
- Entrenamiento significa crear o aprender el modelo. Es decir, le muestras ejemplos etiquetados al modelo y permites que este aprenda gradualmente las relaciones entre los atributos y la etiqueta.
- Inferencia significa aplicar el modelo entrenado a ejemplos sin etiqueta. Es decir, usas el modelo entrenado para realizar predicciones útiles (
y'
). Por ejemplo, durante la inferencia, puedes predecirmedianHouseValue
para nuevos ejemplos sin etiqueta.
e.) Regresión frente a clasificación
Un modelo de regresión predice valores contínuos. Por ejemplo, los modelos de regresión hacen predicciones que responden a preguntas como las siguientes:
- ¿Cuál es el valor de una casa en California?
- ¿Cuál es la probabilidad de que un usuario haga clic en este anuncio?
Un modelo de clasificación predice valores discretos. Por ejemplo, los modelos de clasificación hacen predicciones que responden a preguntas como las siguientes:
- ¿Un mensaje de correo electrónico determinado es spam o no es spam?
- ¿Esta imagen es de un perro, un gato o un hámster?
Reducción de la pérdida:
A.) el Descenso de gradientes
El diagrama de enfoque iterativo (Figura 1) contenía un cuadro verde con afirmaciones sin fundamento llamado «Actualizar parámetros». Ahora reemplazaremos esa solución algorítmica mágica por algo más sustancial.
Supón que tuviéramos el tiempo y los recursos de cómputo para calcular la pérdida de todos los valores posibles de
. Para el tipo de problemas de regresión que hemos estado examinando, la representación resultante de pérdida frente a siempre será convexa. En otras palabras, la representación siempre tendrá forma de tazón, como la siguiente:
Figura 2. Los problemas de regresión producen gráficas de pérdida convexa vs. pesos.
Los problemas convexos tienen un solo mínimo, es decir, un solo lugar en el que la pendiente es exactamente 0. Ese mínimo es donde converge la función de pérdida.
Calcular la función de pérdida para cada valor concebible de
en todo el conjunto de datos sería una manera ineficaz de buscar el punto de convergencia. Examinemos un mecanismo más útil, muy popular en el aprendizaje automático, denominado descenso de gradientes.
La primera etapa en el descenso de gradientes es elegir un valor de inicio (un punto de partida) para
. El punto de partida no es muy importante; por lo tanto, muchos algoritmos simplemente establecen en 0 o eligen un valor al azar. En la siguiente figura, se muestra que elegimos un punto de partida levemente mayor que 0.
Figura 3. Un punto de partida para el descenso de gradientes.
Luego, el algoritmo de descenso de gradientes calcula la gradiente de la curva de pérdida en el punto de partida. En resumen, una gradiente es un vector de derivadas parciales; indica por dónde es más cerca o más lejos. Ten en cuenta que la gradiente de pérdida con respecto a un solo peso (como en la Figura 3) es equivalente a la derivada.
Ten en cuenta que la gradiente es un vector, de manera que tiene las dos características siguientes:
- una dirección
- una magnitud
La gradiente siempre apunta en la dirección del aumento más empinado de la función de pérdida. El algoritmo de descenso de gradientes toma un paso en dirección de la gradiente negativa para reducir la pérdida lo más rápido posible.
Figura 4. El descenso de gradientes se basa en gradientes negativas.
Para determinar el siguiente punto a lo largo de la curva de la función de pérdida, el algoritmo de descenso de gradientes agrega alguna fracción de la magnitud de la gradiente al punto de partida, como se muestra en la siguiente figura:
Figura 5. Un paso de la gradiente nos mueve hacia el siguiente punto en la curva de pérdida.
Luego, el descenso de gradientes repite este proceso y se acerca cada vez más al mínimo.
B.) la Tasa de aprendizaje
Como se observó, el vector de gradiente tiene una dirección y una magnitud. Los algoritmos de descenso de gradientes multiplican la gradiente por un escalar conocido como tasa de aprendizaje (o tamaño del paso en algunas ocasiones) para determinar el siguiente punto. Por ejemplo, si la magnitud de la gradiente es 2.5 y la tasa de aprendizaje es 0.01, el algoritmo de descenso de gradientes tomará el siguiente punto 0.025 más alejado del punto anterior.
Los hiperparámetros son los controles que los programadores ajustan en los algoritmos de aprendizaje automático. La mayoría de los programadores de aprendizaje automático pasan gran parte de su tiempo ajustando la tasa de aprendizaje. Si eliges una tasa de aprendizaje muy pequeña, el aprendizaje llevará demasiado tiempo:
Figura 6. La tasa de aprendizaje es muy pequeña.
A la inversa, si especificas una tasa de aprendizaje muy grande, el siguiente punto rebotará al azar eternamente en la parte inferior, como un experimento de mecánica cuántica que salió muy mal:
Figura 7. La tasa de aprendizaje es muy grande.
Hay una tasa de aprendizaje con valor dorado para cada problema de regresión. El valor dorado está relacionado con qué tan plana es la función de pérdida. Si sabes que el gradiente de la función de pérdida es pequeño, usa una tasa de aprendizaje mayor, que compensará el gradiente pequeño y dará como resultado un tamaño del paso más grande.
Figura 8. La tasa de aprendizaje es la correcta.
C.) Descenso de gradiente estocástico
En el descenso de gradientes, un lote es la cantidad total de ejemplos que usas para calcular la gradiente en una sola iteración. Hasta ahora, hemos supuesto que el lote era el conjunto de datos completo. Al trabajar a la escala de Google, los conjuntos de datos suelen tener miles de millones o incluso cientos de miles de millones de ejemplos. Además, los conjuntos de datos de Google con frecuencia contienen inmensas cantidades de atributos. En consecuencia, un lote puede ser enorme. Un lote muy grande puede causar que incluso una sola iteración tome un tiempo muy prolongado para calcularse.
Es probable que un conjunto de datos grande con ejemplos muestreados al azar contenga datos redundantes. De hecho, la redundancia se vuelve más probable a medida que aumenta el tamaño del lote. Un poco de redundancia puede ser útil para atenuar las gradientes inconsistentes, pero los lotes enormes tienden a no tener un valor mucho más predictivo que los lotes grandes.
¿Cómo sería si pudiéramos obtener la gradiente correcta en promedio con mucho menos cómputo? Al elegir ejemplos al azar de nuestro conjunto de datos, podríamos estimar (si bien de manera inconsistente) un promedio grande de otro mucho más pequeño. El descenso de gradiente estocástico (SGD) lleva esta idea al extremo: usa un solo ejemplo (un tamaño del lote de 1) por iteración. Cuando se dan demasiadas iteraciones, el SGD funciona, pero es muy inconsistente. El término «estocástico» indica que el ejemplo único que compone cada lote se elige al azar.
El descenso de gradiente estocástico de minilote (SGD de minilote) es un equilibrio entre la iteración de lote completo y el SGD. Un minilote generalmente tiene entre 10 y 1,000 ejemplos, elegidos al azar. El SGD de minilote reduce la cantidad de inconsistencia en el SGD, pero sigue siendo más eficaz que el lote completo.
Para simplificar la explicación, nos concentramos en el descenso de gradientes para un solo atributo. Te garantizamos que el descenso de gradientes también funciona en conjuntos de varios atributos.
D.) ejercicicio de EVALUACION:
Reducción de la pérdida
Explora las opciones que aparecen a continuación.
b.) El lote completo
TUS Primeros pasos con TensorFlow
- aprender cómo crear y modificar tensores en TensorFlow
- aprender los aspectos básicos de Pandas
- desarrollar código de regresión lineal con una de las API de alto nivel de TensorFlow
- experimentar con la tasa de aprendizaje
A.) el Kit de herramientas de tensorflow
En la siguiente figura, se muestra la jerarquía actual de los kits de herramientas de TensorFlow:
Figura 1. Jerarquía de los kits de herramientas de TensorFlow.
En la siguiente tabla, se resumen los objetivos de las diferentes capas:
Kits de herramientas | Descripción |
---|---|
Estimador (tf.estimator) | API de POO de alto nivel |
tf.layers/tf.losses/tf.metrics | Bibliotecas de componentes comunes del modelo |
TensorFlow | API de nivel inferior |
TensorFlow consiste en los siguientes dos componentes:
- un búffer de protocolos de grafo
- un tiempo de ejecución que ejecuta el grafo (distribuido)
Estos dos componentes son análogos al compilador de Java y a la JVM. Cuando la JVM se implementa en varias plataformas de hardware, también lo hace TensorFlow (CPU y GPU).
¿Qué API debes usar? Debes usar el nivel de abstracción más alto que resuelva el problema. Los niveles de abstracción más altos son más fáciles de usar, pero también son menos flexibles (por su diseño). Te recomendamos comenzar con la API de nivel más alto y poner todo en funcionamiento. Si necesitas flexibilidad adicional por cuestiones de modelos especiales, usa un nivel más bajo. Ten en cuenta que cada nivel se crea con API de niveles inferiores, por lo que la reducción de jerarquía debería ser razonablemente directa.
B.) API de tensor flow estimator
Usaremos tf.estimator en la mayoría de los ejercicios del Curso intensivo de aprendizaje automático. Todo lo que harás en el ejercicio se podría haber realizado con TensorFlow en un nivel inferior (sin procesar), pero el uso de tf.estimator disminuye considerablemente la cantidad de líneas de código.
tf.estimator es compatible con la API de scikit-learn. Scikit-learn es una biblioteca de AA de código abierto muy popular en Python, con más de 100,000 usuarios, incluso muchos en Google.
Aquí se muestra, en términos muy generales, el formato de un programa de regresión lineal implementado en tf.estimator:
import tensorflow as tf
# Set up a linear classifier.
classifier = tf.estimator.LinearClassifier()
# Train the model on some example data.
classifier.train(input_fn=train_input_fn, steps=2000)
# Use it to predict.
predictions = classifier.predict(input_fn=predict_input_fn)
C.) Ejercicios de programación
A medida que avances en el Curso intensivo de aprendizaje automático, podrás poner en práctica los principios y las técnicas que aprendiste mediante la codificación de modelos con tf.estimator, una API de TensorFlow de alto nivel.
Los ejercicios de programación del Curso intensivo de aprendizaje automático usan una plataforma de análisis de datos que combina código, resultados y texto descriptivo en un documento colaborativo.
Los ejercicios de programación se ejecutan directamente en tu navegador mediante Colaboratory (no es necesario configurar nada). Esta plataforma es compatible con la mayoría de los navegadores principales y se prueba minuciosamente en las versiones de escritorio de Chrome y Firefox. Si prefieres descargar y ejecutar los ejercicios sin conexión, consulta estas instrucciones para configurar un entorno local.
Realiza los tres ejercicios siguientes en el orden especificado:
- Introducción rápida a Pandas: Pandas es una biblioteca importante para el análisis y modelado de datos, y se usa extensamente en la codificación de TensorFlow. Este instructivo te brinda toda la información sobre Pandas que necesitas para este curso. Si ya conoces esta biblioteca, omite este ejercicio.
- Primeros pasos con TensorFlow: Este ejercicio explora la regresión lineal.
- Atributos sintéticos y valores atípicos: Este ejercicio explora los atributos sintéticos y el efecto de los valores de entrada atípicos.
D.) Hiperparámetros comunes en los ejercicios del Curso intensivo de aprendizaje automático
Muchos de los ejercicios de codificación contienen los siguientes hiperparámetros:
- pasos, que es el número total de iteraciones de entrenamiento. Un paso calcula la pérdida de un lote y usa ese valor para modificar los pesos del modelo una vez.
- tamaño del lote, que es el número de ejemplos (elegidos de forma aleatoria) para un solo paso. Por ejemplo, el tamaño del lote para SGD es 1.
La siguiente variable de utilidad aparece en varios ejercicios:
- períodos, que controlan el nivel de detalle de los informes. Por ejemplo, si la variable de
periods
está ajustada en 7 y el hiperparámetro desteps
está ajustado en 70, el ejercicio dará el resultado del valor de la pérdida cada 10 pasos (o 7 veces). A diferencia de los hiperparámetros, no se espera que modifiques el valor deperiods
. Ten en cuenta que modificarperiods
, no altera lo que aprende el modelo
Generalización
La generalización hace referencia a la capacidad del modelo para adaptarse de manera adecuada a datos nuevos nunca antes vistos, obtenidos de la misma distribución que aquellos utilizados para crear el modelo.
A.) Riesgos de overfitting
Este módulo se centra en la generalización. Para desarrollar algo de intuición sobre este concepto, observarás tres figuras. Imagina que cada punto en estas figuras representa la posición de un árbol en un bosque. Los dos colores tienen los siguientes significados:
- Los puntos azules representan árboles enfermos.
- Los puntos anaranjados representan árboles sanos.
Con eso en mente, echa un vistazo a la Figura 1.
Figura 1. Árboles enfermos (azules) y sanos (anaranjados).
¿Puedes imaginar un buen modelo para predecir los árboles enfermos o sanos subsiguientes? Tómate un momento para dibujar mentalmente un arco que divida los puntos azules de los anaranjados, o enlaza mentalmente un lote de puntos azules o anaranjados. Luego, observa la Figura 2, que muestra cómo un determinado modelo de aprendizaje automático separó los árboles enfermos de los sanos. Ten en cuenta que este modelo produjo una pérdida muy baja.
B.) ¿Sigue siendo un modelo malo a pesar de la pérdida baja?
La Figura 3 muestra qué ocurrió cuando se agregaron datos al modelo. Resultó que el modelo se adaptó de manera muy deficiente a los datos nuevos. Observa que el modelo categorizó mal muchos de los datos nuevos.
Figura 3. El modelo no se desempeñó bien al predecir datos nuevos.
El modelo que se muestra en las Figuras 2 y 3 hace overfitting con los datos con los que se entrenó. Un modelo con overfitting o sobreajustado obtiene una pérdida baja durante el entrenamiento, pero no se desempeña bien al predecir datos nuevos. Si un modelo se adapta bien a la muestra actual, ¿cómo podemos confiar en que realizará buenas predicciones sobre los datos nuevos? Como verás más adelante, el sobreajuste se genera al desarrollar un modelo más complejo que lo necesario. La presión fundamental del aprendizaje automático está en el ajuste correcto de nuestros datos, pero también en el ajuste de los datos de la manera más simple posible.
El objetivo del aprendizaje automático es realizar buenas predicciones sobre datos nuevos obtenidos de una distribución probablemente verdadera (oculta). Lamentablemente, el modelo no puede ver toda la verdad; este solo puede tomar una muestra de un conjunto de datos de entrenamiento. Si un modelo se adapta bien a los ejemplos actuales, ¿cómo podemos confiar en que también realizará buenas predicciones sobre los ejemplos nunca antes vistos?
Guillermo de Ockham, un fraile y filósofo del siglo XIV, amaba la simplicidad. Creía que los científicos debían preferir las fórmulas o teorías más simples en lugar de aquellas más complejas. Para expresar la navaja de Ockham en términos de aprendizaje automático:
Cuanto menos complejo sea un modelo de AA, más probable será que un buen resultado empírico no se deba simplemente a las peculiaridades de la muestra.
En la actualidad, hemos formalizado la navaja de Ockham en los campos de la teoría del aprendizaje estadístico y la teoría del aprendizaje computacional. Estos campos han desarrollado límites de generalización, es decir, una descripción estadística de la capacidad de un modelo para generalizar sobre datos nuevos en función de factores como los siguientes:
- la complejidad del modelo
- el rendimiento del modelo con respecto a los datos de entrenamiento
Si bien el análisis teórico ofrece garantías formales en supuestos idealizados, esos límites pueden ser difíciles de aplicar en la práctica. El Curso intensivo de aprendizaje automático se centra más bien en la evaluación empírica, a fin de juzgar la capacidad de un modelo para generalizar sobre datos nuevos.
Un modelo de aprendizaje automático tiene como objetivo realizar buenas predicciones sobre datos nuevos nunca antes vistos. Pero, si desarrollas un modelo a partir de tu conjunto de datos, ¿cómo obtendrías los datos nunca antes vistos? Una forma es dividir el conjunto de datos en dos subconjuntos:
- Conjunto de entrenamiento: Un subconjunto para entrenar un modelo.
- Conjunto de prueba: Un subconjunto para probar el modelo.
Un buen rendimiento en el conjunto de prueba es un indicador útil de buen rendimiento en los datos nuevos en general, suponiendo lo siguiente:
- El conjunto de prueba es lo suficientemente grande.
- No haces trampa usando el mismo conjunto de prueba una y otra vez.
C.) Las condiciones del machine lerarning supervisado
Las tres suposiciones básicas siguientes guían la generalización:
- Los ejemplos se obtienen independiente e idénticamente (i.i.d) de manera aleatoria de la distribución. En otras palabras, los ejemplos no se influyen entre sí. (Una explicación alternativa: i.i.d. es una forma de hacer referencia a la aleatoriedad de las variables).
- La distribución es estacionaria, es decir, no cambia dentro del conjunto de datos.
- Los ejemplos se obtienen de particiones de la misma distribución.
En la práctica, a veces infringimos estas suposiciones. Por ejemplo:
- Considera un modelo que elige los anuncios para mostrar. La suposición de i.i.d. se infringiría si, en parte, el modelo basara su elección en función de los anuncios que el usuario visualizó anteriormente.
- Considera un conjunto de datos que contenga la información de ventas minoristas de un año. Las compras de los usuarios cambian todas las temporadas, lo cual infringiría la estacionariedad.
Cuando sabemos que se infringe alguna de las tres suposiciones básicas anteriores, debemos prestar mucha atención a las métricas.
Conjuntos de entrenamiento y prueba
Un conjunto de prueba es un conjunto de datos que se usa para evaluar un modelo desarrollado a partir de un conjunto de entrenamiento.
A.) Separación de datos
En el módulo anterior, se presentó la idea de dividir el conjunto de datos en dos subconjuntos:
- Conjunto de entrenamiento: Un subconjunto para entrenar un modelo.
- Conjunto de prueba: Un subconjunto para probar el modelo entrenado.
Imagina dividir el único conjunto de datos de la siguiente manera:
Figura 1. División de un único conjunto de datos en un conjunto de entrenamiento y uno de prueba.
Asegúrate de que tu conjunto de prueba reúna las siguientes dos condiciones:
- Que sea lo suficientemente grande como para generar resultados significativos desde el punto de vista estadístico.
- Que sea representativo de todo el conjunto de datos. En otras palabras, no elijas un conjunto de prueba con características diferentes al del conjunto de entrenamiento.
Si suponemos que el conjunto de prueba reúne estas dos condiciones, tu objetivo es crear un modelo que generalice los datos nuevos de forma correcta. Nuestro conjunto de prueba sirve como proxy para los datos nuevos. Por ejemplo, considera la siguiente figura. Observa que el modelo aprendido para los datos de entrenamiento es muy simple. Este modelo no hace un trabajo perfecto. Algunas predicciones son incorrectas. Sin embargo, este modelo funciona de la misma manera tanto en los datos de prueba como en los de entrenamiento. En otras palabras, este modelo simple no sobreajusta los datos de entrenamiento.
Figura 2. Validación del modelo entrenado con los datos de prueba.
Nunca uses los datos de prueba para el entrenamiento. Si ves resultados sorpresivamente positivos en tus métricas de evaluación, es posible que estés usando los datos de prueba para el entrenamiento. Por ejemplo, tener una precisión alta puede ser un indicativo de que se filtraron datos de prueba en los de entrenamiento.
Por ejemplo, imagina un modelo que prediga si un correo electrónico es spam, tomando como atributos el asunto, el cuerpo y la dirección de correo electrónico del remitente. Distribuimos los datos en conjuntos de entrenamiento y prueba en una proporción de 80 a 20. Después del entrenamiento, el modelo alcanza el 99% de precisión en ambos conjuntos. Esperamos una precisión menor en el conjunto de prueba, por lo que volvemos a analizar los datos y descubrimos que muchos de los ejemplos en este conjunto están duplicados en el conjunto de entrenamiento (arrastramos entradas duplicadas para el mismo spam de una base de datos de entrada antes de separar los datos). Involuntariamente, usamos algunos de los datos de prueba para el entrenamiento y, como resultado, no logramos medir de forma precisa de qué manera el modelo generaliza los datos nuevos.
B.) Ejercicio de Playground
Regresamos a Playground para experimentar con conjuntos de entrenamiento y prueba.
Este ejercicio proporciona un conjunto de prueba y un conjunto de entrenamiento, ambos extraídos del mismo conjunto de datos. De forma predeterminada, la visualización solo muestra el conjunto de entrenamiento. Si también quieres ver el conjunto de prueba, haz clic en la casilla de verificación Mostrar datos de prueba debajo de la visualización.
Validación del modelo
Particionar un conjunto de datos en un conjunto de entrenamiento y uno de prueba te permite juzgar si un modelo determinado realizará generalizaciones eficaces sobre los datos nuevos. Sin embargo, usar solo dos particiones puede no ser suficiente cuando se realizan varias series de ajustes de los hiperparámetros.
En el módulo anterior, se presentó la partición de un conjunto de datos en un conjunto de entrenamiento y otro de prueba. Esta partición te permitió entrenar un conjunto de ejemplos y luego probar el modelo con un conjunto de ejemplos diferente. Con dos particiones, el flujo de trabajo podría verse de la siguiente manera:
Figura 1. ¿Un flujo de trabajo posible?
En la figura, «Ajustar el modelo» significa modificar cualquier aspecto que puedas imaginar del modelo, desde cambiar la tasa de aprendizaje hasta agregar o quitar atributos, o diseñar un modelo completamente nuevo desde cero. Al final de este flujo de trabajo, elijes el modelo que mejor se desempeñe con respecto al conjunto de prueba.
La división del conjunto de datos en dos conjuntos es una buena idea, pero no constituye una panacea. Puedes reducir en gran medida las posibilidades de sobreajuste al particionar el conjunto de datos en los tres subconjuntos que se muestran en la siguiente figura:
Figura 2. División de un único conjunto de datos en tres subconjuntos.
Usa el conjunto de validación para evaluar los resultados del conjunto de entrenamiento. A continuación, usa el conjunto de prueba para verificar la evaluación después de que el modelo haya «pasado» el conjunto de validación. En la siguiente figura, se muestra el nuevo flujo de trabajo:
Figura 3. Un flujo de trabajo más eficaz. ( no considera tanto los datos de prueba)
En este flujo de trabajo mejorado, realiza lo siguiente:
- Selecciona el modelo que mejor se desempeñe con el conjunto de validación.
- Verifica el modelo con respecto al conjunto de prueba.
Este flujo de trabajo es más eficaz porque crea menos exposiciones al conjunto de prueba.
Proceso de Representación
Un modelo de aprendizaje automático no puede ver, oír ni percibir los ejemplos de entrada de forma directa. En su lugar, debes crear una representación de los datos para proporcionarle al modelo un punto de vista útil sobre las cualidades clave de los datos. Es decir, para entrenar un modelo, debes elegir un conjunto de atributos que representen los datos de la mejor manera.
- asignar campos de registros y búferes de protocolo en atributos de AA útiles
- determinar qué cualidades constituyen atributos excelentes
- manejar atributos de valores atípicos
- Investigar propiedades estadísticas de un conjunto de datos
- Entrenar y evaluar un modelo con tf.estimator
a.) Ingeniería de atributos
A diferencia de la programación tradicional, que se centra en el código, los proyectos de aprendizaje automático se enfocan en la representación. Es decir, una forma para perfeccionar los modelos es que los desarrolladores agreguen atributos y los mejoren.
B.) Asignación de datos sin procesar a los atributos
A la izquierda de la Figura 1, se muestran datos sin procesar de una fuente de datos de entrada; a la derecha, se muestra un vector de atributos, que es el conjunto de valores de punto flotante que incluye los ejemplos en el conjunto de datos. La ingeniería de atributos es la transformación de datos sin procesar en un vector de atributos. Ten en cuenta que la ingeniería de atributos implica una gran cantidad de tiempo.
Muchos modelos de aprendizaje automático deben representar los atributos como vectores de números reales ya que los valores de los atributos deben multiplicarse por los pesos del modelo.
Figura 1: La ingeniería de atributos asigna datos sin procesar a los atributos del AA.
C.) Asignación de valores numéricos
Los datos enteros y de punto flotante no necesitan una codificación especial porque se pueden multiplicar por un peso numérico. Como se sugiere en la Figura 2, convertir el valor entero sin procesar 6 en el valor de atributo 6.0 es sencillo:
Figura 2: Asignación de valores enteros a valores de punto flotante
D.) Asignación de valores categóricos
Los atributos categóricos tienen un conjunto discreto de valores posibles. Por ejemplo, podría haber un atributo llamado street_name
con opciones que incluyan las siguientes:
{'Charleston Road', 'North Shoreline Boulevard', 'Shorebird Way', 'Rengstorff Avenue'}
Debido a que los modelos no pueden multiplicar strings por los pesos aprendidos, usamos la ingeniería de atributos para convertir strings en valores numéricos.
Esto se puede realizar mediante la definición de una asignación a partir de los valores de los atributos a números enteros. A esta asignación la llamaremos vocabulario de valores posibles. Debido a que no todas las calles del mundo aparecerán en nuestro conjunto de datos, podemos agrupar todas las demás calles en una categoría general llamada «otras», que es lo que se conoce como un agrupamiento OOV (fuera del vocabulario).
Mediante este enfoque, podemos asignar nombres de calles a números de la siguiente manera:
- Colocar Charleston Road a 0
- asignar North Shoreline Boulevard a 1
- Poner a Shorebird Way a 2
- Defginirle a Rengstorff Avenue a 3
- A tdo lo demás (OOV) a 4
Sin embargo, si incorporamos estos números índice directamente en nuestro modelo, se generarán restricciones que podrían ser un problema:
- Aprenderemos un peso único que aplique a todas las calles. Por ejemplo, si aprendemos un peso 6 para
street_name
, luego lo multiplicaremos por 0 para Charleston Road, por 1 para North Shoreline Boulevard, por 2 para Shorebird Way y así sucesivamente. Considera un modelo que prediga el precio de las casas usandostreet_name
como atributo. Es poco probable que haya un ajuste lineal en el precio basado en el nombre de la calle. Además, esto implicaría que ordenaste las calles según el precio promedio de las casas. Nuestro modelo necesita flexibilidad para aprender los diferentes pesos para cada calle, que se irán agregando al precio estimado usando los otros atributos. - No estamos contemplando los casos en los que
street_name
podría tener múltiples valores. Por ejemplo, muchas casas se encuentran en la intersección entre dos calles y no hay forma de codificar esa información en el valorstreet_name
si este contiene un solo índice.
Para eliminar estas dos restricciones, podemos crear un vector binario para cada atributo categórico de nuestro modelo que represente los valores de la siguiente manera:
- En el caso de los valores que aplican al ejemplo, establecer los elementos correspondientes al vector en
1
. - Establecer todos los demás elementos en
0
.
La longitud de este vector es igual a la cantidad de elementos del vocabulario. Esta representación se denomina codificación one-hot cuando un único valor es 1 y codificación multi-hot cuando varios valores son 1.
La figura 3 ilustra una codificación one-hot de una calle determinada: Shorebird Way. El elemento del vector ejecutable correspondiente a Shorebird Way tiene como valor 1
, mientras que los elementos de todas las demás calles tienen 0
como valor.
Figura 3. Asignación de nombres de calles mediante codificación one-hot.
Este enfoque crea, de manera efectiva, una variable booleana para el valor de cada atributo (p. ej., nombre de la calle). En este caso, si una casa está en la calle Shorebird Way, el valor binario sería 1 únicamente para la calle Shorebird Way. De esta manera, el modelo usa únicamente el peso para la calle Shorebird Way.
De manera similar, si una casa está en la intersección entre dos calles, entonces los dos valores binarios se establecen en 1 y el modelo usa ambos pesos respectivos.
E.) Representación dispersa
Imagina que tienes 1,000,000 nombres de calles diferentes en tu conjunto de datos y quieres incluir a todos como valores para street_name
. Crear de manera explícita un vector binario con 1,000,000 elementos, en los que solo 1 o 2 son verdaderos, sería una representación muy ineficaz en términos de almacenamiento y tiempo a la hora de procesar estos vectores. En este caso, un enfoque común es usar una representación dispersa en la que solo se almacenen los valores que no son cero. En las representaciones dispersas, se aprende un peso modelo independiente para cada valor de atributo, tal como se describió anteriormente.
F.) Cualidades de los buenos atributos
Analizamos formas de asignar datos sin procesar a vectores de atributos adecuados, pero esto es solo parte del trabajo. Ahora, debemos analizar qué tipo de valores conforman buenos atributos en esos vectores de atributos.
G.) Evita los valores de atributos discretos con poco uso
Los buenos valores de atributos deben aparecer más de 5 veces en un conjunto de datos. Esto permite que un modelo aprenda cómo se relaciona este valor de atributo con la etiqueta. Es decir, tener muchos ejemplos con el mismo valor discreto le permite al modelo ver el atributo en diferentes escenarios y, a su vez, determinar cuándo es una buena predicción para la etiqueta. Por ejemplo, es probable que un atributo house_type
contenga muchos ejemplos en los que su valor sea victorian
:
✔This is a good example:house_type: victorian
Del mismo modo, si el valor de un atributo aparece solo una vez o muy de vez en cuando, el modelo no puede realizar predicciones basadas en ese atributo. Por ejemplo, unique_house_id
es un atributos malo porque cada valor solo se puede usar una vez, por lo que el modelo no puede aprender nada:
The following is an example of a unique value. This should be avoided.✘unique_house_id: 8SK982ZZ1242Z
G.) Busca los significados claros y evidentes
Cada atributo debe tener un significado claro y evidente para todas las personas que trabajan en el proyecto. Por ejemplo, considera el siguiente atributo apropiado para la antigüedad de una casa, que se reconoce instantáneamente como la antigüedad en años:
✔The following is a good example of a clear value.house_age: 27
Por el contrario, el siguiente valor de atributo solo es comprensible para la persona que lo creó:
✘The following is an example of a value that is unclear. This should be avoidedhouse_age: 851472000
En algunos casos, son los datos inconsistentes (y no las decisiones de ingeniería incorrectas) los que generan valores poco claros. Por ejemplo, el valor user_age se obtiene a partir de una fuente en la que no se verificaron los valores correctos:
✘The following is an example of noisy/bad data. This should be avoided.user_age: 277
H.) No mezcles valores «mágicos» con datos reales
Los atributos de punto flotante válidos no contienen discontinuidades fuera de rango particulares ni valores «mágicos». Por ejemplo, supongamos que un atributo tiene un valor de punto flotante entre 0 y 1. De esta manera, los siguientes valores son correctos:
✔The following is a good example:quality_rating: 0.82 quality_rating: 0.37
Sin embargo, si un usuario no ingresó un valor de quality_rating
, tal vez el conjunto de datos representó su ausencia con un valor mágico como el siguiente:
✘The following is an example of a magic value. This should be avoided.quality_rating: -1
Para evitar los valores mágicos, convierte el atributo en dos atributos:
- Un atributo contiene solo calificaciones de calidad, nunca valores mágicos.
- Un atributo contiene un valor booleano, que indica si se proporciona
quality_rating
o no. Asigna un nombre comois_quality_rating_defined
a este atributo booleano.
i.) Ten en cuenta la inestabilidad de los sistemas upstream
La definición de un atributo no debe cambiar en el tiempo. Por ejemplo, el siguiente valor es útil porque el nombre de la ciudad probablemente no cambie. (Ten en cuenta que debemos convertir una string como «br/sao_paulo» a un vector de un solo 1 de todas formas).
✔This is a good example:city_id: "br/sao_paulo"
Sin embargo, obtener un valor inferido por otro modelo tiene un costo adicional. Tal vez el valor «219» representa actualmente a San Pablo, pero esa representación podría cambiar fácilmente en una próxima ejecución del otro modelo:
✘The following is an example of a value that could change. This should be avoided.inferred_city_cluster: "219"
J.) Limpieza de datos
En los manzanos, crecen frutas excelentes y otras repletas de gusanos. Aun así, las manzanas que se exhiben en las tiendas refinadas son frutas 100% perfectas. Entre el huerto y la tienda, alguien dedica mucho tiempo a quitar las manzanas en mal estado o acondicionar un poco las más presentables. En su papel de ingeniero de AA, le dedicarás mucho tiempo a desechar ejemplos malos y acondicionar los que sirven. Unas pocas «manzanas en mal estado» pueden arruinar un conjunto de datos grande.
K.) Ajuste de valores de atributos
El ajuste significa convertir los valores de atributos de punto flotante de su rango natural (p. ej., 100 a 900) al rango estándar (p. ej., 0 a 1 o -1 a +1). Si un conjunto de atributos consiste solo en una única función, el ajuste no ofrece ningún beneficio real. Sin embargo, si el conjunto de atributos consiste en varios atributos, el ajuste puede ser útil.
- Acelera la convergencia del descenso de gradientes.
- Permite evitar la «trampa de N/A», en la que un número del modelo se convierte en un NaN (p. ej., cuando un valor excede el límite de precisión de punto flotante durante el entrenamiento) y, debido a operaciones matemáticas, el resto de los números en el modelo finalmente se convierte en NaN.
- Permite que el modelo aprenda las ponderaciones correspondientes para cada atributo. Sin el ajuste de atributos, el modelo les prestará demasiada atención a los atributos con un rango más amplio.
No es necesario indicar el mismo ajuste para cada atributo de punto flotante. No hay problema si el Atributo A se ajusta de -1 a +1 y el Atributo B se ajusta de -3 a +3. Sin embargo, el modelo tendrá problemas si el Atributo B se escala de 5,000 a 100,000.
L.) Manejos de valores atípicos extremos
El siguiente gráfico representa un atributo llamado roomsPerPerson
del conjunto de datos Viviendas de California. El valor de roomsPerPerson
se obtiene al dividir la cantidad total de habitaciones en un área por la población en esa área. El gráfico muestra que la gran mayoría de áreas en California tiene una o más habitaciones por persona. Pero veamos el eje x.
Figura 4. Una cola muy larga.
¿Cómo puedo minimizar la influencia de esos valores atípicos extremos? Una forma sería obtener el logaritmo de cada valor:
Figura 5. El ajuste logarítmico todavía tiene cola.
El ajuste logarítmico logra un mejor resultado, pero todavía hay una cola importante de los valores atípicos. Apliquemos otra estrategia. ¿Y si aplicamos un «límite» o «tope» al valor máximo de roomsPerPerson
en una cifra arbitraria, como 4.0?
Figura 6. Aplicar un límite a los valores de atributos en 4.0
El límite del valor de atributo en 4.0 no implica que ignoraremos todos los valores mayores a 4.0. Quiere decir que todos los valores mayores a 4.0 ahora son 4.0. Esto explica la elevación extraña en 4.0. A pesar de esa elevación, el conjunto de atributos ajustado ahora es más útil que los datos originales.
M.) Discretización
El siguiente gráfico muestra la prevalencia relativa de las casas en diferentes latitudes de California. Nota el agrupamiento: Los Ángeles está casi en la latitud 34 y San Francisco, en la 38.
Figura 7. Casas por latitud.
En el conjunto de datos, latitude
es un valor de punto flotante. Sin embargo, no tiene sentido representar latitude
como un atributo de punto flotante en nuestro modelo. Esto se debe a que existe una relación no lineal entre la latitud y los valores de las viviendas. Por ejemplo, las casas en la latitud 35 no son 35/34 más costosas (o menos costosas) que las casas en la latitud 34. Aun así, las latitudes individuales probablemente son un muy buen predictor de los valores de casas.
Para que la latitud sea un predictor útil, debemos dividir las latitudes en discretizaciones, como se sugiere en la siguiente figura:
Figura 8. Valores de discretización.
En lugar de tener un atributo de punto flotante, ahora tenemos 11 atributos booleanos diferentes (LatitudeBin1
, LatitudeBin2
, …, LatitudeBin11
). Tener 11 atributos separados no es muy elegante, por lo que debemos unirlos en un único vector de 11 elementos. Esto nos permite representar la latitud 37.4 de la siguiente manera:
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
Gracias a la discretización, nuestro modelo ahora puede aprender ponderaciones completamente diferentes para cada latitud.
N.) Arrastre
Hasta ahora, asumimos que todos los datos que se usaron para el entrenamiento y la prueba son confiables. En la práctica, muchos ejemplos de los conjuntos de datos no son confiables debido a una, o varias, de las siguientes razones:
- Valores omitidos. Por ejemplo, una persona olvidó ingresar un valor para la antigüedad de una casa.
- Ejemplos duplicados. Por ejemplo, un servidor subió por error los mismos registros dos veces.
- Etiquetas incorrectas. Por ejemplo, una persona etiquetó incorrectamente una imagen de un roble como un arce.
- Valores de atributos incorrectos. Por ejemplo, alguien escribió un dígito de más o un termómetro quedó al sol.
Cuando detectes el ejemplo incorrecto, quítalo del conjunto de datos para «corregirlo». Para detectar valores omitidos o ejemplos duplicados, puedes escribir un programa simple. Detectar valores de atributos o etiquetas incorrectos es mucho más difícil.
Además de detectar ejemplos incorrectos individuales, debes detectar los datos incorrectos en el valor total. Los histogramas son muy útiles para visualizar los datos en el valor total. Además, las siguientes estadísticas pueden ser de utilidad:
- máximo y mínimo
- media y mediana
- desviación del estándar
Considera generar listas de los valores más comunes para los atributos discretos. Por ejemplo, la cantidad de ejemplos con country:uk
debe coincidir con la cantidad esperada. ¿language:jp
debe ser el idioma más común en tu conjunto de datos?
O.) Conoce tus datos
Sigue estas reglas:
- Ten en cuenta cómo deben verse los datos:
- Comprueba que los datos cumplan estas expectativas (o, en caso contrario, que puedas explicarlo).
- Vuelve a comprobar que los datos de entrenamiento concuerden con otras fuentes (p. ej., paneles de control).
Cuida los datos como si fuera código esencial. El AA correcto se basa en datos confiables.
P.) Ejercicio de programación
En este ejercicio de programación, crearás un conjunto de atributos mínimo y de calidad:
Los ejercicios de programación se ejecutan directamente en tu navegador mediante Colaboratory (no es necesario configurar nada). Esta plataforma es compatible con la mayoría de los navegadores principales y se prueba minuciosamente en las versiones de escritorio de Chrome y Firefox. Si prefieres descargar y ejecutar los ejercicios sin conexión, consulta estas instrucciones para configurar un entorno local.
Combinaciones de atributos
Una combinación de atributos es un atributo sintético formado al multiplicar (combinar) dos o más atributos. La multiplicación de combinaciones de atributos puede proporcionar capacidades predictivas más allá de las que esos atributos pueden ofrecer de manera individual.
a.) Codificación de no linealidad
En las Figuras 1 y 2, imagina lo siguiente:
- Los puntos azules representan árboles enfermos.
- Los puntos anaranjados representan árboles sanos.
Figura 1. ¿Este es un problema lineal?
¿Puedes trazar una línea que separe eficientemente los árboles enfermos de los sanos? Por supuesto. Este es un problema lineal. La línea no será perfecta. Es posible que uno o dos árboles enfermos se encuentren del lado «sano», pero la línea será un buen predictor.
Ahora observa la siguiente figura:
Figura 2. ¿Este es un problema lineal?
¿Puedes trazar una sola línea recta que separe los árboles enfermos de los árboles sanos? No, no puedes. Este es un problema no lineal. Cualquier línea que dibujes será un predictor deficiente del estado de los árboles.
Figura 3. Una sola línea no puede separar las dos clases.
Para resolver el problema no lineal que se muestra en la Figura 2, crea una combinación de atributos. Una combinación de atributos es un atributo sintético que codifica la no linealidad en el espacio de los atributos al multiplicar dos o más atributos de entrada en conjunto. (El término combinación proviene de combinación lineal). Creemos una combinación de atributos denominada
al combinar y
Esta combinación de atributos
generada recientemente se tratará como cualquier otro atributo. La fórmula lineal pasa a ser la siguiente:
Un algoritmo lineal puede aprender una ponderación para
como lo haría para y . En otras palabras, aunque codifique información no lineal, no necesitas cambiar la manera en la que el modelo lineal se entrena para determinar el valor de
B.) Tipos de combinaciones de atributos
Es posible crear muchos tipos de combinaciones de atributos diferentes. Por ejemplo:
[A X B]
: Una combinación de atributos formada al multiplicar los valores de dos atributos.[A x B x C x D x E]
: Una combinación de atributos formada al multiplicar los valores de cinco atributos.[A x A]
: Una combinación de atributos formada al elevar al cuadrado un solo atributo.
Gracias al descenso de gradiente estocástico, los modelos lineales se pueden entrenar de manera eficaz. En consecuencia, la complementación de los modelos lineales ajustados con combinaciones de atributos tradicionalmente ha sido una forma eficaz de entrenar conjuntos de datos de escala masiva.
C.) Vectores de un solo 1 combinados
Hasta ahora, nos hemos concentrado en la combinación de dos atributos de punto flotante individuales. En la práctica, los modelos de aprendizaje automático pocas veces combinan atributos continuos. Sin embargo, los modelos de aprendizaje automático con frecuencia combinan vectores con atributos de un solo 1. Piensa en combinaciones de atributos de vectores de un solo 1 como conjunciones lógicas. Por ejemplo, imagina que tenemos dos atributos: idioma y país. Una codificación de un solo 1 de cada una de ellas genera vectores con atributos binarios que pueden interpretarse como country=USA, country=France
o language=English, language=Spanish
. Luego, si realizas una combinación de atributos de estas codificaciones de un solo 1, obtienes atributos binarios que pueden interpretarse como conjunciones lógicas, como las siguientes:
country:usa AND language:spanish
Como otro ejemplo, imagina que discretizas latitud y longitud, lo que produce vectores de atributos de un solo 1 con cinco elementos. Por ejemplo, una latitud y una longitud determinadas podrían representarse de la siguiente manera:
binned_latitude = [0, 0, 0, 1, 0] binned_longitude = [0, 1, 0, 0, 0]
Imagina que creas una combinación de atributos de estos dos vectores de atributos:
binned_latitude X binned_longitude
Esta combinación de atributos es un vector de un solo 1 con 25 elementos (24 ceros y 1 uno). El único 1
en la combinación identifica una conjunción en particular de latitud y longitud. Por lo tanto, el modelo puede aprender asociaciones particulares sobre esa conjunción.
Imagina que discretizamos latitud y longitud de manera mucho más grosera, de la siguiente forma:
binned_latitude(lat) = [ 0 < lat <= 10 10 < lat <= 20 20 < lat <= 30 ] binned_longitude(lon) = [ 0 < lon <= 15 15 < lon <= 30 ]
La creación de una combinación de atributos de esas discretizaciones groseras genera que el atributo sintético tenga los siguientes significados:
binned_latitude_X_longitude(lat, lon) = [ 0 < lat <= 10 AND 0 < lon <= 15 0 < lat <= 10 AND 15 < lon <= 30 10 < lat <= 20 AND 0 < lon <= 15 10 < lat <= 20 AND 15 < lon <= 30 20 < lat <= 30 AND 0 < lon <= 15 20 < lat <= 30 AND 15 < lon <= 30 ]
Ahora imagina que nuestro modelo necesita predecir el nivel de satisfacción de los dueños de perros con respecto a sus mascotas en base a dos atributos:
- Tipo de comportamiento (ladrido, llanto, cariño, etc.)
- Hora del día
Si desarrollamos una combinación de atributos a partir de estas dos atributos:
[behavior type X time of day]
obtendremos una capacidad mucho más predictiva que con cada atributo por su cuenta. Por ejemplo, si un perro llora (de felicidad) a las 5:00 p.m. cuando el dueño regresa del trabajo, eso será un excelente predictor positivo de la satisfacción del dueño. Si llora (tal vez con tristeza) a las 3:00 a.m. cuando el dueño duerme profundamente, eso probablemente será un gran predictor negativo de la satisfacción del dueño.
El aprendizaje lineal se ajusta bien a los datos masivos. El uso de combinaciones de atributos y conjuntos datos masivos es una estrategia eficiente para aprender modelos de alta complejidad. Las redes neuronales proporcionan otra estrategia.
D.) Ejercicios de Playground
A continuación siga este playground sobre este tema
E.) Ejercicio de programación
En el siguiente ejercicio, explorarás las combinaciones de atributos en TensorFlow:
Los ejercicios de programación se ejecutan directamente en tu navegador mediante Colaboratory (no es necesario configurar nada). Esta plataforma es compatible con la mayoría de los navegadores principales y se prueba minuciosamente en las versiones de escritorio de Chrome y Firefox. Si prefieres descargar y ejecutar los ejercicios sin conexión, consulta estas instrucciones para configurar un entorno local.
F.) ejercicio de evaluación
Explora las opciones que aparecen a continuación.
roomsPerPerson
y el precio de vivienda?G.) Ejercicio de Playground
Antes de mirar el vídeo o leer la documentación, completa este ejercicio que explora el uso excesivo de las combinaciones de atributos.
Regularización para lograr simplicidad
Regularización significa penalizar la complejidad de un modelo para reducir el sobreajuste.
- Aprender sobre las compensaciones entre la complejidad y la generalización
- Experimentar con la regularización L2
A.) Regularización L₂
Ten en cuenta la siguiente curva de generalización, que muestra la pérdida del conjunto de entrenamiento y el conjunto de validación con respecto a la cantidad de iteraciones de entrenamiento.
Figura 1. Pérdida en los conjuntos de entrenamiento y de validación.
En la Figura 1, se muestra un modelo en el que la pérdida de entrenamiento se reduce gradualmente, pero la pérdida de validación eventualmente aumenta. En otras palabras, esta curva de generalización muestra que el modelo se sobreajusta en función de los datos en el conjunto de entrenamiento. Si aplicamos nuestra Navaja de Ockham interna, tal vez podamos prevenir el sobreajuste mediante la penalización de modelos complejos, un principio denominado regularización.
En otras palabras, en lugar de solo intentar reducir la pérdida (minimización del riesgo empírico):
ahora minimizaremos la pérdida más la complejidad, lo que se denomina minimización del riesgo estructural:
Nuestro algoritmo de optimización de entrenamiento ahora es una función de dos términos: el término de pérdida, que mide qué tan bien se ajusta el modelo a los datos, y el término de regularización, que mide la complejidad del modelo.
El Curso intensivo de aprendizaje automático se centra en dos formas comunes (y, de cierto modo, relacionadas) de interpretar la complejidad del modelo:
- la complejidad del modelo como una función de las ponderaciones (o pesos) de todos los atributos que contiene
- la complejidad del modelo como una función de la cantidad total de atributos con ponderaciones que no sean cero (este enfoque se trata en un módulo más adelante)
Si la complejidad del modelo es una función de ponderaciones, una ponderación de atributos con un valor absoluto alto es más complejo que una con un valor absoluto bajo.
Podemos cuantificar la complejidad mediante la fórmula de la regularización L2, que define el término de regularización como la suma de los cuadrados de todas las ponderaciones de atributos:
En esta fórmula, las ponderaciones cerca de cero tienen poco efecto en la complejidad del modelo, mientras que las ponderaciones atípicas pueden tener un gran impacto.
Por ejemplo, un modelo lineal con las siguientes ponderaciones:
tiene un término de regularización L2 de 26.915:
B.) FUNCION Lambda
Para definir el impacto general del término de regularización, los programadores de modelos multiplican su valor por un escalar conocido como lambda (también denominado tasa de regularización). Es decir, el objetivo de los programadores de modelos es lograr lo siguiente:
La regularización L2 tiene el siguiente efecto en un modelo
- Lleva los valores de las ponderaciones hacia 0 (pero no exactamente 0).
- Lleva la media de las ponderaciones hacia 0, con una distribución normal (en forma de campana o gaussiana).
Aumentar el valor de lambda fortalece el efecto de la regularización. Por ejemplo, el histograma de ponderaciones para un valor alto de lambda puede verse como se muestra en la Figura 2.
Figura 2. Histograma de ponderaciones.
Reducir el valor de lambda tiende a lograr un histograma más plano, como se muestra en la Figura 3.
Figura 3. Histograma de ponderaciones producido por un valor de lambda más bajo.
Al elegir un valor de lambda, el objetivo es lograr el balance adecuado entre la simpleza y el ajuste de los datos de entrenamiento:
- Si el valor de lambda es demasiado alto, el modelo será simple, pero corres el riesgo de sub ajustar los datos. El modelo no aprenderá lo suficiente sobre los datos de entrenamiento para hacer predicciones útiles.
- Si el valor de lambda es demasiado bajo, el modelo será más complejo, pero corres el riesgo de sobre ajustar los datos. El modelo aprenderá demasiado sobre las particularidades de los datos de entrenamiento y no será capaz de generalizar con respecto a datos nuevos.
El valor ideal de lambda produce un modelo que generaliza sin problemas los datos nuevos, nunca antes vistos. Lamentablemente, el valor ideal de lambda, depende de los datos, por lo que deberás realizar algunos.
Haz clic aquí para obtener información sobre la regularización L2 y la tasa de aprendizaje.
Pero
(destacado en negrita arriba), con un valor al cuadrado de 25, conforma casi toda la complejidad. La suma de los cuadrados de las otras cinco ponderaciones agrega solo 1.915 al término de la regularización L2.
C) Ejercicio de Playground
D.) Evaluación
1.) Explora las opciones que aparecen a continuación.
Imagina un modelo lineal con 100 atributos de entrada:
- 10 son muy informativas.
- 90 no son informativas.
Asume que todos los atributos tienen valores entre -1 y 1. ¿Cuáles de las siguientes afirmaciones son verdaderas?
Regresión logística
En lugar de predecir exactamente 0 o 1, la regresión logística genera una probabilidad, con un valor entre 0 y 1, exclusivo. Por ejemplo, supongamos que un modelo de regresión logística para la detección de spam infiere un valor de 0.932 en un mensaje de correo electrónico en particular. Esto quiere decir que la probabilidad de que el correo sea spam es del 93.2%. Más concretamente, significa que, en el límite de ejemplos de entrenamiento infinitos, el conjunto de ejemplos para los que el modelo predice 0.932 será realmente spam el 93.2% de las veces, mientras que el 6.8% restante no lo será.
A.) Cálculo de probabilidades
Muchos problemas exigen como resultado el cálculo de una probabilidad. La regresión logística es un mecanismo extremadamente eficiente para calcular probabilidades. En la práctica, puedes usar la probabilidad resultante de una de las dos maneras siguientes:
- «tal cual»
- convertida en una categoría binaria
Veamos cómo podemos usar la probabilidad «tal cual». Supongamos que creamos un modelo de regresión logística para predecir la probabilidad de que un perro ladre durante la noche. A esa probabilidad la llamaremos:
p(bark | night)
Si el modelo de regresión logística predice una probabilidad p(bark | night)
de 0.05, en un año, los dueños de perros se despertarían aproximadamente 18 veces:
startled = p(bark | night) * nights 18 ~= 0.05 * 365
En muchos casos, representarás el resultado de la regresión logística como la solución a un problema de clasificación binaria, donde el objetivo es predecir correctamente una de dos etiquetas posibles (p. ej., «es spam» o «no es spam»). Más adelante, hay un módulo dedicado a ese tema.
Posiblemente te preguntes de qué manera un modelo de regresión logística puede garantizar un resultado que siempre esté entre 0 y 1. Como suele pasar, una función sigmoidea, definida a continuación, produce un resultado con esas mismas características:
La función sigmoidea genera la siguiente representación:
Figura 1: Función sigmoidea
Si z
representa el resultado de la capa lineal de un modelo entrenado con regresión logística, la función sigmoidea (z) generará un valor (una probabilidad) entre 0 y 1. En términos matemáticos:
donde:
- y’ es el resultado del modelo de regresión logística para un ejemplo en particular.
- z es b + w1x1 + w2x2 + … wNxN
- Los valores w son los pesos aprendidos del modelo, y b es la ordenada al origen.
- Los valores x son los valores de atributo para un ejemplo en particular.
Debes tener en cuenta que z también se representa como logaritmo de probabilidad, porque el valor inverso de la función sigmoidea indica que z
z puede definirse como el logaritmo de la probabilidad de la etiqueta «1» (p. ej., «el perro ladra») dividida por la probabilidad de la etiqueta «0» (p. ej., «el perro no ladra»):
Esta es la función sigmoidea con las etiquetas de AA:
Figura 2: Resultado de la regresión logística
B.) Entrenamiento de modelos
B.1) Función de pérdida para la regresión logística
La función de pérdida para la regresión lineal es una pérdida cuadrática. La función de pérdida para la regresión logística es la Pérdida logística, que se define de la siguiente manera:
donde:
- (x,y)€ D es el conjunto de datos que contiene muchos ejemplos etiquetados, en pares (x,y).
- y es la etiqueta en un ejemplo etiquetado. Dado que se trata de regresión logística, cada valor de y debe ser 0 o 1.
- y’ es el valor predicho (un valor entre 0 y 1), dado el conjunto de atributos en x.
La ecuación para la Pérdida logística está íntimamente relacionada con la dimensión de la entropía de Shannon en el ámbito de la teoría de la información. También es el logaritmo negativo de la función de probabilidad, si adoptamos la distribución de Bernoulli de y. De hecho, si minimizamos la función de pérdida, obtenemos un rendimiento estimado máximo de probabilidad.
B2.) Regularización en la regresión logística
La regularización es sumamente importante en el modelo de regresión logística. Sin regularización, la naturaleza asintótica de la regresión logística seguiría teniendo una tendencia de pérdida de 0 en grandes dimensiones. En consecuencia, la mayoría de los modelos de regresión logística usan una de las dos estrategias que se describen a continuación para disminuir la complejidad del modelo:
- Regularización L2.
- Interrupción anticipada, es decir, limitar el número de pasos de entrenamiento o la tasa de aprendizaje.
(Hablaremos sobre una tercera estrategia —regularización de L1— en un próximo módulo).
Imagina que asignas un ID único a cada ejemplo y los unes a su propio atributo. Si no especificas una función de regularización, el modelo se sobreajustará por completo. El motivo es que el modelo intentará llevar las pérdidas a cero en todos los ejemplos sin conseguirlo, lo que hará que los pesos del atributo de cada indicador lleguen a +infinito o -infinito. Esto puede suceder en datos de grandes dimensiones con combinaciones de atributos, cuando hay una gran cantidad de combinaciones poco comunes que suceden solo en un ejemplo dado.
Afortunadamente, este problema se evita con el uso de L2 o interrupción anticipada.
- Los modelos de regresión logística generan probabilidades.
- La Pérdida logística es la función de pérdida para la regresión logística.
- Muchos practicantes usan la regresión logística de forma extensiva.
Clasificación
En este módulo, se muestra cómo la regresión logística puede utilizarse para tareas de clasificación y se explora cómo evaluar la efectividad de los modelos de clasificación.
- evaluar la precisión y la exactitud de un modelo de regresión logística
- comprender las curvas ROC y AUC
A.) Umbral
La regresión logística devuelve una probabilidad. Puedes usar la probabilidad devuelta «como es» (por ejemplo, la probabilidad de que el usuario haga clic en este anuncio es 0.00023) o convertirla a un valor binario (por ejemplo, este correo electrónico es spam).
Un modelo de regresión logística que devuelve 0.9995 para un mensaje de correo electrónico en particular predice que es muy probable que sea spam. A la inversa, otro mensaje de correo electrónico con una predicción del 0.0003 en ese mismo modelo de regresión logística indica que es muy probable que no sea spam. Sin embargo, ¿qué ocurre con un mensaje de correo electrónico con una predicción de 0.6? Para asignar un valor de regresión logística a una categoría binaria, debes definir un umbral de clasificación (también denominado umbral de decisión). Un valor por encima de ese umbral indica «es spam»; un valor por debajo indica «no es spam». Resulta tentador suponer que el umbral de clasificación siempre debe ser 0.5, pero los umbrales dependen de cada problema y, por lo tanto, son valores que se deben ajustar.
En las siguientes secciones, se observan en más detalle las métricas que puedes usar para evaluar las predicciones de un modelo de clasificación, así como el impacto de cambiar el umbral de clasificación en estas predicciones.
b.) Verdadero o falso y positivo o negativo
En esta sección, definiremos los componentes básicos de las métricas que utilizaremos para evaluar modelos de clasificación. Pero primero, una fábula:
Fábula de Esopo: El joven y el lobo (versión comprimida)
Un joven pastor se aburre de cuidar el rebaño del pueblo y, para divertirse, grita: «¡Lobo!», aunque no hay ningún lobo a la vista. Los vecinos corren para proteger el rebaño, pero se enojan mucho al descubrir que el joven solo estaba bromeando.
[Repite el párrafo anterior N veces].
Una noche, el joven pastor ve un lobo real acercándose al rebaño y grita: «¡Lobo!». Los vecinos se niegan a ser engañados otra vez y se quedan en sus casas. El hambriento lobo convierte el rebaño en costillas de cordero. El pueblo comienza a sentirse hambriento. A continuación, se desata el pánico.
Hagamos las siguientes definiciones:
- «Lobo» es una clase positiva.
- «Ningún lobo» es una clase negativa.
Podemos resumir nuestro modelo «predicción de lobos» con una matriz de confusión de 2×2 que muestra los cuatro resultados posibles:
Verdadero positivo (VP):
|
Falso positivo (FP):
|
Falso negativo (FN):
|
Verdadero negativo (VN):
|
Un verdadero positivo es un resultado en el que el modelo predice correctamente la clase positiva. De manera similar, un verdadero negativo es un resultado en el que el modelo predice correctamente la clase negativa.
Un falso positivo es un resultado en el que el modelo predice incorrectamente la clase positiva. Y un falso negativo es un resultado en el que el modelo predice incorrectamente la clase negativa.
En las siguientes secciones, observaremos cómo evaluar los modelos de clasificación con métricas derivadas de estos cuatro resultados.
E.) Exactitud
La exactitud es una métrica para evaluar modelos de clasificación. Informalmente, la exactitud es la fracción de predicciones que el modelo realizó correctamente. Formalmente, la exactitud tiene la siguiente definición:
En la clasificación binaria, la exactitud también se puede calcular en términos de positivos y negativos de la siguiente manera:
Donde VP = Verdaderos positivos, VN = Verdaderos negativos, FP = Falsos positivos y FN = Falsos negativos.
Calcularemos la precisión del siguiente modelo, que clasificó 100 tumores como malignos (la clase positiva) o benignos (la clase negativa):
Verdadero positivo (VP):
|
Falso positivo (FP):
|
Falso negativo (FN):
|
Verdadero negativo (VN):
|
La exactitud resulta ser de 0.91 o 91% (91 predicciones correctas de 100 ejemplos totales). Eso significa que nuestro clasificador de tumores está haciendo un buen trabajo en la identificación de malignidades, ¿no es cierto?
De hecho, hagamos un análisis más detallado de los positivos y negativos para conocer mejor el rendimiento de nuestro modelo.
De los 100 ejemplos de tumores, 91 son benignos (90 VN y 1 FP) y 9 son malignos (1 VP y 8 FN).
De los 91 tumores benignos, el modelo identifica correctamente 90 como benignos. Eso es bueno. Sin embargo, de los 9 tumores malignos, el modelo solo identifica correctamente 1 como maligno; este es un resultado terrible, ya que 8 de 9 malignidades no se diagnostican.
F.) Precisión y exhaustividad
F.1) Precisión
La precisión intenta responder a la siguiente pregunta:
¿Qué proporción de identificaciones positivas fue correcta?
La precisión se define de la siguiente manera:
Calculemos la precisión de nuestro modelo de AA en la sección anterior que analiza tumores:
Verdaderos positivos (VP): 1 | Falsos positivos (FP): 1 |
Falsos negativos (FN): 8 | Verdaderos negativos (VN): 90 |
Nuestro modelo tiene una precisión de 0.5, es decir, cuando predice que un tumor es maligno, acierta el 50% de las veces.
F.2) Exhaustividad
La exhaustividad intenta responder a la siguiente pregunta:
¿Qué proporción de positivos reales se identificó correctamente?
La exhaustividad se define de la siguiente manera:
Calculemos la recuperación de nuestro clasificador de tumores:
Verdaderos positivos (VP): 1 | Falsos positivos (FP): 1 |
Falsos negativos (FN): 8 | Verdaderos negativos (VN): 90 |
Nuestro modelo tiene una recuperación de 0.11. Es decir, identifica correctamente el 11% de los tumores malignos.
G.) Precisión y exhaustividad: Una lucha incesante
Para evaluar completamente la efectividad de un modelo, debemos examinar la precisión y la recuperación. Lamentablemente, con frecuencia hay tensión entre precisión y exhaustividad. Esto quiere decir que, al mejorar la precisión, generalmente se reduce la exhaustividad, y viceversa. Para explorar esta noción, observa la siguiente figura, que muestra 30 predicciones realizadas con un modelo de clasificación de correo electrónico. Las que se encuentran a la derecha del umbral de clasificación se clasifican como «es spam», mientras que las de la izquierda se clasifican como «no es spam».
Figura 1. Clasificación de correos electrónicos como «es spam» o «no es spam».
Calculemos la precisión y la exhaustividad en función de los resultados que se muestran en la Figura 1:
Verdaderos positivos (VP): 8 | Falsos positivos (FP): 2 |
Falsos negativos (FN): 3 | Verdaderos negativos (VN): 17 |
La precisión mide el porcentaje de correos electrónicos marcados como spam que se clasificaron correctamente, es decir, el porcentaje de puntos a la derecha de la línea del umbral que aparecen de color verde en la Figura 1:
La exhaustividad mide el porcentaje de correos electrónicos reales que se clasificaron correctamente, es decir, el porcentaje de puntos verdes que aparecen a la derecha de la línea del umbral en la Figura 1:
La Figura 2 muestra el efecto de aumentar el umbral de clasificación.
Figura 2. Aumento del umbral de clasificación.
El número de falsos positivos disminuye, pero los falsos negativos aumentan. Como resultado, aumenta la precisión, mientras que la exhaustividad disminuye:
Verdaderos positivos (VP): 7 | Falsos positivos (FP): 1 |
Falsos negativos (FN): 4 | Verdaderos negativos (VN): 18 |
A la inversa, la Figura 3 muestra el efecto de disminuir el umbral de clasificación (de su posición original en la Figura 1).
Figura 3. Disminución del umbral de clasificación.
Los falsos positivos aumentan y los falsos negativos disminuyen. Como resultado, esta vez la precisión disminuye y aumenta la exhaustividad:
Verdaderos positivos (VP): 9 | Falsos positivos (FP): 3 |
Falsos negativos (FN): 2 | Verdaderos negativos (VN): 16 |
Se han desarrollado diferentes métricas que se basan tanto en la precisión como en la exhaustividad. Por ejemplo, consulta el valor F.
Mientras que un 91% de exactitud podría parecer bueno a primera vista, otro modelo de clasificación de tumores que siempre predijera benigno lograría la misma exactitud (91/100 predicciones correctas) en nuestros ejemplos. En otras palabras, nuestro modelo no es mejor que otro que tenga una capacidad predictiva de cero para distinguir tumores malignos de tumores benignos.
La exactitud sola no muestra el panorama completo cuando se trabaja con un conjunto de datos desequilibrados, como este, donde hay una disparidad significativa entre el número de etiquetas positivas y negativas.
En la próxima sección, observaremos dos métricas que resultan mejores para evaluar problemas de clase desequilibrada: precisión y exhaustividad.
H.) EVALUACION
(exactitud, precisión, exhaustividad)
H.1) EXACTITUD
Explora las opciones que aparecen a continuación.
H.2) Precisión
Explora las opciones que aparecen a continuación.
H.3) Exhaustividad
Explora las opciones que aparecen a continuación.
I.) EVALUACION : Exactitud y recuperación
Explora las opciones que aparecen a continuación.
J.) Clasificación: ROC y AUC
J.1) .) Curva ROC
Una curva ROC (curva de característica operativa del recepto) es un gráfico que muestra el rendimiento de un modelo de clasificación en todos los umbrales de clasificación. Esta curva representa dos parámetros:
- Tasa de verdaderos positivos
- Tasa de falsos positivos
Tasa de verdaderos positivos (TPR) es sinónimo de exhaustividad y, por lo tanto, se define de la siguiente manera:
Tasa de falsos positivos (FPR) se define de la siguiente manera:
Una curva ROC representa TPR frente a FPR en diferentes umbrales de clasificación. Reducir el umbral de clasificación clasifica más elementos como positivos, por lo que aumentarán tanto los falsos positivos como los verdaderos positivos. En la siguiente figura, se muestra una curva ROC típica.
Figura 4. Tasa de VP frente a FP en diferentes umbrales de clasificación.
Para calcular los puntos en una curva ROC, podríamos evaluar un modelo de regresión logística muchas veces con diferentes umbrales de clasificación, pero esto es ineficiente. Afortunadamente, existe un algoritmo eficiente basado en ordenamiento que puede brindarnos esta información, denominado AUC.
J.2.) Área bajo la curva ROC
AUC significa «área bajo la curva ROC». Esto significa que el AUC mide toda el área bidimensional por debajo de la curva ROC completa (piensa en un cálculo integral) de (0,0) a (1,1).
Figura 5. AUC (área bajo la curva ROC).
El AUC proporciona una medición agregada del rendimiento en todos los umbrales de clasificación posibles. Una forma de interpretar el AUC es como la probabilidad de que el modelo clasifique un ejemplo positivo aleatorio más alto que un ejemplo negativo aleatorio. Observa, a modo de ilustración, los siguientes ejemplos, que están ordenados de izquierda a derecha en orden ascendente con respecto a las predicciones de regresión logística:
Figura 6. Predicciones en orden ascendente con respecto a la clasificación de regresión logística.
En ete caso AUC representa la probabilidad de que un ejemplo aleatorio positivo (verde) se posicione a la derecha de un ejemplo aleatorio negativo (rojo).
El AUC oscila en valor del 0 al 1. Un modelo cuyas predicciones son un 100% incorrectas tiene un AUC de 0.0; otro cuyas predicciones son un 100% correctas tiene un AUC de 1.0.
Siempre el AUC es conveniente por las dos razones siguientes:
- AUC es invariable con respecto a la escala. Mide qué tan bien se clasifican las predicciones, en lugar de sus valores absolutos.
- Tambien AUC es invariable con respecto al umbral de clasificación. Mide la calidad de las predicciones del modelo, sin tener en cuenta qué umbral de clasificación se elige.
Sin embargo, estas dos razones tienen algunas advertencias, que pueden limitar la utilidad del AUC en determinados casos:
- La invariabilidad de escala no siempre es conveniente. Por ejemplo, en algunas ocasiones, realmente necesitamos resultados de probabilidad bien calibrados, y el AUC no nos indicará eso.
- Consideremopds que la invariabilidad del umbral de clasificación no siempre es conveniente. En los casos en que hay amplias discrepancias en las consecuencias de los falsos negativos frente a los falsos positivos, es posible que sea fundamental minimizar un tipo de error de clasificación. Por ejemplo, al realizar la detección de spam de correo electrónico, es probable que quieras priorizar la minimización de los falsos positivos (aunque eso resulte en un aumento significativo de los falsos negativos). El AUC no es una métrica útil para este tipo de optimización.
K.) EVALUACION: clasificacion (ROC y AUC)
Explora las opciones que aparecen a continuación.
l.) AUC y ajuste de predicciones
Explora las opciones que aparecen a continuación.
M.) Sesgo de predicción
Las predicciones de regresión logística no deben tener sesgo. Esto significa lo siguiente:
«promedio de predicciones» debe ser ≈ «promedio de observaciones»
El sesgo de predicción es una cantidad que mide qué tan alejados están esos dos promedios. Esto significa lo siguiente:
Un margen de predicción significativamente distinto de cero revela que hay un error en alguna parte del modelo, ya que indica que el modelo es incorrecto con respecto a la frecuencia con la que ocurren las etiquetas positivas.
Por ejemplo, supongamos que sabemos que, en promedio, el 1% de todos los correos electrónicos son spam. Si no sabemos absolutamente nada sobre un determinado correo electrónico, debemos predecir que tiene un 1% de probabilidades de ser spam. De manera similar, un buen modelo de spam debería predecir en promedio que los correos electrónicos tienen un 1% de probabilidades de ser spam. (En otras palabras, si promediamos las probabilidades predichas de cada correo electrónico individual de ser spam, el resultado debería ser 1%). Si, en lugar de eso, la predicción promedio del modelo es del 20% de probabilidad de ser spam, podemos concluir que muestra sesgo de predicción.
Las posibles causas fundamentales del sesgo de predicción son las siguientes:
- conjunto de atributos incompleto
- conjunto de datos contaminado
- canalización con errores
- muestra de entrenamiento con sesgo
- regularización excesivamente fuerte
Es posible que te sientas tentado a corregir el sesgo de predicción a través de un procesamiento posterior del modelo aprendido, es decir, agregando un nivel de calibración que ajuste el resultado del modelo para reducir el sesgo de predicción. Por ejemplo, si tu modelo tiene más del 3% de sesgo, podrías agregar un nivel de calibración que reduzca la predicción media en un 3%. Sin embargo, agregar un nivel de calibración no es una buena idea, debido a las siguientes razones:
- Estarás solucionando el síntoma en lugar de la causa.
- Crearás un sistema frágil que deberás mantener actualizado.
En lo posible, evita los niveles de calibración. Los proyectos que usan niveles de calibración tienden a volverse dependientes de ellos y usan niveles de calibración para solucionar todos los problemas de modelo. En definitiva, mantener los niveles de calibración puede volverse una agonía.
N.) Agrupamiento y sesgo de predicción
La regresión logística predice un valor entre 0 y 1. Sin embargo, todos los ejemplos etiquetados son exactamente 0 (lo que significa, por ejemplo, «no es spam») o exactamente 1 (lo que significa, por ejemplo, «es spam»). Por lo tanto, cuando se evalúa el sesgo de predicción, no se puede determinar con exactitud el sesgo de predicción en función de un solo ejemplo; el sesgo de predicción se debe examinar en un «agrupamiento» de ejemplos. Esto significa que, en regresión logística, el sesgo de predicción solo tiene sentido cuando se agrupan suficientes ejemplos para poder comparar un valor predicho (por ejemplo, 0.392) con los valores observados (por ejemplo, 0.394).
Los agrupamientos se pueden formar de las siguientes maneras:
- Puedes dividir de forma lineal las predicciones objetivo.
- Puedes formar cuantiles.
Considera la siguiente representación de calibración de un modelo específico. Cada punto representa un agrupamiento de 1,000 valores. Los ejes tienen los siguientes significados:
- El eje x representa el promedio de valores que el modelo predijo para ese agrupamiento.
- El eje y representa el promedio de valores real en el conjunto de datos para ese agrupamiento.
Ambos ejes son escalas logarítmicas.
Figura 8. Curva del sesgo de predicción (escalas logarítmicas)
¿Por qué las predicciones son tan deficientes solo para parte del modelo? Aquí hay algunas posibilidades:
- El conjunto de entrenamiento no representa de forma adecuada determinados subconjuntos del espacio de datos.
- Algunos subconjuntos de los datos están más contaminados que otros.
- El modelo está regularizado en exceso. (Considera reducir el valor de lambda)
O.) Ejercicio de programación
En el siguiente ejercicio, explorarás la regresión logística y la clasificación en TensorFlow:
Los ejercicios de programación se ejecutan directamente en tu navegador mediante Colaboratory (no es necesario configurar nada). Esta plataforma es compatible con la mayoría de los navegadores principales y se prueba minuciosamente en las versiones de escritorio de Chrome y Firefox. Si prefieres descargar y ejecutar los ejercicios sin conexión, consulta estas instrucciones para configurar un entorno local.
Regularización para lograr dispersión
Este módulo se centra en los requisitos especiales para los modelos aprendidos con vectores de atributos que tienen muchas dimensiones.
- aprender a llevar los valores de coeficientes no informativos a exactamente 0, para ahorrar memoria RAM
- aprender otros tipos de regularización, además de L2
a.) Regularización para lograr dispersión: Regularización L₁
Los vectores dispersos suele contener varias dimensiones. Al crear una combinación de atributos, se generan incluso más dimensiones. A partir de vectores de atributos de muchas dimensiones, el tamaño del modelo puede aumentar considerablemente y requerir una enorme cantidad de RAM.
En un vector disperso de dimensiones altas, lo ideal sería llevar, en lo posible, las ponderaciones a exactamente 0
. Una ponderación de exactamente 0 básicamente quita el atributo correspondiente del modelo. Al extraer atributos, se ahorra RAM y es posible que se reduzcan las inconsistencias del modelo.
Por ejemplo, considera un conjunto de datos de viviendas que incluya no solo California sino todo el planeta. Al agrupar la latitud del mundo en minutos (60 minutos por grado), se obtienen alrededor de 10,000 dimensiones en una codificación dispersa; la longitud del mundo en minutos crea, aproximadamente, 20,000 dimensiones. Una combinación de estos dos atributos daría como resultado 200,000,000 dimensiones. Muchas de esas 200,000,000 dimensiones representan áreas con una residencia tan limitada (p. ej., el medio del océano) que resultaría difícil usar esos datos para hacer generalizaciones eficaces. Sería poco inteligente pagar el costo de RAM para almacenar esas dimensiones innecesarias. Por lo tanto, sería bueno intentar llevar las ponderaciones de las dimensiones sin relevancia exactamente a 0. Esto nos permitiría evitar pagar el costo del almacenamiento de esos coeficientes del modelo durante la interferencia.
Es posible que podamos codificar esta idea en el problema de optimización realizado durante el entrenamiento, agregando un término de regularización seleccionado de forma adecuada.
¿La regularización L2 puede completar esta tarea? Lamentablemente, no. La regularización L2 ayuda a reducir el tamaño de las ponderaciones, pero no las lleva a exactamente 0.0.
Alternativamente, se podría crear un término de regularización que penalice el conteo de valores de coeficiente que no sean cero en un modelo. El aumento de este conteo solo quedaría justificado si el modelo tuviera la capacidad de ajustar los datos. Lamentablemente, si bien este enfoque basado en el conteo es intuitivamente atractivo, convertiría nuestro problema de optimización convexa en un problema de optimización no convexa, NP complejo. (Si miras de cerca, podrás ver una conexión con el problema de la mochila). Por lo tanto, esta idea, conocida como regularización L0, no resulta útil en la práctica.
No obstante, existe un término de regularización denominado regularización L1 que sirve como una aproximación a L0, pero tiene la ventaja de ser convexa y, por lo tanto, eficiente para su procesamiento. Entonces, podemos usar la regularización L1 para llevar los coeficientes sin información útil en nuestro modelo a exactamente 0 y, por lo tanto, ahorrar RAM durante la interferencia.
b.) Diferencias entre regularizaciones L1 y L2
L2 y L1 penalizan las ponderaciones de diferente modo:
- La L2 penaliza ponderación2.
- L1 penaliza |ponderación|.
En consecuencia, L2 y L1 tienen diferentes derivadas:
- La derivada de L2 es 2 * ponderación.
- Ademas La derivada de L1 es k (una constante cuyo valor es independiente de la ponderación).
Puedes pensar en la derivada de L2 como una fuerza que quita x% de la ponderación todo el tiempo. Como ya lo sabía Zenón, incluso si quitas un porcentaje x de un número miles de millones de veces, dicho número no alcanzará nunca cero. (Zenón no estaba familiarizado con las limitaciones en la precisión del punto flotante, que podría producir exactamente cero). En cualquier caso, L2 normalmente no lleva las ponderaciones a cero.
Se puede pensar en la derivada de L1 como una fuerza que elimina algunos valores constantes de las ponderaciones todo el tiempo. Sin embargo, gracias a los valores absolutos, L1 tiene una discontinuidad en 0, que hace que las eliminaciones que superen 0 queden en ese valor. Por ejemplo, si la eliminación fuerza una ponderación de +0.1 a -0.2, L1 establece la ponderación en exactamente 0. ¡Eureka! L1 llevó la ponderación a cero.
La regularización L1, al penalizar el valor absoluto de todas las ponderaciones, es muy eficiente para los modelos amplios.
Ten en cuenta que esta descripción es válida para un modelo de una sola dimensión.
Haz clic en el enlace para reproducir a fin de comparar el efecto de la regularización L1 y L2 en una red de ponderaciones.
C.) Regularización para lograr dispersión
Ejercicio de Playground
Este ejercicio contiene un conjunto de datos de entrenamiento pequeño y ligeramente contaminado. En este tipo de conjunto, el sobreajuste representa un problema real. La regularización puede ayudar, pero ¿qué tipo de regularización?
Este ejercicio consiste en cinco tareas relacionadas. Para simplificar las comparaciones en las cinco tareas, realiza cada tarea en una pestaña independiente. Ten en cuenta que el espesor de las líneas que conectan los ATRIBUTOS con los RESULTADOS representa las ponderaciones relativas de cada atributo.
D.) Regularización para lograr dispersión: Ejercicio de programación
En el siguiente ejercicio, explorarás la regularización L1 en TensorFlow:
Los ejercicios de programación se ejecutan directamente en tu navegador mediante Colaboratory (no es necesario configurar nada). Esta plataforma es compatible con la mayoría de los navegadores principales y se prueba minuciosamente en las versiones de escritorio de Chrome y Firefox. Si prefieres descargar y ejecutar los ejercicios sin conexión, consulta estas instrucciones para configurar un entorno local.
E.) Regularización:evaluacion
Regularización L1
Explora las opciones que aparecen a continuación.
Imagina un modelo lineal con 100 atributos de entrada:
- 10 son muy informativas.
- 90 no son informativas.
Asume que todos los atributos tienen valores entre -1 y 1. ¿Cuáles de las siguientes afirmaciones son verdaderas?
F.) Comparación entre la regularización L1 y la L2
Explora las opciones que aparecen a continuación.
Imagina un modelo lineal con 100 atributos de entrada, todas con valores entre -1 y 1:
- 10 son muy informativas.
- 90 no son informativas.
¿Qué tipo de regularización producirá el modelo más pequeño?
A.) Anatomía
Si recuerdas la unidad Combinaciones de atributos, el siguiente problema de clasificación es no lineal:
Figura 1. Problema de clasificación no lineal.
No lineal significa que no puedes predecir con exactitud una etiqueta con un modelo de forma
. Es decir, la «superficie de decisión» no es una línea. Anteriormente, observamos las combinaciones de atributos como un posible enfoque para modelar los problemas no lineales.
Ahora, analicemos el siguiente conjunto de datos:
Figura 2. Un problema de clasificación no lineal más difícil.
El conjunto de datos que se muestra en la Figura 2 no se puede resolver con un modelo lineal.
Para ver cómo las redes neuronales pueden resolver problemas no lineales, representemos un modelo lineal como un gráfico:
Figura 3. Modelo lineal como un gráfico.
Cada círculo azul representa un atributo de entrada. El círculo verde representa la suma ponderada de las entradas.
¿Cómo podemos alterar este modelo para mejorar su capacidad para resolver problemas no lineales?
B.) Capas ocultas
En el modelo que se muestra en el siguiente grafo, agregamos una «capa oculta» de valores intermedios. Cada nodo amarillo en la capa oculta es una suma ponderada de los valores de los nodos de entrada azul. El resultado es una suma ponderada de los nodos amarillos.
Figura 4. Grafo de un modelo de dos capas.
¿Este modelo es lineal? Sí, su resultado es una combinación lineal de las entradas.
En el modelo que se muestra en el siguiente grafo, agregamos una segunda capa oculta de sumas ponderadas.
Figura 5. Grafo de un modelo de tres capas.
¿Este modelo es lineal? Sí, lo es. Cuando expresas el resultado como una función de la entrada y lo simplificas, obtienes otra suma ponderada de las entradas. Esta suma no modela correctamente el problema no lineal de la Figura 2.
C.) Funciones de activación
Para modelar un problema no lineal, podemos introducir directamente una no linealidad. A cada nodo de la capa oculta se puede aplicar una función no lineal.
En el modelo que se muestra en el siguiente gráfico, el valor de cada nodo en la Capa oculta 1 se transforma mediante una función no lineal antes de llegar a las sumas ponderadas de la siguiente capa. Esta función no lineal se denomina «función de activación».
Figura 6. Gráfico del modelo de tres capas con función de activación.
Ahora que agregamos una función de activación, las capas tienen más impacto. Al apilar no linealidades a no linealidades, podemos modelar relaciones muy complicadas entra las entradas y los resultados predichos. En resumen, cada capa aprende una función más compleja y de nivel más alto de las entradas sin procesar. Si deseas mejorar tu intuición de como funciona esto, mira la excelente entrada de blog de Chris Olah.
D.) Funciones de activación comunes
La siguiente función de activación sigmoide convierte la suma ponderada a un valor entre 0 y 1.
A continuación se muestra una representación:gráfica
Figura 7. Función de activación sigmoide.
La siguiente función de activación de unidad lineal rectificada (abreviada como ReLU por sus siglas en inglés) a menudo funciona mejor que una función suave, como la sigmoide, y es mucho más fácil de calcular.
La superioridad de ReLU se basa en las investigaciones empíricas, probablemente debido a que ReLU tiene un rango de capacidad de respuesta más útil. La capacidad de respuesta de una función sigmoide decae relativamente rápido en ambos extremos.
Figura 8. Función de activación ReLU.
De hecho, se puede usar cualquier función matemática como función de activación. Supongamos que
representa nuestra función de activación (ReLU, sigmoide o cualquier otra). Por lo tanto, el valor de un nodo en la red se determina con la siguiente fórmula:
TensorFlow proporciona soporte inmediato con una amplia variedad de funciones de activación. Aún así, recomendamos comenzar a trabajar con ReLU.
D.) Resumen
Ahora, nuestro modelo tiene todos los componentes estándar de lo que se conoce en general como «redes neuronales».
- Un conjunto de nodos, análogos a las neuronas, organizados en capas.
- Un conjunto de ponderaciones que representan las conexiones entre cada capa de la red neuronal y la capa inferior. La capa inferior debe ser la capa de otra red neuronal u otro tipo de capa.
- Un conjunto de sesgos, una para cada nodo.
- Una función de activación que transforma el resultado de cada nodo en una capa. Las diferentes capas pueden tener diferentes funciones de activación.
Un detalle a tener en cuenta es que las redes neuronales no son siempre necesariamente mejores que las combinaciones de atributos, pero son una alternativa flexible que funciona bien en la mayoría de los casos.
E ) Ejercicios de Playground
F.) Ejercicios de programación
El siguiente ejercicio demuestra cómo usar redes neuronales para aprender no linealidades:
Los ejercicios de programación se ejecutan directamente en tu navegador mediante Colaboratory (no es necesario configurar nada). Esta plataforma es compatible con la mayoría de los navegadores principales y se prueba minuciosamente en las versiones de escritorio de Chrome y Firefox. Si prefieres descargar y ejecutar los ejercicios sin conexión, consulta estas instrucciones para configurar un entorno local.
Entrenamiento de las redes neuronales
La propagación inversa es el algoritmo de entrenamiento más común en las redes neuronales. Permite que el descenso de gradientes sea factible para las redes neuronales de varias capas. TensorFlow realiza la propagación inversa automáticamente, de manera que no necesitas conocimientos específicos del algoritmo. Para tener una idea de cómo funciona, repasa la explicación visual sobre el algoritmo de propagación inversa. A medida que te desplazas por la explicación anterior, ten en cuenta lo siguiente:
- Cómo fluyen los datos por el gráfico.
- Cómo la programación dinámica nos permite evitar computar exponencialmente muchas trayectorias en el gráfico. Aquí, «programación dinámica» significa simplemente registrar los resultados intermedios en los movimientos hacia adelante y hacia atrás.
- aprender sobre la propagación inversa
Entrenamiento de las redes neuronales:
a.) Recomendaciones
En esta sección se explican los casos de falla de la propagación inversa y la forma más común para regularizar una red neuronal.
B.) Casos de falla
Existen muchas formas comunes en las que la propagación inversa puede fallar.
C.) Desaparición de gradientes
Los gradientes de las capas más bajas (cercanas a la entrada) pueden volverse muy pequeños. En las redes profundas, el cómputo de estos gradientes puede implicar que se tome el producto de muchos términos pequeños.
Cuando los gradientes desaparecen hacia el 0 en las capas más bajas, estas capas de entrenan muy lentamente o no se entrenan.
La función de activación ReLU puede ayudar a prevenir que los gradientes desaparezcan.
D.) Gradientes con hipercrecimiento
Si las ponderaciones de una red son muy grandes, los gradientes de las capas más bajas implican productos de muchos términos grandes. En este caso, los gradientes pueden dispararse, es decir, se vuelven demasiado grandes como para la convergencia.
La normalización del lote y la disminución de la tasa de aprendizaje pueden ayudar a prevenir el crecimiento de gradientes.
E.) Unidades ReLU inactivas
Una vez que la suma ponderada de una unidad ReLU disminuye por debajo de 0, la unidad ReLU puede quedar bloqueada. Genera una activación de 0, lo cual no contribuye en nada al resultado de la red, y los gradientes ya no fluyen por ella durante la propagación inversa. Con una fuente de grandientes limitada, es posible que la entrada de ReLU nunca cambie lo suficiente como para volver a establecer la suma ponderada por encima de 0.
La disminución de la tasa de aprendizaje puede ayudar a impedir que las unidades ReLU queden inactivas.
F.) Regularización de retirados
La regularización de retirados es otra forma de regularización que resulta útil para las redes neuronales. Funciona al «extraer» activaciones de unidades al azar en una red para un solo paso de gradiente. Mientras más se extraigan, mejor será la regularización.
- 0.0 = No hay regularización de retirados.
- 1.0 = Se extrae todo y no se aprende nada.
- Los valores entre 0.0 y 1.0 son más útiles.
G.) Ejercicio de programación
El siguiente ejercicio se concentra en la mejora del rendimiento de la red neuronal que entrenaste en el ejercicio anterior:
Los ejercicios de programación se ejecutan directamente en tu navegador mediante Colaboratory (no es necesario configurar nada). Esta plataforma es compatible con la mayoría de los navegadores principales y se prueba minuciosamente en las versiones de escritorio de Chrome y Firefox. Si prefieres descargar y ejecutar los ejercicios sin conexión, consulta estas instrucciones para configurar un entorno local.
Redes neuronales de clases múltiples
Anteriormente, presentamos modelos de clasificación binaria que podían elegir una de dos opciones posibles, como en los siguientes casos:
- Un correo electrónico dado «es spam» o «no es spam».
- Un tumor dado es «maligno» o «benigno».
En este módulo, investigaremos la clasificación de clases múltiples, que puedes elegir entre posibilidades múltiples. Por ejemplo:
- ¿Este perro es un beagle, un basset hound o un sabueso?
- ¿Esta flor es una iris sibirica, hollandica, versicolor o setosa?
- ¿Ese avión es un Boeing 747, un Airbus 320, un Boeing 777 o un Embraer 190?
- ¿Esta es la imagen de una manzana, un oso, un dulce, un perro o un huevo?
Algunos problemas de clases múltiples del mundo real implican elegir entre millones de clases individuales. Por ejemplo, supongamos un modelo de clasificación de clases múltiples que pueda identificar la imagen de lo que fuera.
- comprender problemas de clasificación de clases múltiples, en particular softmax
- desarrollar soluciones de softmax en TensorFlow
A.) Uno frente a todos
Uno frente a todos proporciona una manera de aprovechar la clasificación binaria. En un problema de clasificación dado con N soluciones posibles, una solución de uno frente a todos consiste en N clasificadores binarios independientes, es decir, un clasificador binario para cada resultado posible. Durante el entrenamiento, el modelo se ejecuta a través de una secuencia de clasificadores binarios, entrenando cada uno para responder una pregunta de clasificación independiente. Por ejemplo, en una foto dada de un perro, es posible entrenar cinco reconocedores diferentes, cuatro que vean la imagen como un ejemplo negativo (no es un perro) y uno, como positivo (es un perro), de la siguiente manera:
- ¿Esta imagen es una manzana? No.
- ¿Es acaso un oso? No.
- ¿Esta imagen es un dulce? No.
- ¿Podría ser un perro? Sí.
- ¿Talvez se acerca a un huevo? No.
Este enfoque es relativamente razonable cuando la cantidad total de clases es pequeña, pero se vuelve cada vez más ineficiente a medida que aumenta la cantidad de clases.
Podemos crear un modelo de uno frente a todos significativamente más eficiente con una red neuronal profunda en la que cada nodo de resultado represente una clase diferente. En la siguiente figura, se sugiere este enfoque:
Figura 1. Una red neuronal de uno frente a todos.
B.) Softmax
Recuerda que la regresión logística genera un decimal entre 0 y 1.0. Por ejemplo, si un clasificador de correo electrónico tiene un resultado de regresión logística de 0.8, hay un 80% de posibilidad de que un correo electrónico sea spam y un 20% de que no lo sea. Claramente, la suma de las probabilidades de que un correo electrónico sea spam o no es 1.0.
Softmax lleva esta idea al plano de las clases múltiples. Es decir, softmax asigna probabilidades decimales a cada clase en un caso de clases múltiples. Esas probabilidades decimales deben sumar 1.0. Esta restricción adicional permite que el entrenamiento converja más rápido.
Por ejemplo, si volvemos a analizar la imagen de la Figura 1, softmax puede producir las siguientes probabilidades de una imagen que pertenezca a una clase particular:
Clase | Probabilidades |
---|---|
manzana | 0.001 |
oso | 0.04 |
caramelos | 0.008 |
perro | 0.95 |
huevo | 0.001 |
Softmax se implementa a través de una capa de red neuronal justo antes de la capa de resultado. La capa de softmax debe tener la misma cantidad de nodos que la capa de resultado.
Figura 2. Una capa de softmax en una red neuronal
C.) Opciones de softmax
Considera las siguientes variantes de softmax:
- Softmax completo es el softmax del que estuvimos hablando: calcula una probabilidad para cada clase posible.
- Muestreo de candidatos significa que softmax calcula una probabilidad para todas las etiquetas positivas, pero para solo una muestra aleatoria de etiquetas negativas. Por ejemplo, si queremos determinar si una imagen de entrada es un beagle o un sabueso, no tenemos que proporcionar probabilidades para cada ejemplo que no sea un perro.
Softmax completo es relativamente económico cuando la cantidad de clases es reducida, pero se vuelve demasiado costoso cuando aumenta la cantidad de clases. El muestreo de candidatos puede mejorar la eficiencia cuando existe una gran cantidad de clases.
D.) Una etiqueta frente a muchas
Softmax presupone que cada ejemplo es un miembro de exactamente una clase. No obstante, algunos ejemplos pueden ser miembros de varias clases de manera simultánea. Para esos ejemplos:
- No es recomendable usar softmax.
- Debes confiar en regresiones logísticas múltiples.
Por ejemplo, supongamos que tus casos son imágenes que contienen exactamente un elemento (una fruta). Softmax puede determinar la probabilidad de que ese elemento sea una pera, una naranja, una manzana, etc. Si tus ejemplos son imágenes que contienen diferentes tipos de elementos (tazones de diferentes tipos de fruta), en su lugar deberás usar varias regresiones logísticas.
E.) Ejercicios de programación
En el siguiente ejercicio, explorarás softmax en TensorFlow mediante el desarrollo de un modelo que clasificará dígitos escritos a mano:
Los ejercicios de programación se ejecutan directamente en tu navegador mediante Colaboratory (no es necesario configurar nada). Esta plataforma es compatible con la mayoría de los navegadores principales y se prueba minuciosamente en las versiones de escritorio de Chrome y Firefox. Si prefieres descargar y ejecutar los ejercicios sin conexión, consulta estas instrucciones para configurar un entorno local.
Incorporaciones
Una incorporación es un espacio de dimensiones relativamente bajas al que se pueden trasladar vectores de dimensiones altas. Las incorporaciones permiten llevar a cabo el aprendizaje automático con más facilidad en entradas de gran tamaño, como vectores dispersos que representan palabras. Idealmente, una incorporación captura parte de la semántica de la entrada al colocar entradas con similitudes semánticas más cerca entre sí en el espacio de la incorporación. Una incorporación se puede aprender y volver a utilizar en otros modelos.
- aprender qué es una incorporación y para qué sirve
- cómo es que se codifican las relaciones semánticas en las incorporaciones
- aprender a usar incorporaciones
- cómo entrenar incorporaciones (con word2vec, por ejemplo)
A.) Motivación del filtrado colaborativo
El filtrado colaborativo es la tarea de realizar predicciones acerca de los intereses de un usuario en función de los intereses de muchos otros usuarios. Como ejemplo, observemos la tarea de recomendación de películas. Imagina que tenemos 1,000,000 usuarios y una lista de las películas que cada uno de ellos ha mirado (de un catálogo de 500,000 películas). Nuestro objetivo es recomendar películas a los usuarios.
Para resolver este problema, se necesita un método que determine qué películas son similares entre sí. Esto se puede lograr al incorporar las películas a un espacio de dimensiones bajas, creado de manera tal que las películas similares estén cerca entre sí.
Antes de describir cómo se puede aprender la incorporación, primero exploraremos las cualidades que queremos tener en la incorporación y cómo representaremos los datos de entrenamiento para aprenderla.
A.1) Disposición de las películas sobre una línea de números de una dimensión
Para desarrollar mejor la intuición sobre las incorporaciones, en un papel, intenta organizar las siguientes películas sobre una línea de números de una dimensión de tal forma que las películas que estén más cerca entre sí sean las más estrechamente relacionadas:
Película | Clasificación | Descripción |
---|---|---|
Bleu | R | Una viuda francesa lamenta la pérdida de su esposo y su hija después de que fallecen en un accidente de auto. |
Batman: El caballero de la noche asciende | PG-13 | Batman intenta salvar a Gotham City de una destrucción nuclear en esta continuación de Batman: El caballero de la noche, basada en el universo de DC Comics. |
Harry Potter y la piedra filosofal | PG | Un niño huérfano descubre que es mago y se inscribe en el Colegio Hogwarts de Magia y Hechicería, donde se enfrenta a su primera batalla contra el maléfico Lord Voldemort. |
Los Increíbles | PG | Una familia de superhéroes que se ven forzados a vivir como ciudadanos comunes en los suburbios vuelve a salir a la luz para salvar a la raza de superhéroes de la amenaza de Syndrome y su robot asesino. |
Shrek | PG | Un adorable ogro y su burro escolta emprenden una misión para rescatar a la Princesa Fiona, que está encarcelada en un castillo por una dragona. |
La guerra de las galaxias | PG | Luke Skywalker y Han Solo se unen a dos androides para rescatar a la Princesa Leia y salvar la galaxia. |
Las trillizas de Belleville | PG-13 | Cuando secuestran al ciclista profesional Champion durante el Tour de Francia, su abuela y su perro viajan para rescatarlo, con la ayuda de un trío de cantantes de jazz. |
Memento | R | Un hombre con amnesia busca desesperadamente resolver el asesinato de su esposa; por su falta de memoria, se tatúa las claves en su cuerpo. |
A.3) Disposición de las películas en un espacio de dos dimensiones
Prueba el mismo ejercicio de antes, pero esta vez organiza las mismas películas en un espacio de dos dimensiones.
Otra solución posible.
B.) Datos de entrada categóricos
Los datos categóricos hacen referencia a atributos de entrada que representan uno o más elementos discretos de un conjunto de opciones finito. Por ejemplo, puede ser el conjunto de películas que ha mirado un usuario, el conjunto de palabras de un documento o la ocupación de una persona.
Los datos categóricos se representan de manera más eficaz a través de tensores dispersos, que son tensores con muy pocos elementos distintos de cero. Por ejemplo, si queremos crear un modelo de recomendaciones de películas, podemos asignar un ID único a cada película posible y, luego, representar al usuario como un tensor disperso de las películas que ha mirado, tal como se muestra en la Figura 3.
Figura 3. Datos para nuestro problema de recomendación de películas.
Cada fila de la matriz en la Figura 3 corresponde a un usuario y puede ser representado con un tensor disperso, ya que cada usuario solo mira una pequeña fracción de las películas posibles. La última fila corresponde al tensor disperso [1, 3, 999999], con los índices de vocabulario que se muestran más arriba en los íconos de películas.
De igual manera, es posible representar palabras, oraciones y documentos como vectores dispersos, donde cada palabra del vocabulario cumple un papel similar a las películas de nuestro ejemplo de recomendación.
Para usar esas representaciones dentro de un sistema de aprendizaje automático, necesitamos una forma de representar cada vector disperso como un vector de números, de manera que los elementos con similitudes semánticas (películas o palabras) tengan distancias similares en el espacio vectorial. Pero ¿cómo representas una palabra como un vector de números?
La manera más simple es definir una capa de entrada gigante con un nodo para cada palabra del vocabulario, o al menos un nodo para cada palabra que aparece en los datos. Si aparecen 500,000 palabras únicas en tus datos, puedes representar una palabra con un vector de 500,000 de longitud y asignar cada palabra a una posición en el vector.
Si asignas «caballo» al índice 1247, para incluir «caballo» en tu red, puedes copiar un 1 en el nodo de entrada número 1247 y un 0 en el resto. Este tipo de representación se denomina codificación de un solo 1, porque solamente un índice tiene un valor distinto de cero.
Por lo general, tu vector contendrá un recuento de las palabras en un fragmento de texto más grande. Esto se conoce como representación de un «grupo de palabras». En un vector de un grupo de palabras, varios de los 500,000 nodos tendrán un valor distinto de cero.
Sin embargo, aunque determines los valores distintos de cero, un nodo por palabra proporciona vectores de entrada muy dispersos, es decir, vectores muy grandes con relativamente pocos valores distintos de cero. Las representaciones dispersas tienen algunos problemas que pueden dificultar el aprendizaje eficaz de un modelo.
C.) Tamaño de la red
Los vectores de entrada de gran tamaño significan una enorme cantidad de ponderaciones para una red neuronal. Si tu vocabulario tiene M palabras y hay N nodos en la primera capa de la red por encima de la entrada, tienes MxN ponderaciones para entrenar para esa capa. A su vez, una red con una gran cantidad de ponderaciones causa otros problemas:
- Cantidad de datos. Cuantas más ponderaciones hay en tu modelo, más datos se necesitan para entrenar de manera eficaz.
- Cantidad de cómputo. Cuantas más ponderaciones, más cómputo se necesita para entrenar y usar el modelo. Esto puede causar que se supere la capacidad del hardware fácilmente.
D.) Falta de relaciones significativas entre los vectores
Si incluyes los valores de píxeles de los canales RGB en un clasificador de imágenes, tiene sentido hablar sobre valores «cerrados». El azul rojizo está cerca del azul puro, tanto a nivel semántico como en cuanto a la distancia geométrica entre los vectores. Pero un vector con un 1 en el índice 1247 para «caballo» no tiene más proximidad con respecto a un vector con un 1 en el índice 50,430 para «antílope» que un vector con un 1 en el índice 238 para «televisión».
E.) La solución: Incorporaciones
La solución a estos problemas es usar incorporaciones para trasladar los vectores dispersos de grandes dimensiones a un espacio de dimensiones bajas preservando las relaciones semánticas. En las siguientes secciones de este módulo, exploraremos las incorporaciones a nivel intuitivo, conceptual y de programación.
F.) Traslado a un espacio de dimensiones bajas
Las principales limitaciones al trabajar con datos de entrada dispersos se pueden resolver al asignar los datos de dimensiones altas a un espacio de dimensiones más bajas.
Como puedes ver en los ejercicios en papel, incluso un espacio pequeño de varias dimensiones proporciona la flexibilidad de agrupar semánticamente elementos similares y mantener alejados los elementos desemejantes. La posición (distancia y dirección) en el espacio vectorial codifican la semántica cuando existe una buena incorporación. Por ejemplo, las siguientes visualizaciones de incorporaciones reales muestran relaciones geométricas que capturan vinculaciones semánticas, como la relación entre un país y su capital:
Figura 4. Las incorporaciones pueden producir analogías llamativas.
Este tipo de espacios de bajas dimensiones capturan el significado y dan oportunidades a tu sistema de aprendizaje automático para que detecte patrones que podrían ayudar con la tarea de aprendizaje.
G.) Reducción de la red
Aunque queremos que haya suficientes dimensiones para codificar las relaciones semánticas valiosas, también queremos un espacio de incorporaciones que sea lo suficientemente pequeño como para permitirnos entrenar nuestro sistema más rápidamente. Una incorporación útil puede estar en el orden de cientos de dimensiones. Es probable que esto sea varios órdenes de magnitud más pequeños que el tamaño de tu vocabulario para una tarea de lenguaje natural.
H.) Incorporaciones como tablas de consulta
Una incorporación es una matriz en la que cada columna es el vector que corresponde a un elemento de tu vocabulario. Para obtener el vector denso de un elemento específico del vocabulario, simplemente recuperas la columna que corresponde a dicho elemento.
Pero ¿cómo trasladarías un vector de un grupo de palabras? Para obtener el vector denso de un vector disperso que representa varios elementos del vocabulario (por ejemplo, todas las palabras de una oración o un párrafo), puedes recuperar la incorporación de cada elemento individual y luego sumarlos todos.
Si el vector disperso contiene recuentos de los elementos del vocabulario, puedes multiplicar cada incorporación por el recuento de su elemento correspondiente antes de agregarlo a la suma.
Estas operaciones te pueden resultar familiares.
i.) Consulta de incorporaciones como multiplicación de matrices
El proceso de consulta, multiplicación y suma que acabamos de describir es equivalente a la multiplicación de matrices. Dada una representación S dispersa de 1 X N y una tabla E de incorporaciones de N X M, la multiplicación de matrices S X E da como resultado el vector denso 1 X M.
Pero ¿cómo se obtiene E en primer lugar? En la siguiente sección, analizaremos cómo se obtienen las incorporaciones.
j.) Cómo obtenerlas
Hay muchas formas de obtener una incorporación, entre ellas, un algoritmo de última generación creado en Google.
K.) Técnicas de reducción de dimensionalidad estándar
Existen muchas técnicas matemáticas para capturar los aspectos relevantes de un espacio de dimensiones altas en un espacio de dimensiones bajas. En teoría, cualquiera de estas técnicas se puede usar para crear una incorporación para un sistema de aprendizaje automático.
Por ejemplo, el análisis de componentes principales (ACP) se utiliza para crear incorporaciones de palabras. Dado un conjunto de instancias, como vectores de grupos de palabras, el ACP intenta encontrar dimensiones altamente correlacionadas que se puedan contraer en una sola dimensión.
L.) Word2vec
Word2vec es un algoritmo inventado por Google para entrenar incorporaciones de palabras. Word2vec depende de la hipótesis distribucional para asignar palabras con similitudes semánticas a vectores de incorporaciones geométricamente cercanas.
La hipótesis distribucional establece que las palabras que aparecen contiguas con frecuencia tienden a ser semánticamente similares. Tanto «perro» como «gato» aparecen frecuentemente cerca de la palabra «veterinario», y este hecho refleja su similitud semántica. Como dijo el lingüista John Firth en 1957, «uno debe conocer cada palabra por aquello que la acompaña».
Word2Vec explota la información contextual al entrenar una red neuronal para que distinga grupos de palabras concomitantes de aquellas palabras agrupadas al azar. La capa de entrada toma una representación dispersa de una palabra objetivo junto con una o más palabras contextuales. Esta entrada se conecta con una sola capa oculta más pequeña.
En una versión del algoritmo, el sistema genera un ejemplo negativo al sustituir la palabra objetivo con una palabra generada al azar. Dado el ejemplo positivo «el avión vuela», el sistema podría cambiar «avión» por «trote».
La otra versión del algoritmo crea ejemplos negativos al sincronizar la palabra objetivo con una palabra generada al azar. De este modo, podría tomar los ejemplos positivos (el, avión), (vuela, avión) y los ejemplos negativos (compilado, avión), (quién, avión) y aprender a identificar qué pares realmente aparecían juntos en el texto.
Sin embargo, este clasificador no es el verdadero objetivo para cada versión del sistema. Una vez que el modelo se ha entrenado, esta incorporación se puede volver a utilizar en otros clasificadores. En general, puedes usar las ponderaciones que conectan la capa de entrada con la capa oculta para asignar representaciones de palabras dispersas a vectores más pequeños.
Para obtener más información acerca de word2vec, consulta el instructivo en tensorflow.org
m.) Entrenamiento de una incorporación como parte de un modelo más grande
También puedes aprender una incorporación como parte de la red neuronal de tu tarea objetivo. Este enfoque te proporciona una incorporación personalizada para tu sistema particular, pero es posible que tome más tiempo que entrenar la incorporación por separado.
En general, cuando tienes datos dispersos (o datos densos que quisieras incorporar), puedes crear una unidad de incorporación que sea simplemente un tipo especial de unidad oculta de tamaño d. Esta capa de incorporación se puede combinar con otros atributos y capas ocultas. Como en cualquier red neuronal profunda (RNP), la capa final será la pérdida que se optimiza. Por ejemplo, supongamos que estamos realizando un filtrado colaborativo, en el que el objetivo es predecir los intereses de un usuario a partir de los de otros usuarios. Esto se puede modelar como un problema de aprendizaje supervisado al apartar (o retener) al azar como etiquetas positivas una pequeña cantidad de las películas que miró el usuario y, luego, optimizar una pérdida de softmax.
Figura 5. Una arquitectura de RNP de muestra para aprender incorporaciones de películas a partir de datos de filtrado colaborativo.
Como otro ejemplo, si quieres crear una capa de incorporación para las palabras de un anuncio de bienes raíces como parte de una RNP a fin de predecir los precios de vivienda, deberías optimizar una pérdida L2 con el precio de venta conocido de las casas en tus datos de entrenamiento como la etiqueta.
Cuando se aprende una incorporación de d dimensiones, cada elemento se asigna a un punto en un espacio de d dimensiones, de manera que los elementos similares estén cerca en este espacio. La Figura 6 ayuda a ilustrar la relación entre las ponderaciones aprendidas en la capa de incorporación y la vista geométrica. Las ponderaciones de las conexiones entre un nodo de entrada y los nodos de la capa de incorporación de d dimensiones corresponden a los valores de coordenadas de cada uno de los d ejes.
Figura 6. Una vista geométrica de las ponderaciones de la capa de incorporación.
N.) Ejercicio de programación
En el siguiente ejercicio, explorarás las incorporaciones en TensorFlow mediante el desarrollo de una red neuronal que realizará un análisis de opiniones sobre datos de reseñas de películas.
Los ejercicios de programación se ejecutan directamente en tu navegador mediante Colaboratory (no es necesario configurar nada). Esta plataforma es compatible con la mayoría de los navegadores principales y se prueba minuciosamente en las versiones de escritorio de Chrome y Firefox. Si prefieres descargar y ejecutar los ejercicios sin conexión, consulta estas instrucciones para configurar un entorno local.
Sistemas de machione learning en produccion
El aprendizaje automático es mucho más que una mera implementación de un algoritmo de AA. Un sistema de AA de producción incluye una gran cantidad de componentes.
- entender la importancia de los componentes en un sistema de AA de producción
Llos sistemas de AA de producción del mundo real son ecosistemas grandes en los cuales el modelo es solo una parte.
Figura 1. Sistema de AA de producción del mundo real
El código de AA es el componente fundamental de un sistema de AA de producción del mundo real, pero por lo general solo representa el 5% o menos del código total del sistema (sí, no es un error tipográfico). Debes tener en cuenta que un sistema de AA de producción dedica una gran cantidad de recursos a recopilar datos de entrada, verificarlos y extraer atributos de ellos. Además, considera que debe haber una infraestructura de servicio implementada para que las predicciones del modelo de AA puedan tener un uso práctico en el mundo real.
Entrenamiento estático o dinámico
En términos generales, hay dos formas de entrenar un modelo:
- Un modelo estático se entrena fuera de línea. Eso significa que el modelo se entrena una sola vez y ese modelo entrenado se utiliza durante un tiempo.
- El modelo dinámico se entrena en línea. Eso significa que los datos ingresan de forma continua al sistema, y estos se incorporan al modelo con pequeñas actualizaciones periódicas.
- identificar las ventajas y desventajas del entrenamiento estático y dinámico
A.) Resumen deL video
En términos generales, los siguientes puntos dominan la decisión entre entrenamiento estático o dinámico:
- Los modelos estáticos son más fáciles de desarrollar y probar.
- Un modelo dinámicos se adapta a los datos cambiantes. El mundo es un lugar muy cambiante. Es poco probable que las predicciones de ventas del año pasado predigan correctamente los resultados del año próximo.
Si tu conjunto de datos realmente no cambia en el tiempo, elige el entrenamiento estático, porque su desarrollo y mantenimiento son más económicos que el entrenamiento dinámico. Sin embargo, muchas fuentes de información realmente cambian en el tiempo, incluso aquellas con atributos que crees que son constantes, como el nivel del mar. Moraleja: Incluso con el entrenamiento estático, igualmente debes supervisar si ocurren cambios en los datos de entrada.
Por ejemplo, considera un modelo entrenado para predecir la probabilidad de que los usuarios compren flores. Debido a la presión del tiempo, el modelo se entrena una sola vez con un conjunto de datos del comportamiento de compra de flores durante julio y agosto. Después, el modelo se pone en funcionamiento para procesar predicciones en producción, pero nunca se actualiza. El modelo funciona bien durante varios meses, pero después realiza predicciones muy desacertadas en torno al día de San Valentín porque el comportamiento de los usuarios durante ese período festivo cambia drásticamente.
B.) evaluación
Explora las opciones que aparecen a continuación.
Entrenamiento fuera de línea
Explora las opciones que aparecen a continuación.
Dependencias de datos
Los datos son tan importantes para los desarrolladores de AA como lo es el código para los desarrolladores tradicionales. Esta lección se centra en los tipos de preguntas que deberías hacerte sobre los datos.
- comprender las dependencias de datos en los sistemas de AA de producción
Resumen de la clase por video
El comportamiento de un sistema de AA depende del comportamiento y la calidad de sus atributos de entrada. A medida que cambian los datos de entrada para esos atributos, también lo hará el modelo. A veces, ese cambio es intencional; otras veces, no.
En el desarrollo de software tradicional, te centras más en el código que en los datos. En el desarrollo de aprendizaje automático, si bien la codificación es parte del trabajo, debes ampliar el enfoque para incluir los datos. Por ejemplo, en proyectos de desarrollo de software tradicional, se recomienda escribir pruebas de unidades para validar el código. En los proyectos de AA, debes probar, verificar y controlar los datos de entrada de forma continua.
Por ejemplo, debes controlar continuamente el modelo para quitar los atributos que se usan poco o no se usan. Imagina un determinado atributo que contribuyó poco o nada al modelo. Si los datos de entrada para ese atributo cambian de forma abrupta, es probable que el comportamiento del modelo también cambie de una forma indeseada.
Fiabilidad
Preguntas para hacer sobre la fiabilidad de los datos de entrada:
- ¿La señal siempre estará disponible o proviene de una fuente que no es confiable? Por ejemplo:
- ¿La señal proviene de un servidor que falla cuando hay muchas cargas?
- ¿La señal proviene de personas que se van de vacaciones todos los meses de agosto?
Control de versiones
Preguntas para hacer sobre el control de versiones:
- ¿El sistema que calcula los datos cambia alguna vez? Si es así:
- ¿Con qué frecuencia?
- ¿Cómo sabes que el sistema cambia?
A veces, los datos provienen de un proceso superior. Si ese proceso cambia de forma abrupta, el modelo será afectado.
Considera crear tu propia copia de los datos que recibes del proceso superior. Luego, usa solo la siguiente versión de los datos superiores cuando tengas la certeza de que es seguro hacerlo.
Necesidad
Es posible que siguiente pregunta te recuerde a la regularización:
- ¿La utilidad del atributo justifica el costo de incluirlo?
Siempre es tentador agregar más atributos al modelo. Por ejemplo, supongamos que encuentras un atributo nuevo que permite que el modelo sea más exacto. Más exactitud parece mucho mejor que menos exactitud. Sin embargo, acabas de agregar una carga de mantenimiento. Es posible que el atributo adicional se degrade de forma inesperada, por lo que deberás controlarlo. Piensa con cuidado antes de agregar atributos que solo generen beneficios menores a corto plazo.
Correlaciones
Algunos atributos se correlacionan (de forma positiva o negativa) con otros. Pregúntate lo siguiente:
- ¿Algunos de los atributos están tan vinculados que se necesitan estrategias adicionales para separarlos?
Retroalimentación
A veces, un modelo puede afectar sus propios datos de entrenamiento. Por ejemplo, los resultados de algunos modelos son, a su vez, atributos de entrada directos o indirectos de ese mismo modelo.
A veces, un modelo puede afectar a otro modelo. Por ejemplo, analiza dos modelos para predecir los precios de las acciones:
- el Modelo A, con una predicción muy inexacta
- el Modelo B
Como el Modelo A tiene fallas, a veces decide por error comprar valores de la Acción X. El Modelo B usa el precio de la Acción X como atributo de entrada, por lo que este modelo puede llegar con facilidad a conclusiones erróneas sobre el precio de los valores de la Acción X. Por lo tanto, es posible que el Modelo B compre o venda valores de la Acción X, según el comportamiento con fallas del Modelo A. A su vez, el comportamiento del Modelo B puede afectar al Modelo A, por lo que se desencadena una tulipomanía o una caída en las acciones de la Empresa X.
evaluacion
Sistemas de aprendizaje automático en el mundo real
A.) Predicción del cáncer
En esta lección, depurarás un problema de aprendizaje automático en el mundo real* relacionado con la predicción del cáncer.
- Determinar las fallas en el modelo de aprendizaje automático en el mundo real
* Este módulo se basó en líneas muy generales (con algunas modificaciones sobre la marcha) en «Leakage in data mining: formulation, detection, and avoidance» de Kaufman, Rosset y Perlich.
B.) Literatura
En esta lección, depurarás un problema de aprendizaje automático en el mundo real* relacionado con la literatura del siglo XVIII.
- Determinar las fallas en el diseño experimental de un modelo de aprendizaje automático en el mundo real.
C.) el mundo real
En esta lección, se resumen los lineamientos aprendidos de estos ejemplos del mundo real.
- Determinar las fallas en el AA aplicadas al mundo real.
Resumen del video
Aquí se incluye un breve resumen de los lineamientos eficaces para el aprendizaje automático:
- mantener tu primer modelo simple
- concentrarse en garantizar que la canalización de los datos sea correcta
- usar una métrica simple y observable para el entrenamiento y la evaluación
- controlar y supervisar tus atributos de entrada
- tratar la configuración del modelo como si fuera código: revisarla y registrarla
- tomar nota de los resultados de todos los experimentos, especialmente aquellos que no resultan eficaces
Otros recursos
Rules of Machine Learning contiene orientación adicional.
Próximos pasos
Para saber más sobre el aprendizaje automático y desarrollar mejor tus habilidades con TensorFlow, consulta los siguientes recursos:
Práctica de aprendizaje automático
Conoce estos casos de éxito reales sobre la forma en que Google usa el aprendizaje automático en sus productos, con videos y ejercicios prácticos de codificación:
- Clasificación de imágenes: Conoce la forma en que Google desarrolló el modelo de clasificación de imágenes para realizar búsquedas en Google Fotos y, luego, desarrolla tu propio clasificador de imágenes.
- ¡Pronto habrá más prácticas de aprendizaje automático!
Otros recursos de aprendizaje automático
- Deep Learning: Curso de aprendizaje automático avanzado sobre redes neuronales, con una extensa cobertura de modelos de texto e imágenes.
- Rules of ML: Recomendaciones para la ingeniería del aprendizaje automático.
- TensorFlow.js: Biblioteca de JavaScript, basada en el navegador y acelerada por WebGL para implementar y entrenar modelos de AA.
TensorFlow
- Installing TensorFlow: Instrucciones para configurar TensorFlow en equipos con Mac OS X, Ubuntu y Windows.
- tf.contrib.learn Quickstart: Guía para desarrollar un clasificador de redes neuronales con API de TensorFlow de alto nivel.
- TensorFlow Programmer’s Guide: Guías detalladas para los atributos principales de TensorFlow, como variables, subprocesos y depuraciones.
- TensorFlow Dev Summit 2017: Serie de charlas y demostraciones tecnológicas que destacan las API de TensorFlow y los usos en el mundo real.
Únete a nuestra competencia de Kaggle
¿Estás listo para aplicar tus nuevas habilidades de AA en un desafío real de ciencia de datos? Prueba tus destrezas en una de las diferentes competencias en Kaggle.