Agentes de aprendizaje autom谩tico en Unity

imagen

Este art铆culo sobre agentes de aprendizaje autom谩tico en Unity fue escrito por Michael Lanham, un innovador t茅cnico, desarrollador activo de Unity, consultor, gerente y autor de muchos juegos, proyectos gr谩ficos y libros de Unity.

Los desarrolladores de Unity han implementado el soporte para el aprendizaje autom谩tico y, en particular, el aprendizaje por refuerzo en aras de crear SDK de aprendizaje por refuerzo profundo (DRL) para desarrolladores de juegos y simulaci贸n. Afortunadamente, el equipo de Unity, dirigido por Danny Lange, ha implementado con 茅xito un motor DRL confiable y moderno capaz de ofrecer resultados impresionantes. Unity utiliza el modelo de optimizaci贸n de pol铆tica proximal (PPO) como base del motor DRL; Este modelo es mucho m谩s complejo y puede diferir en algunos aspectos.

En este art铆culo, te presentar茅 las herramientas y los SDK para crear agentes DRL en juegos y simulaciones. A pesar de la novedad y el poder de esta herramienta, es f谩cil de usar y tiene herramientas auxiliares que le permiten aprender conceptos de aprendizaje autom谩tico sobre la marcha. Para trabajar con el tutorial, necesita instalar el motor de Unity.

Instalar agentes ML


En esta secci贸n, hablar茅 brevemente sobre los pasos que se deben seguir para instalar el SDK de ML-Agents. Este material a煤n est谩 en versi贸n beta y puede variar de una versi贸n a otra. Sigue estos pasos:

  1. Instale Git en la computadora; Funciona desde la l铆nea de comando. Git es un sistema de gesti贸n de c贸digo fuente muy popular, y hay muchos recursos en Internet sobre la instalaci贸n y el uso de Git en todas las plataformas. Despu茅s de instalar Git, aseg煤rese de que funcione creando un clon de cualquier repositorio.
  2. Abra un s铆mbolo del sistema o un shell normal. Los usuarios de Windows pueden abrir la ventana de Anaconda.
  3. Vaya a la carpeta de trabajo donde desea colocar su nuevo c贸digo e ingrese el siguiente comando (los usuarios de Windows pueden seleccionar C: \ ML-Agents):

      git clone https://github.com/Unity-Technologies/ml-agents 
  4. As铆 que clonas el repositorio de ml-agents en tu computadora y creas una nueva carpeta con el mismo nombre. Tambi茅n puede agregar un n煤mero de versi贸n al nombre de la carpeta. La unidad, como casi todo el mundo de la inteligencia artificial, cambia constantemente, al menos por ahora. Esto significa que constantemente aparecen nuevos cambios. Al momento de escribir, estamos clonando el repositorio en la carpeta ml-agents.6:

      git clone https://github.com/Unity-Technologies/ml-agents ml-agents.6 
  5. Cree un nuevo entorno virtual para ml-agents y especifique la versi贸n 3.6, como esta:

      #Windows 
     conda create -n ml-agents python = 3.6
     
     #Mac
     Use la documentaci贸n para su entorno preferido 
  6. Activa tu entorno nuevamente con Anaconda:

      activar ml-agentes 
  7. Instale TensorFlow. En Anaconda, esto se puede hacer con el siguiente comando:

      pip install tensorflow == 1.7.1 
  8. Instalar paquetes de Python. En Anaconda, ingrese lo siguiente:

    cd ML-Agents #from root folder cd ml-agents or cd ml-agents.6 #for example cd ml-agents pip install -e . or pip3 install -e . 
  9. Por lo tanto, instala todos los paquetes necesarios del SDK de Agentes; Esto puede tomar varios minutos. No cierre la ventana, pronto ser谩 煤til.

As铆 que instalamos y configuramos Unity Python SDK para ML-Agents. En la siguiente secci贸n, aprenderemos c贸mo configurar y capacitar uno de los muchos entornos proporcionados por Unity.

Entrenamiento de agente


Ahora podemos ponernos manos a la obra de inmediato y explorar ejemplos que utilizan el aprendizaje de refuerzo profundo (DRL). Afortunadamente, hay varios ejemplos en el conjunto de herramientas del nuevo agente para demostrar la potencia del motor. Abra Unity o Unity Hub y siga estos pasos:

  1. Haga clic en el bot贸n Abrir proyecto en la parte superior del cuadro de di谩logo Proyecto.
  2. Ubique y abra la carpeta del proyecto UnitySDK, como se muestra en la captura de pantalla:


    Abra el proyecto Unity SDK
  3. Espere a que se cargue el proyecto y luego abra la ventana Proyecto en la parte inferior del editor. Si se abre una ventana pidi茅ndole que actualice el proyecto, seleccione s铆 o contin煤e. Actualmente, todo el c贸digo de agente es compatible con versiones anteriores.
  4. Localice y abra la escena GridWorld como se muestra en la captura de pantalla:


    Abrir un ejemplo de una escena de GridWorld
  5. Seleccione el objeto GridAcademy en la ventana Jerarqu铆a.
  6. Vaya a la ventana del Inspector y al lado del campo Cerebros, haga clic en el icono para abrir el cuadro de di谩logo Selecci贸n de cerebro:

  7. Seleccione el cerebro del GridWorldPlayer. Este cerebro pertenece al jugador, es decir, el jugador (usted) puede controlar el juego.
  8. Haga clic en el bot贸n Reproducir en la parte superior del editor y observe el entorno. Como el juego ahora est谩 configurado para controlar al jugador, puedes usar las teclas WASD para mover el cubo. La tarea es mover el cubo azul al s铆mbolo verde +, evitando la X roja.

Ponte c贸modo en el juego. Tenga en cuenta que el juego solo funciona durante un cierto per铆odo de tiempo y no est谩 basado en turnos. En la siguiente secci贸n, aprenderemos c贸mo ejecutar este ejemplo con el agente DRL.

驴Qu茅 hay en el cerebro?


Uno de los aspectos sorprendentes de la plataforma ML-Agents es la capacidad de cambiar r谩pida y f谩cilmente de la gesti贸n de jugadores a la gesti贸n de AI / agente. Para esto, Unity utiliza el concepto de "cerebro". El cerebro puede ser controlado por el jugador o por el agente (cerebro de aprendizaje). Lo m谩s sorprendente es que puedes armar el juego y probarlo como jugador, y luego darlo bajo el control de un agente de RL. Gracias a esto, cualquier juego escrito con un poco de esfuerzo puede hacerse para ser controlado usando IA.

El proceso de configurar e iniciar la capacitaci贸n de agentes RL en Unity es bastante simple. Unity usa Python externo para construir un modelo del cerebro de aprendizaje. Usar Python tiene mucho sentido porque ya hay varias bibliotecas de aprendizaje profundo (DL) construidas a su alrededor. Para capacitar al agente en GridWorld, complete los siguientes pasos:

  1. Seleccione GridAcademy nuevamente y seleccione el cerebro GridWorldLearning en el campo Brains en lugar de GridWorldPlayer:


    Cambio al uso de GridWorldLearning Brain
  2. Marque la casilla Control a la derecha. Este par谩metro simple informa que el cerebro puede controlarse externamente. Esta opci贸n debe estar habilitada.
  3. Seleccione el objeto trueAgent en la ventana Jerarqu铆a y luego, en la ventana Inspector, cambie la propiedad Cerebro del componente Agente de cuadr铆cula al cerebro Aprendizaje mundial de Grid:


    Trabajo de GridWorldLearning brain para agente
  4. En este ejemplo, necesitamos que tanto Academy como Agent utilicen el mismo cerebro de GridWorldLearning. Cambie a la ventana Anaconda o Python y seleccione la carpeta ML-Agents / ml-agents.
  5. Ejecute el siguiente comando en una ventana de Anaconda o Python utilizando el entorno virtual ml-agents:

      mlagents-learn config / trainer_config.yaml --run-id = firstRun --train 
  6. Esto lanzar谩 el modelo de capacitaci贸n Unity PPO y un agente de ejemplo con la configuraci贸n especificada. En cierto punto, la ventana del s铆mbolo del sistema le pedir谩 que inicie el editor de Unity con el entorno cargado.
  7. Haga clic en Reproducir en el editor de Unity para iniciar el entorno GridWorld. Poco despu茅s, deber铆a ver el entrenamiento del agente y la salida a la ventana del script Python:


    Ejecutar GridWorld en modo de aprendizaje
  8. Tenga en cuenta que el script mlagents-learn es un c贸digo de Python que crea un modelo RL para ejecutar un agente. Como puede ver en el resultado de la secuencia de comandos, hay varios par谩metros (hiperpar谩metros) que deben configurarse.
  9. Deje que el agente aprenda algunos miles de iteraciones y observe qu茅 tan r谩pido aprende. El modelo interno utilizado aqu铆 llamado PPO ha demostrado ser un modelo de aprendizaje muy efectivo para muchas tareas diferentes, y es muy adecuado para el desarrollo de juegos. Con un equipo suficientemente potente, un agente puede aprender idealmente en menos de una hora.

Permita que el agente aprenda m谩s y explore otras formas de rastrear el proceso de aprendizaje del agente, como se presenta en la siguiente secci贸n.

Monitoreo del aprendizaje con TensorBoard


Capacitar a un agente utilizando el modelo RL o cualquier modelo DL a menudo es una tarea desalentadora y requiere atenci贸n al detalle. Afortunadamente, TensorFlow tiene un conjunto de herramientas de gr谩ficos llamado TensorBoard que puede usar para monitorear su proceso de aprendizaje. Siga estos pasos para iniciar TensorBoard:

  1. Abra una ventana de Anaconda o Python. Active el entorno virtual de ml-agents. No cierre la ventana en la que se ejecuta el modelo de entrenamiento; Lo necesitamos para continuar.
  2. Vaya a la carpeta ML-Agents / ml-agents y ejecute el siguiente comando:

      tensorboard --logdir = res煤menes 
  3. Entonces lanzamos TensorBoard en nuestro propio servidor web incorporado. Puede cargar la p谩gina utilizando la URL que se muestra despu茅s del comando anterior.
  4. Ingrese la URL para el TensorBoard como se muestra en la ventana, o escriba localhost: 6006 o machinename: 6006 en el navegador. Despu茅s de aproximadamente una hora, deber铆a ver algo como esto:


    Ventana de tabla de TensorBoard
  5. La captura de pantalla anterior muestra gr谩ficos, cada uno de los cuales muestra un aspecto separado del entrenamiento. Para comprender c贸mo se capacita a nuestro agente, debe lidiar con cada uno de estos gr谩ficos, por lo que analizaremos el resultado de cada secci贸n:

  • Entorno: esta secci贸n muestra c贸mo el agente se manifiesta en el entorno en su conjunto. A continuaci贸n se muestra una vista m谩s detallada de los gr谩ficos con la tendencia preferida:


Una imagen detallada de los gr谩ficos de la secci贸n Medio ambiente.

  • Recompensa acumulativa: esta es la recompensa total que maximiza al agente. Por lo general, es necesario que aumente, pero por alguna raz贸n puede disminuir. Siempre es mejor maximizar las recompensas entre 1 y -1. Si las recompensas de horario van m谩s all谩 de este rango, entonces esto tambi茅n necesita ser arreglado.
  • Duraci贸n del episodio: si este valor disminuye, generalmente es una buena se帽al. En 煤ltima instancia, cuanto m谩s cortos son los episodios, m谩s entrenamiento. Sin embargo, tenga en cuenta que si es necesario, la duraci贸n de los episodios puede aumentar, por lo que la imagen puede ser diferente.
  • Lecci贸n: este cuadro deja en claro en qu茅 lecci贸n se encuentra el agente; Est谩 destinado al aprendizaje curricular.
  • P茅rdidas: esta secci贸n muestra gr谩ficos que representan las p茅rdidas o los costos calculados para la p贸liza y el valor. A continuaci贸n se muestra una captura de pantalla de esta secci贸n con flechas que apuntan a la configuraci贸n 贸ptima:


    P茅rdidas y entrenamiento preferido

  • P茅rdida de p贸liza: este cuadro determina la cantidad de cambio de p贸liza a lo largo del tiempo. La pol铆tica es un elemento que define acciones, y en el caso general, este cronograma debe tender a la baja, lo que demuestra que la pol铆tica est谩 tomando mejores decisiones.
  • P茅rdida de valor: esta es la p茅rdida promedio de la funci贸n de valor. En esencia, modela qu茅 tan bien el agente predice el valor de su pr贸ximo estado. Inicialmente, este valor deber铆a aumentar, y despu茅s de la estabilizaci贸n de la remuneraci贸n, deber铆a disminuir.
  • Pol铆tica: para evaluar la calidad de las acciones en PPO, se utiliza el concepto de una pol铆tica, no un modelo. La siguiente captura de pantalla muestra los cuadros de pol铆ticas y la tendencia preferida:


    Gr谩ficos de pol铆ticas y tendencias preferidas
  • Entrop铆a: este gr谩fico muestra la magnitud del agente de investigaci贸n. Es necesario reducir este valor, porque el agente aprende m谩s sobre el medio ambiente y necesita menos investigaci贸n.
  • Tasa de aprendizaje: en este caso, este valor deber铆a disminuir gradualmente linealmente.
  • Estimaci贸n del valor: este es el valor promedio visitado por todos los estados del agente. Para reflejar el mayor conocimiento de un agente, este valor debe crecer y luego estabilizarse.

6. Deje el agente en funcionamiento hasta que se complete y no cierre el TensorBoard.
7. Regrese a la ventana Anaconda / Python que entren贸 al cerebro y ejecute este comando:

  mlagents-learn config / trainer_config.yaml --run-id = secondRun --train 

8. Nuevamente se le pedir谩 que haga clic en Reproducir en el editor; entonces hazlo. Deje que el agente comience a entrenar y realice varias sesiones. En el proceso, observe la ventana de TensorBoard y observe c贸mo se muestra secondRun en los gr谩ficos. Puede dejar que este agente se ejecute hasta su finalizaci贸n, pero puede detenerlo si lo desea.

En versiones anteriores de ML-Agents, primero ten铆a que construir el ejecutable de Unity como entorno de aprendizaje para el juego y luego ejecutarlo. El cerebro externo de Python deber铆a haber funcionado de la misma manera. Este m茅todo hizo muy dif铆cil depurar problemas en el c贸digo o en el juego. En la nueva t茅cnica, se eliminaron todas estas dificultades.

Ahora que hemos visto lo f谩cil que es configurar y entrenar al agente, pasaremos a la siguiente secci贸n, en la que aprenderemos c贸mo ejecutar el agente sin el cerebro externo de Python y ejecutarlo directamente en Unity.

Lanzamiento de agente


El entrenamiento de Python es genial, pero no puedes usarlo en un juego real. Idealmente, nos gustar铆a construir un gr谩fico TensorFlow y usarlo en Unity. Afortunadamente, se cre贸 la biblioteca TensorFlowSharp que permite a .NET usar gr谩ficos TensorFlow. Esto nos permite construir modelos TFModels fuera de l铆nea y luego inyectarlos en el juego. Desafortunadamente, solo podemos usar modelos entrenados, pero no entrenarlos de esa manera, al menos no todav铆a.

Veamos c贸mo funciona esto, usando el ejemplo del gr谩fico que acabamos de entrenar para el entorno GridWorld; 脷selo como un cerebro interno en la Unidad. Siga los pasos en la siguiente secci贸n para configurar y usar su cerebro interno:

  1. Descargue el complemento TFSharp desde aqu铆
  2. En el men煤 del editor, seleccione Activos | Paquete de importaci贸n | Paquete personalizado ...
  3. Encuentre el paquete de activos que acaba de descargar y use los cuadros de di谩logo de importaci贸n para cargar el complemento en el proyecto.
  4. Desde el men煤, seleccione Editar | Configuraci贸n del proyecto. Se abre la ventana Configuraci贸n (apareci贸 en la versi贸n 2018.3)
  5. Encuentre los caracteres de Scripting Define Symbols en las opciones del reproductor y cambie el texto a ENABLE_TENSORFLOW, y tambi茅n habilite Permitir c贸digo inseguro, como se muestra en la captura de pantalla:


    Establecer la bandera ENABLE_TENSORFLOW
  6. Busque el objeto GridWorldAcademy en la ventana Jerarqu铆a y aseg煤rese de que utiliza Brains | GridWorldLearning. Deshabilite la opci贸n Control en la secci贸n Cerebros del script de Grid Academy.
  7. Encuentre el cerebro de GridWorldLearning en la carpeta Activos / Ejemplos / GridWorld / Brains y aseg煤rese de que el par谩metro Modelo en la ventana del Inspector est茅 configurado, como se muestra en la captura de pantalla:


    Tarea modelo para el cerebro
  8. GridWorldLearning ya deber铆a estar configurado como modelo. En este ejemplo, usamos el TFModel que viene con el ejemplo de GridWorld.
  9. Haga clic en Reproducir para iniciar el editor y ver c贸mo el agente administra el cubo.

Ahora estamos lanzando el entorno pre-entrenado de Unity. En la siguiente secci贸n, aprenderemos c贸mo usar el cerebro que entrenamos en la secci贸n anterior.

Carga cerebral entrenada


Todos los ejemplos de Unity tienen cerebros pre-entrenados que pueden usarse para estudiar ejemplos. Por supuesto, queremos poder cargar nuestros propios gr谩ficos TF en Unity y ejecutarlos. Para cargar un gr谩fico entrenado, siga estos pasos:

  1. Vaya a la carpeta ML-Agents / ml-agents / models / firstRun-0. Dentro de esta carpeta est谩 el archivo GridWorldLearning.bytes. Arrastre este archivo a la carpeta Proyecto / Activos / Agentes ML / Ejemplos / GridWorld / TFModels dentro del editor de Unity:


    Arrastrando un gr谩fico de bytes a Unity
  2. Por lo tanto, importamos el gr谩fico en el proyecto de Unity como un recurso y le cambiamos el nombre a GridWorldLearning 1. El motor hace esto porque el modelo predeterminado ya tiene el mismo nombre.
  3. Busque GridWorldLearning en la carpeta del cerebro, selecci贸nelo en la ventana del Inspector y arrastre el nuevo modelo GridWorldLearning 1 al campo Modelo de los par谩metros de Par谩metros cerebrales:


    Cargando el cerebro en el campo Modelo de gr谩fico
  4. En esta etapa, no necesitamos cambiar ning煤n otro par谩metro, sino prestar especial atenci贸n a c贸mo est谩 configurado el cerebro. Por ahora, la configuraci贸n est谩ndar servir谩.
  5. Haga clic en Jugar en el editor de Unity y vea c贸mo el agente se mueve con 茅xito en el juego.
  6. El 茅xito del agente en el juego depende del tiempo de su entrenamiento. Si le permites completar el entrenamiento, el agente ser谩 similar a un agente de Unity completamente entrenado.

Source: https://habr.com/ru/post/454612/


All Articles