La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Cómo se fabrica TensorForce?

¿Cómo se fabrica TensorForce?

¿Cómo se hace TensorForce?

Este artículo presentará un problema práctico: ¿cómo puede la comunidad que aplica el aprendizaje por refuerzo pasar de recopilar guiones y casos individuales a realizar el aprendizaje por refuerzo? API: ¿una herramienta para el aprendizaje por refuerzo? tf-aprender? ¿aún? aprender skikit? ¿conversar? ¿Fuerza Tensor? Antes de enmarcar, hablaremos de las observaciones e ideas que inspiraron este proyecto. ¿Y si eso es lo que quieres saber? API, puedes saltarte esta parte. Nos gustaría enfatizar que este artículo no contiene una introducción al aprendizaje por refuerzo profundo en sí, ni propone ningún modelo nuevo ni habla sobre los algoritmos más recientes y mejores, por lo que para los investigadores puros, este artículo puede no ser tan interesante.

Motivación para el desarrollo

Supongamos que es un investigador en sistemas informáticos, procesamiento del lenguaje natural u otros campos de aplicación, debe tener algunos conocimientos básicos del aprendizaje por refuerzo y debe tener algunos conocimientos básicos. El aprendizaje por refuerzo profundo (¿deep? RL) se utiliza para controlar ciertos aspectos del sistema.

Aprendizaje por refuerzo profundo, DQN, ¿vainilla? ¿Gradiente estratégico, A3C? Ya hay muchos artículos introductorios, como? ¿Kapasi? Artículo(/openai/baselines), rllab(/openai/rllab) y? ¿GitHub? Hay muchos algoritmos específicos en el mundo.

Sin embargo, descubrimos que todavía existe una gran brecha entre el desarrollo del marco de investigación del aprendizaje por refuerzo y su aplicación práctica. En aplicaciones prácticas, podemos enfrentar los siguientes problemas:

Fortalecer el estrecho acoplamiento entre la lógica de aprendizaje y los controles de simulación: ¿entorno de simulación? API? Muy convenientes, por ejemplo, nos permiten crear un objeto de entorno y luego ¿para qué? Dentro del bucle, también puede gestionar su lógica de actualización interna (por ejemplo, recopilando características de salida). Esto es razonable si nuestro objetivo es evaluar una idea de aprendizaje por refuerzo, pero es mucho más difícil separar el código de aprendizaje por refuerzo de un entorno de simulación. También implica la cuestión del control del proceso: cuando el entorno esté listo, ¿puede llamarlo el código de aprendizaje por refuerzo? ¿O se recurrirá a un agente de aprendizaje por refuerzo cuando el entorno requiera una decisión? Para las bibliotecas de aprendizaje por refuerzo aplicadas implementadas en muchos campos, a menudo necesitamos lo último.

Arquitectura de red fija: la mayoría de las implementaciones incluyen arquitecturas de redes neuronales codificadas. Por lo general, esto no es un gran problema, ya que simplemente podemos agregar o eliminar diferentes capas de red según sea necesario. Aún así, sería mucho mejor si existiera una biblioteca de aprendizaje por refuerzo que pudiera proporcionar la funcionalidad de una interfaz declarativa sin modificar el código de la biblioteca. Además, hay situaciones en las que es (sorprendentemente) mucho más difícil modificar el esquema, como cuando es necesario gestionar el estado interno (ver más abajo).

Interfaz de estado/acción incompatible: ¿utilizada por muchos de los primeros códigos fuente abiertos? ¿OpenAI? ¿Gimnasia? entorno, una interfaz simple con una entrada de estado plano y una única salida de acción continua o discreta. ¿Pero qué? ¿Mente profunda? ¿laboratorio? Luego use el formato de diccionario, que generalmente tiene múltiples estados y acciones. Entonces qué. ¿OpenAI? ¿universo? Eventos clave con nombre (¿eventos clave? Idealmente, queremos que una inteligencia de aprendizaje por refuerzo pueda manejar cualquier número de estados y acciones de tipos y formas potencialmente diferentes). ¿Te gusta TensorForce? ¿Uno de los autores trabaja? ¿PNL? Estoy usando el aprendizaje por refuerzo y quiero manejar entradas multimodales, donde un estado consta conceptualmente de dos entradas: una imagen y una descripción correspondiente.

Configuraciones de ejecución opacas y problemas de rendimiento: ¿escribir? ¿TensorFlow? Al codificar, naturalmente priorizamos la lógica. Esto traerá muchas operaciones repetidas/innecesarias o implementará valores intermedios innecesarios. Además, el objetivo del aprendizaje por refuerzo distribuido/asincrónico/paralelo es un poco incierto, ¿distribuido? ¿TensorFlow? Algunas configuraciones de hardware requieren un ajuste manual hasta cierto punto.

Asimismo, si al final hay una configuración de ejecución que solo necesita declarar los dispositivos o máquinas disponibles, y luego todo lo demás se puede manejar internamente, ¿cuál es la diferencia entre los dos? ¿PI? ¿Puede la máquina funcionar de forma asincrónica? VPG.

Para ser claros, estas preguntas no pretenden criticar el código escrito por los investigadores, ya que el código no está destinado a ser utilizado como? API? o para otras aplicaciones. Aquí presentamos las perspectivas de investigadores que desean aplicar el aprendizaje por refuerzo a diferentes campos.

¿TensorFuerza? Interfaz de programación de aplicaciones

¿TensorForce? Proporciona una interfaz declarativa, una implementación sólida que puede utilizar algoritmos de aprendizaje por refuerzo profundo. En aplicaciones que deseen utilizar el aprendizaje por refuerzo profundo, se puede utilizar como una biblioteca que permite a los usuarios experimentar con diferentes configuraciones y arquitecturas de red sin preocuparse por todos los diseños subyacentes. Entendemos completamente que los métodos actuales de aprendizaje por refuerzo profundo suelen ser frágiles y requieren muchos ajustes, pero esto no significa que no podamos construir una infraestructura de software general para soluciones de aprendizaje por refuerzo.

¿TensorFuerza? No es una colección de resultados de implementación originales, ya que no se trata de una simulación de investigación y se requiere un trabajo considerable para aplicar la implementación original a un entorno del mundo real. Cualquier marco de este tipo contendrá inevitablemente algunas decisiones estructurales que harán que las cosas no estándar sean aún más molestas (¿fugas de abstracción? Abstracción. Esta es la razón por la que los investigadores de aprendizaje por refuerzo pueden preferir construir sus modelos desde cero). ¿usar? En TensorForce, nuestro objetivo es obtener una visión general de las mejores investigaciones actuales, incluidas las perspectivas y estándares emergentes.

A continuación, hablaremos en profundidad. ¿Fuerza Tensor? API? aspectos fundamentales y discutir nuestras opciones de diseño.

Creación y configuración del agente

Los estados y acciones en este ejemplo son formas breves de estados/acciones más generales. Por ejemplo, una entrada multimodal que consta de una imagen y una descripción se define de la siguiente manera. De manera similar, también se pueden definir múltiples acciones de salida. Tenga en cuenta que a lo largo del código, la forma abreviada de un único estado/acción debe persistir para comunicarse con el agente.

estados = dict(

imagen=dict(forma=(64, 64, 3), tipo='float '),

caption=dict( shape=(20,), type='int ')

)

Los parámetros de configuración dependen del agente base y modelo utilizado. La lista completa de parámetros para cada agente se puede encontrar en la siguiente configuración de ejemplo: /reinforcio/tensor force/tree/master/examples/configs.

¿TensorFuerza? Actualmente, se proporcionan los siguientes algoritmos de aprendizaje por refuerzo:

Agente aleatorio

¿Qué usar? ¿generalización? ¿Ventaja? ¿estimar? ¿Qué pasa? ¿vainilla? Gradiente de políticas (VPGAgent)

Optimización de políticas de área de confianza (TRPOAgent)

¿Profundidad? q? ¿Aprendizaje/doble profundidad? q? Aprendizaje (gestión dq)

Función de ventaja estandarizada

¿Qué tan profunda es la demostración a los expertos? q? Aprendizaje (DQFDAgent)

¿Asincrónico? ¿Ventaja? Actor-Crítico (A3C (A3c) (¿se puede pasar implícitamente? ¿Distribuir? Usar)

¿El último elemento significa que no hay un ?A3CAgent? algo como esto, porque ?A3C? De hecho, describe ¿Es ¿El mecanismo de actualización asincrónico común a TensorFlow? ¿Como el documento "¿Refuerzo asincrónico?"

Cabe señalar que ¿A3C? No es la estrategia de actualización distribuida óptima para todos los modelos (e incluso puede no tener sentido para algunos modelos). Al final de este artículo discutiremos cómo implementar otros enfoques (por ejemplo, PAAC). Es importante distinguir conceptualmente el problema de la agencia y la semántica de actualización del problema de la semántica de ejecución.

También queremos hablar de la diferencia entre modelos y agentes. ¿Agente? La clase define el aprendizaje por refuerzo como. API? La interfaz utilizada puede gestionar datos de observación entrantes, preprocesamiento, exploración y otras tareas. ¿Cuáles son los dos métodos clave? agente.act(estado)? Entonces qué. agente.observe(recompensa, terminal).agent.act(estado)? Responder a una acción, ¿y luego qué? agente.observe(recompensa, terminal)? El modelo se actualizará según el mecanismo del agente, como un agente de memoria sin políticas o un agente de procesamiento por lotes de políticas. Tenga en cuenta que estas funciones deben llamarse alternativamente para que los mecanismos internos del agente funcionen correctamente. ¿modelo? La clase implementa el algoritmo central de aprendizaje por refuerzo y aprueba. obtener_acción? Entonces qué. ¿renovar? Los métodos proporcionan la interfaz necesaria a la que el agente puede llamar internamente en puntos relevantes. ¿Te gusta DQNAgent? Esto es tener. ¿Modelo DQN? ¿Y una línea adicional (para actualizaciones de la red de destino)? ¿Agente de memoria? Agente

Configuración de la red neuronal

Una cuestión clave en el aprendizaje por refuerzo es diseñar una función de valor eficiente. Conceptualmente, pensamos en un modelo como una descripción de un mecanismo de actualización, que es diferente de algo más nuevo en la realidad, que en el caso del aprendizaje por refuerzo profundo se refiere a una red neuronal (o redes neuronales). Por lo tanto, no hay redes codificadas en el modelo, sino que se crean instancias de manera diferente según la configuración.

En el ejemplo anterior, creamos mediante programación una configuración de red como una lista de diccionarios que describen cada capa. ¿Puede pasar también esta configuración? ¿JSON? dado, luego use una función de utilidad para convertirlo en un constructor de red (¿red? constructor).

¿Cuál es la capa de activación predeterminada? Relu, pero hay otras funciones de activación disponibles (actualmente? elu, luther, softmax, tanh? next. sigmoid Además, se pueden modificar otras propiedades de la capa).

Elegimos no utilizar implementaciones de capas existentes (como las de ?Tf.layers) para tener un control claro sobre las operaciones internas y garantizar que se puedan utilizar con ?Tf.layers. ¿Fuerza Tensor? El resto del. ¿Queremos evitar dinámicas? ¿Papel de regalo? biblioteca, ¿entonces solo depende de la capa inferior? ¿TensorFlow? funcionar.

¿La nuestra? ¿capa? Actualmente, la biblioteca solo proporciona muy pocos tipos de capas básicas, pero se ampliará en el futuro.

¿Cuánto hemos pagado hasta ahora? ¿Fuerza Tensor? La función de crear una red jerárquica, es decir, una red con un único tensor de estado de entrada, tiene una secuencia de capas que da como resultado un tensor de salida. Sin embargo, en algunos casos puede ser necesario o más apropiado desviarse de esta estructura de pila de capas. El caso más obvio es que esto es necesario cuando se deben procesar múltiples estados de entrada y esta tarea no se puede lograr de forma natural utilizando una única secuencia de capas de procesamiento.

Actualmente, no proporcionamos una interfaz de configuración de nivel superior para crear automáticamente el constructor de red correspondiente. Entonces, para este caso, debe definir mediante programación su funcionalidad de generador de red y agregarla a la configuración del proxy como antes.

¿Suma interna del estado? ¿episodio? Operativo

A diferencia del entorno de aprendizaje supervisado clásico (donde las instancias y las llamadas a la red neuronal se consideran independientes), el aprendizaje por refuerzo es un? ¿episodio? El paso de tiempo depende de la acción anterior y también afecta a los estados posteriores. Por lo tanto, es concebible que una red neuronal pueda tener un estado interno además de sus entradas de estado y salidas de acción en cada paso de tiempo. ¿episodio? Corresponde a la entrada/salida para cada paso de tiempo en .

El siguiente diagrama muestra cómo funciona la red a lo largo del tiempo:

La gestión de estos estados internos (es decir, ¿se propagan entre pasos de tiempo y se inician otros nuevos? ¿Interludios? Al restablecerlos) se puede determinar completamente mediante: ¿Fuerza Tensor? ¿Qué pasa? ¿Agente? Entonces qué. ¿modelo? procesamiento de clases. Tenga en cuenta que esto maneja todos los casos de uso relevantes (¿en ? lote ? dentro de un ? episodio , ¿está en ? lote ? más de un ? episodio , ¿está en ? lote ? no hay terminal dentro de ? episodio ).

En esta arquitectura de ejemplo, ¿se envía la salida de la capa densa? ¿LSTM? celda, y luego alcanza la salida final para este paso de tiempo. ¿Cuándo seguir adelante? ¿LSTM? En un paso, se actualizará su estado interno y se proporcionará aquí la salida del estado interno. Para el siguiente paso de tiempo, ¿la red obtendrá la entrada del nuevo estado y este estado interno y luego lo enviará? ¿LSTM? ¿Impulsar más para generar producción real y nueva interna? ¿LSTM? estado, etc...

Para implementaciones personalizadas de capas con estado interno, la función debe devolver no solo la salida de la capa, sino también una lista de marcadores de posición de entrada de estado interno, la salida de estado interna correspondiente. tensor y una lista interna de tensores de inicialización de estado (todos de la misma longitud, en este orden).

Estados de preprocesamiento

Podemos definir pasos de preprocesamiento que se aplican a estos estados (o a varios estados, si se especifica un diccionario de listas).

¿Esto? ¿Pila? ¿Cada preprocesador tiene un tipo y es opcional? argumentos? lista y/o ? ¿Cuarles? diccionario. ¿Cómo qué? ¿secuencia? El preprocesador tomará los últimos cuatro estados (es decir, fotogramas) y los apilará para simular las propiedades de Markov. Por cierto: ¿lo estás usando como el mencionado anteriormente? ¿LSTM? capa, que obviamente no es necesaria porque? ¿LSTM? Las capas pueden modelar y comunicar dependencias temporales a través de estados internos.

Explorar

¿Explorar dónde? ¿Configuración? Objeto que puede ser aplicado por un agente a acciones determinadas por su modelo (para manejar múltiples acciones, nuevamente, se proporciona un diccionario canónico). ¿Por ejemplo para su uso? ¿Ornstein-Uhlenbeck? Para explorar resultados de acción continua, se agregarán las siguientes especificaciones a la configuración.

¿Usar? ¿Corredor? Las funciones de utilidad utilizan proxies.

Usemos un proxy. Este código es un agente que se ejecuta en nuestro entorno de prueba: /feedback IO/tensor force/BLOB/Master/tensor force/Environments/Minimum_test.py Lo usamos para la integración continua: un entorno mínimo para verificar el mecanismo de acción, observación y actualización. del modo de trabajo de un determinado agente/modelo. Tenga en cuenta que todas las implementaciones de nuestro entorno (OpenAI? Gym, Open? Universe, DeepMind? Labs) utilizan la misma interfaz, por lo que puede ejecutar pruebas directamente en otro entorno.

¿Corredor? Las funciones de utilidad facilitan la ejecución de agentes en el entorno. Dado cualquier instancia de agente y entorno, ¿qué puede gestionar? ¿episodio? ¿Cantidad de cada uno? ¿episodio? Duración máxima, condiciones de terminación, etc. ¿Corredor? ¿Es aceptable? especificación_clúster? Parámetro, si está presente, para gestionar la ejecución distribuida (¿TensorFlow? supervisor/sesión/etc. ¿Pasar opcional?). Interludio_¿Terminado? parámetros, también puede informar resultados periódicamente y también puede dar valores máximos? ¿episodio? Puntero para detener la ejecución antes de un número.

Como se mencionó en la introducción, ¿se utiliza en un escenario de aplicación determinado? ¿Corredor? Las clases se basan en el control de procesos. Si utilizamos el aprendizaje por refuerzo, ¿podemos hacerlo razonablemente? ¿Fuerza Tensor? Consultar información de estado (como a través de una cola o un servicio de red) y devolver una acción (a otra cola o servicio), luego se puede usar para implementar la interfaz del entorno, de modo que el corredor se pueda usar (o ampliar). función de utilidad.

¿Una situación más común puede ser? ¿Fuerza Tensor? Se utiliza como una biblioteca de aplicaciones externa controlada por un controlador y, por lo tanto, no puede proporcionar un identificador de entorno. Para los investigadores, esto puede ser trivial, pero en campos como los sistemas informáticos, es un problema de implementación típico, que es la razón fundamental por la que la mayoría de los scripts de investigación sólo se pueden utilizar para simulación y no para aplicaciones prácticas.

También cabe mencionar que el objeto de configuración central declarativo nos permite configurar directamente interfaces para todos los componentes del modelo de aprendizaje por refuerzo, especialmente la arquitectura de red.

Pensamientos adicionales

Esperamos que puedas descubrirlo. ¿Fuerza Tensor? Muy útil. Hasta ahora, nuestro enfoque ha sido implementar la arquitectura primero. Creemos que esto nos permitirá implementar diferentes conceptos de aprendizaje por refuerzo y nuevos métodos de manera más consistente, y evitará el inconveniente de explorar casos de uso de aprendizaje por refuerzo profundo en nuevos dominios.

En un campo que evoluciona tan rápidamente, puede resultar difícil decidir qué funciones incluir en una biblioteca real. Hay muchos algoritmos y conceptos disponibles ahora, ¿y eso parece? ¿Arcada? ¿estudiar? ¿ambiente? (CERVEZA INGLESA)? En un subconjunto del entorno, las nuevas ideas conducen a mejores resultados cada semana. Pero también surge una pregunta: ¿Muchas ideas son fáciles de paralelizar o concretar? ¿episodio? Los entornos estructurales son válidos: no tenemos una idea precisa de las propiedades del entorno y cómo se relacionan con los diferentes métodos. Sin embargo, podemos ver algunas tendencias claras:

¿La suma de gradientes estratégicos? q? Los métodos de aprendizaje híbrido mejoran la eficiencia de la muestra (¿PGQ, Q-Prop? Es algo lógico. Aunque no sabemos qué estrategia híbrida prevalecerá, creemos que será el próximo "método estándar". Estamos muy interesados ​​en saberlo. La utilidad de estos métodos en diferentes dominios de aplicación (datos ricos/escasos) es que la mayoría de los investigadores aplicados prefieren usar las variantes de gradiente de políticas básicas porque son más fáciles de entender e implementar y, lo que es más importante, son más robustos que los algoritmos más nuevos, que puede requerir ajustes significativos para hacer frente a posibles inestabilidades numéricas (¿inestabilidades numéricas? Una visión diferente es que los investigadores del aprendizaje sin refuerzo tal vez simplemente no conozcan los nuevos métodos o no estén dispuestos a trabajar para implementarlos). ¿TensorForce? Finalmente, vale la pena considerar que el mecanismo de actualización del dominio de la aplicación es a menudo menos importante que el modelado del estado, las acciones y los retornos.

¿Mejor uso de las GPU de TI y otros dispositivos (PAAC, GA3C?): ¿Uno? El problema con los enfoques en este campo son las suposiciones implícitas sobre el tiempo que lleva recopilar datos y actualizarlos en campos que no son de simulación. Es posible que estas suposiciones no se cumplan y se necesita más investigación para comprender cómo las propiedades del entorno afectarán la semántica de ejecución del dispositivo. ¿Seguimos usando feed_dicts y también estamos considerando mejorar el rendimiento del procesamiento de entrada (por ejemplo, modo de sonda, detección basada en recuento, ruido del espacio de parámetros, etc.)?

Espacio de acción discreto a gran escala, jerárquico. modelos y descomposición de subobjetivos. ¿Qué? ¿Durac-Arnold? ¿Paper Deep? ¿Espacios discretos > Los espacios discretos complejos (como muchas subopciones dependientes del estado) son muy relevantes en la API que esperamos utilizar en los próximos años? Logros.

Módulos internos y métodos basados ​​en modelos completamente nuevos para la predicción de estados: por ejemplo, el artículo "The? Preamplifier:? End-to-End? Learning? And What? Planning".

Aprendizaje bayesiano por refuerzo profundo y razonamiento de incertidumbre

En general, estamos siguiendo estos desarrollos e incluiremos técnicas existentes que omitimos anteriormente (debería haber muchas una vez que creamos que existe una nueva idea); el potencial de convertirse en un poderoso método estándar, también lo incluimos. En este sentido, no estamos compitiendo explícitamente con el marco de investigación, sino que tenemos una mayor cobertura.

Finalmente, tenemos una compilación que los implementa. ideas para ver cómo podemos traducir los últimos métodos de última generación en funciones de biblioteca útiles.

Una vez que estemos satisfechos con un proyecto, consideraremos abrirlo. ¿Así que lo que? ¿GitHub? El mundo no se ha actualizado en mucho tiempo, lo que probablemente se debe a que todavía estamos luchando con el desarrollo interno (o nuestros estudiantes de doctorado están demasiado ocupados), pero no porque hayamos abandonado el proyecto. Si está interesado en desarrollar casos de aplicación interesantes, contáctenos.