Path: blob/master/site/es-419/lattice/tutorials/shape_constraints.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Restricciones de forma con Tensorflow Lattice
Descripción general
Este tutorial es una descripción general de las restricciones y regularizadores proporcionados por la biblioteca TensorFlow Lattice (TFL). Aquí usamos estimadores prediseñados de TFL en conjuntos de datos sintéticos, pero tenga en cuenta que todo en este tutorial también se puede hacer con modelos construidos a partir de capas TFL Keras.
Antes de continuar, asegúrese de que su tiempo de ejecución tenga instalados todos los paquetes necesarios (tal como se importan en las celdas de código a continuación).
Preparación
Instalar el paquete TF Lattice:
Importar los paquetes requeridos:
Valores predeterminados que se usan en esta guía:
Conjunto de datos de entrenamiento para clasificar restaurantes
Imagine un escenario simplificado en el que queremos determinar si los usuarios harán clic o no en el resultado de búsqueda de un restaurante. La tarea es predecir la tasa de clics (CTR) según las características de entrada:
Calificación promedio (
avg_rating
): una característica numérica con valores dentro del rango [1,5].Cantidad de reseñas (
num_reviews
): una característica numérica con valores no mayores que 200, que usamos como medida de tendencia.Calificación en dólares (
dollar_rating
): una característica categórica con valores de cadena en el conjunto {"D", "DD", "DDD", "DDDD"}.
Aquí creamos un conjunto de datos sintéticos donde el CTR verdadero proviene de la fórmula: ParseError: KaTeX parse error: Expected 'EOF', got '_' at position 35: …{\mbox{b(dollar_̲rating)}-\mbox{… donde traduce cada dollar_rating a un valor de referencia: ParseError: KaTeX parse error: Undefined control sequence: \a at position 46: …2,\ \mbox{DDD} \̲a̲ ̲4,\ \mbox{DDDD}…
Esta fórmula refleja patrones típicos del usuario, por ejemplo, dado que todo lo demás es fijo, los usuarios prefieren restaurantes con calificaciones de estrellas más altas y los restaurantes "$$" recibirán más clics que "" y "$$$".
Echemos un vistazo a los gráficos de contorno de esta función CTR.
Preparar datos
Ahora necesitamos crear nuestros conjuntos de datos sintéticos. Comenzamos generando un conjunto de datos simulado de restaurantes y sus características.
Vamos a producir los conjuntos de datos de entrenamiento, validación y prueba. Cuando se ve un restaurante en los resultados de búsqueda, podemos registrar la participación del usuario (hace clic o no) como punto de muestra.
En la práctica, los usuarios no suelen revisar todos los resultados de búsqueda. Esto significa que los usuarios probablemente solo verán restaurantes que ya se consideran "buenos" según el modelo de clasificación actual en uso. Como resultado, los restaurantes "buenos" se imprimen con mayor frecuencia y están sobrerrepresentados en los conjuntos de datos de entrenamiento. Cuando se usan más funciones, el conjunto de datos de entrenamiento puede tener grandes pausas en las partes "malas" del espacio de funciones.
Cuando el modelo se usa para clasificar, suele evaluarse en función de todos los resultados relevantes con una distribución más uniforme que no está bien representada por el conjunto de datos de entrenamiento. Un modelo flexible y complicado podría fallar en este caso debido al sobreajuste de los puntos de datos sobrerrepresentados y, por lo tanto, carecería de generalización. Para controlar este problema aplicamos conocimiento del dominio para agregar restricciones de forma que guían al modelo para hacer predicciones razonables que no se pueden obtener del conjunto de datos de entrenamiento.
En este ejemplo, el conjunto de datos de entrenamiento consiste principalmente en interacciones de usuarios con restaurantes buenos y populares. El conjunto de datos de prueba tiene una distribución uniforme para simular la configuración de evaluación que se menciona anteriormente. Tenga en cuenta que dicho conjunto de datos de prueba no estará disponible en un entorno de problema real.
Definir el input_fns que se usa para el entrenamiento y la evaluación:
Ajuste de árboles potenciados por gradiente
Comencemos con solo dos características: avg_rating
y num_reviews
.
Creamos algunas funciones ayudantes para trazar y calcular métricas de validación y prueba.
Podemos ajustar árboles de decisión potenciados por gradientes de TensorFlow en el conjunto de datos:
Aunque el modelo ha capturado la forma general del CTR real y tiene métricas de validación decentes, tiene un comportamiento contrario a la intuición en varias partes del espacio de entrada: el CTR estimado disminuye a medida que aumenta la calificación promedio o el número de reseñas. Esto se debe a la falta de puntos de muestra en áreas que el conjunto de datos de entrenamiento no cubre. El modelo simplemente no tiene forma de deducir el comportamiento correcto únicamente a partir de los datos.
Para resolver este problema, aplicamos la restricción de forma que establece que el modelo debe generar valores que aumenten monotonicinicamente con respecto tanto a la calificación promedio como al número de reseñas. Más adelante veremos cómo implementar esto en TFL.
Ajuste de DNN
Podemos repetir los mismos pasos con un clasificador DNN. Podemos observar un patrón similar: no tener suficientes puntos de muestra con un número pequeño de reseñas da como resultado una extrapolación sin sentido. Tenga en cuenta que aunque la métrica de validación es mejor que la solución de árbol, la métrica de prueba es mucho peor.
Restricciones de forma
TensorFlow Lattice (TFL) se centra en hacer cumplir restricciones de forma para salvaguardar el comportamiento del modelo más allá de los datos de entrenamiento. Estas restricciones de forma se aplican a las capas TFL Keras. Se pueden encontrar los detalles en nuestro artículo de JMLR.
En este tutorial usamos estimadores prediseñados de TF para cubrir varias restricciones de forma, pero tenga en cuenta que todos estos pasos se pueden realizar con modelos creados a partir de capas TFL Keras.
Al igual que con cualquier otro estimador de TensorFlow, los estimadores prediseñados de TFL usan columnas de funciones para definir el formato de entrada y usan un input_fn de entrenamiento para pasar los datos. El uso de estimadores prediseñados de TFL también requiere:
una configuración de modelo: que define la arquitectura del modelo y las restricciones y regularizadores de forma por función.
un análisis de características input_fn: un input_fn deTF que pasa datos para la inicialización de TFL.
Para obtener una descripción más completa, consulte el tutorial de estimadores prediseñados o los documentos de la API.
Monotonicidad
Primero abordamos las preocupaciones de monotonicidad y agregamos restricciones de forma de monotonicidad a ambas características.
Para indicarle a TFL que aplique restricciones de forma, especificamos las restricciones en las configuraciones de funciones. El siguiente código muestra cómo podemos exigir que la salida aumente monotonicinicamente con respecto a num_reviews
y avg_rating
y configuramos monotonicity="increasing"
.
El uso de CalibratedLatticeConfig
crea un clasificador prediseñado que primero aplica un calibrador a cada entrada (una función lineal por partes para funciones numéricas) seguido de una capa de cuadrícula para fusionar de forma no lineal las funciones calibradas. Podemos usar tfl.visualization
para visualizar el modelo. En particular, el siguiente gráfico muestra los dos calibradores entrenados incluidos en el clasificador prediseñado.
Con las restricciones agregadas, el CTR estimado siempre aumentará a medida que aumente la calificación promedio o aumente el número de reseñas. Esto se hace asegurándose de que los calibradores y la cuadrícula tengan monoticinidad.
Retornos decrecientes
Los retornos decrecientes significan que la ganancia marginal de aumentar el valor de una determinada característica disminuirá a medida que aumentamos el valor. En nuestro caso esperamos que la función num_reviews
siga este patrón, por lo que podemos configurar su calibrador en consecuencia. Observe que podemos descomponer los retornos decrecientes en dos condiciones suficientes:
el calibrador aumenta de forma monotonicinica y
el calibrador es cóncavo.
Observe cómo mejora la métrica de prueba al agregar la restricción de concavidad. El gráfico de predicción también se parece más a la línea base.
Restricción de forma bidimensional: confianza
Una calificación de 5 estrellas para un restaurante con solo una o dos reseñas probablemente no sea una calificación confiable (es posible que restaurante no sea realmente bueno), mientras que una calificación de 4 estrellas para un restaurante con cientos de reseñas es mucho más confiable (es posible que el restaurante sea bueno en este caso). Podemos ver que la cantidad de reseñas de un restaurante afecta la confianza que depositamos en su calificación promedio.
Podemos usar restricciones de confianza de TFL para informar al modelo que el valor mayor (o menor) de una característica indica una mayor dependencia o confianza en otra característica. Esto se hace al establecer reflects_trust_in
en la configuración de funciones.
El siguiente gráfico presenta la función de cuadrícula entrenada. Debido a la restricción de confianza, se espera que los valores más grandes de num_reviews
calibrados fuercen una pendiente más alta con respecto a avg_rating
calibrado, lo que resultaría en un movimiento más significativo en la salida de la cuadrícula.
Calibradores de suavizado
Ahora echemos un vistazo al calibrador de avg_rating
. Aunque aumenta de forma monotonicica, los cambios en sus pendientes son abruptos y difíciles de interpretar. Eso sugiere que podríamos considerar suavizar este calibrador con una configuración de regularizador en regularizer_configs
.
Aquí aplicamos un regularizador wrinkle
para reducir los cambios en la curvatura. También puedes usar el regularizador laplacian
para aplanar el calibrador y el regularizador hessian
para hacerlo más lineal.
Los calibradores ahora funcionan sin problemas y el CTR estimado general coincide mejor con la línea base. Esto se refleja tanto en la métrica de prueba como en los gráficos de contorno.
Monotonicidad parcial para calibración categórica
Hasta ahora hemos usado solo dos de las funciones numéricas del modelo. Aquí agregaremos una tercera función con una capa de calibración categórica. Nuevamente comenzamos configurando funciones ayudante para el trazado y el cálculo métrico.
Para involucrar la tercera función, dollar_rating
, debemos recordar que las funciones categóricas requieren un tratamiento ligeramente diferente en TFL, tanto como columna de funciones como configuración de funciones. Aquí aplicamos la restricción de monotonicidad parcial que establece que las salidas de los restaurantes "DD" deben ser mayores que las de los restaurantes "D" cuando todas las demás entradas son fijas. Esto se hace con la configuración monotonicity
en la configuración de funciones.
Este calibrador categórico muestra la preferencia de la salida del modelo: DD > D > DDD > DDDD, que es consistente con nuestra configuración. Observe que también hay una columna para los valores faltantes. Aunque no falta ninguna característica en nuestros datos de entrenamiento y prueba, el modelo nos proporciona una imputación del valor faltante en caso de que ocurra durante la entrega del modelo posterior.
Aquí también trazamos el CTR previsto de este modelo que se condiciona con dollar_rating
. Observe que todas las restricciones que requerimos se cumplen en cada uno de los sectores.
Calibración de salida
Para todos los modelos de TFL que entrenamos hasta ahora, la capa de cuadrícula ("Lattice" en el gráfico del modelo) genera directamente la predicción del modelo. A veces no estamos seguros de si la salida de la cuadrícula debe reescalarse para emitir salidas del modelo:
las funciones son recuentos mientras que las etiquetas son recuentos.
la cuadrícula está configurada para tener muy pocos vértices pero la distribución de etiquetas es relativamente complicada.
En esos casos, podemos agregar otro calibrador entre la salida de la cuadrícula y la salida del modelo para aumentar la flexibilidad del modelo. Aquí agreguemos una capa de calibrador con 5 puntos clave al modelo que acabamos de construir. También agregamos un regularizador para el calibrador de salida para mantener la suavidad de la función.
La métrica de prueba final y los gráficos muestran cómo el uso de restricciones de sentido común puede ayudar al modelo a evitar comportamientos inesperados y extrapolar mejor a todo el espacio de entrada.