En este artículo, descubriremos cómo se puede utilizar el estudio del refuerzo del gradiente de cobertura para la optimización A/B. Es una demostración fácil de ver el proceso de gradiente de cobertura, donde podemos percibir profundamente el mecanismo subyacente y visualizar el proceso de aprendizaje paso a paso.
El estudio de refuerzo es una idea básica en el estudio de máquinas, junto con el estudio supervisado, auto-supervisado y no supervisado. En el estudio de refuerzo, un agente intenta encontrar el conjunto óptimo de acciones dentro de un entorno para maximizar una recompensa. El aprendizaje de refuerzo se ha convertido ampliamente en una forma que puede vencer a los mejores jugadores de Go y ajedrez cuando se combina con redes neuronales como corredores extremadamente versátiles.
La comunidad neuronal utilizada porque el agente aprende a optimizar la cobertura paso a paso maximizando la recompensa obtenida. Se han desarrollado varios métodos para reemplazar los parámetros de la comunidad neuronal, como el gradiente de cobertura, el q-learning o el estudio crítico del actor. La técnica de gradiente de cobertura es la más cercana a la retropropagación, que generalmente se usa para el estudio supervisado y autosupervisado de redes neuronales. Sin embargo, en la lectura de refuerzo, no consideramos directamente cada acción como lo haríamos en la lectura supervisada, sino que de alguna manera intentamos maximizar la recompensa total y dejar que la comunidad neuronal determine las acciones individuales a realizar. Las acciones se eligen a partir de una distribución aleatoria, lo que ofrece un alto grado de flexibilidad para la exploración. Al comienzo de la optimización, las acciones se eligen aleatoriamente y el agente explora pólizas de seguro totalmente diferentes. Con el tiempo, algunas acciones muestran ser más útiles que otras y la distribución de probabilidades colapsa en elecciones inequívocas. A diferencia de otros métodos de aprendizaje de refuerzo, el consumidor no tiene que controlar este equilibrio entre la exploración y la explotación, el equilibrio óptimo se encuentra mediante la propia técnica de cobertura de gradiente.
Por lo general, la cobertura óptima para maximizar la recompensa se logra mediante una secuencia de acciones, donde cada acción genera un nuevo estado del entorno. Sin embargo, la técnica de cobertura de gradiente se puede utilizar para buscar el movimiento óptimo que estadísticamente proporcione la mejor recompensa. Tal escenario generalmente se descubre cuando se realiza la optimización A/B, que es un método bastante común para seleccionar la más alta de dos opciones. Por ejemplo, en publicidad y marketing, los exámenes A/B se utilizan para seleccionar el esquema de promoción que resulta en mayores ventas brutas. ¿En qué anuncio harías clic? Posibilidad A: “Aproveche al máximo su información: Soy científico de la información con conocimientos: puedo ayudarlo a analizar su información.” o opción B “Luchando junto con su información? Skilled Information Analyst tiene una capacidad gratuita que lo ayudará a automatizar la evaluación de su información”?
El problema con la optimización A/B es que el precio del clic es variable. Por ejemplo, después de ver el anuncio en un sitio web, cada consumidor puede tener preferencias totalmente diferentes, estar en diferentes estados de ánimo y, por lo tanto, reaccionar de otra manera. Debido a esta variabilidad, nos gustaría estrategias estadísticas para decidir sobre el esquema de anuncios más alto. Las estrategias frecuentes para evaluar las opciones A y B son los exámenes de especulación, que se asemejan a las pruebas t. Para llevar a cabo una prueba t, las 2 posibles variaciones del anuncio deben mostrarse durante un período de tiempo para recopilar los cargos por clic de los clientes. Para obtener un análisis amplio del esquema de publicidad popular, se requiere un período de exploración bastante largo, con el inconveniente de una posible falta de ingresos, ya que durante la exploración se muestran aleatoriamente los mejores y peores anuncios con la misma frecuencia. Es ventajoso maximizar la tasa de clic mostrando el anuncio más alto generalmente tan pronto como sea posible. Al realizar la optimización A/B con la técnica de cobertura de gradiente, el agente primero descubrirá aleatoriamente las variantes A y B, pero obtendrá mayores recompensas por el anuncio que resulte en mayores cargos por clic, por lo que el agente pronto aprenderá a señalar Muestre el mejor anuncio a los clientes con mayor frecuencia y maximice el precio de clic y los ingresos.
En nuestro ejemplo, ahora tenemos dos opciones artísticas publicitarias, donde asumimos que la opción A tiene una probabilidad de clic del 30% y la opción B tiene una probabilidad de clic del 40%. Realizamos una campaña de marketing publicitario con 1000 impresiones de anuncios. Si solo realizamos exploración y mostramos ambas opciones con la misma frecuencia, podemos contar con una tasa de clic promedio del 35% y una mediana de 350 clics en total. Si supiéramos que se puede hacer clic en B con más frecuencia, mostraríamos solo B y obtendríamos un promedio de 400 clics. Sin embargo, si hubiéramos tenido la mala suerte de mostrar solo A, podríamos obtener un promedio de solo 300 clics. Con la técnica del gradiente de cobertura, que veremos con detalle en un segundo, podemos obtener un promedio de 391 clics, lo que demuestra claramente que al usar rápidamente la cobertura encontrada se obtiene una cantidad de clics casi tan alta como si hubiéramos elegido la opción superior B en primer lugar.
Ejecutamos la optimización A/B con una técnica de cobertura de gradiente en una comunidad neuronal pequeña que utiliza la biblioteca TensorFlow. Primero, nos gustaría algunas importaciones.
importar matplotlib.pyplot como plt
importar numpy como np
importar tensorflow como tf
La comunidad neuronal se compone de una sola capa con una única neurona que decide qué anuncio señalar. Dado que ahora no tenemos detalles sobre el deseo, la ubicación, el tiempo o el resto del consumidor, la elección se basa en un ingreso cero a la comunidad neuronal y no queremos la no linealidad que podríamos obtener con las redes neuronales masivas. El coaching se logra ajustando el sesgo de esta neurona.
maniquí = tf.keras.fashions.Sequential()
maniquí.add(tf.keras.layers.Dense(1, activación="sigmoide", input_shape=(1,)))
maniquí.resumen()
Se usa una función para seleccionar el movimiento, ya sea mostrando la opción A o la opción B, utilizando la red neuronal. La función está adornada con tf.operate(), que crea un gráfico de cálculo estático, lo que le permite ejecutarse mucho más rápido que en modo agudo. Utilizando la función GradientTape de TensorFlow, recopilamos gradientes durante el proceso de selección de anuncios. Cada vez que un consumidor ingresa al sitio web, la red neuronal produce una salida que se maneja debido a la posibilidad de elegir la variante de anuncio A o la variante B para ofrecer al consumidor. Dado que solo tenemos una neurona con activación sigmoidea, la salida es una sola cantidad entre 0 y 1. Si la salida es 0,5, hay un 50 % de probabilidad de que se muestre el anuncio B y un 50 % de probabilidad de que se muestre el anuncio A. Si la salida es 0,8, hay un 80 % de probabilidad de que se muestre el anuncio B y el 20 % restante de probabilidad de que se muestre el anuncio A. El movimiento se elige evaluando la salida de la comunidad neuronal a una cantidad aleatoria uniformemente distribuida entre 0 y 1. Si la cantidad aleatoria es menor que la salida, el movimiento es Verdadero (1) y se elige el anuncio B; si la cantidad aleatoria es mayor que la salida, el movimiento es falso (0) y se elige el anuncio A. El valor de la pérdida mide la diferencia entre la salida de la red neuronal y el movimiento elegido utilizando binary_crossentropy_loss. Luego creamos los gradientes de la pérdida con respecto a los parámetros del maniquí.
@tf.operar()
def action_selection(maniquí):
con tf.GradientTape() como cinta:
salida = maniquí(np.array([[0.0]])) # [0 ... 1]
movimiento = (tf.random.uniform((1, 1)) < salida) # [0 o 1]pérdida = tf.reduce_mean(tf.keras.losses.binary_crossentropy(movimiento, salida))
graduados = tape.gradient(loss, mannequin.trainable_variables)
salida de retorno, movimiento, pérdida, graduados
Ejecutamos el entrenamiento sobre 1000 impresiones de anuncios. En todos los pasos, el anuncio se ofrece una vez y un nuevo consumidor tiene la posibilidad de hacer clic en el anuncio. Para medir el curso de formación, dependemos de la variedad completa de clics después de esta era. El precio educativo se describe como 0,5. Hablaremos sobre el efecto de la tarifa de entrenamiento en toda la variedad de clics más adelante.
PASOS = 1000
LR = 0,5
Ahora, permítanos ejecutar la campaña de marketing publicitario. La comunidad neuronal mejorará su predicción con el tiempo. Mediante el aprendizaje de refuerzo, el entrenamiento y la utilidad ocurren al mismo tiempo. En efecto, el anuncio elegido ahora se muestra en el sitio web y ahora tenemos que esperar y ver si el consumidor hace clic en el anuncio o abandona el sitio web sin hacer clic en él. Dentro del código, simplemente simulamos si un consumidor hace clic o no. Como se describió anteriormente, el anuncio A tiene una probabilidad del 30 % de que se haga clic en él, mientras que el anuncio B tiene una probabilidad del 40 % de que se haga clic en él. La prensa se puede manejar de inmediato como una recompensa para entrenar a la comunidad neuronal. La recompensa se usa para cambiar los gradientes. Si el consumidor hizo clic en el anuncio, el gradiente de ese movimiento no cambia, pero cuando el consumidor no hizo clic en el anuncio, el gradiente se invierte. Por último, el descenso de gradiente actualiza los parámetros de la comunidad neuronal mediante la asignación de nuevos valores de peso y sesgo a la comunidad neuronal.
para variar el paso (PASOS):salida, movimiento, pérdida, graduados = action_selection(maniquí)
si movimiento == Falso: # Movimiento A
recompensa = float(np.random.random() < 0.4)
si movimiento == Verdadero: # Movimiento B
recompensa = float(np.random.random() < 0.5)
graduados_ajustados = []
para var_index en varían (len (mannequin.trainable_variables)):
grads_adjusted.append((reward-0.5)*2 * grads[var_index])
maniquí.trainable_variables[0].assign(mannequin.trainable_variables[0]-LR*grads_adjusted[0])
maniquí.trainable_variables[1].assign(mannequin.trainable_variables[1]-LR*grads_adjusted[1])
El siguiente determinar resume la evolución del curso de formación de.
En total, la campaña de 1000 impresiones de anuncios mostrada en el número anterior ha resultado en un total de 393 clics, que es casi 400, el número de clics que podemos esperar si elegimos solo el anuncio superior B. Primero repasar el curso de capacitación observando todos los gráficos en el paso preliminar = 1. Observamos que la salida de la comunidad neuronal comienza en 0.5, lo que lleva a una elección aleatoria del anuncio con un 50 % de probabilidad para cada anuncio B y anuncio A. binary_crossentropy_loss mide la distinción entre la salida del maniquí y el movimiento tomado. Dado que el movimiento es 0 o 1, el valor inicial de la pérdida es el logaritmo negativo de la salida del modelo 0,5, que es aproximadamente 0,7. Dado que solo tenemos una sola neurona en nuestra comunidad neuronal, los gradientes incluyen dos valores escalares para la carga y el sesgo de esa neurona. Si se elige el anuncio A, el gradiente del sesgo es una cantidad optimista, y si se elige el anuncio B, el gradiente del sesgo es una cantidad desfavorable. El gradiente del parámetro de carga siempre es cero porque la entrada a la red neuronal es cero. La recompensa es extremadamente aleatoria porque solo hay una probabilidad del 30% al 40% de que se haga clic en el anuncio. Si se hace clic en el anuncio, obtenemos una recompensa y el gradiente no cambia; en cualquier otro caso, invertimos el gradiente. Los gradientes ajustados se multiplican por el precio de entrenamiento y se restan de los parámetros preliminares de la comunidad neuronal. Veremos que el valor del sesgo comienza en cero y se vuelve más desfavorable cuando se utilizan gradientes ajustados optimistas y más optimista cuando se utilizan gradientes ajustados desfavorables.
A través de la campaña de marketing publicitario, la salida de la comunidad neuronal tiende en la dirección de uno, aumentando la posibilidad de que se elija el anuncio B. Sin embargo, incluso cuando la salida del modelo ya está cerrada a 1, todavía hay una pequeña probabilidad de mostrar el anuncio A. Debido a que la salida del modelo se acerca a uno, hay una pequeña pérdida de valor si se elige el movimiento B y recibimos pequeños gradientes negativos, pero dentro del En los casos más raros en que se elige el anuncio A, se obtiene un valor de pérdida mayor, visto como picos ocasionales y como grandes gradientes optimistas. Una vez que se recolectan las recompensas, se observa que algunos de estos picos optimistas se invierten en los gradientes ajustados, ya que estas acciones no generaron clics. Como el anuncio B tiene el próximo clic en la oportunidad, los pequeños gradientes ajustados desfavorables se utilizan con mayor frecuencia que los gradientes optimistas derivados de los clics en el anuncio A. Por lo tanto, el valor del sesgo del modelo aumentará en pequeños pasos y en las raras ocasiones que el anuncio Se elige A y se hace clic, el valor del sesgo disminuye. La salida del modelo es suministrada por la función sigmoide utilizada para el valor de sesgo del modelo.
En esta demostración, notamos que se puede enseñar a una comunidad neuronal a elegir la más alta de dos opciones y aplicar esa opción de manera más constante para maximizar las recompensas. En general, se obtendrán 391 clics en esta configuración, donde el anuncio A tiene una probabilidad de clic del 30% y el anuncio B tiene una probabilidad de clic del 40%. En la práctica, estas posibilidades pueden ser mucho menores, y la diferencia entre ellas es quizás menor, lo que hace que sea más difícil para la comunidad neuronal encontrar la mejor opción. La técnica del gradiente de cobertura tiene la ventaja de ajustar de forma rutinaria el equilibrio entre la exploración y la explotación. No obstante, esta estabilidad se ve afectada por el precio de la formación. El aumento de las tasas de aprendizaje daría lugar a una parte de exploración más corta y una utilidad más rápida de la política descubierta, como se muestra en el siguiente gráfico, donde la tasa de aprendizaje aumenta de 0,01 a 10. La producción del modelo, promediada sobre 100 campañas publicitarias individuales, será Aumente más rápidamente con una tasa de lectura creciente hasta una tasa de lectura de 1. Sin embargo, con tasas de lectura más altas, existe el riesgo de adaptarse al movimiento defectuoso, que puede parecer más alto solo durante el período de exploración rápida. Con altas tasas de lectura, la salida del modelo se ajusta demasiado rápido, lo que genera opciones inestables.
Por lo tanto, hay una tasa de lectura óptima para elegir, lo que puede ser difícil de encontrar en la aplicación, ya que no se sabe nada sobre las posibilidades de clic de antemano. Varias tasas de aprendizaje de 0,01 a 10,0 revelan que se obtiene un máximo amplio de la suma de clics para tasas de aprendizaje entre 0,1 y un par de,0. El aumento de las tarifas de lectura mejora claramente la desviación habitual, lo que demuestra la inestabilidad del curso de aprendizaje, lo que también resulta en una reducción de la cantidad típica de clics.
Esta demostración revela cómo se puede utilizar el estudio de refuerzo para la optimización A/B. Es un ejemplo simple, por ejemplo, los medios subyacentes de la técnica de gradiente de cobertura. Ahora hemos descubierto cómo la comunidad neuronal actualiza sus parámetros principalmente en función de gradientes ajustados dependiendo de si se hizo clic o no en el anuncio elegido. Haciendo uso de la cobertura descubierta en breve maximiza el precio de clic. Sin embargo, seleccionar el precio de estudio óptimo puede ser difícil de aplicar.
Encontrará el código completo y una demostración simplificada en huggingface.co:https://huggingface.co/areas/Bernd-Ebenhoch/AB_optimization