diff --git a/README.md b/README.md index 01c809e..b8172ab 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,19 @@ -# The Hugging Face Deep Reinforcement Learning Class 🤗 +# The Hugging Face Deep Reinforcement Learning Class 🤗 + +We're launching a **new version (v2.0) of the course starting December the 5th,** + +- The syllabus 📚: https://simoninithomas.github.io/deep-rl-course + +- The course 📚: + +- **Sign up here** ➡️➡️➡️ http://eepurl.com/ic5ZUD + +
+
+
+
+ +# The documentation below is for v1.0 (depreciated) We're launching a **new version (v2.0) of the course starting December the 5th,** diff --git a/notebooks/bonus-unit1/bonus-unit1.ipynb b/notebooks/bonus-unit1/bonus-unit1.ipynb new file mode 100644 index 0000000..a96ade7 --- /dev/null +++ b/notebooks/bonus-unit1/bonus-unit1.ipynb @@ -0,0 +1,557 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "2D3NL_e4crQv" + }, + "source": [ + "# Bonus Unit 1: Let's train Huggy the Dog 🐶 to fetch a stick" + ] + }, + { + "cell_type": "markdown", + "source": [ + "\"Bonus\n", + "\n", + "In this notebook, we'll reinforce what we learned in the first Unit by **teaching Huggy the Dog to fetch the stick and then play with it directly in your browser**\n", + "\n", + "⬇️ Here is an example of what **you will achieve at the end of the unit.** ⬇️ (launch ▶ to see)" + ], + "metadata": { + "id": "FMYrDriDujzX" + } + }, + { + "cell_type": "code", + "source": [ + "%%html\n", + "" + ], + "metadata": { + "id": "PnVhs1yYNyUF" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### The environment 🎮\n", + "\n", + "- Huggy the Dog, an environment created by [Thomas Simonini](https://twitter.com/ThomasSimonini) based on [Puppo The Corgi](https://blog.unity.com/technology/puppo-the-corgi-cuteness-overload-with-the-unity-ml-agents-toolkit)\n", + "\n", + "### The library used 📚\n", + "\n", + "- [MLAgents (Hugging Face version)](https://github.com/huggingface/ml-agents)" + ], + "metadata": { + "id": "x7oR6R-ZIbeS" + } + }, + { + "cell_type": "markdown", + "source": [ + "We're constantly trying to improve our tutorials, so **if you find some issues in this notebook**, please [open an issue on the Github Repo](https://github.com/huggingface/deep-rl-class/issues)." + ], + "metadata": { + "id": "60yACvZwO0Cy" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Objectives of this notebook 🏆\n", + "\n", + "At the end of the notebook, you will:\n", + "\n", + "- Understand **the state space, action space and reward function used to train Huggy**.\n", + "- **Train your own Huggy** to fetch the stick.\n", + "- Be able to play **with your trained Huggy directly in your browser**.\n", + "\n", + "\n" + ], + "metadata": { + "id": "Oks-ETYdO2Dc" + } + }, + { + "cell_type": "markdown", + "source": [ + "## This notebook is from Deep Reinforcement Learning Course\n", + "\"Deep" + ], + "metadata": { + "id": "mUlVrqnBv2o1" + } + }, + { + "cell_type": "markdown", + "source": [ + "In this free course, you will:\n", + "\n", + "- 📖 Study Deep Reinforcement Learning in **theory and practice**.\n", + "- 🧑‍💻 Learn to **use famous Deep RL libraries** such as Stable Baselines3, RL Baselines3 Zoo, CleanRL and Sample Factory 2.0.\n", + "- 🤖 Train **agents in unique environments** \n", + "\n", + "And more check 📚 the syllabus 👉 https://simoninithomas.github.io/deep-rl-course\n", + "\n", + "Don’t forget to **sign up to the course** (we are collecting your email to be able to **send you the links when each Unit is published and give you information about the challenges and updates).**\n", + "\n", + "\n", + "The best way to keep in touch is to join our discord server to exchange with the community and with us 👉🏻 https://discord.gg/ydHrjt3WP5" + ], + "metadata": { + "id": "pAMjaQpHwB_s" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Prerequisites 🏗️\n", + "\n", + "Before diving into the notebook, you need to:\n", + "\n", + "🔲 📚 **Develop an understanding of the foundations of Reinforcement learning** (MC, TD, Rewards hypothesis...) by doing Unit 1\n", + "\n", + "🔲 📚 **Read the introduction to Huggy** by doing Bonus Unit 1" + ], + "metadata": { + "id": "6r7Hl0uywFSO" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Set the GPU 💪\n", + "- To **accelerate the agent's training, we'll use a GPU**. To do that, go to `Runtime > Change Runtime type`\n", + "\n", + "\"GPU" + ], + "metadata": { + "id": "DssdIjk_8vZE" + } + }, + { + "cell_type": "markdown", + "source": [ + "- `Hardware Accelerator > GPU`\n", + "\n", + "\"GPU" + ], + "metadata": { + "id": "sTfCXHy68xBv" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "an3ByrXYQ4iK" + }, + "source": [ + "## Clone the repository and install the dependencies 🔽\n", + "\n", + "- We need to clone the repository, that **contains the experimental version of the library that allows you to push your trained agent to the Hub.**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6WNoL04M7rTa" + }, + "outputs": [], + "source": [ + "%%capture\n", + "# Clone this specific repository (can take 3min)\n", + "!git clone https://github.com/huggingface/ml-agents/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "d8wmVcMk7xKo" + }, + "outputs": [], + "source": [ + "%%capture\n", + "# Go inside the repository and install the package (can take 3min)\n", + "%cd ml-agents\n", + "!pip3 install -e ./ml-agents-envs\n", + "!pip3 install -e ./ml-agents" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HRY5ufKUKfhI" + }, + "source": [ + "## Download and move the environment zip file in `./trained-envs-executables/linux/`\n", + "\n", + "- Our environment executable is in a zip file.\n", + "- We need to download it and place it to `./trained-envs-executables/linux/`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "C9Ls6_6eOKiA" + }, + "outputs": [], + "source": [ + "!mkdir ./trained-envs-executables\n", + "!mkdir ./trained-envs-executables/linux" + ] + }, + { + "cell_type": "code", + "source": [ + "!wget --load-cookies /tmp/cookies.txt \"https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1zv3M95ZJTWHUVOWT6ckq_cm98nft8gdF' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\\1\\n/p')&id=1zv3M95ZJTWHUVOWT6ckq_cm98nft8gdF\" -O ./trained-envs-executables/linux/Huggy.zip && rm -rf /tmp/cookies.txt" + ], + "metadata": { + "id": "EB-G-80GsxYN" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jsoZGxr1MIXY" + }, + "source": [ + "Download the file Huggy.zip from https://drive.google.com/uc?export=download&id=1zv3M95ZJTWHUVOWT6ckq_cm98nft8gdF using `wget`. Check out the full solution to download large files from GDrive [here](https://bcrf.biochem.wisc.edu/2021/02/05/download-google-drive-files-using-wget/)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8FPx0an9IAwO" + }, + "outputs": [], + "source": [ + "%%capture\n", + "!unzip -d ./trained-envs-executables/linux/ ./trained-envs-executables/linux/Huggy.zip" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nyumV5XfPKzu" + }, + "source": [ + "Make sure your file is accessible " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EdFsLJ11JvQf" + }, + "outputs": [], + "source": [ + "!chmod -R 755 ./trained-envs-executables/linux/Huggy" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Let's recap how this environment works\n", + "\n", + "### The State Space: what Huggy \"perceives.\"\n", + "\n", + "Huggy doesn't \"see\" his environment. Instead, we provide him information about the environment:\n", + "\n", + "- The target (stick) position\n", + "- The relative position between himself and the target\n", + "- The orientation of his legs.\n", + "\n", + "Given all this information, Huggy **can decide which action to take next to fulfill his goal**.\n", + "\n", + "\"Huggy\"\n", + "\n", + "\n", + "### The Action Space: what moves Huggy can do\n", + "\"Huggy\n", + "\n", + "**Joint motors drive huggy legs**. It means that to get the target, Huggy needs to **learn to rotate the joint motors of each of his legs correctly so he can move**.\n", + "\n", + "### The Reward Function\n", + "\n", + "The reward function is designed so that **Huggy will fulfill his goal** : fetch the stick.\n", + "\n", + "Remember that one of the foundations of Reinforcement Learning is the *reward hypothesis*: a goal can be described as the **maximization of the expected cumulative reward**.\n", + "\n", + "Here, our goal is that Huggy **goes towards the stick but without spinning too much**. Hence, our reward function must translate this goal.\n", + "\n", + "Our reward function:\n", + "\n", + "\"Huggy\n", + "\n", + "- *Orientation bonus*: we **reward him for getting close to the target**.\n", + "- *Time penalty*: a fixed-time penalty given at every action to **force him to get to the stick as fast as possible**.\n", + "- *Rotation penalty*: we penalize Huggy if **he spins too much and turns too quickly**.\n", + "- *Getting to the target reward*: we reward Huggy for **reaching the target**." + ], + "metadata": { + "id": "dYKVj8yUvj55" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Check the Huggy config file\n", + "\n", + "- In ML-Agents, you define the **training hyperparameters into config.yaml files.**\n", + "\n", + "- For the scope of this notebook, we're not going to modify the hyperparameters, but if you want to try as an experiment, you should also try to modify some other hyperparameters, Unity provides very [good documentation explaining each of them here](https://github.com/Unity-Technologies/ml-agents/blob/main/docs/Training-Configuration-File.md)." + ], + "metadata": { + "id": "NAuEq32Mwvtz" + } + }, + { + "cell_type": "markdown", + "source": [ + "- **In the case you want to modify the hyperparameters**, in Google Colab notebook, you can click here to open the config.yaml: `/content/ml-agents/config/ppo/Huggy.yaml`\n", + "\n", + "\n", + "We’re now ready to train our agent 🔥." + ], + "metadata": { + "id": "r9wv5NYGw-05" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f9fI555bO12v" + }, + "source": [ + "## Train our agent\n", + "\n", + "To train our agent, we just need to **launch mlagents-learn and select the executable containing the environment.**\n", + "\n", + "\"ml\n", + "\n", + "With ML Agents, we run a training script. We define four parameters:\n", + "\n", + "1. `mlagents-learn `: the path where the hyperparameter config file is.\n", + "2. `--env`: where the environment executable is.\n", + "3. `--run_id`: the name you want to give to your training run id.\n", + "4. `--no-graphics`: to not launch the visualization during the training.\n", + "\n", + "Train the model and use the `--resume` flag to continue training in case of interruption. \n", + "\n", + "> It will fail first time when you use `--resume`, try running the block again to bypass the error. \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "The training will take 30 to 45min depending on your machine (don't forget to **set up a GPU**), go take a ☕️you deserve it 🤗." + ], + "metadata": { + "id": "lN32oWF8zPjs" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bS-Yh1UdHfzy" + }, + "outputs": [], + "source": [ + "!mlagents-learn ./config/ppo/Huggy.yaml --env=./trained-envs-executables/linux/Huggy/Huggy --run-id=\"Huggy\" --no-graphics" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5Vue94AzPy1t" + }, + "source": [ + "## Push the agent to the 🤗 Hub\n", + "\n", + "- Now that we trained our agent, we’re **ready to push it to the Hub to be able to play with Huggy on your browser🔥.**" + ] + }, + { + "cell_type": "markdown", + "source": [ + "To be able to share your model with the community there are three more steps to follow:\n", + "\n", + "1️⃣ (If it's not already done) create an account to HF ➡ https://huggingface.co/join\n", + "\n", + "2️⃣ Sign in and then, you need to store your authentication token from the Hugging Face website.\n", + "- Create a new token (https://huggingface.co/settings/tokens) **with write role**\n", + "\n", + "\"Create\n", + "\n", + "- Copy the token \n", + "- Run the cell below and paste the token" + ], + "metadata": { + "id": "izT6FpgNzZ6R" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rKt2vsYoK56o" + }, + "outputs": [], + "source": [ + "from huggingface_hub import notebook_login\n", + "notebook_login()" + ] + }, + { + "cell_type": "markdown", + "source": [ + "If you don't want to use a Google Colab or a Jupyter Notebook, you need to use this command instead: `huggingface-cli login`" + ], + "metadata": { + "id": "ew59mK19zjtN" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Xi0y_VASRzJU" + }, + "source": [ + "Then, we simply need to run `mlagents-push-to-hf`.\n", + "\n", + "\"ml" + ] + }, + { + "cell_type": "markdown", + "source": [ + "And we define 4 parameters:\n", + "\n", + "1. `--run-id`: the name of the training run id.\n", + "2. `--local-dir`: where the agent was saved, it’s results/, so in my case results/First Training.\n", + "3. `--repo-id`: the name of the Hugging Face repo you want to create or update. It’s always /\n", + "If the repo does not exist **it will be created automatically**\n", + "4. `--commit-message`: since HF repos are git repository you need to define a commit message." + ], + "metadata": { + "id": "KK4fPfnczunT" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dGEFAIboLVc6" + }, + "outputs": [], + "source": [ + "!mlagents-push-to-hf --run-id=\"HuggyTraining\" --local-dir=\"./results/Huggy\" --repo-id=\"ThomasSimonini/ppo-Huggy\" --commit-message=\"Huggy\"" + ] + }, + { + "cell_type": "markdown", + "source": [ + "Else, if everything worked you should have this at the end of the process(but with a different url 😆) :\n", + "\n", + "\n", + "\n", + "```\n", + "Your model is pushed to the hub. You can view your model here: https://huggingface.co/ThomasSimonini/ppo-Huggy\n", + "```\n", + "\n", + "It’s the link to your model repository. The repository contains a model card that explains how to use the model, your Tensorboard logs and your config file. **What’s awesome is that it’s a git repository, which means you can have different commits, update your repository with a new push, open Pull Requests, etc.**\n", + "\n", + "\"ml" + ], + "metadata": { + "id": "yborB0850FTM" + } + }, + { + "cell_type": "markdown", + "source": [ + "But now comes the best: **being able to play with Huggy online 👀.**" + ], + "metadata": { + "id": "5Uaon2cg0NrL" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Play with your Huggy 🐕\n", + "\n", + "This step is the simplest:\n", + "\n", + "- Open the game Huggy in your browser: https://huggingface.co/spaces/ThomasSimonini/Huggy\n", + "\n", + "- Click on Play with my Huggy model\n", + "\n", + "\"load-huggy\"" + ], + "metadata": { + "id": "VMc4oOsE0QiZ" + } + }, + { + "cell_type": "markdown", + "source": [ + "1. In step 1, choose your model repository which is the model id (in my case ThomasSimonini/ppo-Huggy).\n", + "\n", + "2. In step 2, **choose what model you want to replay**:\n", + " - I have multiple ones, since we saved a model every 500000 timesteps. \n", + " - But since I want the more recent, I choose `Huggy.onnx`\n", + "\n", + "👉 What’s nice **is to try with different models steps to see the improvement of the agent.**" + ], + "metadata": { + "id": "Djs8c5rR0Z8a" + } + }, + { + "cell_type": "markdown", + "source": [ + "Congrats on finishing this bonus unit!\n", + "\n", + "You can now sit and enjoy playing with your Huggy 🐶. And don't **forget to spread the love by sharing Huggy with your friends 🤗**. And if you share about it on social media, **please tag us @huggingface and me @simoninithomas**\n", + "\n", + "\"Huggy\n", + "\n", + "\n", + "## Keep Learning, Stay awesome 🤗" + ], + "metadata": { + "id": "PI6dPWmh064H" + } + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "provenance": [], + "private_outputs": true + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/notebooks/unit1/unit1.ipynb b/notebooks/unit1/unit1.ipynb new file mode 100644 index 0000000..3b58d09 --- /dev/null +++ b/notebooks/unit1/unit1.ipynb @@ -0,0 +1,1144 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "njb_ProuHiOe" + }, + "source": [ + "# Unit 1: Train your first Deep Reinforcement Learning Agent 🤖\n", + "![Cover](https://github.com/huggingface/deep-rl-class/blob/main/unit1/assets/img/thumbnail.png?raw=true)\n", + "\n", + "In this notebook, you'll train your **first Deep Reinforcement Learning agent** a Lunar Lander agent that will learn to **land correctly on the Moon 🌕**. Using [Stable-Baselines3](https://stable-baselines3.readthedocs.io/en/master/) a Deep Reinforcement Learning library, share them with the community, and experiment with different configurations\n", + "\n", + "⬇️ Here is an example of what **you will achieve in just a couple of minutes.** ⬇️\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PF46MwbZD00b" + }, + "outputs": [], + "source": [ + "%%html\n", + "" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### The environment 🎮\n", + "- [LunarLander-v2](https://www.gymlibrary.dev/environments/box2d/lunar_lander/)\n", + "\n", + "### The library used 📚\n", + "- [Stable-Baselines3](https://stable-baselines3.readthedocs.io/en/master/)" + ], + "metadata": { + "id": "x7oR6R-ZIbeS" + } + }, + { + "cell_type": "markdown", + "source": [ + "We're constantly trying to improve our tutorials, so **if you find some issues in this notebook**, please [open an issue on the Github Repo](https://github.com/huggingface/deep-rl-class/issues)." + ], + "metadata": { + "id": "OwEcFHe9RRZW" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4i6tjI2tHQ8j" + }, + "source": [ + "## Objectives of this notebook 🏆\n", + "At the end of the notebook, you will:\n", + "- Be able to use **Gym**, the environment library.\n", + "- Be able to use **Stable-Baselines3**, the deep reinforcement learning library.\n", + "- Be able to **push your trained agent to the Hub** with a nice video replay and an evaluation score 🔥.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## This notebook is from Deep Reinforcement Learning Course\n", + "\"Deep" + ], + "metadata": { + "id": "Ff-nyJdzJPND" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6p5HnEefISCB" + }, + "source": [ + "In this free course, you will:\n", + "\n", + "- 📖 Study Deep Reinforcement Learning in **theory and practice**.\n", + "- 🧑‍💻 Learn to **use famous Deep RL libraries** such as Stable Baselines3, RL Baselines3 Zoo, CleanRL and Sample Factory 2.0.\n", + "- 🤖 Train **agents in unique environments** \n", + "\n", + "And more check 📚 the syllabus 👉 https://simoninithomas.github.io/deep-rl-course\n", + "\n", + "Don’t forget to **sign up to the course** (we are collecting your email to be able to **send you the links when each Unit is published and give you information about the challenges and updates).**\n", + "\n", + "\n", + "The best way to keep in touch and ask questions is to join our discord server to exchange with the community and with us 👉🏻 https://discord.gg/ydHrjt3WP5" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y-mo_6rXIjRi" + }, + "source": [ + "## Prerequisites 🏗️\n", + "Before diving into the notebook, you need to:\n", + "\n", + "🔲 📝 **Done Unit 0** that gives you all the **information about the course and help you to onboard** 🤗 ADD LINK \n", + "\n", + "🔲 📚 **Develop an understanding of the foundations of Reinforcement learning** (MC, TD, Rewards hypothesis...) by doing Unit 1 👉 ADD LINK" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## A small recap of what is Deep Reinforcement Learning 📚\n", + "\"The" + ], + "metadata": { + "id": "HoeqMnr5LuYE" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xcQYx9ynaFMD" + }, + "source": [ + "Let's do a small recap on what we learned in the first Unit:\n", + "- Reinforcement Learning is a **computational approach to learning from action**. We build an agent that learns from the environment by **interacting with it through trial and error** and receiving rewards (negative or positive) as feedback.\n", + "\n", + "- The goal of any RL agent is to **maximize its expected cumulative reward** (also called expected return) because RL is based on the _reward hypothesis_, which is that all goals can be described as the maximization of the expected cumulative reward.\n", + "\n", + "- The RL process is a **loop that outputs a sequence of state, action, reward, and next state**.\n", + "\n", + "- To calculate the expected cumulative reward (expected return), **we discount the rewards**: the rewards that come sooner (at the beginning of the game) are more probable to happen since they are more predictable than the long-term future reward.\n", + "\n", + "- To solve an RL problem, you want to **find an optimal policy**; the policy is the \"brain\" of your AI that will tell us what action to take given a state. The optimal one is the one that gives you the actions that max the expected return.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8X2WN2X99BEz" + }, + "source": [ + "There are **two** ways to find your optimal policy:\n", + "- By **training your policy directly**: policy-based methods.\n", + "- By **training a value function** that tells us the expected return the agent will get at each state and use this function to define our policy: value-based methods." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BPy6dfcm8_WT" + }, + "source": [ + "- Finally, we spoke about Deep RL because **we introduce deep neural networks to estimate the action to take (policy-based) or to estimate the value of a state (value-based) hence the name \"deep.\"**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LzGDDOTSKaF8" + }, + "source": [ + "# Let's train our first Deep Reinforcement Learning agent and upload it to the Hub 🚀\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Set the GPU 💪\n", + "- To **accelerate the agent's training, we'll use a GPU**. To do that, go to `Runtime > Change Runtime type`\n", + "\n", + "\"GPU" + ], + "metadata": { + "id": "HqzznTzhNfAC" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "38HBd3t1SHJ8" + }, + "source": [ + "- `Hardware Accelerator > GPU`\n", + "\n", + "\"GPU" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jeDAH0h0EBiG" + }, + "source": [ + "## Install dependencies and create a virtual screen 🔽\n", + "The first step is to install the dependencies, we’ll install multiple ones.\n", + "\n", + "- `gym[box2D]`: Contains the LunarLander-v2 environment 🌛 (we use `gym==0.21`)\n", + "- `stable-baselines3[extra]`: The deep reinforcement learning library.\n", + "- `huggingface_sb3`: Additional code for Stable-baselines3 to load and upload models from the Hugging Face 🤗 Hub.\n", + "\n", + "To make things easier, we created a script to install all these dependencies." + ] + }, + { + "cell_type": "code", + "source": [ + "!apt install swig cmake" + ], + "metadata": { + "id": "yQIGLPDkGhgG" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "TODO CHANGE LINK OF THE REQUIREMENTS" + ], + "metadata": { + "id": "32e3NPYgH5ET" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9XaULfDZDvrC" + }, + "outputs": [], + "source": [ + "!pip install -r https://huggingface.co/spaces/ThomasSimonini/temp-space-requirements/raw/main/requirements/requirements-unit1.txt" + ] + }, + { + "cell_type": "markdown", + "source": [ + "During the notebook, we'll need to generate a replay video. To do so, with colab, **we need to have a virtual screen to be able to render the environment** (and thus record the frames). \n", + "\n", + "Hence the following cell will install virtual screen libraries and create and run a virtual screen 🖥" + ], + "metadata": { + "id": "BEKeXQJsQCYm" + } + }, + { + "cell_type": "code", + "source": [ + "!sudo apt-get update\n", + "!apt install python-opengl\n", + "!apt install ffmpeg\n", + "!apt install xvfb\n", + "!pip3 install pyvirtualdisplay" + ], + "metadata": { + "id": "j5f2cGkdP-mb" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "To make sure the new installed libraries are used, **sometimes it's required to restart the notebook runtime**. The next cell will force the **runtime to crash, so you'll need to connect again and run the code starting from here**. Thanks for this trick, **we will be able to run our virtual screen.**" + ], + "metadata": { + "id": "TCwBTAwAW9JJ" + } + }, + { + "cell_type": "code", + "source": [ + "import os\n", + "os.kill(os.getpid(), 9)" + ], + "metadata": { + "id": "cYvkbef7XEMi" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Virtual display\n", + "from pyvirtualdisplay import Display\n", + "\n", + "virtual_display = Display(visible=0, size=(1400, 900))\n", + "virtual_display.start()" + ], + "metadata": { + "id": "BE5JWP5rQIKf" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wrgpVFqyENVf" + }, + "source": [ + "## Import the packages 📦\n", + "\n", + "One additional library we import is huggingface_hub **to be able to upload and download trained models from the hub**.\n", + "\n", + "\n", + "The Hugging Face Hub 🤗 works as a central place where anyone can share and explore models and datasets. It has versioning, metrics, visualizations and other features that will allow you to easily collaborate with others.\n", + "\n", + "You can see here all the Deep reinforcement Learning models available 👉 https://huggingface.co/models?pipeline_tag=reinforcement-learning&sort=downloads\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cygWLPGsEQ0m" + }, + "outputs": [], + "source": [ + "import gym\n", + "\n", + "from huggingface_sb3 import load_from_hub, package_to_hub, push_to_hub\n", + "from huggingface_hub import notebook_login # To log to our Hugging Face account to be able to upload models to the Hub.\n", + "\n", + "from stable_baselines3 import PPO\n", + "from stable_baselines3.common.evaluation import evaluate_policy\n", + "from stable_baselines3.common.env_util import make_vec_env" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MRqRuRUl8CsB" + }, + "source": [ + "## Understand what is Gym and how it works 🤖\n", + "\n", + "🏋 The library containing our environment is called Gym.\n", + "**You'll use Gym a lot in Deep Reinforcement Learning.**\n", + "\n", + "The Gym library provides two things:\n", + "- An interface that allows you to **create RL environments**.\n", + "- A **collection of environments** (gym-control, atari, box2D...).\n", + "\n", + "Let's look at an example, but first let's remember what's the RL Loop.\n", + "\n", + "\"The" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-TzNN0bQ_j-3" + }, + "source": [ + "At each step:\n", + "- Our Agent receives **state S0** from the **Environment** — we receive the first frame of our game (Environment).\n", + "- Based on that **state S0,** the Agent takes **action A0** — our Agent will move to the right.\n", + "- Environment to a **new** **state S1** — new frame.\n", + "- The environment gives some **reward R1** to the Agent — we’re not dead *(Positive Reward +1)*.\n", + "\n", + "\n", + "With Gym:\n", + "\n", + "1️⃣ We create our environment using `gym.make()`\n", + "\n", + "2️⃣ We reset the environment to its initial state with `observation = env.reset()`\n", + "\n", + "At each step:\n", + "\n", + "3️⃣ Get an action using our model (in our example we take a random action)\n", + "\n", + "4️⃣ Using `env.step(action)`, we perform this action in the environment and get\n", + "- `observation`: The new state (st+1)\n", + "- `reward`: The reward we get after executing the action\n", + "- `done`: Indicates if the episode terminated\n", + "- `info`: A dictionary that provides additional information (depends on the environment).\n", + "\n", + "If the episode is done:\n", + "- We reset the environment to its initial state with `observation = env.reset()`\n", + "\n", + "**Let's look at an example!** Make sure to read the code\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "w7vOFlpA_ONz" + }, + "outputs": [], + "source": [ + "import gym\n", + "\n", + "# First, we create our environment called LunarLander-v2\n", + "env = gym.make(\"LunarLander-v2\")\n", + "\n", + "# Then we reset this environment\n", + "observation = env.reset()\n", + "\n", + "for _ in range(20):\n", + " # Take a random action\n", + " action = env.action_space.sample()\n", + " print(\"Action taken:\", action)\n", + "\n", + " # Do this action in the environment and get\n", + " # next_state, reward, done and info\n", + " observation, reward, done, info = env.step(action)\n", + " \n", + " # If the game is done (in our case we land, crashed or timeout)\n", + " if done:\n", + " # Reset the environment\n", + " print(\"Environment is reset\")\n", + " observation = env.reset()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XIrKGGSlENZB" + }, + "source": [ + "## Create the LunarLander environment 🌛 and understand how it works\n", + "### [The environment 🎮](https://www.gymlibrary.dev/environments/box2d/lunar_lander/)\n", + "In this first tutorial, we’re going to train our agent, a [Lunar Lander](https://www.gymlibrary.dev/environments/box2d/lunar_lander/), **to land correctly on the moon**. To do that, the agent needs to learn **to adapt its speed and position(horizontal, vertical, and angular) to land correctly.**\n", + "\n", + "\n", + "---\n", + "\n", + "\n", + "💡 A good habit when you start to use an environment is to check its documentation \n", + "\n", + "👉 https://www.gymlibrary.dev/environments/box2d/lunar_lander/\n", + "\n", + "---\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "poLBgRocF9aT" + }, + "source": [ + "Let's see what the Environment looks like:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZNPG0g_UGCfh" + }, + "outputs": [], + "source": [ + "# We create our environment with gym.make(\"\")\n", + "env = gym.make(\"LunarLander-v2\")\n", + "env.reset()\n", + "print(\"_____OBSERVATION SPACE_____ \\n\")\n", + "print(\"Observation Space Shape\", env.observation_space.shape)\n", + "print(\"Sample observation\", env.observation_space.sample()) # Get a random observation" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2MXc15qFE0M9" + }, + "source": [ + "We see with `Observation Space Shape (8,)` that the observation is a vector of size 8, where each value contains different information about the lander:\n", + "- Horizontal pad coordinate (x)\n", + "- Vertical pad coordinate (y)\n", + "- Horizontal speed (x)\n", + "- Vertical speed (y)\n", + "- Angle\n", + "- Angular speed\n", + "- If the left leg has contact point touched the land\n", + "- If the right leg has contact point touched the land\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "We5WqOBGLoSm" + }, + "outputs": [], + "source": [ + "print(\"\\n _____ACTION SPACE_____ \\n\")\n", + "print(\"Action Space Shape\", env.action_space.n)\n", + "print(\"Action Space Sample\", env.action_space.sample()) # Take a random action" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MyxXwkI2Magx" + }, + "source": [ + "The action space (the set of possible actions the agent can take) is discrete with 4 actions available 🎮: \n", + "\n", + "- Do nothing,\n", + "- Fire left orientation engine,\n", + "- Fire the main engine,\n", + "- Fire right orientation engine.\n", + "\n", + "Reward function (the function that will gives a reward at each timestep) 💰:\n", + "\n", + "- Moving from the top of the screen to the landing pad and zero speed is about 100~140 points.\n", + "- Firing main engine is -0.3 each frame\n", + "- Each leg ground contact is +10 points\n", + "- Episode finishes if the lander crashes (additional - 100 points) or come to rest (+100 points)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dFD9RAFjG8aq" + }, + "source": [ + "#### Vectorized Environment\n", + "- We create a vectorized environment (method for stacking multiple independent environments into a single environment) of 16 environments, this way, **we'll have more diverse experiences during the training.**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "99hqQ_etEy1N" + }, + "outputs": [], + "source": [ + "# Create the environment\n", + "env = make_vec_env('LunarLander-v2', n_envs=16)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VgrE86r5E5IK" + }, + "source": [ + "## Create the Model 🤖\n", + "- Now that we studied our environment and we understood the problem: **being able to land correctly the Lunar Lander to the Landing Pad by controlling left, right and main orientation engine**. Let's build the algorithm we're going to use to solve this Problem 🚀.\n", + "\n", + "- To do so, we're going to use our first Deep RL library, [Stable Baselines3 (SB3)](https://stable-baselines3.readthedocs.io/en/master/).\n", + "\n", + "- SB3 is a set of **reliable implementations of reinforcement learning algorithms in PyTorch**.\n", + "\n", + "---\n", + "\n", + "💡 A good habit when using a new library is to dive first on the documentation: https://stable-baselines3.readthedocs.io/en/master/ and then try some tutorials.\n", + "\n", + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3wgg-y0-92Wj" + }, + "source": [ + "![image.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HV4yiUM_9_Ka" + }, + "source": [ + "To solve this problem, we're going to use SB3 **PPO**. [PPO (aka Proximal Policy Optimization) is one of the of the SOTA (state of the art) Deep Reinforcement Learning algorithms that you'll study during this course](https://stable-baselines3.readthedocs.io/en/master/modules/ppo.html#example%5D).\n", + "\n", + "PPO is a combination of:\n", + "- *Value-based reinforcement learning method*: learning an action-value function that will tell us what's the **most valuable action to take given a state and action**.\n", + "- *Policy-based reinforcement learning method*: learning a policy that will **gives us a probability distribution over actions**.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5qL_4HeIOrEJ" + }, + "source": [ + "Stable-Baselines3 is easy to set up:\n", + "\n", + "1️⃣ You **create your environment** (in our case it was done above)\n", + "\n", + "2️⃣ You define the **model you want to use and instantiate this model** `model = PPO(\"MlpPolicy\")`\n", + "\n", + "3️⃣ You **train the agent** with `model.learn` and define the number of training timesteps\n", + "\n", + "```\n", + "# Create environment\n", + "env = gym.make('LunarLander-v2')\n", + "\n", + "# Instantiate the agent\n", + "model = PPO('MlpPolicy', env, verbose=1)\n", + "# Train the agent\n", + "model.learn(total_timesteps=int(2e5))\n", + "```\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nxI6hT1GE4-A" + }, + "outputs": [], + "source": [ + "# TODO: Define a PPO MlpPolicy architecture\n", + "# We use MultiLayerPerceptron (MLPPolicy) because the input is a vector,\n", + "# if we had frames as input we would use CnnPolicy\n", + "model = " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QAN7B0_HCVZC" + }, + "source": [ + "#### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "543OHYDfcjK4" + }, + "outputs": [], + "source": [ + "# SOLUTION\n", + "# We added some parameters to accelerate the training\n", + "model = PPO(\n", + " policy = 'MlpPolicy',\n", + " env = env,\n", + " n_steps = 1024,\n", + " batch_size = 64,\n", + " n_epochs = 4,\n", + " gamma = 0.999,\n", + " gae_lambda = 0.98,\n", + " ent_coef = 0.01,\n", + " verbose=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ClJJk88yoBUi" + }, + "source": [ + "## Train the PPO agent 🏃\n", + "- Let's train our agent for 1,000,000 timesteps, don't forget to use GPU on Colab. It will take approximately ~20min, but you can use less timesteps if you just want to try it out.\n", + "- During the training, take a ☕ break you deserved it 🤗" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qKnYkNiVp89p" + }, + "outputs": [], + "source": [ + "# TODO: Train it for 1,000,000 timesteps\n", + "\n", + "# TODO: Specify file name for model and save the model to file\n", + "model_name = \"\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1bQzQ-QcE3zo" + }, + "source": [ + "#### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "poBCy9u_csyR" + }, + "outputs": [], + "source": [ + "# SOLUTION\n", + "# Train it for 1,000,000 timesteps\n", + "model.learn(total_timesteps=1000000)\n", + "# Save the model\n", + "model_name = \"ppo-LunarLander-v2\"\n", + "model.save(model_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BY_HuedOoISR" + }, + "source": [ + "## Evaluate the agent 📈\n", + "- Now that our Lunar Lander agent is trained 🚀, we need to **check its performance**.\n", + "- Stable-Baselines3 provides a method to do that: `evaluate_policy`.\n", + "- To fill that part you need to [check the documentation](https://stable-baselines3.readthedocs.io/en/master/guide/examples.html#basic-usage-training-saving-loading)\n", + "- In the next step, we'll see **how to automatically evaluate and share your agent to compete in a leaderboard, but for now let's do it ourselves**\n", + "\n", + "\n", + "💡 When you evaluate your agent, you should not use your training environment but create an evaluation environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "yRpno0glsADy" + }, + "outputs": [], + "source": [ + "# TODO: Evaluate the agent\n", + "# Create a new environment for evaluation\n", + "eval_env =\n", + "\n", + "# Evaluate the model with 10 evaluation episodes and deterministic=True\n", + "mean_reward, std_reward = \n", + "\n", + "# Print the results\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BqPKw3jt_pG5" + }, + "source": [ + "#### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zpz8kHlt_a_m" + }, + "outputs": [], + "source": [ + "#@title\n", + "eval_env = gym.make(\"LunarLander-v2\")\n", + "mean_reward, std_reward = evaluate_policy(model, eval_env, n_eval_episodes=10, deterministic=True)\n", + "print(f\"mean_reward={mean_reward:.2f} +/- {std_reward}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "reBhoODwcXfr" + }, + "source": [ + "- In my case, I got a mean reward is `200.20 +/- 20.80` after training for 1 million steps, which means that our lunar lander agent is ready to land on the moon 🌛🥳." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IK_kR78NoNb2" + }, + "source": [ + "## Publish our trained model on the Hub 🔥\n", + "Now that we saw we got good results after the training, we can publish our trained model on the hub 🤗 with one line of code.\n", + "\n", + "📚 The libraries documentation 👉 https://github.com/huggingface/huggingface_sb3/tree/main#hugging-face--x-stable-baselines3-v20\n", + "\n", + "Here's an example of a Model Card (with Space Invaders):" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Gs-Ew7e1gXN3" + }, + "source": [ + "By using `package_to_hub` **you evaluate, record a replay, generate a model card of your agent and push it to the hub**.\n", + "\n", + "This way:\n", + "- You can **showcase our work** 🔥\n", + "- You can **visualize your agent playing** 👀\n", + "- You can **share with the community an agent that others can use** 💾\n", + "- You can **access a leaderboard 🏆 to see how well your agent is performing compared to your classmates** 👉 https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JquRrWytA6eo" + }, + "source": [ + "To be able to share your model with the community there are three more steps to follow:\n", + "\n", + "1️⃣ (If it's not already done) create an account to HF ➡ https://huggingface.co/join\n", + "\n", + "2️⃣ Sign in and then, you need to store your authentication token from the Hugging Face website.\n", + "- Create a new token (https://huggingface.co/settings/tokens) **with write role**\n", + "\n", + "\"Create\n", + "\n", + "- Copy the token \n", + "- Run the cell below and paste the token" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GZiFBBlzxzxY" + }, + "outputs": [], + "source": [ + "notebook_login()\n", + "!git config --global credential.helper store" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_tsf2uv0g_4p" + }, + "source": [ + "If you don't want to use a Google Colab or a Jupyter Notebook, you need to use this command instead: `huggingface-cli login`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FGNh9VsZok0i" + }, + "source": [ + "3️⃣ We're now ready to push our trained agent to the 🤗 Hub 🔥 using `package_to_hub()` function" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ay24l6bqFF18" + }, + "source": [ + "Let's fill the `package_to_hub` function:\n", + "- `model`: our trained model.\n", + "- `model_name`: the name of the trained model that we defined in `model_save`\n", + "- `model_architecture`: the model architecture we used: in our case PPO\n", + "- `env_id`: the name of the environment, in our case `LunarLander-v2`\n", + "- `eval_env`: the evaluation environment defined in eval_env\n", + "- `repo_id`: the name of the Hugging Face Hub Repository that will be created/updated `(repo_id = {username}/{repo_name})`\n", + "\n", + "💡 **A good name is {username}/{model_architecture}-{env_id}**\n", + "\n", + "- `commit_message`: message of the commit" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "JPG7ofdGIHN8" + }, + "outputs": [], + "source": [ + "import gym\n", + "from stable_baselines3.common.vec_env import DummyVecEnv\n", + "from stable_baselines3.common.env_util import make_vec_env\n", + "\n", + "from huggingface_sb3 import package_to_hub\n", + "\n", + "## TODO: Define a repo_id\n", + "## repo_id is the id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2\n", + "repo_id = \n", + "\n", + "# TODO: Define the name of the environment\n", + "env_id = \n", + "\n", + "# Create the evaluation env\n", + "eval_env = DummyVecEnv([lambda: gym.make(env_id)])\n", + "\n", + "\n", + "# TODO: Define the model architecture we used\n", + "model_architecture = \"\"\n", + "\n", + "## TODO: Define the commit message\n", + "commit_message = \"\"\n", + "\n", + "# method save, evaluate, generate a model card and record a replay video of your agent before pushing the repo to the hub\n", + "package_to_hub(model=model, # Our trained model\n", + " model_name=model_name, # The name of our trained model \n", + " model_architecture=model_architecture, # The model architecture we used: in our case PPO\n", + " env_id=env_id, # Name of the environment\n", + " eval_env=eval_env, # Evaluation Environment\n", + " repo_id=repo_id, # id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2\n", + " commit_message=commit_message)\n", + "\n", + "# Note: if after running the package_to_hub function and it gives an issue of rebasing, please run the following code\n", + "# cd && git add . && git commit -m \"Add message\" && git pull \n", + "# And don't forget to do a \"git push\" at the end to push the change to the hub." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Avf6gufJBGMw" + }, + "source": [ + "#### Solution\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xMkkkukIBQJM" + }, + "outputs": [], + "source": [ + "import gym\n", + "\n", + "from stable_baselines3 import PPO\n", + "from stable_baselines3.common.vec_env import DummyVecEnv\n", + "from stable_baselines3.common.env_util import make_vec_env\n", + "\n", + "from huggingface_sb3 import package_to_hub\n", + "\n", + "# PLACE the variables you've just defined two cells above\n", + "# Define the name of the environment\n", + "env_id = \"LunarLander-v2\"\n", + "\n", + "# TODO: Define the model architecture we used\n", + "model_architecture = \"PPO\"\n", + "\n", + "## Define a repo_id\n", + "## repo_id is the id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2\n", + "## CHANGE WITH YOUR REPO ID\n", + "repo_id = \"ThomasSimonini/ppo-LunarLander-v2\" # Change with your repo id, you can't push with mine 😄\n", + "\n", + "## Define the commit message\n", + "commit_message = \"Upload PPO LunarLander-v2 trained agent\"\n", + "\n", + "# Create the evaluation env\n", + "eval_env = DummyVecEnv([lambda: gym.make(env_id)])\n", + "\n", + "# PLACE the package_to_hub function you've just filled here\n", + "package_to_hub(model=model, # Our trained model\n", + " model_name=model_name, # The name of our trained model \n", + " model_architecture=model_architecture, # The model architecture we used: in our case PPO\n", + " env_id=env_id, # Name of the environment\n", + " eval_env=eval_env, # Evaluation Environment\n", + " repo_id=repo_id, # id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2\n", + " commit_message=commit_message)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pN0-W6kkKn44" + }, + "source": [ + "Congrats 🥳 you've just trained and uploaded your first Deep Reinforcement Learning agent. The script above should have displayed a link to a model repository such as https://huggingface.co/osanseviero/test_sb3. When you go to this link, you can:\n", + "* see a video preview of your agent at the right. \n", + "* click \"Files and versions\" to see all the files in the repository.\n", + "* click \"Use in stable-baselines3\" to get a code snippet that shows how to load the model.\n", + "* a model card (`README.md` file) which gives a description of the model\n", + "\n", + "Under the hood, the Hub uses git-based repositories (don't worry if you don't know what git is), which means you can update the model with new versions as you experiment and improve your agent.\n", + "\n", + "Compare the results of your LunarLander-v2 with your classmates using the leaderboard 🏆 👉 https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9nWnuQHRfFRa" + }, + "source": [ + "## Load a saved LunarLander model from the Hub 🤗\n", + "Thanks to [ironbar](https://github.com/ironbar) for the contribution.\n", + "\n", + "Loading a saved model from the Hub is really easy. \n", + "\n", + "You go https://huggingface.co/models?library=stable-baselines3 to see the list of all the Stable-baselines3 saved models.\n", + "1. You select one and copy its repo_id\n", + "\n", + "\"Copy-id\"/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hNPLJF2bfiUw" + }, + "source": [ + "2. Then we just need to use load_from_hub with:\n", + "- The repo_id\n", + "- The filename: the saved model inside the repo and its extension (*.zip)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "oj8PSGHJfwz3" + }, + "outputs": [], + "source": [ + "from huggingface_sb3 import load_from_hub\n", + "repo_id = \"Classroom-workshop/assignment2-omar\" # The repo_id\n", + "filename = \"ppo-LunarLander-v2.zip\" # The model filename.zip\n", + "\n", + "# When the model was trained on Python 3.8 the pickle protocol is 5\n", + "# But Python 3.6, 3.7 use protocol 4\n", + "# In order to get compatibility we need to:\n", + "# 1. Install pickle5 (we done it at the beginning of the colab)\n", + "# 2. Create a custom empty object we pass as parameter to PPO.load()\n", + "custom_objects = {\n", + " \"learning_rate\": 0.0,\n", + " \"lr_schedule\": lambda _: 0.0,\n", + " \"clip_range\": lambda _: 0.0,\n", + "}\n", + "\n", + "checkpoint = load_from_hub(repo_id, filename)\n", + "model = PPO.load(checkpoint, custom_objects=custom_objects, print_system_info=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Fs0Y-qgPgLUf" + }, + "source": [ + "Let's evaluate this agent:" + ] + }, + { + "cell_type": "code", + "source": [ + "#@title\n", + "eval_env = gym.make(\"LunarLander-v2\")\n", + "mean_reward, std_reward = evaluate_policy(model, eval_env, n_eval_episodes=10, deterministic=True)\n", + "print(f\"mean_reward={mean_reward:.2f} +/- {std_reward}\")" + ], + "metadata": { + "id": "PAEVwK-aahfx" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BQAwLnYFPk-s" + }, + "source": [ + "## Some additional challenges 🏆\n", + "The best way to learn **is to try things by your own**! As you saw, the current agent is not doing great. As a first suggestion, you can train for more steps. With 1,000,000 steps, we saw some great results! \n", + "\n", + "In the [Leaderboard](https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard) you will find your agents. Can you get to the top?\n", + "\n", + "Here are some ideas to achieve so:\n", + "* Train more steps\n", + "* Try different hyperparameters of `PPO`. You can see them at https://stable-baselines3.readthedocs.io/en/master/modules/ppo.html#parameters. \n", + "* Check the [Stable-Baselines3 documentation](https://stable-baselines3.readthedocs.io/en/master/modules/dqn.html) and try another models such as DQN.\n", + "* **Push your new trained model** on the Hub 🔥\n", + "\n", + "**Compare the results of your LunarLander-v2 with your classmates** using the [leaderboard](https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard) 🏆\n", + "\n", + "Is moon landing too boring to you? Try to **change the environment**, why not using MountainCar-v0, CartPole-v1 or CarRacing-v0? Check how they works [using the gym documentation](https://www.gymlibrary.dev/) and have fun 🎉." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9lM95-dvmif8" + }, + "source": [ + "________________________________________________________________________\n", + "Congrats on finishing this chapter! That was the biggest one, **and there was a lot of information.**\n", + "\n", + "If you’re still feel confused with all these elements...it's totally normal! **This was the same for me and for all people who studied RL.**\n", + "\n", + "Take time to really **grasp the material before continuing and try the additional challenges**. It’s important to master these elements and having a solid foundations.\n", + "\n", + "Naturally, during the course, we’re going to use and deeper explain again these terms but **it’s better to have a good understanding of them now before diving into the next chapters.**\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BjLhT70TEZIn" + }, + "source": [ + "Next time, in the bonus unit 1, you'll train Huggy the Dog to fetch the stick.\n", + "\n", + "\"Huggy\"/\n", + "\n", + "## Keep learning, stay awesome 🤗" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "private_outputs": true, + "provenance": [], + "collapsed_sections": [ + "QAN7B0_HCVZC", + "1bQzQ-QcE3zo", + "BqPKw3jt_pG5", + "Avf6gufJBGMw" + ] + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3.9.7", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.9.7" + }, + "vscode": { + "interpreter": { + "hash": "ed7f8024e43d3b8f5ca3c5e1a8151ab4d136b3ecee1e3fd59e0766ccc55e1b10" + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/notebooks/unit2/unit2.ipynb b/notebooks/unit2/unit2.ipynb new file mode 100644 index 0000000..cf97cdc --- /dev/null +++ b/notebooks/unit2/unit2.ipynb @@ -0,0 +1,1743 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "njb_ProuHiOe" + }, + "source": [ + "# Unit 2: Q-Learning with FrozenLake-v1 ⛄ and Taxi-v3 🚕\n", + "\n", + "\"Unit\n", + "\n", + "In this notebook, **you'll code from scratch your first Reinforcement Learning agent** playing FrozenLake ❄️ using Q-Learning, share it to the community, and experiment with different configurations.\n", + "\n", + "\n", + "⬇️ Here is an example of what **you will achieve in just a couple of minutes.** ⬇️\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vRU_vXBrl1Jx" + }, + "source": [ + "\"Environments\"/" + ] + }, + { + "cell_type": "markdown", + "source": [ + "TODO: ADD TEXT LIVE INFO" + ], + "metadata": { + "id": "yaBKcncmYku4" + } + }, + { + "cell_type": "markdown", + "source": [ + "TODO: ADD IF YOU HAVE QUESTIONS\n" + ], + "metadata": { + "id": "hz5KE5HjYlRh" + } + }, + { + "cell_type": "markdown", + "source": [ + "###🎮 Environments: \n", + "- [FrozenLake-v1](https://www.gymlibrary.dev/environments/toy_text/frozen_lake/)\n", + "- [Taxi-v3](https://www.gymlibrary.dev/environments/toy_text/taxi/)\n", + "\n", + "###📚 RL-Library: \n", + "- Python and Numpy" + ], + "metadata": { + "id": "DPTBOv9HYLZ2" + } + }, + { + "cell_type": "markdown", + "source": [ + "We're constantly trying to improve our tutorials, so **if you find some issues in this notebook**, please [open an issue on the Github Repo](https://github.com/huggingface/deep-rl-class/issues)." + ], + "metadata": { + "id": "3iaIxM_TwklQ" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4i6tjI2tHQ8j" + }, + "source": [ + "## Objectives of this notebook 🏆\n", + "At the end of the notebook, you will:\n", + "- Be able to use **Gym**, the environment library.\n", + "- Be able to code from scratch a Q-Learning agent.\n", + "- Be able to **push your trained agent and the code to the Hub** with a nice video replay and an evaluation score 🔥.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## This notebook is from Deep Reinforcement Learning Course\n", + "\"Deep" + ], + "metadata": { + "id": "viNzVbVaYvY3" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6p5HnEefISCB" + }, + "source": [ + "In this free course, you will:\n", + "\n", + "- 📖 Study Deep Reinforcement Learning in **theory and practice**.\n", + "- 🧑‍💻 Learn to **use famous Deep RL libraries** such as Stable Baselines3, RL Baselines3 Zoo, CleanRL and Sample Factory 2.0.\n", + "- 🤖 Train **agents in unique environments** \n", + "\n", + "And more check 📚 the syllabus 👉 https://simoninithomas.github.io/deep-rl-course\n", + "\n", + "Don’t forget to **sign up to the course** (we are collecting your email to be able to **send you the links when each Unit is published and give you information about the challenges and updates).**\n", + "\n", + "\n", + "The best way to keep in touch is to join our discord server to exchange with the community and with us 👉🏻 https://discord.gg/ydHrjt3WP5" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y-mo_6rXIjRi" + }, + "source": [ + "## Prerequisites 🏗️\n", + "Before diving into the notebook, you need to:\n", + "\n", + "🔲 📚 **Study Q-Learning by reading Unit 2** 🤗 ADD LINK " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f2ONOODsyrMU" + }, + "source": [ + "## A small recap of Q-Learning" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "V68VveLacfxJ" + }, + "source": [ + "- The *Q-Learning* **is the RL algorithm that** \n", + " - Trains *Q-Function*, an **action-value function** that contains, as internal memory, a *Q-table* **that contains all the state-action pair values.**\n", + " \n", + " - Given a state and action, our Q-Function **will search into its Q-table the corresponding value.**\n", + " \n", + "\"Q\n", + "\n", + "- When the training is done,**we have an optimal Q-Function, so an optimal Q-Table.**\n", + " \n", + "- And if we **have an optimal Q-function**, we\n", + "have an optimal policy,since we **know for each state, what is the best action to take.**\n", + "\n", + "\"Link\n", + "\n", + "\n", + "But, in the beginning, our **Q-Table is useless since it gives arbitrary value for each state-action pair (most of the time we initialize the Q-Table to 0 values)**. But, as we’ll explore the environment and update our Q-Table it will give us better and better approximations\n", + "\n", + "\"q-learning.jpeg\"\n", + "\n", + "This is the Q-Learning pseudocode:\n", + "\n", + "\"Q-Learning\"\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Let's code our first Reinforcement Learning algorithm 🚀" + ], + "metadata": { + "id": "HEtx8Y8MqKfH" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Install dependencies and create a virtual display 🔽\n", + "\n", + "During the notebook, we'll need to generate a replay video. To do so, with colab, **we need to have a virtual screen to be able to render the environment** (and thus record the frames). \n", + "\n", + "Hence the following cell will install the librairies and create and run a virtual screen 🖥\n", + "\n", + "We’ll install multiple ones:\n", + "\n", + "- `gym`: Contains the FrozenLake-v1 ⛄ and Taxi-v3 🚕 environments. We use `gym==0.24` since it contains a nice Taxi-v3 UI version.\n", + "- `pygame`: Used for the FrozenLake-v1 and Taxi-v3 UI.\n", + "- `numPy`: Used for handling our Q-table.\n", + "\n", + "The Hugging Face Hub 🤗 works as a central place where anyone can share and explore models and datasets. It has versioning, metrics, visualizations and other features that will allow you to easily collaborate with others.\n", + "\n", + "You can see here all the Deep reinforcement Learning models available 👉 https://huggingface.co/models?other=q-learning\n" + ], + "metadata": { + "id": "4gpxC1_kqUYe" + } + }, + { + "cell_type": "markdown", + "source": [ + "TODO CHANGE LINK OF THE REQUIREMENTS" + ], + "metadata": { + "id": "32e3NPYgH5ET" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9XaULfDZDvrC" + }, + "outputs": [], + "source": [ + "!pip install -r https://huggingface.co/spaces/ThomasSimonini/temp-space-requirements/raw/main/requirements/requirements-unit2.txt" + ] + }, + { + "cell_type": "code", + "source": [ + "%capture\n", + "!sudo apt-get update\n", + "!apt install python-opengl\n", + "!apt install ffmpeg\n", + "!apt install xvfb\n", + "!pip3 install pyvirtualdisplay" + ], + "metadata": { + "id": "n71uTX7qqzz2" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Virtual display\n", + "from pyvirtualdisplay import Display\n", + "\n", + "virtual_display = Display(visible=0, size=(1400, 900))\n", + "virtual_display.start()" + ], + "metadata": { + "id": "DaY1N4dBrabi" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "W-7f-Swax_9x" + }, + "source": [ + "## Import the packages 📦\n", + "\n", + "In addition to the installed libraries, we also use:\n", + "\n", + "- `random`: To generate random numbers (that will be useful for Epsilon-Greedy Policy).\n", + "- `imageio`: To generate a replay video\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VcNvOAQlysBJ" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import gym\n", + "import random\n", + "import imageio\n", + "import os\n", + "\n", + "import pickle5 as pickle\n", + "from tqdm.notebook import tqdm" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xp4-bXKIy1mQ" + }, + "source": [ + "We're now ready to code our Q-Learning algorithm 🔥" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xya49aNJWVvv" + }, + "source": [ + "# Part 1: Frozen Lake ⛄ (non slippery version)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NAvihuHdy9tw" + }, + "source": [ + "## Create and understand [FrozenLake environment ⛄]((https://www.gymlibrary.dev/environments/toy_text/frozen_lake/)\n", + "---\n", + "\n", + "💡 A good habit when you start to use an environment is to check its documentation \n", + "\n", + "👉 https://www.gymlibrary.dev/environments/toy_text/frozen_lake/\n", + "\n", + "---\n", + "\n", + "We're going to train our Q-Learning agent **to navigate from the starting state (S) to the goal state (G) by walking only on frozen tiles (F) and avoid holes (H)**.\n", + "\n", + "We can have two sizes of environment:\n", + "- `map_name=\"4x4\"`: a 4x4 grid version\n", + "- `map_name=\"8x8\"`: a 8x8 grid version\n", + "\n", + "\n", + "The environment has two modes:\n", + "- `is_slippery=False`: The agent always move in the intended direction due to the non-slippery nature of the frozen lake.\n", + "- `is_slippery=True`: The agent may not always move in the intended direction due to the slippery nature of the frozen lake (stochastic)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UaW_LHfS0PY2" + }, + "source": [ + "For now let's keep it simple with the 4x4 map and non-slippery" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IzJnb8O3y8up" + }, + "outputs": [], + "source": [ + "# Create the FrozenLake-v1 environment using 4x4 map and non-slippery version\n", + "env = gym.make() # TODO use the correct parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ji_UrI5l2zzn" + }, + "source": [ + "### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jNxUbPMP0akP" + }, + "outputs": [], + "source": [ + "env = gym.make(\"FrozenLake-v1\", map_name=\"4x4\", is_slippery=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KASNViqL4tZn" + }, + "source": [ + "You can create your own custom grid like this:\n", + "\n", + "```python\n", + "desc=[\"SFFF\", \"FHFH\", \"FFFH\", \"HFFG\"]\n", + "gym.make('FrozenLake-v1', desc=desc, is_slippery=True)\n", + "```\n", + "\n", + "but we'll use the default environment for now." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SXbTfdeJ1Xi9" + }, + "source": [ + "### Let's see what the Environment looks like:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ZNPG0g_UGCfh" + }, + "outputs": [], + "source": [ + "# We create our environment with gym.make(\"\")\n", + "env.reset()\n", + "print(\"_____OBSERVATION SPACE_____ \\n\")\n", + "print(\"Observation Space\", env.observation_space)\n", + "print(\"Sample observation\", env.observation_space.sample()) # Get a random observation" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2MXc15qFE0M9" + }, + "source": [ + "We see with `Observation Space Shape Discrete(16)` that the observation is a value representing the **agent’s current position as current_row * nrows + current_col (where both the row and col start at 0)**. \n", + "\n", + "For example, the goal position in the 4x4 map can be calculated as follows: 3 * 4 + 3 = 15. The number of possible observations is dependent on the size of the map. **For example, the 4x4 map has 16 possible observations.**\n", + "\n", + "\n", + "For instance, this is what state = 0 looks like:\n", + "\n", + "\"FrozenLake\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "We5WqOBGLoSm" + }, + "outputs": [], + "source": [ + "print(\"\\n _____ACTION SPACE_____ \\n\")\n", + "print(\"Action Space Shape\", env.action_space.n)\n", + "print(\"Action Space Sample\", env.action_space.sample()) # Take a random action" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MyxXwkI2Magx" + }, + "source": [ + "The action space (the set of possible actions the agent can take) is discrete with 4 actions available 🎮:\n", + "- 0: GO LEFT\n", + "- 1: GO DOWN\n", + "- 2: GO RIGHT\n", + "- 3: GO UP\n", + "\n", + "Reward function 💰:\n", + "- Reach goal: +1\n", + "- Reach hole: 0\n", + "- Reach frozen: 0" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1pFhWblk3Awr" + }, + "source": [ + "## Create and Initialize the Q-table 🗄️\n", + "(👀 Step 1 of the pseudocode)\n", + "\n", + "\"Q-Learning\"\n", + "\n", + "\n", + "It's time to initialize our Q-table! To know how many rows (states) and columns (actions) to use, we need to know the action and observation space. OpenAI Gym provides us a way to do that: `env.action_space.n` and `env.observation_space.n`\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "y3ZCdluj3k0l" + }, + "outputs": [], + "source": [ + "state_space = \n", + "print(\"There are \", state_space, \" possible states\")\n", + "\n", + "action_space = \n", + "print(\"There are \", action_space, \" possible actions\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rCddoOXM3UQH" + }, + "outputs": [], + "source": [ + "# Let's create our Qtable of size (state_space, action_space) and initialized each values at 0 using np.zeros\n", + "def initialize_q_table(state_space, action_space):\n", + " Qtable = \n", + " return Qtable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9YfvrqRt3jdR" + }, + "outputs": [], + "source": [ + "Qtable_frozenlake = initialize_q_table(state_space, action_space)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "67OdoKL63eDD" + }, + "source": [ + "### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "HuTKv3th3ohG" + }, + "outputs": [], + "source": [ + "state_space = env.observation_space.n\n", + "print(\"There are \", state_space, \" possible states\")\n", + "\n", + "action_space = env.action_space.n\n", + "print(\"There are \", action_space, \" possible actions\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lnrb_nX33fJo" + }, + "outputs": [], + "source": [ + "# Let's create our Qtable of size (state_space, action_space) and initialized each values at 0 using np.zeros\n", + "def initialize_q_table(state_space, action_space):\n", + " Qtable = np.zeros((state_space, action_space))\n", + " return Qtable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Y0WlgkVO3Jf9" + }, + "outputs": [], + "source": [ + "Qtable_frozenlake = initialize_q_table(state_space, action_space)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "flILKhBU3yZ7" + }, + "source": [ + "##Define the epsilon-greedy policy 🤖\n", + "\n", + "Epsilon-Greedy is the training policy that handles the exploration/exploitation trade-off.\n", + "\n", + "The idea with Epsilon Greedy:\n", + "\n", + "- With *probability 1 - ɛ* : **we do exploitation** (aka our agent selects the action with the highest state-action pair value).\n", + "\n", + "- With *probability ɛ*: we do **exploration** (trying random action).\n", + "\n", + "And as the training goes, we progressively **reduce the epsilon value since we will need less and less exploration and more exploitation.**\n", + "\n", + "\"Q-Learning\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LjZSvhsD7_52" + }, + "source": [ + "Thanks to Sambit for finding a bug on the epsilon function 🤗" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6Bj7x3in3_Pq" + }, + "outputs": [], + "source": [ + "def epsilon_greedy_policy(Qtable, state, epsilon):\n", + " # Randomly generate a number between 0 and 1\n", + " random_num = \n", + " # if random_num > greater than epsilon --> exploitation\n", + " if random_num > epsilon:\n", + " # Take the action with the highest value given a state\n", + " # np.argmax can be useful here\n", + " action = \n", + " # else --> exploration\n", + " else:\n", + " action = # Take a random action\n", + " \n", + " return action" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8R5ej1fS4P2V" + }, + "source": [ + "#### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "cYxHuckr4LiG" + }, + "outputs": [], + "source": [ + "def epsilon_greedy_policy(Qtable, state, epsilon):\n", + " # Randomly generate a number between 0 and 1\n", + " random_int = random.uniform(0,1)\n", + " # if random_int > greater than epsilon --> exploitation\n", + " if random_int > epsilon:\n", + " # Take the action with the highest value given a state\n", + " # np.argmax can be useful here\n", + " action = np.argmax(Qtable[state])\n", + " # else --> exploration\n", + " else:\n", + " action = env.action_space.sample()\n", + " \n", + " return action" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Atll4Z774gri" + }, + "source": [ + "## Define the greedy policy 🤖\n", + "Remember we have two policies since Q-Learning is an **off-policy** algorithm. This means we're using a **different policy for acting and updating the value function**.\n", + "\n", + "- Epsilon greedy policy (acting policy)\n", + "- Greedy policy (updating policy)\n", + "\n", + "Greedy policy will also be the final policy we'll have when the Q-learning agent will be trained. The greedy policy is used to select an action from the Q-table.\n", + "\n", + "\"Q-Learning\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "E3SCLmLX5bWG" + }, + "outputs": [], + "source": [ + "def greedy_policy(Qtable, state):\n", + " # Exploitation: take the action with the highest state, action value\n", + " action = \n", + " \n", + " return action" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "B2_-8b8z5k54" + }, + "source": [ + "#### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "se2OzWGW5kYJ" + }, + "outputs": [], + "source": [ + "def greedy_policy(Qtable, state):\n", + " # Exploitation: take the action with the highest state, action value\n", + " action = np.argmax(Qtable[state])\n", + " \n", + " return action" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hW80DealcRtu" + }, + "source": [ + "## Define the hyperparameters ⚙️\n", + "The exploration related hyperparamters are some of the most important ones. \n", + "\n", + "- We need to make sure that our agent **explores enough the state space** in order to learn a good value approximation, in order to do that we need to have progressive decay of the epsilon.\n", + "- If you decrease too fast epsilon (too high decay_rate), **you take the risk that your agent is stuck**, since your agent didn't explore enough the state space and hence can't solve the problem." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Y1tWn0tycWZ1" + }, + "outputs": [], + "source": [ + "# Training parameters\n", + "n_training_episodes = 10000 # Total training episodes\n", + "learning_rate = 0.7 # Learning rate\n", + "\n", + "# Evaluation parameters\n", + "n_eval_episodes = 100 # Total number of test episodes\n", + "\n", + "# Environment parameters\n", + "env_id = \"FrozenLake-v1\" # Name of the environment\n", + "max_steps = 99 # Max steps per episode\n", + "gamma = 0.95 # Discounting rate\n", + "eval_seed = [] # The evaluation seed of the environment\n", + "\n", + "# Exploration parameters\n", + "max_epsilon = 1.0 # Exploration probability at start\n", + "min_epsilon = 0.05 # Minimum exploration probability \n", + "decay_rate = 0.0005 # Exponential decay rate for exploration prob" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cDb7Tdx8atfL" + }, + "source": [ + "## Step 6: Create the training loop method" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "paOynXy3aoJW" + }, + "outputs": [], + "source": [ + "def train(n_training_episodes, min_epsilon, max_epsilon, decay_rate, env, max_steps, Qtable):\n", + " for episode in range(n_training_episodes):\n", + " # Reduce epsilon (because we need less and less exploration)\n", + " epsilon = min_epsilon + (max_epsilon - min_epsilon)*np.exp(-decay_rate*episode)\n", + " # Reset the environment\n", + " state = env.reset()\n", + " step = 0\n", + " done = False\n", + "\n", + " # repeat\n", + " for step in range(max_steps):\n", + " # Choose the action At using epsilon greedy policy\n", + " action = \n", + "\n", + " # Take action At and observe Rt+1 and St+1\n", + " # Take the action (a) and observe the outcome state(s') and reward (r)\n", + " new_state, reward, done, info = \n", + "\n", + " # Update Q(s,a):= Q(s,a) + lr [R(s,a) + gamma * max Q(s',a') - Q(s,a)]\n", + " Qtable[state][action] = \n", + "\n", + " # If done, finish the episode\n", + " if done:\n", + " break\n", + " \n", + " # Our state is the new state\n", + " state = new_state\n", + " return Qtable" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Pnpk2ePoem3r" + }, + "source": [ + "#### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IyZaYbUAeolw" + }, + "outputs": [], + "source": [ + "def train(n_training_episodes, min_epsilon, max_epsilon, decay_rate, env, max_steps, Qtable):\n", + " for episode in tqdm(range(n_training_episodes)):\n", + " # Reduce epsilon (because we need less and less exploration)\n", + " epsilon = min_epsilon + (max_epsilon - min_epsilon)*np.exp(-decay_rate*episode)\n", + " # Reset the environment\n", + " state = env.reset()\n", + " step = 0\n", + " done = False\n", + "\n", + " # repeat\n", + " for step in range(max_steps):\n", + " # Choose the action At using epsilon greedy policy\n", + " action = epsilon_greedy_policy(Qtable, state, epsilon)\n", + "\n", + " # Take action At and observe Rt+1 and St+1\n", + " # Take the action (a) and observe the outcome state(s') and reward (r)\n", + " new_state, reward, done, info = env.step(action)\n", + "\n", + " # Update Q(s,a):= Q(s,a) + lr [R(s,a) + gamma * max Q(s',a') - Q(s,a)]\n", + " Qtable[state][action] = Qtable[state][action] + learning_rate * (reward + gamma * np.max(Qtable[new_state]) - Qtable[state][action]) \n", + "\n", + " # If done, finish the episode\n", + " if done:\n", + " break\n", + " \n", + " # Our state is the new state\n", + " state = new_state\n", + " return Qtable" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WLwKQ4tUdhGI" + }, + "source": [ + "## Train the Q-Learning agent 🏃" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "DPBxfjJdTCOH" + }, + "outputs": [], + "source": [ + "Qtable_frozenlake = train(n_training_episodes, min_epsilon, max_epsilon, decay_rate, env, max_steps, Qtable_frozenlake)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yVeEhUCrc30L" + }, + "source": [ + "## Let's see what our Q-Learning table looks like now 👀" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "nmfchsTITw4q" + }, + "outputs": [], + "source": [ + "Qtable_frozenlake" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pUrWkxsHccXD" + }, + "source": [ + "## Define the evaluation method 📝" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jNl0_JO2cbkm" + }, + "outputs": [], + "source": [ + "def evaluate_agent(env, max_steps, n_eval_episodes, Q, seed):\n", + " \"\"\"\n", + " Evaluate the agent for ``n_eval_episodes`` episodes and returns average reward and std of reward.\n", + " :param env: The evaluation environment\n", + " :param n_eval_episodes: Number of episode to evaluate the agent\n", + " :param Q: The Q-table\n", + " :param seed: The evaluation seed array (for taxi-v3)\n", + " \"\"\"\n", + " episode_rewards = []\n", + " for episode in tqdm(range(n_eval_episodes)):\n", + " if seed:\n", + " state = env.reset(seed=seed[episode])\n", + " else:\n", + " state = env.reset()\n", + " step = 0\n", + " done = False\n", + " total_rewards_ep = 0\n", + " \n", + " for step in range(max_steps):\n", + " # Take the action (index) that have the maximum expected future reward given that state\n", + " action = np.argmax(Q[state][:])\n", + " new_state, reward, done, info = env.step(action)\n", + " total_rewards_ep += reward\n", + " \n", + " if done:\n", + " break\n", + " state = new_state\n", + " episode_rewards.append(total_rewards_ep)\n", + " mean_reward = np.mean(episode_rewards)\n", + " std_reward = np.std(episode_rewards)\n", + "\n", + " return mean_reward, std_reward" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0jJqjaoAnxUo" + }, + "source": [ + "## Evaluate our Q-Learning agent 📈\n", + "- Normally you should have mean reward of 1.0\n", + "- It's relatively easy since the state space is really small (16). What you can try to do is [to replace with the slippery version](https://www.gymlibrary.dev/environments/toy_text/frozen_lake/)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fAgB7s0HEFMm" + }, + "outputs": [], + "source": [ + "# Evaluate our Agent\n", + "mean_reward, std_reward = evaluate_agent(env, max_steps, n_eval_episodes, Qtable_frozenlake, eval_seed)\n", + "print(f\"Mean_reward={mean_reward:.2f} +/- {std_reward:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yxaP3bPdg1DV" + }, + "source": [ + "## Publish our trained model on the Hub 🔥\n", + "Now that we saw we got good results after the training, we can publish our trained model on the hub 🤗 with one line of code.\n", + "\n", + "Here's an example of a Model Card:\n", + "\n", + "\"Model\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kv0k1JQjpMq3" + }, + "source": [ + "Under the hood, the Hub uses git-based repositories (don't worry if you don't know what git is), which means you can update the model with new versions as you experiment and improve your agent." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QZ5LrR-joIHD" + }, + "source": [ + "#### Do not modify this code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Jex3i9lZ8ksX" + }, + "outputs": [], + "source": [ + "%%capture\n", + "from huggingface_hub import HfApi, HfFolder, Repository\n", + "from huggingface_hub.repocard import metadata_eval_result, metadata_save\n", + "\n", + "from pathlib import Path\n", + "import datetime\n", + "import json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Qo57HBn3W74O" + }, + "outputs": [], + "source": [ + "def record_video(env, Qtable, out_directory, fps=1):\n", + " images = [] \n", + " done = False\n", + " state = env.reset(seed=random.randint(0,500))\n", + " img = env.render(mode='rgb_array')\n", + " images.append(img)\n", + " while not done:\n", + " # Take the action (index) that have the maximum expected future reward given that state\n", + " action = np.argmax(Qtable[state][:])\n", + " state, reward, done, info = env.step(action) # We directly put next_state = state for recording logic\n", + " img = env.render(mode='rgb_array')\n", + " images.append(img)\n", + " imageio.mimsave(out_directory, [np.array(img) for i, img in enumerate(images)], fps=fps)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "pwsNrzB339aF" + }, + "outputs": [], + "source": [ + "def push_to_hub(repo_id, \n", + " model,\n", + " env,\n", + " video_fps=1,\n", + " local_repo_path=\"hub\",\n", + " commit_message=\"Push Q-Learning agent to Hub\",\n", + " token= None\n", + " ):\n", + " _, repo_name = repo_id.split(\"/\")\n", + "\n", + " eval_env = env\n", + " \n", + " # Step 1: Clone or create the repo\n", + " # Create the repo (or clone its content if it's nonempty)\n", + " api = HfApi()\n", + " \n", + " repo_url = api.create_repo(\n", + " repo_id=repo_id,\n", + " token=token,\n", + " private=False,\n", + " exist_ok=True,)\n", + " \n", + " # Git pull\n", + " repo_local_path = Path(local_repo_path) / repo_name\n", + " repo = Repository(repo_local_path, clone_from=repo_url, use_auth_token=True)\n", + " repo.git_pull()\n", + " \n", + " repo.lfs_track([\"*.mp4\"])\n", + "\n", + " # Step 1: Save the model\n", + " if env.spec.kwargs.get(\"map_name\"):\n", + " model[\"map_name\"] = env.spec.kwargs.get(\"map_name\")\n", + " if env.spec.kwargs.get(\"is_slippery\", \"\") == False:\n", + " model[\"slippery\"] = False\n", + "\n", + " print(model)\n", + " \n", + " \n", + " # Pickle the model\n", + " with open(Path(repo_local_path)/'q-learning.pkl', 'wb') as f:\n", + " pickle.dump(model, f)\n", + " \n", + " # Step 2: Evaluate the model and build JSON\n", + " mean_reward, std_reward = evaluate_agent(eval_env, model[\"max_steps\"], model[\"n_eval_episodes\"], model[\"qtable\"], model[\"eval_seed\"])\n", + "\n", + " # First get datetime\n", + " eval_datetime = datetime.datetime.now()\n", + " eval_form_datetime = eval_datetime.isoformat()\n", + "\n", + " evaluate_data = {\n", + " \"env_id\": model[\"env_id\"], \n", + " \"mean_reward\": mean_reward,\n", + " \"n_eval_episodes\": model[\"n_eval_episodes\"],\n", + " \"eval_datetime\": eval_form_datetime,\n", + " }\n", + " # Write a JSON file\n", + " with open(Path(repo_local_path) / \"results.json\", \"w\") as outfile:\n", + " json.dump(evaluate_data, outfile)\n", + "\n", + " # Step 3: Create the model card\n", + " # Env id\n", + " env_name = model[\"env_id\"]\n", + " if env.spec.kwargs.get(\"map_name\"):\n", + " env_name += \"-\" + env.spec.kwargs.get(\"map_name\")\n", + "\n", + " if env.spec.kwargs.get(\"is_slippery\", \"\") == False:\n", + " env_name += \"-\" + \"no_slippery\"\n", + "\n", + " metadata = {}\n", + " metadata[\"tags\"] = [\n", + " env_name,\n", + " \"q-learning\",\n", + " \"reinforcement-learning\",\n", + " \"custom-implementation\"\n", + " ]\n", + "\n", + " # Add metrics\n", + " eval = metadata_eval_result(\n", + " model_pretty_name=repo_name,\n", + " task_pretty_name=\"reinforcement-learning\",\n", + " task_id=\"reinforcement-learning\",\n", + " metrics_pretty_name=\"mean_reward\",\n", + " metrics_id=\"mean_reward\",\n", + " metrics_value=f\"{mean_reward:.2f} +/- {std_reward:.2f}\",\n", + " dataset_pretty_name=env_name,\n", + " dataset_id=env_name,\n", + " )\n", + "\n", + " # Merges both dictionaries\n", + " metadata = {**metadata, **eval}\n", + "\n", + " model_card = f\"\"\"\n", + " # **Q-Learning** Agent playing **{env_id}**\n", + " This is a trained model of a **Q-Learning** agent playing **{env_id}** .\n", + " \"\"\"\n", + "\n", + " model_card += \"\"\"\n", + " ## Usage\n", + " ```python\n", + " \"\"\"\n", + "\n", + " model_card += f\"\"\"model = load_from_hub(repo_id=\"{repo_id}\", filename=\"q-learning.pkl\")\n", + "\n", + " # Don't forget to check if you need to add additional attributes (is_slippery=False etc)\n", + " env = gym.make(model[\"env_id\"])\n", + "\n", + " evaluate_agent(env, model[\"max_steps\"], model[\"n_eval_episodes\"], model[\"qtable\"], model[\"eval_seed\"])\n", + " \"\"\"\n", + "\n", + " model_card +=\"\"\"\n", + " ```\n", + " \"\"\"\n", + "\n", + " readme_path = repo_local_path / \"README.md\"\n", + " readme = \"\"\n", + " if readme_path.exists():\n", + " with readme_path.open(\"r\", encoding=\"utf8\") as f:\n", + " readme = f.read()\n", + " else:\n", + " readme = model_card\n", + "\n", + " with readme_path.open(\"w\", encoding=\"utf-8\") as f:\n", + " f.write(readme)\n", + "\n", + " # Save our metrics to Readme metadata\n", + " metadata_save(readme_path, metadata)\n", + "\n", + " # Step 4: Record a video\n", + " video_path = repo_local_path / \"replay.mp4\"\n", + " record_video(env, model[\"qtable\"], video_path, video_fps)\n", + " \n", + " # Push everything to hub\n", + " print(f\"Pushing repo {repo_name} to the Hugging Face Hub\")\n", + " repo.push_to_hub(commit_message=commit_message)\n", + "\n", + " print(f\"Your model is pushed to the hub. You can view your model here: {repo_url}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "81J6cet_ogSS" + }, + "source": [ + "### .\n", + "By using `package_to_hub` **you evaluate, record a replay, generate a model card of your agent and push it to the hub**.\n", + "\n", + "This way:\n", + "- You can **showcase our work** 🔥\n", + "- You can **visualize your agent playing** 👀\n", + "- You can **share with the community an agent that others can use** 💾\n", + "- You can **access a leaderboard 🏆 to see how well your agent is performing compared to your classmates** 👉 https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cWnFC0iZooTw" + }, + "source": [ + "To be able to share your model with the community there are three more steps to follow:\n", + "\n", + "1️⃣ (If it's not already done) create an account to HF ➡ https://huggingface.co/join\n", + "\n", + "2️⃣ Sign in and then, you need to store your authentication token from the Hugging Face website.\n", + "- Create a new token (https://huggingface.co/settings/tokens) **with write role**\n", + "\n", + "\n", + "\"Create\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "QB5nIcxR8paT" + }, + "outputs": [], + "source": [ + "from huggingface_hub import notebook_login\n", + "notebook_login()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GyWc1x3-o3xG" + }, + "source": [ + "If you don't want to use a Google Colab or a Jupyter Notebook, you need to use this command instead: `huggingface-cli login`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Gc5AfUeFo3xH" + }, + "source": [ + "3️⃣ We're now ready to push our trained agent to the 🤗 Hub 🔥 using `package_to_hub()` function\n", + "\n", + "- Let's create **the model dictionary that contains the hyperparameters and the Q_table**." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FiMqxqVHg0I4" + }, + "outputs": [], + "source": [ + "model = {\n", + " \"env_id\": env_id,\n", + " \"max_steps\": max_steps,\n", + " \"n_training_episodes\": n_training_episodes,\n", + " \"n_eval_episodes\": n_eval_episodes,\n", + " \"eval_seed\": eval_seed,\n", + "\n", + " \"learning_rate\": learning_rate,\n", + " \"gamma\": gamma,\n", + "\n", + " \"max_epsilon\": max_epsilon,\n", + " \"min_epsilon\": min_epsilon,\n", + " \"decay_rate\": decay_rate,\n", + "\n", + " \"qtable\": Qtable_frozenlake\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9kld-AEso3xH" + }, + "source": [ + "Let's fill the `package_to_hub` function:\n", + "- `repo_id`: the name of the Hugging Face Hub Repository that will be created/updated `\n", + "(repo_id = {username}/{repo_name})`\n", + "💡 **A good name is {username}/q-{env_id}**\n", + "- `model`: our model dictionary containing the hyperparameters and the Qtable.\n", + "- `env`: the environment.\n", + "- `commit_message`: message of the commit" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "5sBo2umnXpPd" + }, + "outputs": [], + "source": [ + "model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "RpOTtSt83kPZ" + }, + "outputs": [], + "source": [ + "username = \"\" # FILL THIS\n", + "repo_name = \"q-FrozenLake-v1-4x4-noSlippery\"\n", + "push_to_hub(\n", + " repo_id=f\"{username}/{repo_name}\",\n", + " model=model,\n", + " env=env)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E2875IGsprzq" + }, + "source": [ + "Congrats 🥳 you've just implemented from scratch, trained and uploaded your first Reinforcement Learning agent. \n", + "FrozenLake-v1 no_slippery is very simple environment, let's try an harder one 🔥." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "18lN8Bz7yvLt" + }, + "source": [ + "# Part 2: Taxi-v3 🚖\n", + "\n", + "## Create and understand [Taxi-v3 🚕](https://www.gymlibrary.dev/environments/toy_text/taxi/)\n", + "---\n", + "\n", + "💡 A good habit when you start to use an environment is to check its documentation \n", + "\n", + "👉 https://www.gymlibrary.dev/environments/toy_text/taxi/\n", + "\n", + "---\n", + "\n", + "In Taxi-v3 🚕, there are four designated locations in the grid world indicated by R(ed), G(reen), Y(ellow), and B(lue). When the episode starts, the taxi starts off at a random square and the passenger is at a random location. The taxi drives to the passenger’s location, picks up the passenger, drives to the passenger’s destination (another one of the four specified locations), and then drops off the passenger. Once the passenger is dropped off, the episode ends.\n", + "\n", + "\n", + "\"Taxi\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gL0wpeO8gpej" + }, + "outputs": [], + "source": [ + "env = gym.make(\"Taxi-v3\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gBOaXgtsrmtT" + }, + "source": [ + "There are **500 discrete states since there are 25 taxi positions, 5 possible locations of the passenger** (including the case when the passenger is in the taxi), and **4 destination locations.**\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_TPNaGSZrgqA" + }, + "outputs": [], + "source": [ + "state_space = env.observation_space.n\n", + "print(\"There are \", state_space, \" possible states\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CdeeZuokrhit" + }, + "outputs": [], + "source": [ + "action_space = env.action_space.n\n", + "print(\"There are \", action_space, \" possible actions\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R1r50Advrh5Q" + }, + "source": [ + "The action space (the set of possible actions the agent can take) is discrete with **6 actions available 🎮**:\n", + "- 0: move south\n", + "- 1: move north\n", + "- 2: move east\n", + "- 3: move west\n", + "- 4: pickup passenger\n", + "- 5: drop off passenger\n", + "\n", + "Reward function 💰:\n", + "- -1 per step unless other reward is triggered.\n", + "- +20 delivering passenger.\n", + "- -10 executing “pickup” and “drop-off” actions illegally." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "US3yDXnEtY9I" + }, + "outputs": [], + "source": [ + "# Create our Q table with state_size rows and action_size columns (500x6)\n", + "Qtable_taxi = initialize_q_table(state_space, action_space)\n", + "print(Qtable_taxi)\n", + "print(\"Q-table shape: \", Qtable_taxi .shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gUMKPH0_LJyH" + }, + "source": [ + "## Define the hyperparameters ⚙️\n", + "⚠ DO NOT MODIFY EVAL_SEED: the eval_seed array **allows us to evaluate your agent with the same taxi starting positions for every classmate**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AB6n__hhg7YS" + }, + "outputs": [], + "source": [ + "# Training parameters\n", + "n_training_episodes = 25000 # Total training episodes\n", + "learning_rate = 0.7 # Learning rate\n", + "\n", + "# Evaluation parameters\n", + "n_eval_episodes = 100 # Total number of test episodes\n", + "\n", + "# DO NOT MODIFY EVAL_SEED\n", + "eval_seed = [16,54,165,177,191,191,120,80,149,178,48,38,6,125,174,73,50,172,100,148,146,6,25,40,68,148,49,167,9,97,164,176,61,7,54,55,\n", + " 161,131,184,51,170,12,120,113,95,126,51,98,36,135,54,82,45,95,89,59,95,124,9,113,58,85,51,134,121,169,105,21,30,11,50,65,12,43,82,145,152,97,106,55,31,85,38,\n", + " 112,102,168,123,97,21,83,158,26,80,63,5,81,32,11,28,148] # Evaluation seed, this ensures that all classmates agents are trained on the same taxi starting position\n", + " # Each seed has a specific starting state\n", + "\n", + "# Environment parameters\n", + "env_id = \"Taxi-v3\" # Name of the environment\n", + "max_steps = 99 # Max steps per episode\n", + "gamma = 0.95 # Discounting rate\n", + "\n", + "# Exploration parameters\n", + "max_epsilon = 1.0 # Exploration probability at start\n", + "min_epsilon = 0.05 # Minimum exploration probability \n", + "decay_rate = 0.005 # Exponential decay rate for exploration prob\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1TMORo1VLTsX" + }, + "source": [ + "## Train our Q-Learning agent 🏃" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MLNwkNDb14h2" + }, + "outputs": [], + "source": [ + "Qtable_taxi = train(n_training_episodes, min_epsilon, max_epsilon, decay_rate, env, max_steps, Qtable_taxi)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WwP3Y2z2eS-K" + }, + "outputs": [], + "source": [ + "Qtable_taxi" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wPdu0SueLVl2" + }, + "source": [ + "## Create a model dictionary 💾 and publish our trained model on the Hub 🔥\n", + "- We create a model dictionary that will contain all the training hyperparameters for reproducibility and the Q-Table.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0a1FpE_3hNYr" + }, + "outputs": [], + "source": [ + "model = {\n", + " \"env_id\": env_id,\n", + " \"max_steps\": max_steps,\n", + " \"n_training_episodes\": n_training_episodes,\n", + " \"n_eval_episodes\": n_eval_episodes,\n", + " \"eval_seed\": eval_seed,\n", + "\n", + " \"learning_rate\": learning_rate,\n", + " \"gamma\": gamma,\n", + "\n", + " \"max_epsilon\": max_epsilon,\n", + " \"min_epsilon\": min_epsilon,\n", + " \"decay_rate\": decay_rate,\n", + "\n", + " \"qtable\": Qtable_taxi\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dhQtiQozhOn1" + }, + "outputs": [], + "source": [ + "username = \"\" # FILL THIS\n", + "repo_name = \"q-Taxi-v3\"\n", + "push_to_hub(\n", + " repo_id=f\"{username}/{repo_name}\",\n", + " model=model,\n", + " env=env)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZgSdjgbIpRti" + }, + "source": [ + "Now that's on the Hub, you can compare the results of your Taxi-v3 with your classmates using the leaderboard 🏆 👉 https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard\n", + "\n", + "\"Taxi" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bzgIO70c0bu2" + }, + "source": [ + "# Part 3: Load from Hub 🔽\n", + "\n", + "What's amazing with Hugging Face Hub 🤗 is that you can easily load powerful models from the community.\n", + "\n", + "Loading a saved model from the Hub is really easy.\n", + "1. You go https://huggingface.co/models?other=q-learning to see the list of all the q-learning saved models.\n", + "2. You select one and copy its repo_id\n", + "\n", + "\"Copy" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gTth6thRoC6X" + }, + "source": [ + "3. Then we just need to use `load_from_hub` with:\n", + "- The repo_id\n", + "- The filename: the saved model inside the repo." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EtrfoTaBoNrd" + }, + "source": [ + "#### Do not modify this code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Eo8qEzNtCaVI" + }, + "outputs": [], + "source": [ + "from urllib.error import HTTPError\n", + "\n", + "from huggingface_hub import hf_hub_download\n", + "\n", + "\n", + "def load_from_hub(repo_id: str, filename: str) -> str:\n", + " \"\"\"\n", + " Download a model from Hugging Face Hub.\n", + " :param repo_id: id of the model repository from the Hugging Face Hub\n", + " :param filename: name of the model zip file from the repository\n", + " \"\"\"\n", + " try:\n", + " from huggingface_hub import cached_download, hf_hub_url\n", + " except ImportError:\n", + " raise ImportError(\n", + " \"You need to install huggingface_hub to use `load_from_hub`. \"\n", + " \"See https://pypi.org/project/huggingface-hub/ for installation.\"\n", + " )\n", + "\n", + " # Get the model from the Hub, download and cache the model on your local disk\n", + " pickle_model = hf_hub_download(\n", + " repo_id=repo_id,\n", + " filename=filename\n", + " )\n", + "\n", + " with open(pickle_model, 'rb') as f:\n", + " downloaded_model_file = pickle.load(f)\n", + " \n", + " return downloaded_model_file" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b_sM2gNioPZH" + }, + "source": [ + "### ." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "JUm9lz2gCQcU" + }, + "outputs": [], + "source": [ + "model = load_from_hub(repo_id=\"ThomasSimonini/q-Taxi-v3\", filename=\"q-learning.pkl\") # Try to use another model\n", + "\n", + "print(model)\n", + "env = gym.make(model[\"env_id\"])\n", + "\n", + "evaluate_agent(env, model[\"max_steps\"], model[\"n_eval_episodes\"], model[\"qtable\"], model[\"eval_seed\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "O7pL8rg1MulN" + }, + "outputs": [], + "source": [ + "model = load_from_hub(repo_id=\"ThomasSimonini/q-FrozenLake-v1-no-slippery\", filename=\"q-learning.pkl\") # Try to use another model\n", + "\n", + "env = gym.make(model[\"env_id\"], is_slippery=False)\n", + "\n", + "evaluate_agent(env, model[\"max_steps\"], model[\"n_eval_episodes\"], model[\"qtable\"], model[\"eval_seed\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BQAwLnYFPk-s" + }, + "source": [ + "## Some additional challenges 🏆\n", + "The best way to learn **is to try things by your own**! As you saw, the current agent is not doing great. As a first suggestion, you can train for more steps. With 1,000,000 steps, we saw some great results! \n", + "\n", + "In the [Leaderboard](https://huggingface.co/spaces/chrisjay/Deep-Reinforcement-Learning-Leaderboard) you will find your agents. Can you get to the top?\n", + "\n", + "Here are some ideas to achieve so:\n", + "* Train more steps\n", + "* Try different hyperparameters by looking at what your classmates have done.\n", + "* **Push your new trained model** on the Hub 🔥\n", + "\n", + "Are walking on ice and driving taxis too boring to you? Try to **change the environment**, why not using FrozenLake-v1 slippery version? Check how they work [using the gym documentation](https://www.gymlibrary.dev/) and have fun 🎉." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "p-fW-EU5WejJ" + }, + "source": [ + "_____________________________________________________________________\n", + "Congrats 🥳, you've just implemented, trained, and uploaded your first Reinforcement Learning agent.\n", + "\n", + "Understanding Q-Learning is an **important step to understanding value-based methods.**\n", + "\n", + "In the next Unit with Deep Q-Learning, we'll see that creating and updating a Q-table was a good strategy — **however, this is not scalable.**\n", + "\n", + "For instance, imagine you create an agent that learns to play Doom. \n", + "\n", + "\"Doom\"/\n", + "\n", + "Doom is a large environment with a huge state space (millions of different states). Creating and updating a Q-table for that environment would not be efficient. \n", + "\n", + "That's why we'll study, in the next unit, Deep Q-Learning, an algorithm **where we use a neural network that approximates, given a state, the different Q-values for each action.**\n", + "\n", + "\"Environments\"/\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BjLhT70TEZIn" + }, + "source": [ + "See you on [Unit 3](https://github.com/huggingface/deep-rl-class/tree/main/unit2#unit-2-introduction-to-q-learning)! 🔥\n", + "TODO CHANGE LINK\n", + "## Keep learning, stay awesome 🤗" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [ + "4i6tjI2tHQ8j", + "Y-mo_6rXIjRi", + "EtrfoTaBoNrd", + "BjLhT70TEZIn" + ], + "private_outputs": true, + "provenance": [] + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/notebooks/unit3/unit3.ipynb b/notebooks/unit3/unit3.ipynb new file mode 100644 index 0000000..019653e --- /dev/null +++ b/notebooks/unit3/unit3.ipynb @@ -0,0 +1,794 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "k7xBVPzoXxOg" + }, + "source": [ + "# Unit 3: Deep Q-Learning with Atari Games 👾 using RL Baselines3 Zoo\n", + "\n", + "\"Unit\n", + "\n", + "In this notebook, **you'll train a Deep Q-Learning agent** playing Space Invaders using [RL Baselines3 Zoo](https://github.com/DLR-RM/rl-baselines3-zoo), a training framework based on [Stable-Baselines3](https://stable-baselines3.readthedocs.io/en/master/) that provides scripts for training, evaluating agents, tuning hyperparameters, plotting results and recording videos.\n", + "\n", + "We're using the [RL-Baselines-3 Zoo integration, a vanilla version of Deep Q-Learning](https://stable-baselines3.readthedocs.io/en/master/modules/dqn.html) with no extensions such as Double-DQN, Dueling-DQN, and Prioritized Experience Replay.\n", + "\n", + "⬇️ Here is an example of what **you will achieve** ⬇️" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "J9S713biXntc" + }, + "outputs": [], + "source": [ + "%%html\n", + "" + ] + }, + { + "cell_type": "markdown", + "source": [ + "TODO: ADD TEXT LIVE INFO\n", + "\n", + "TODO: ADD IF YOU HAVE QUESTIONS\n", + "\n", + "\n", + "###🎮 Environments: \n", + "- SpacesInvadersNoFrameskip-v4 \n", + "\n", + "###📚 RL-Library: \n", + "- [RL-Baselines3-Zoo](https://github.com/DLR-RM/rl-baselines3-zoo)" + ], + "metadata": { + "id": "ykJiGevCMVc5" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wciHGjrFYz9m" + }, + "source": [ + "## Objectives of this notebook 🏆\n", + "At the end of the notebook, you will:\n", + "- Be able to understand deeper **how RL Baselines3 Zoo works**.\n", + "- Be able to **push your trained agent and the code to the Hub** with a nice video replay and an evaluation score 🔥.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## This notebook is from Deep Reinforcement Learning Course\n", + "\"Deep" + ], + "metadata": { + "id": "TsnP0rjxMn1e" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nw6fJHIAZd-J" + }, + "source": [ + "In this free course, you will:\n", + "\n", + "- 📖 Study Deep Reinforcement Learning in **theory and practice**.\n", + "- 🧑‍💻 Learn to **use famous Deep RL libraries** such as Stable Baselines3, RL Baselines3 Zoo, CleanRL and Sample Factory 2.0.\n", + "- 🤖 Train **agents in unique environments** \n", + "\n", + "And more check 📚 the syllabus 👉 https://simoninithomas.github.io/deep-rl-course\n", + "\n", + "Don’t forget to **sign up to the course** (we are collecting your email to be able to **send you the links when each Unit is published and give you information about the challenges and updates).**\n", + "\n", + "\n", + "The best way to keep in touch is to join our discord server to exchange with the community and with us 👉🏻 https://discord.gg/ydHrjt3WP5" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0vgANIBBZg1p" + }, + "source": [ + "## Prerequisites 🏗️\n", + "Before diving into the notebook, you need to:\n", + "\n", + "🔲 📚 **Study Deep Q-Learning by reading Unit 3** 🤗 ADD LINK " + ] + }, + { + "cell_type": "markdown", + "source": [ + "We're constantly trying to improve our tutorials, so **if you find some issues in this notebook**, please [open an issue on the Github Repo](https://github.com/huggingface/deep-rl-class/issues)." + ], + "metadata": { + "id": "7kszpGFaRVhq" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QR0jZtYreSI5" + }, + "source": [ + "# Let's train a Deep Q-Learning agent playing Atari' Space Invaders 👾 and upload it to the Hub." + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Set the GPU 💪\n", + "- To **accelerate the agent's training, we'll use a GPU**. To do that, go to `Runtime > Change Runtime type`\n", + "\n", + "\"GPU" + ], + "metadata": { + "id": "PU4FVzaoM6fC" + } + }, + { + "cell_type": "markdown", + "source": [ + "- `Hardware Accelerator > GPU`\n", + "\n", + "\"GPU" + ], + "metadata": { + "id": "KV0NyFdQM9ZG" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Create a virtual display 🔽\n", + "\n", + "During the notebook, we'll need to generate a replay video. To do so, with colab, **we need to have a virtual screen to be able to render the environment** (and thus record the frames). \n", + "\n", + "Hence the following cell will install the librairies and create and run a virtual screen 🖥" + ], + "metadata": { + "id": "bTpYcVZVMzUI" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jV6wjQ7Be7p5" + }, + "outputs": [], + "source": [ + "%%capture\n", + "!apt install python-opengl\n", + "!apt install ffmpeg\n", + "!apt install xvfb\n", + "!pip3 install pyvirtualdisplay" + ] + }, + { + "cell_type": "code", + "source": [ + "# Additional dependencies for RL Baselines3 Zoo\n", + "!apt-get install swig cmake freeglut3-dev " + ], + "metadata": { + "id": "fWyKJCy_NJBX" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "!pip install pyglet==1.5.1" + ], + "metadata": { + "id": "C5LwHrISW7Q5" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Virtual display\n", + "from pyvirtualdisplay import Display\n", + "\n", + "virtual_display = Display(visible=0, size=(1400, 900))\n", + "virtual_display.start()" + ], + "metadata": { + "id": "ww5PQH1gNLI4" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mYIMvl5X9NAu" + }, + "source": [ + "## Clone RL-Baselines3 Zoo Repo 📚\n", + "You can now directly install from python package `pip install rl_zoo3` but since we want **the full installation with extra environments and dependencies** we're going to clone `RL-Baselines3-Zoo` repository and install from source." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eu5ZDPZ09VNQ" + }, + "outputs": [], + "source": [ + "!git clone https://github.com/DLR-RM/rl-baselines3-zoo" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HCIoSbvbfAQh" + }, + "source": [ + "## Install dependencies 🔽\n", + "We can now install the dependencies RL-Baselines3 Zoo needs (this can take 5min ⏲)\n", + "\n", + "But we'll also install:\n", + "- `huggingface_sb3`: Additional code for Stable-baselines3 to load and upload models from the Hugging Face 🤗 Hub." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "s2QsFAk29h-D" + }, + "outputs": [], + "source": [ + "%cd /content/rl-baselines3-zoo/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3QaOS7Xj9j1s" + }, + "outputs": [], + "source": [ + "!pip install -r requirements.txt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "RLRGKFR39l9s" + }, + "outputs": [], + "source": [ + "%%capture\n", + "!pip install huggingface_sb3" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5iPgzluo9z-u" + }, + "source": [ + "## Train our Deep Q-Learning Agent to Play Space Invaders 👾\n", + "\n", + "To train an agent with RL-Baselines3-Zoo, we just need to do two things:\n", + "1. We define the hyperparameters in `rl-baselines3-zoo/hyperparams/dqn.yml`\n", + "\n", + "\"DQN\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_VjblFSVDQOj" + }, + "source": [ + "Here we see that:\n", + "- We use the `Atari Wrapper` that preprocess the input (Frame reduction ,grayscale, stack 4 frames)\n", + "- We use `CnnPolicy`, since we use Convolutional layers to process the frames\n", + "- We train it for 10 million `n_timesteps` \n", + "- Memory (Experience Replay) size is 100000, aka the amount of experience steps you saved to train again your agent with.\n", + "\n", + "💡 My advice is to **reduce the training timesteps to 1M,** which will take about 90 minutes on a P100. `!nvidia-smi` will tell you what GPU you're using. At 10 million steps, this will take about 9 hours, which could likely result in Colab timing out. I recommend running this on your local computer (or somewhere else). Just click on: `File>Download`. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5qTkbWrkECOJ" + }, + "source": [ + "In terms of hyperparameters optimization, my advice is to focus on these 3 hyperparameters:\n", + "- `learning_rate`\n", + "- `buffer_size (Experience Memory size)`\n", + "- `batch_size`\n", + "\n", + "As a good practice, you need to **check the documentation to understand what each hyperparameters does**: https://stable-baselines3.readthedocs.io/en/master/modules/dqn.html#parameters\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Hn8bRTHvERRL" + }, + "source": [ + "2. We run `train.py` and save the models on `logs` folder 📁" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Xr1TVW4xfbz3" + }, + "outputs": [], + "source": [ + "!python train.py --algo ________ --env SpaceInvadersNoFrameskip-v4 -f _________" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SeChoX-3SZfP" + }, + "source": [ + "#### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PuocgdokSab9" + }, + "outputs": [], + "source": [ + "!python train.py --algo dqn --env SpaceInvadersNoFrameskip-v4 -f logs/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_dLomIiMKQaf" + }, + "source": [ + "## Let's evaluate our agent 👀\n", + "- RL-Baselines3-Zoo provides `enjoy.py` to evaluate our agent.\n", + "- Let's evaluate it for 5000 timesteps 🔥" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "co5um_KeKbBJ" + }, + "outputs": [], + "source": [ + "!python enjoy.py --algo dqn --env SpaceInvadersNoFrameskip-v4 --no-render --n-timesteps _________ --folder logs/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Q24K1tyWSj7t" + }, + "source": [ + "#### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "P_uSmwGRSk0z" + }, + "outputs": [], + "source": [ + "!python enjoy.py --algo dqn --env SpaceInvadersNoFrameskip-v4 --no-render --n-timesteps 5000 --folder logs/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "liBeTltiHJtr" + }, + "source": [ + "## Publish our trained model on the Hub 🚀\n", + "Now that we saw we got good results after the training, we can publish our trained model on the hub 🤗 with one line of code.\n", + "\n", + "\"Space" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ezbHS1q3HYVV" + }, + "source": [ + "By using `rl_zoo3.push_to_hub.py` **you evaluate, record a replay, generate a model card of your agent and push it to the hub**.\n", + "\n", + "This way:\n", + "- You can **showcase our work** 🔥\n", + "- You can **visualize your agent playing** 👀\n", + "- You can **share with the community an agent that others can use** 💾\n", + "- You can **access a leaderboard 🏆 to see how well your agent is performing compared to your classmates** 👉 https://huggingface.co/spaces/chrisjay/Deep-Reinforcement-Learning-Leaderboard" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XMSeZRBiHk6X" + }, + "source": [ + "To be able to share your model with the community there are three more steps to follow:\n", + "\n", + "1️⃣ (If it's not already done) create an account to HF ➡ https://huggingface.co/join\n", + "\n", + "2️⃣ Sign in and then, you need to store your authentication token from the Hugging Face website.\n", + "- Create a new token (https://huggingface.co/settings/tokens) **with write role**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9ToyuaYwHmxG" + }, + "source": [ + "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAagAAAE5CAYAAADFiLQmAAAgAElEQVR4nOydeWBU1dn/P3dmkskeIEBYJcguIQGhEDdcC7K8bqDFFQT11brUV9TaWoWotS3V/mpBRapsKi6Au1VAK7uABGQREGQNayAJWWcmmZnz+2Myk1mTzJJkgOfTxofnLme7957vfe4594723vvvq1GjRmE0xtEQNEC5+xoo5W41lFJ+fF/rtWNNyn58l3VSn998+LQPvrWo0zqrH3ICdVhngn4zaIwMfQvg8Lz9MKoTLI1Z3QhQf/E0FMqP72tDr0AQFWqK9nTzw8kuhNqFQIQbxF8/GdA6XW/f5TpS9fabtH2CQ7NUVav6N2s+GtyhN8D6KIB3AvUKZBNc8JFun2BL28QdTuAaRaZAdXXgvta5l7cfwaPXzO3b+Nk3h2L5UbAw9cA7eX8devNf/aEQ5PHxaJDaAMO5vK4AxMc6U3EGKDXU1T4+AuUqgJffEOs8kpGPkKKHcC4/5w4Ri5DqTDASGQR/fBpdvwJl2JjVjSDBRECBIqKGR0hOgqhQ854+TX/+1EuEG8Srww8qxPHePMjdG6d9Gpeoj6C8Cfp0qeOA+tdLtw7fO4F6BTZSl1Top1AkLye/pWnmDqzhNfZfQGeH7+2HEmGFVNxQq9PEAhGJ7P1n15gVbEAJIqkvzsWB9aRBpYtu6jlejRxhBS1Qvv138GNO50KEFfLl5Na+kUnQTwbN2EFEjX5Fsnph4Fu8QBGWtx+JCKuZFSwIPYlEdg2oXQQIs8RBRlh1bl7/7lHfu0ZdBFXv4fURyMAHxLmBU0AbuEMdAtn8l0BjXLCNnkETKkpwEZJzqzN8zKlJi1MrmI1fQT8Vdvaw3goWhclHJ/Ucr3oUr+4Iybk4gE9t+2oNbCCtqqpaeRQ3iIio3gjJp8N3Et2H0J2wLz9n9d0SCE///CTYaB1C/YrT5HrWFB1+BE/PWsH09H07/EiMQUWgAk3cvtF3+BqzAbw7fOfiwH44EdGZIZh1E3URVLAEfTq59e8evj89rXMHtxyjeNZfo3cATdGhhVTjhhUouDGoho1JhUWUCXDjH85GFgTvEjh7dA8/dBuOYJyZAlLP8QowJhWSJQSB8imej7LLe1BhXW5+9C+yPUSgDBojQ98CODt0Tz9q9avJe5j6iyfvQYWaXQi1C4EIN0idIZSvQjofqfmNwJypBhDQpmmf4Ij6CKrBHXoDrI8CeCdQr0A2wQUf6fYJtrRN3OEErlFkCiTvQTV19s2hWH4ULEw98E4+nIgomjr8oI9PgIjI/xiUvAfV7IRz+Tl3iOwsvUAJRiKD4I9Po+tXoAwbs7oRRN6Dqrs4TX7+1EuEG6TOSQjOxYEVMZwxqcZpn8Yl6iMob4I+Xeo4oP710q3D906gXoGN1CUV+ikUycvJb2mauQNreI39F1Deg6q7wI1+/jRqBRtQgkjqi3NxYD1pUOmim3qOVyNHWPIeVIQJ+3Jya9/IJOgng2bsIKJGvyJZvTDwLZ68B+VPTyKRXQNqFwHCLHGQEVadm9e/e9T3rlEXQdV7eH0EMvABcW4g70EF0b82e48QXgHkPajGLo68B9WIh6cJqOd41aN48h5UlBH25eesvlsC4emfnwQbrUOoX3GaXM+aosOP4Okp70HVXbzoO3yN2QDeHb5zcWA/nIjozBDMuom6CCpYgj6d3Pp3D9+fnta5g1uOUTzrr9E7gKbo0EKqccMKJO9BNaw4jXc4G1kQvEvg7NE9/NBtOIJxZgpIPccrwJhUqO9B6UIpnoeveVstgO9rNW+rBfBdVvPx8evXYQngo9UU2tvHtdzHx913tI7m0Uq1fsOsMynNlbqmhWdxtzUrfHzNn+9r8edTV4a+BdD8+gEsdVv///Ne67nX5k15jBwxkldnzHCVJXSLhx+JP2ea3r53Xr6+r9W8LQH8gG1W/zHwOVZ1HFP8WgL4/s+xQOdiQ2xtcp5+OBZ3W/NfH7+BFn/Wt4Otwzr7Lm+/nj7Qo2/19QP1vX77aDx9CMMSgkB5h1vO54MHDhzkySefILPvBbROa8XYMWNZsXw5NputZjvlY5W3Vb4+Hlb5+tT4KKqrqykuLqKysrJmufKwrsL69d1q5+0HYZVXKymP5Q1IQdX6NdWs0xKMdbabt6/cMiScDOqxKEdLePselnr98vIyioqLsdltAVPx3ttpzWYzy5YtpaTktKsstZYAfkMOXAP/vLf1SsM7L9+mDFRWt7qqwG1CAL/uNq/Dqlrfz8kW3jnjfQ66klVe2akGZeeTnB+LZ/IuP9Ah97XuD3Q92zeYVFzWu4+q0zr7Om/fq+/09t37Xm+f2uX++m6Csc6aeQwq4dVenvgIlPsLVO5+IAuw5Ouvueaaq3nln/8ENAYOHMjq1asYM+YmFi1c6KOqPn5AVfZVeR/rdpewbds2+mdn8+knn3gsb1hEBD53LX7uarzvduq+K/K8i/K463LzQ7bOu0PcquO6a/T267d13r3Weddba+u8iw50143n3bu37+5VV1WRO3Uqd9x+O6eLT9cU0090UGPxtm74rsfT96peJP580vZXxgDWu07edfVpAz9tGGhNwGNT3zF1s3WfK3WcY2627nPUzzlOrd+A5Ou1uPvOs8S5vPasaZDFnx+or6mzj6q13n1a8BESPn6dllp/3rx5NUWrXY6XXb58ud/lHi3iagOPlvCLwXuBj7rVo4q7du3iT396GhR88umnDB9+LTqdjlMnT/LZ558zavRo111OTYrOhD19Hx31r6ua1xqnrwEmk4ljx4653dk5jmugQUbnjg0bc3IsUPjxg7Aod99ZGefyQH4d1tWezvbwvIOrndMWvHUm7OG7DoCX71m90KxblTx8N6w2KxXOCJnaO8LafZ0JevueZ07NfSWa0uq2RPY9KN/7ac/7bqWpmuJ7+TWWAH5gS63fgAI7d/P2Q7HOvDyz9zo+XidQsNeTz/Xl4fupsNf5Wr/1bEdNqznnaiqk1ZyDmtbA60p5XU8+kRAB/ACbB7e7R4s0DEfFly9fzt13382BAweYMmWKe4PgHHOaO3cOEydOZN++fWR07QohjDlp4PIhlDEot+Nss9n48IMP2Lp1K7979Hdce+0I9Ho9AG3atmXixIkkJSUBsHnzZkaPGsmGDRv47LNPGXjhhQwf9msKCgrQgK1bt3LbbbfSOq0V7dulM+XZZykuLnKp9+H8fP7yl7+QmZmJMTaGHj26M2PGdExmMxaLhalTp/J/j/4OgH/+v//HqFEjyZ06FbPZgqZpbNniSD+tlSP9Z595lqLiYtzvQtzvXvIP5fPiX/5CZt++xMbG0L17N6ZPn47JZPK9C0LDbDYzdcpUfv/kk+zfv59nn3mGdunptEtvyz//+U9sVivOuymlYPl333Ht8GHExhjo3r07M6b/C7PJhKbBG2+8waiRI1i2dKnrbm7ZsqWMGjmC116d4brbO7B/H7ffdit/++tfsFqrfe4ei4oKee21V7n0kouJiTHQLr0tzzz7DMXFRW43ZRqVlRVMnz6dzMy+xMQYuPDCAXzw4YdYbVbQNA4dPMADD9xPenpbYgwGbr55LFu2bsGZ4ZatW7h13DhatWpJeltHHkVFxa67vuMnjvPggw+69r/hhutZsXwFduXo6H/++WfH/i1b0qplSyZOvJttW7fW3CfU3BGisXnTJq77n+tYvGgRGzduZNxvxjFyxAg2b9qEhobZZGbWG29w4YABxBgMXHLxJXz44QfYrDZXKu6XnTMaWbN6Dddd9z888vDDnDx1Eg2NouIipjz7LN26nU+MwcDYsWPYuuXHmvbV2Ld/H7feOo53F7zLj5s3MXbsGAwGPQMG9Gf1mtXODOr9847OAkdY3r6vDT7C8ra1rRSJCAu/Pp4V9z5pvXzNfXm9EVbdEVfjRFiefaL7WebpB46wPGyQEVag8fPQIyxvHzRN48orr2TKlCnk5uaSm5vrE2HNmzeXiRMnMmfOHLp27epaTjDW1Z7Of/mJoOrDXZlLS0vZtHkT3bv34PLLr3CpoWM7T2symVi2bBkdO3Zi9erVtGuXzq8GDyYlJYU1a9cy/q67SElJ5qGHHqLSZGLWrDcwW8w8/9zzKGDGjOnMmzePMWPGcNOYm/ji88+Z/NhjtE5L44Ybb8L/PYFj2Zo1axg//i5SkpN56KGHMZkqmTXrDSwWM889/wLG2FjcQyqL2cyMGTOYN28uY8aMZcyYm/j88y9q8mvNrbfdWtOcbndsSnHy5EmWLF3Ct99+g06nIysri61bt/L8c8+RlZXNVVddhQIWfvghDzxwP9nZ2Uydmsuh/ENMmTIFBTz00MN069adZcuWccmll3HNr38NwA8/bGTZsmWkp6dTWlZGcnIyv+zdx8KFCxkxciQxhhiPGz7sinfffZepU6YwctQoRo4cxTffLOOvf/kLiYmJPPH4E+j1eioqynnqqaeYOfN1Lr30UsaMGcOqlSs5sH8fNquNX/bsYdKkSezcuZNRo0bRoWNHli5ZSlFREcqu+H7dWu66806SU1IcbWs2MeuNN7BYLDz//PMA/O2vf+O9BQuYcPfdtG3ThlWrVrF6zWpyLsqhpLKSP/3paTZv3sxvH3yQ+Ph4vvj8c3788Uf6ZmaiND3OO2LfI1wbjVSaTDz11O957dVXufTSS/nDH//IsqVLuf222zj44os89thk9Aa9z94njh1n2rS/cepUIX/72zTatG5DwcmT/PaB+1m5ciVjx46lY8eOfP75Fzz88CPMnz+fjIwMqquq2b17N/94+WUqKytJT2/HkCE5rF+/juefe565c+fSvn372tPEiedpUxvYuXzlsTyw7xV5ed0rBxr11PCM4Xzv9AngOwMKr/eg6otYg7VeDeMZGTkX15YgzOTxSp6a5D39oKxyT86n/eu1gZ40BQiR6t3cZ3dnf+XlO2tQExF5+2haTeQEubm5AEyZMgVN05gzxxE5zZ49hwkTJrhFRs7dQ38PiqqqamVx+6uqttZYb9/X7ti5S1144YXq6quvVkeOHlNVXuurqmtsVbVavmKlAtR5XbqoJUuXurYpPl2i7ho/XmVlZaut27a59p8+Y4bq3qOHytu0WVVVW9WRo8fUseMnatK1qjVrv1ft27dX99//gCotK1dV1VY1b958Bah58+a7tmto+t5/zvyqA+TnXO60paVl6t5771PJycnqjVmzlMlkVpaqajVjxgwFqBdeeEFVV1vVofx8dfXVV6uRI0eq/PzDqtpqVSaTWT3+xBPq8ssvVwcPHVJ79+5VF110kbrjjjtUUXGxOnWqUI0ZM0bdcsstKis7W/3000+q2mpVL730kmrfvr1av2GDqrbaVLXV6mFPFRaq/MNHXP6ePXvU4MFD1MiRI1XByVOq2mpVs2b9WwHq/gceUKdLSlS11abMFosyW6rU6ZISNX78eJWcnKzmv/2Oo75Wm6o0mVRVtVWdLilV48ePV1nZ2Wrbtu2OvKutasaMV1WPHj3Ups2b1YkTBWrYsOFqwoQJ6nRJqbJabcpktiiTyayqrTb10087VFZ2tnr66adVVVW1slptqtJkVmazRVmtNp+/EwWO9IYNG65OnChQVptj+dJly1RycrK68847VVFRsbLabOrw4SNq5MiRqkuXLiovL09ZrTa1cqXjPMzNzVUlJaXqgQceUF26dFH//e47R1o2m6tN5s2fr6qtVmW12dTGjRtVjx491Guvv66sNpv6accOlZ2drQYPGaI2bNigrDabKiwqUrfddptKTk5Wa9asUVabTdlsdle67r7Nx6/f2gL4tdYewA/izx7Aj4S1+/r2CFp7AD+4PxXAj5BV7lbV66u6rArgB7CRYsqUKQpQU6ZMUXPmzFGAmjNnToRzcWDweTbppcwqQESklMJms2G1WtHp9S6FxGs71x1djf8///M/XHTRxa5lx44dY/u2beTkDCE1NZVTp04BkNElg1/27OHAgf1kZmbSunVr7HY7R48e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vffdx7hbb0Nv0HM4P585c+Zw3fXXc/XVV9OqZStA8dJLL9GmTWuGDMmhQ4f2bNyYxzvvvI3ZbMZmt7N2zVpmzJjOhRcOJDk5mcJThSxevJhOnToxbNhwYgwxAKxatdL1zkjnzucFf0G5lN3Lj4R1UsctaySz959dY1awASUIM9nwI6y6I4boo/Z4OcVp9uzZTJhwN84GueLyy4Fakbr88stdDRXue1BYvGbx1ffnmt3nNuuvtKxcvf322yozM1PV1Ea1atVKvfDCn1VhUbGyuM3imzo1t3aWn3PWn6VKLVm6TA0aNMi1/3lduqi/v/SSKj5doipNJjV9xgzVqlUrBahBgwapjz76WE2cNEkNGzbMNbuvpLRMPfXUH1xpjBw5Up0oOKksVdV1pu89g6/SZG5Qfu5/JTWz+LKystX2n35yze5b4VZv56y/SpNZvf32O6pnz16u8mRm9lPz5s13zZCrrraq1157TQHqoosuUnv37lXV1VZVcPKkGjlypALU73//lDJbLKq62uqYqedmq6qr1cJFi1TPXo48evbqpea//bb6/VNPecwErLba1Pbt29UNN9zgcexeeullVVpWpixV1erDhQtVZr9+rvWDBg1SS5d945qluXTZMjVo0K9c67t06aJeeulldbqkVB09dlzlPvecqy0BddVVV6sffvhBVVtt6pdf9qrfPvigSk5Odq2/+eab1d69+1R1zcy9aq+ZfN+vW6eys7Nd2y9Y8J6yWm2qoOCkevLJJ11ptWrVSv3pT39SxcWnXfu6z+KzWh0z6U6ePKXGjh2runTpotauXausVpvaf+CAuvPOO115JCcnqwkTJqg9v/yirNbaWXz33XefKisvd83Sy83NVYBauXKlx+y9QH82Hz/QLL/6Z/3VP8uvPtuAWYDNNMsvErP+IjPLr5FnAargZv0pj+W1vl+rAvheM+f8zfrbv3+/grpn6zln93333XcBtwmWiH7N3G63U1JSgt1uJzk5mdjY2KD3Ly0pQeEY3zIYDB53HJUmExaLmaSkZGIMBmfA4xPqlpWVU1VlITkpmVij0TVpw26zU1JaimP2WAoGvd5zR2dONb7JVInZbCE5OQmDIcatJGHcorphtVopKysDIDU1FZ2u/vemg73/rK6qorSsjJTkZGJiY+u8gysvL8fibDfnsavZwa7slJwuAc0xW02n13lk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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9O6FI0F8HnzE" + }, + "source": [ + "- Copy the token \n", + "- Run the cell below and past the token" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Ppu9yePwHrZX" + }, + "outputs": [], + "source": [ + "from huggingface_hub import notebook_login # To log to our Hugging Face account to be able to upload models to the Hub.\n", + "notebook_login()\n", + "!git config --global credential.helper store" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2RVEdunPHs8B" + }, + "source": [ + "If you don't want to use a Google Colab or a Jupyter Notebook, you need to use this command instead: `huggingface-cli login`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dSLwdmvhHvjw" + }, + "source": [ + "3️⃣ We're now ready to push our trained agent to the 🤗 Hub 🔥" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PW436XnhHw1H" + }, + "source": [ + "Let's run push_to_hub.py file to upload our trained agent to the Hub.\n", + "\n", + "`--repo-name `: The name of the repo\n", + "\n", + "`-orga`: Your Hugging Face username\n", + "\n", + "\"Select" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Ygk2sEktTDEw" + }, + "outputs": [], + "source": [ + "!python -m rl_zoo3.push_to_hub --algo dqn --env SpaceInvadersNoFrameskip-v4 --repo-name _____________________ -orga _____________________ -f logs/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "otgpa0rhS9wR" + }, + "source": [ + "#### Solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_HQNlAXuEhci" + }, + "outputs": [], + "source": [ + "!python -m rl_zoo3.push_to_hub --algo dqn --env SpaceInvadersNoFrameskip-v4 --repo-name dqn-SpaceInvadersNoFrameskip-v4 -orga ThomasSimonini -f logs/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0D4F5zsTTJ-L" + }, + "source": [ + "###." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ff89kd2HL1_s" + }, + "source": [ + "Congrats 🥳 you've just trained and uploaded your first Deep Q-Learning agent using RL-Baselines-3 Zoo. The script above should have displayed a link to a model repository such as https://huggingface.co/ThomasSimonini/dqn-SpaceInvadersNoFrameskip-v4. When you go to this link, you can:\n", + "\n", + "- See a **video preview of your agent** at the right. \n", + "- Click \"Files and versions\" to see all the files in the repository.\n", + "- Click \"Use in stable-baselines3\" to get a code snippet that shows how to load the model.\n", + "- A model card (`README.md` file) which gives a description of the model and the hyperparameters you used.\n", + "\n", + "Under the hood, the Hub uses git-based repositories (don't worry if you don't know what git is), which means you can update the model with new versions as you experiment and improve your agent.\n", + "\n", + "**Compare the results of your agents with your classmates** using the [leaderboard](https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard) 🏆" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fyRKcCYY-dIo" + }, + "source": [ + "## Load a powerful trained model 🔥\n", + "- The Stable-Baselines3 team uploaded **more than 150 trained Deep Reinforcement Learning agents on the Hub**.\n", + "\n", + "You can find them here: 👉 https://huggingface.co/sb3\n", + "\n", + "Some examples:\n", + "- Asteroids: https://huggingface.co/sb3/dqn-AsteroidsNoFrameskip-v4\n", + "- Beam Rider: https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4\n", + "- Breakout: https://huggingface.co/sb3/dqn-BreakoutNoFrameskip-v4\n", + "- Road Runner: https://huggingface.co/sb3/dqn-RoadRunnerNoFrameskip-v4\n", + "\n", + "Let's load an agent playing Beam Rider: https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "B-9QVFIROI5Y" + }, + "outputs": [], + "source": [ + "%%html\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7ZQNY_r6NJtC" + }, + "source": [ + "1. We download the model using `rl_zoo3.load_from_hub`, and place it in a new folder that we can call `rl_trained`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "OdBNZHy0NGTR" + }, + "outputs": [], + "source": [ + "# Download model and save it into the logs/ folder\n", + "!python -m rl_zoo3.load_from_hub --algo dqn --env BeamRiderNoFrameskip-v4 -orga sb3 -f rl_trained/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LFt6hmWsNdBo" + }, + "source": [ + "2. Let's evaluate if for 5000 timesteps" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aOxs0rNuN0uS" + }, + "outputs": [], + "source": [ + "!python enjoy.py --algo dqn --env BeamRiderNoFrameskip-v4 -n 5000 -f rl_trained/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kxMDuDfPON57" + }, + "source": [ + "Why not trying to train your own **Deep Q-Learning Agent playing BeamRiderNoFrameskip-v4? 🏆.**\n", + "\n", + "If you want to try, check https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4#hyperparameters **in the model card, you have the hyperparameters of the trained agent.**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xL_ZtUgpOuY6" + }, + "source": [ + "But finding hyperparameters can be a daunting task. Fortunately, we'll see in the next Unit, how we can **use Optuna for optimizing the Hyperparameters 🔥.**\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-pqaco8W-huW" + }, + "source": [ + "## Some additional challenges 🏆\n", + "The best way to learn **is to try things by your own**!\n", + "\n", + "In the [Leaderboard](https://huggingface.co/spaces/chrisjay/Deep-Reinforcement-Learning-Leaderboard) you will find your agents. Can you get to the top?\n", + "\n", + "Here's a list of environments you can try to train your agent with:\n", + "- BeamRiderNoFrameskip-v4\n", + "- BreakoutNoFrameskip-v4 \n", + "- EnduroNoFrameskip-v4\n", + "- PongNoFrameskip-v4\n", + "\n", + "Also, **if you want to learn to implement Deep Q-Learning by yourself**, you definitely should look at CleanRL implementation: https://github.com/vwxyzjn/cleanrl/blob/master/cleanrl/dqn_atari.py\n", + "\n", + "\"Environments\"/" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "paS-XKo4-kmu" + }, + "source": [ + "________________________________________________________________________\n", + "Congrats on finishing this chapter!\n", + "\n", + "If you’re still feel confused with all these elements...it's totally normal! **This was the same for me and for all people who studied RL.**\n", + "\n", + "Take time to really **grasp the material before continuing and try the additional challenges**. It’s important to master these elements and having a solid foundations.\n", + "\n", + "In the next unit, **we’re going to learn about [Optuna](https://optuna.org/)**. One of the most critical task in Deep Reinforcement Learning is to find a good set of training hyperparameters. And Optuna is a library that helps you to automate the search.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5WRx7tO7-mvC" + }, + "source": [ + "\n", + "\n", + "### This is a course built with you 👷🏿‍♀️\n", + "\n", + "Finally, we want to improve and update the course iteratively with your feedback. If you have some, please fill this form 👉 https://forms.gle/3HgA7bEHwAmmLfwh9\n", + "\n", + "We're constantly trying to improve our tutorials, so **if you find some issues in this notebook**, please [open an issue on the Github Repo](https://github.com/huggingface/deep-rl-class/issues)." + ] + }, + { + "cell_type": "markdown", + "source": [ + "See you on [Bonus unit 2](https://github.com/huggingface/deep-rl-class/tree/main/unit2#unit-2-introduction-to-q-learning)! 🔥 TODO CHANGE LINK" + ], + "metadata": { + "id": "Kc3udPT-RcXc" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fS3Xerx0fIMV" + }, + "source": [ + "### Keep Learning, Stay Awesome 🤗" + ] + } + ], + "metadata": { + "colab": { + "private_outputs": true, + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + }, + "accelerator": "GPU", + "gpuClass": "standard" + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/units/en/_toctree.yml b/units/en/_toctree.yml new file mode 100644 index 0000000..45f4925 --- /dev/null +++ b/units/en/_toctree.yml @@ -0,0 +1,46 @@ +- title: Unit 0. Welcome to the course + sections: + - local: unit0/introduction + title: Welcome to the course 🤗 + - local: unit0/setup + title: Setup + - local: unit0/discord101 + title: Discord 101 +- title: Unit 1. Introduction to Deep Reinforcement Learning + sections: + - local: unit1/introduction + title: Introduction + - local: unit1/what-is-rl + title: What is Reinforcement Learning? + - local: unit1/rl-framework + title: The Reinforcement Learning Framework + - local: unit1/tasks + title: The type of tasks + - local: unit1/exp-exp-tradeoff + title: The Exploration/ Exploitation tradeoff + - local: unit1/two-methods + title: The two main approaches for solving RL problems + - local: unit1/deep-rl + title: The “Deep” in Deep Reinforcement Learning + - local: unit1/summary + title: Summary + - local: unit1/hands-on + title: Hands-on + - local: unit1/quiz + title: Quiz + - local: unit1/conclusion + title: Conclusion + - local: unit1/additional-readings + title: Additional Readings +- title: Bonus Unit 1. Introduction to Deep Reinforcement Learning with Huggy + sections: + - local: unitbonus1/introduction + title: Introduction + - local: unitbonus1/how-huggy-works + title: How Huggy works? + - local: unitbonus1/train + title: Train Huggy + - local: unitbonus1/play + title: Play with Huggy + - local: unitbonus1/conclusion + title: Conclusion diff --git a/units/en/unit0/discord101.mdx b/units/en/unit0/discord101.mdx new file mode 100644 index 0000000..f46667f --- /dev/null +++ b/units/en/unit0/discord101.mdx @@ -0,0 +1,33 @@ +# Discord 101 [[discord-101]] + +Hey there! My name is Huggy, the dog 🐕, and I'm looking forward to train with you during this RL Course! +Although I don't know much about bringing sticks (yet), I know one or two things about Discord. So I wrote this guide to help you learn about it! + +Huggy Logo + +Discord is a free chat platform. If you've used Slack, **it's quite similar**. There is a Hugging Face Community Discord server with 18000 members you can join with a single click here. So many humans to play with! + +Starting in Discord can be a bit intimidating, so let me take you through it. + +When you sign-up to our Discord server, you'll need to specify which topics you're interested in by **clicking #role-assignment at the left**. Here, you can pick different categories. Make sure to **click "Reinforcement Learning"**! :fire:. You'll then get to **introduce yourself in the `#introduction-yourself` channel**. + +## So which channels are interesting to me? [[channels]] + +They are in the reinforcement learning lounge. **Don't forget to sign up to these channels** by clicking on 🤖 Reinforcement Learning in `role-assigment`. +- `rl-announcements`: where we give the **lastest information about the course**. +- `rl-discussions`: where you can **exchange about RL and share information**. +- `rl-study-group`: where you can **create and join study groups**. + +The HF Community Server has a thriving community of human beings interested in many areas, so you can also learn from those. There are paper discussions, events, and many other things. + +Was this useful? There are a couple of tips I can share with you: + +- There are **voice channels** you can use as well, although most people prefer text chat. +- You can **use markdown style** for text chats. So if you're writing code, you can use that style. Sadly this does not work as well for links. +- You can open threads as well! It's a good idea when **it's a long conversation**. + +I hope this is useful! And if you have questions, just ask! + +See you later! + +Huggy 🐶 diff --git a/units/en/unit0/introduction.mdx b/units/en/unit0/introduction.mdx new file mode 100644 index 0000000..e48f0c4 --- /dev/null +++ b/units/en/unit0/introduction.mdx @@ -0,0 +1,126 @@ +# Welcome to the 🤗 Deep Reinforcement Learning Course [[introduction]] + +Deep RL Course thumbnail + +Welcome to the most fascinating topic in Artificial Intelligence: Deep Reinforcement Learning. + +This course will **teach you about Deep Reinforcement Learning from beginner to expert**. It’s completely free and open-source! + +In this introduction unit you’ll: + +- Learn more about the **course content**. +- **Define the path** you’re going to take (either self-audit or certification process) +- Learn more about the **AI vs. AI challenges** you're going to participate to. +- Learn more **about us**. +- **Create your Hugging Face account** (it’s free). +- **Sign-up our Discord server**, the place where you can exchange with your classmates and us (the Hugging Face team). + +Let’s get started! + +## What to expect? [[expect]] + +In this course, you will: + +- 📖 Study Deep Reinforcement Learning in **theory and practice.** +- 🧑‍💻 Learn to **use famous Deep RL libraries** such as [Stable Baselines3](https://stable-baselines3.readthedocs.io/en/master/), [RL Baselines3 Zoo](https://github.com/DLR-RM/rl-baselines3-zoo), [Sample Factory](https://samplefactory.dev/) and [CleanRL](https://github.com/vwxyzjn/cleanrl). +- 🤖 **Train agents in unique environments** such as [SnowballFight](https://huggingface.co/spaces/ThomasSimonini/SnowballFight), [Huggy the Doggo 🐶](https://huggingface.co/spaces/ThomasSimonini/Huggy), [MineRL (Minecraft ⛏️)](https://minerl.io/), [VizDoom (Doom)](https://vizdoom.cs.put.edu.pl/) and classical ones such as [Space Invaders](https://www.gymlibrary.dev/environments/atari/) and [PyBullet](https://pybullet.org/wordpress/). +- 💾 Share your **trained agents with one line of code to the Hub** and also download powerful agents from the community. +- 🏆 Participate in challenges where you will **evaluate your agents against other teams. You'll also get to play against the agents you'll train.** + +And more! + +At the end of this course, **you’ll get a solid foundation from the basics to the SOTA (state-of-the-art) methods**. + +You can find the syllabus on our website 👉 here + +Don’t forget to **sign up to the course** (we are collecting your email to be able to **send you the links when each Unit is published and give you information about the challenges and updates).** + +Sign up 👉 here + + +## What does the course look like? [[course-look-like]] +The course is composed of: + +- *A theory part*: where you learn a **concept in theory (article)**. +- *A hands-on*: where you’ll learn **to use famous Deep RL libraries** to train your agents in unique environments. These hands-on will be **Google Colab notebooks with companion tutorial videos** if you prefer learning with video format! +- *Challenges*: you'll get to put your agent to compete against other agents in different challenges. There will also be leaderboards for you to compare the agents' performance. + + +## Two paths: choose your own adventure [[two-paths]] + +Two paths + +You can choose to follow this course either: + +- *To get a certificate of completion*: you need to complete 80% of the assignments before the end of March 2023. +- *As a simple audit*: you can participate in all challenges and do assignments if you want, but you have no deadlines. + +Both paths **are completely free**. +Whatever path you choose, we advise you **to follow the recommended pace to enjoy the course and challenges with your fellow classmates.** +You don't need to tell us which path you choose. At the end of March, when we verify the assignments **if you get more than 80% of the assignments done, you'll get a certificate.** + + +## How to get most of the course? [[advice]] + +To get most of the course, we have some advice: + +1. Join or create study groups in Discord : studying in groups is always easier. To do that, you need to join our discord server. If you're new to Discord, no worries! We have some tools that will help you learn about it. +2. **Do the quizzes and assignments**: the best way to learn is to do and test yourself. +3. **Define a schedule to stay in sync**: you can use our recommended pace schedule below or create yours. + +Course advice + +## What tools do I need? [[tools]] + +You need only 3 things: + +- *A computer* with an internet connection. +- *Google Colab (free version)*: most of our hands-on will use Google Colab, the **free version is enough.** +- A *Hugging Face Account*: to push and load models. If you don’t have an account yet, you can create one **[here](https://hf.co/join)** (it’s free). + +Course tools needed + + +## What is the recommended pace? [[recommended-pace]] + +We defined a planning that you can follow to keep up the pace of the course. + +Course advice +Course advice + + +Each chapter in this course is designed **to be completed in 1 week, with approximately 3-4 hours of work per week**. However, you can take as much time as necessary to complete the course. If you want to dive into a topic more in-depth, we'll provide additional resources to help you achieve that. + + +## Who are we [[who-are-we]] +About the author: + +- Thomas Simonini is a Developer Advocate at Hugging Face 🤗 specializing in Deep Reinforcement Learning. He founded the Deep Reinforcement Learning Course in 2018, which became one of the most used courses in Deep RL. + +About the team: + +- Omar Sanseviero is a Machine Learning Engineer at Hugging Face where he works in the intersection of ML, Community and Open Source. Previously, Omar worked as a Software Engineer at Google in the teams of Assistant and TensorFlow Graphics. He is from Peru and likes llamas 🦙. +- Sayak Paul is a Developer Advocate Engineer at Hugging Face. He's interested in the area of representation learning (self-supervision, semi-supervision, model robustness). And he loves watching crime and action thrillers 🔪. + + +## When do the challenges start? [[challenges]] + +In this new version of the course, you have two types of challenges: +- A leaderboard to compare your agent's performance to other classmates'. +- AI vs. AI challenges where you can train your agent and compete against other classmates' agents. + +Challenges + +These AI vs.AI challenges will be announced **later in December**. + + +## I found a bug, or I want to improve the course [[contribute]] + +Contributions are welcomed 🤗 + +- If you *found a bug 🐛 in a notebook*, please open an issue and **describe the problem**. +- If you *want to improve the course*, you can open a Pull Request. + +## I still have questions [[questions]] + +In that case, check our FAQ. And if the question is not in it, ask your question in our discord server #rl-discussions. diff --git a/units/en/unit0/setup.mdx b/units/en/unit0/setup.mdx new file mode 100644 index 0000000..4fc55bb --- /dev/null +++ b/units/en/unit0/setup.mdx @@ -0,0 +1,30 @@ +# Setup [[setup]] + +After all this information, it's time to get started. We're going to do two things: + +1. **Create your Hugging Face account** if it's not already done +2. **Sign up to Discord and introduce yourself** (don't be shy 🤗) + +### Let's create my Hugging Face account + +(If it's not already done) create an account to HF here + +### Let's join our Discord server + +You can now sign up for our Discord Server. This is the place where you **can exchange with the community and with us, create and join study groups to grow each other and more** + +👉🏻 Join our discord server here. + +When you join, remember to introduce yourself in #introduce-yourself and sign-up for reinforcement channels in #role-assignments. + +We have multiple RL-related channels: +- `rl-announcements`: where we give the last information about the course. +- `rl-discussions`: where you can exchange about RL and share information. +- `rl-study-group`: where you can create and join study groups. + +If this is your first time using Discord, we wrote a Discord 101 to get the best practices. Check the next section. + +Congratulations! **You've just finished the on-boarding**. You're now ready to start to learn Deep Reinforcement Learning. Have fun! + + +### Keep Learning, stay awesome 🤗 diff --git a/units/en/unit1/additional-readings.mdx b/units/en/unit1/additional-readings.mdx new file mode 100644 index 0000000..b881244 --- /dev/null +++ b/units/en/unit1/additional-readings.mdx @@ -0,0 +1,13 @@ +# Additional Readings [[additional-readings]] + +These are **optional readings** if you want to go deeper. + +## Deep Reinforcement Learning [[deep-rl]] + +- [Reinforcement Learning: An Introduction, Richard Sutton and Andrew G. Barto Chapter 1, 2 and 3](http://incompleteideas.net/book/RLbook2020.pdf) +- [Foundations of Deep RL Series, L1 MDPs, Exact Solution Methods, Max-ent RL by Pieter Abbeel](https://youtu.be/2GwBez0D20A) +- [Spinning Up RL by OpenAI Part 1: Key concepts of RL](https://spinningup.openai.com/en/latest/spinningup/rl_intro.html) + +## Gym [[gym]] + +- [Getting Started With OpenAI Gym: The Basic Building Blocks](https://blog.paperspace.com/getting-started-with-openai-gym/) diff --git a/units/en/unit1/conclusion.mdx b/units/en/unit1/conclusion.mdx new file mode 100644 index 0000000..de31951 --- /dev/null +++ b/units/en/unit1/conclusion.mdx @@ -0,0 +1,16 @@ +# Conclusion [[conclusion]] + +Congrats on finishing this unit! **That was the biggest one**, and there was a lot of information. And congrats on finishing the tutorial. You’ve just trained your first Deep RL agents and shared it with the community! 🥳 + +It's **normal if you still feel confused with some of these elements**. This was the same for me and for all people who studied RL. + +**Take time to really grasp the material** before continuing. It’s important to master these elements and having a solid foundations before entering the fun part. + +Naturally, during the course, we’re going to use and explain these terms again, but it’s better to understand them before diving into the next units. + +In the next (bonus) unit, we’re going to reinforce what we just learned by **training Huggy the Dog to fetch the stick**. + +You will be able then to play with him 🤗. + + diff --git a/units/en/unit1/deep-rl.mdx b/units/en/unit1/deep-rl.mdx new file mode 100644 index 0000000..c0c2247 --- /dev/null +++ b/units/en/unit1/deep-rl.mdx @@ -0,0 +1,21 @@ +# The “Deep” in Reinforcement Learning [[deep-rl]] + + +What we've talked about so far is Reinforcement Learning. But where does the "Deep" come into play? + + +Deep Reinforcement Learning introduces **deep neural networks to solve Reinforcement Learning problems** — hence the name “deep”. + +For instance, in the next unit, we’ll learn about two value-based algorithms: Q-Learning (classic Reinforcement Learning) and then Deep Q-Learning. + +You’ll see the difference is that in the first approach, **we use a traditional algorithm** to create a Q table that helps us find what action to take for each state. + +In the second approach, **we will use a Neural Network** (to approximate the Q value). + +
+Value based RL +
Schema inspired by the Q learning notebook by Udacity +
+
+ +If you are not familiar with Deep Learning you definitely should watch [the FastAI Practical Deep Learning for Coders](https://course.fast.a) (Free). diff --git a/units/en/unit1/exp-exp-tradeoff.mdx b/units/en/unit1/exp-exp-tradeoff.mdx new file mode 100644 index 0000000..10798d8 --- /dev/null +++ b/units/en/unit1/exp-exp-tradeoff.mdx @@ -0,0 +1,37 @@ +# The Exploration/Exploitation trade-off [[exp-exp-tradeoff]] + +Finally, before looking at the different methods to solve Reinforcement Learning problems, we must cover one more very important topic: *the exploration/exploitation trade-off.* + +- *Exploration* is exploring the environment by trying random actions in order to **find more information about the environment.** +- *Exploitation* is **exploiting known information to maximize the reward.** + +Remember, the goal of our RL agent is to maximize the expected cumulative reward. However, **we can fall into a common trap**. + +Let’s take an example: + +Exploration + +In this game, our mouse can have an **infinite amount of small cheese** (+1 each). But at the top of the maze, there is a gigantic sum of cheese (+1000). + +However, if we only focus on exploitation, our agent will never reach the gigantic sum of cheese. Instead, it will only exploit **the nearest source of rewards,** even if this source is small (exploitation). + +But if our agent does a little bit of exploration, it can **discover the big reward** (the pile of big cheese). + +This is what we call the exploration/exploitation trade-off. We need to balance how much we **explore the environment** and how much we **exploit what we know about the environment.** + +Therefore, we must **define a rule that helps to handle this trade-off**. We’ll see the different ways to handle it in the future units. + +If it’s still confusing, **think of a real problem: the choice of picking a restaurant:** + + +
+Exploration +
Source: Berkley AI Course +
+
+ +- *Exploitation*: You go every day to the same one that you know is good and **take the risk to miss another better restaurant.** +- *Exploration*: Try restaurants you never went to before, with the risk of having a bad experience **but the probable opportunity of a fantastic experience.** + +To recap: +Exploration Exploitation Tradeoff diff --git a/units/en/unit1/hands-on.mdx b/units/en/unit1/hands-on.mdx new file mode 100644 index 0000000..dfe80c5 --- /dev/null +++ b/units/en/unit1/hands-on.mdx @@ -0,0 +1,669 @@ +# Hands on [[hands-on]] + + + + + +Now that you've studied the bases of Reinforcement Learning, you’re ready to train your first agent and share it with the community through the Hub 🔥: + + + + +A Lunar Lander agent that will learn to land correctly on the Moon 🌕 + +LunarLander + +And finally, you'll **upload this trained agent to the Hugging Face Hub 🤗, a free, open platform where people can share ML models, datasets, and demos.** + +Thanks to our leaderboard, you'll be able to compare your results with other classmates and exchange the best practices to improve your agent's scores. Who will win the challenge for Unit 1 🏆? + +So let's get started! 🚀 + +**To start the hands-on click on Open In Colab button** 👇 : + +[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/huggingface/deep-rl-class/blob/master/notebooks/unit1/unit1.ipynb) + + +# Unit 1: Train your first Deep Reinforcement Learning Agent 🤖 +![Cover](https://github.com/huggingface/deep-rl-class/blob/main/unit1/assets/img/thumbnail.png?raw=true) + +In this notebook, you'll train your **first Deep Reinforcement Learning agent** a Lunar Lander agent that will learn to **land correctly on the Moon 🌕**. Using [Stable-Baselines3](https://stable-baselines3.readthedocs.io/en/master/) a Deep Reinforcement Learning library, share them with the community, and experiment with different configurations + +⬇️ Here is an example of what **you will achieve in just a couple of minutes.** ⬇️ + + + + +```python +%%html + +``` + +### The environment 🎮 + +- [LunarLander-v2](https://www.gymlibrary.dev/environments/box2d/lunar_lander/) + +### The library used 📚 + +- [Stable-Baselines3](https://stable-baselines3.readthedocs.io/en/master/) + +We're constantly trying to improve our tutorials, so **if you find some issues in this notebook**, please [open an issue on the Github Repo](https://github.com/huggingface/deep-rl-class/issues). + +## Objectives of this notebook 🏆 + +At the end of the notebook, you will: + +- Be able to use **Gym**, the environment library. +- Be able to use **Stable-Baselines3**, the deep reinforcement learning library. +- Be able to **push your trained agent to the Hub** with a nice video replay and an evaluation score 🔥. + + + + +## This notebook is from Deep Reinforcement Learning Course +Deep RL Course illustration + +In this free course, you will: + +- 📖 Study Deep Reinforcement Learning in **theory and practice**. +- 🧑‍💻 Learn to **use famous Deep RL libraries** such as Stable Baselines3, RL Baselines3 Zoo, CleanRL and Sample Factory 2.0. +- 🤖 Train **agents in unique environments** + +And more check 📚 the syllabus 👉 https://simoninithomas.github.io/deep-rl-course + +Don’t forget to **sign up to the course** (we are collecting your email to be able to **send you the links when each Unit is published and give you information about the challenges and updates).** + + +The best way to keep in touch and ask questions is to join our discord server to exchange with the community and with us 👉🏻 https://discord.gg/ydHrjt3WP5 + +## Prerequisites 🏗️ +Before diving into the notebook, you need to: + +🔲 📝 **Done Unit 0** that gives you all the **information about the course and help you to onboard** 🤗 + +🔲 📚 **Develop an understanding of the foundations of Reinforcement learning** (MC, TD, Rewards hypothesis...) by doing Unit 1 + +## A small recap of what is Deep Reinforcement Learning 📚 +The RL process + +Let's do a small recap on what we learned in the first Unit: +- Reinforcement Learning is a **computational approach to learning from action**. We build an agent that learns from the environment by **interacting with it through trial and error** and receiving rewards (negative or positive) as feedback. + +- The goal of any RL agent is to **maximize its expected cumulative reward** (also called expected return) because RL is based on the _reward hypothesis_, which is that all goals can be described as the maximization of the expected cumulative reward. + +- The RL process is a **loop that outputs a sequence of state, action, reward, and next state**. + +- To calculate the expected cumulative reward (expected return), **we discount the rewards**: the rewards that come sooner (at the beginning of the game) are more probable to happen since they are more predictable than the long-term future reward. + +- To solve an RL problem, you want to **find an optimal policy**; the policy is the "brain" of your AI that will tell us what action to take given a state. The optimal one is the one that gives you the actions that max the expected return. + + +There are **two** ways to find your optimal policy: +- By **training your policy directly**: policy-based methods. +- By **training a value function** that tells us the expected return the agent will get at each state and use this function to define our policy: value-based methods. + +- Finally, we spoke about Deep RL because **we introduce deep neural networks to estimate the action to take (policy-based) or to estimate the value of a state (value-based) hence the name "deep."** + +# Let's train our first Deep Reinforcement Learning agent and upload it to the Hub 🚀 + + +## Set the GPU 💪 +- To **accelerate the agent's training, we'll use a GPU**. To do that, go to `Runtime > Change Runtime type` + +GPU Step 1 + +- `Hardware Accelerator > GPU` + +GPU Step 2 + +## Install dependencies and create a virtual screen 🔽 +The first step is to install the dependencies, we’ll install multiple ones. + +- `gym[box2D]`: Contains the LunarLander-v2 environment 🌛 (we use `gym==0.21`) +- `stable-baselines3[extra]`: The deep reinforcement learning library. +- `huggingface_sb3`: Additional code for Stable-baselines3 to load and upload models from the Hugging Face 🤗 Hub. + +To make things easier, we created a script to install all these dependencies. + +```python +!apt install swig cmake +``` + +TODO CHANGE LINK OF THE REQUIREMENTS + +```python +!pip install -r https://huggingface.co/spaces/ThomasSimonini/temp-space-requirements/raw/main/requirements/requirements-unit1.txt +``` + +During the notebook, we'll need to generate a replay video. To do so, with colab, **we need to have a virtual screen to be able to render the environment** (and thus record the frames). + +Hence the following cell will install virtual screen libraries and create and run a virtual screen 🖥 + +```python +!sudo apt-get update +!apt install python-opengl +!apt install ffmpeg +!apt install xvfb +!pip3 install pyvirtualdisplay +``` + +To make sure the new installed libraries are used, **sometimes it's required to restart the notebook runtime**. The next cell will force the **runtime to crash, so you'll need to connect again and run the code starting from here**. Thanks for this trick, **we will be able to run our virtual screen.** + + +```python +import os +os.kill(os.getpid(), 9) +``` + + +```python +# Virtual display +from pyvirtualdisplay import Display + +virtual_display = Display(visible=0, size=(1400, 900)) +virtual_display.start() +``` + +## Import the packages 📦 + +One additional library we import is huggingface_hub **to be able to upload and download trained models from the hub**. + + +The Hugging Face Hub 🤗 works as a central place where anyone can share and explore models and datasets. It has versioning, metrics, visualizations and other features that will allow you to easily collaborate with others. + +You can see here all the Deep reinforcement Learning models available 👉 https://huggingface.co/models?pipeline_tag=reinforcement-learning&sort=downloads + + + +```python +import gym + +from huggingface_sb3 import load_from_hub, package_to_hub, push_to_hub +from huggingface_hub import ( + notebook_login, +) # To log to our Hugging Face account to be able to upload models to the Hub. + +from stable_baselines3 import PPO +from stable_baselines3.common.evaluation import evaluate_policy +from stable_baselines3.common.env_util import make_vec_env +``` + +## Understand what is Gym and how it works 🤖 + +🏋 The library containing our environment is called Gym. +**You'll use Gym a lot in Deep Reinforcement Learning.** + +The Gym library provides two things: +- An interface that allows you to **create RL environments**. +- A **collection of environments** (gym-control, atari, box2D...). + +Let's look at an example, but first let's remember what's the RL Loop. + +The RL process + +At each step: +- Our Agent receives **state S0** from the **Environment** — we receive the first frame of our game (Environment). +- Based on that **state S0,** the Agent takes **action A0** — our Agent will move to the right. +- Environment to a **new** **state S1** — new frame. +- The environment gives some **reward R1** to the Agent — we’re not dead *(Positive Reward +1)*. + + +With Gym: + +1️⃣ We create our environment using `gym.make()` + +2️⃣ We reset the environment to its initial state with `observation = env.reset()` + +At each step: + +3️⃣ Get an action using our model (in our example we take a random action) + +4️⃣ Using `env.step(action)`, we perform this action in the environment and get +- `observation`: The new state (st+1) +- `reward`: The reward we get after executing the action +- `done`: Indicates if the episode terminated +- `info`: A dictionary that provides additional information (depends on the environment). + +If the episode is done: +- We reset the environment to its initial state with `observation = env.reset()` + +**Let's look at an example!** Make sure to read the code + + +```python +import gym + +# First, we create our environment called LunarLander-v2 +env = gym.make("LunarLander-v2") + +# Then we reset this environment +observation = env.reset() + +for _ in range(20): + # Take a random action + action = env.action_space.sample() + print("Action taken:", action) + + # Do this action in the environment and get + # next_state, reward, done and info + observation, reward, done, info = env.step(action) + + # If the game is done (in our case we land, crashed or timeout) + if done: + # Reset the environment + print("Environment is reset") + observation = env.reset() +``` + +## Create the LunarLander environment 🌛 and understand how it works + +### The environment 🎮 + +In this first tutorial, we’re going to train our agent, a [Lunar Lander](https://www.gymlibrary.dev/environments/box2d/lunar_lander/), **to land correctly on the moon**. To do that, the agent needs to learn **to adapt its speed and position(horizontal, vertical, and angular) to land correctly.** + + +--- + + +💡 A good habit when you start to use an environment is to check its documentation + +👉 https://www.gymlibrary.dev/environments/box2d/lunar_lander/ + +--- + + +Let's see what the Environment looks like: + + +```python +# We create our environment with gym.make("") +env = gym.make("LunarLander-v2") +env.reset() +print("_____OBSERVATION SPACE_____ \n") +print("Observation Space Shape", env.observation_space.shape) +print("Sample observation", env.observation_space.sample()) # Get a random observation +``` + +We see with `Observation Space Shape (8,)` that the observation is a vector of size 8, where each value contains different information about the lander: +- Horizontal pad coordinate (x) +- Vertical pad coordinate (y) +- Horizontal speed (x) +- Vertical speed (y) +- Angle +- Angular speed +- If the left leg has contact point touched the land +- If the right leg has contact point touched the land + + +```python +print("\n _____ACTION SPACE_____ \n") +print("Action Space Shape", env.action_space.n) +print("Action Space Sample", env.action_space.sample()) # Take a random action +``` + +The action space (the set of possible actions the agent can take) is discrete with 4 actions available 🎮: + +- Do nothing, +- Fire left orientation engine, +- Fire the main engine, +- Fire right orientation engine. + +Reward function (the function that will gives a reward at each timestep) 💰: + +- Moving from the top of the screen to the landing pad and zero speed is about 100~140 points. +- Firing main engine is -0.3 each frame +- Each leg ground contact is +10 points +- Episode finishes if the lander crashes (additional - 100 points) or come to rest (+100 points) + +#### Vectorized Environment + +- We create a vectorized environment (method for stacking multiple independent environments into a single environment) of 16 environments, this way, **we'll have more diverse experiences during the training.** + +```python +# Create the environment +env = make_vec_env("LunarLander-v2", n_envs=16) +``` + +## Create the Model 🤖 + +- Now that we studied our environment and we understood the problem: **being able to land correctly the Lunar Lander to the Landing Pad by controlling left, right and main orientation engine**. Let's build the algorithm we're going to use to solve this Problem 🚀. + +- To do so, we're going to use our first Deep RL library, [Stable Baselines3 (SB3)](https://stable-baselines3.readthedocs.io/en/master/). + +- SB3 is a set of **reliable implementations of reinforcement learning algorithms in PyTorch**. + +--- + +💡 A good habit when using a new library is to dive first on the documentation: https://stable-baselines3.readthedocs.io/en/master/ and then try some tutorials. + +---- + +![image.png](data:image/png;base64,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) + +To solve this problem, we're going to use SB3 **PPO**. [PPO (aka Proximal Policy Optimization) is one of the of the SOTA (state of the art) Deep Reinforcement Learning algorithms that you'll study during this course](https://stable-baselines3.readthedocs.io/en/master/modules/ppo.html#example%5D). + +PPO is a combination of: + +- *Value-based reinforcement learning method*: learning an action-value function that will tell us what's the **most valuable action to take given a state and action**. +- *Policy-based reinforcement learning method*: learning a policy that will **gives us a probability distribution over actions**. + + +Stable-Baselines3 is easy to set up: + +1️⃣ You **create your environment** (in our case it was done above) + +2️⃣ You define the **model you want to use and instantiate this model** `model = PPO("MlpPolicy")` + +3️⃣ You **train the agent** with `model.learn` and define the number of training timesteps + +``` +# Create environment + +env = gym.make('LunarLander-v2') + +# Instantiate the agent +model = PPO('MlpPolicy', env, verbose=1) + +# Train the agent +model.learn(total_timesteps=int(2e5)) +``` + + + +```python +# TODO: Define a PPO MlpPolicy architecture +# We use MultiLayerPerceptron (MLPPolicy) because the input is a vector, +# if we had frames as input we would use CnnPolicy +model = +``` + +#### Solution + +```python +# SOLUTION +# We added some parameters to accelerate the training +model = PPO( + policy="MlpPolicy", + env=env, + n_steps=1024, + batch_size=64, + n_epochs=4, + gamma=0.999, + gae_lambda=0.98, + ent_coef=0.01, + verbose=1, +) +``` + +## Train the PPO agent 🏃 + +- Let's train our agent for 1,000,000 timesteps, don't forget to use GPU on Colab. It will take approximately ~20min, but you can use less timesteps if you just want to try it out. +- During the training, take a ☕ break you deserved it 🤗 + +```python +# TODO: Train it for 1,000,000 timesteps + +# TODO: Specify file name for model and save the model to file +model_name = "" +``` + +#### Solution + +```python +# SOLUTION +# Train it for 1,000,000 timesteps +model.learn(total_timesteps=1000000) +# Save the model +model_name = "ppo-LunarLander-v2" +model.save(model_name) +``` + +## Evaluate the agent 📈 + +- Now that our Lunar Lander agent is trained 🚀, we need to **check its performance**. +- Stable-Baselines3 provides a method to do that: `evaluate_policy`. +- To fill that part you need to [check the documentation](https://stable-baselines3.readthedocs.io/en/master/guide/examples.html#basic-usage-training-saving-loading) +- In the next step, we'll see **how to automatically evaluate and share your agent to compete in a leaderboard, but for now let's do it ourselves** + + +💡 When you evaluate your agent, you should not use your training environment but create an evaluation environment. + +```python +# TODO: Evaluate the agent +# Create a new environment for evaluation +eval_env = + +# Evaluate the model with 10 evaluation episodes and deterministic=True +mean_reward, std_reward = + +# Print the results +``` + +#### Solution + +```python +# @title +eval_env = gym.make("LunarLander-v2") +mean_reward, std_reward = evaluate_policy(model, eval_env, n_eval_episodes=10, deterministic=True) +print(f"mean_reward={mean_reward:.2f} +/- {std_reward}") +``` + +- In my case, I got a mean reward is `200.20 +/- 20.80` after training for 1 million steps, which means that our lunar lander agent is ready to land on the moon 🌛🥳. + +## Publish our trained model on the Hub 🔥 +Now that we saw we got good results after the training, we can publish our trained model on the Hub 🤗 with one line of code. + +📚 The libraries documentation 👉 https://github.com/huggingface/huggingface_sb3/tree/main#hugging-face--x-stable-baselines3-v20 + +Here's an example of a Model Card (with Space Invaders): + +By using `package_to_hub` **you evaluate, record a replay, generate a model card of your agent and push it to the hub**. + +This way: +- You can **showcase our work** 🔥 +- You can **visualize your agent playing** 👀 +- You can **share with the community an agent that others can use** 💾 +- You can **access a leaderboard 🏆 to see how well your agent is performing compared to your classmates** 👉 https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard + + +To be able to share your model with the community there are three more steps to follow: + +1️⃣ (If it's not already done) create an account to HF ➡ https://huggingface.co/join + +2️⃣ Sign in and then, you need to store your authentication token from the Hugging Face website. +- Create a new token (https://huggingface.co/settings/tokens) **with write role** + +Create HF Token + +- Copy the token +- Run the cell below and paste the token + +```python +notebook_login() +!git config --global credential.helper store +``` + +If you don't want to use a Google Colab or a Jupyter Notebook, you need to use this command instead: `huggingface-cli login` + +3️⃣ We're now ready to push our trained agent to the 🤗 Hub 🔥 using `package_to_hub()` function + +Let's fill the `package_to_hub` function: +- `model`: our trained model. +- `model_name`: the name of the trained model that we defined in `model_save` +- `model_architecture`: the model architecture we used: in our case PPO +- `env_id`: the name of the environment, in our case `LunarLander-v2` +- `eval_env`: the evaluation environment defined in eval_env +- `repo_id`: the name of the Hugging Face Hub Repository that will be created/updated `(repo_id = {username}/{repo_name})` + +💡 **A good name is `{username}/{model_architecture}-{env_id}` ** + +- `commit_message`: message of the commit + +```python +import gym +from stable_baselines3.common.vec_env import DummyVecEnv +from stable_baselines3.common.env_util import make_vec_env + +from huggingface_sb3 import package_to_hub + +## TODO: Define a repo_id +## repo_id is the id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2 +repo_id = + +# TODO: Define the name of the environment +env_id = + +# Create the evaluation env +eval_env = DummyVecEnv([lambda: gym.make(env_id)]) + + +# TODO: Define the model architecture we used +model_architecture = "" + +## TODO: Define the commit message +commit_message = "" + +# method save, evaluate, generate a model card and record a replay video of your agent before pushing the repo to the hub +package_to_hub(model=model, # Our trained model + model_name=model_name, # The name of our trained model + model_architecture=model_architecture, # The model architecture we used: in our case PPO + env_id=env_id, # Name of the environment + eval_env=eval_env, # Evaluation Environment + repo_id=repo_id, # id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2 + commit_message=commit_message) + +# Note: if after running the package_to_hub function and it gives an issue of rebasing, please run the following code +# cd && git add . && git commit -m "Add message" && git pull +# And don't forget to do a "git push" at the end to push the change to the hub. +``` + +#### Solution + + +```python +import gym + +from stable_baselines3 import PPO +from stable_baselines3.common.vec_env import DummyVecEnv +from stable_baselines3.common.env_util import make_vec_env + +from huggingface_sb3 import package_to_hub + +# PLACE the variables you've just defined two cells above +# Define the name of the environment +env_id = "LunarLander-v2" + +# TODO: Define the model architecture we used +model_architecture = "PPO" + +## Define a repo_id +## repo_id is the id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2 +## CHANGE WITH YOUR REPO ID +repo_id = "ThomasSimonini/ppo-LunarLander-v2" # Change with your repo id, you can't push with mine 😄 + +## Define the commit message +commit_message = "Upload PPO LunarLander-v2 trained agent" + +# Create the evaluation env +eval_env = DummyVecEnv([lambda: gym.make(env_id)]) + +# PLACE the package_to_hub function you've just filled here +package_to_hub( + model=model, # Our trained model + model_name=model_name, # The name of our trained model + model_architecture=model_architecture, # The model architecture we used: in our case PPO + env_id=env_id, # Name of the environment + eval_env=eval_env, # Evaluation Environment + repo_id=repo_id, # id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2 + commit_message=commit_message, +) +``` + +Congrats 🥳 you've just trained and uploaded your first Deep Reinforcement Learning agent. The script above should have displayed a link to a model repository such as https://huggingface.co/osanseviero/test_sb3. When you go to this link, you can: +* see a video preview of your agent at the right. +* click "Files and versions" to see all the files in the repository. +* click "Use in stable-baselines3" to get a code snippet that shows how to load the model. +* a model card (`README.md` file) which gives a description of the model + +Under the hood, the Hub uses git-based repositories (don't worry if you don't know what git is), which means you can update the model with new versions as you experiment and improve your agent. + +Compare the results of your LunarLander-v2 with your classmates using the leaderboard 🏆 👉 https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard + +## Load a saved LunarLander model from the Hub 🤗 +Thanks to [ironbar](https://github.com/ironbar) for the contribution. + +Loading a saved model from the Hub is really easy. + +You go https://huggingface.co/models?library=stable-baselines3 to see the list of all the Stable-baselines3 saved models. +1. You select one and copy its repo_id + +Copy-id + +2. Then we just need to use load_from_hub with: +- The repo_id +- The filename: the saved model inside the repo and its extension (*.zip) + +```python +from huggingface_sb3 import load_from_hub + +repo_id = "Classroom-workshop/assignment2-omar" # The repo_id +filename = "ppo-LunarLander-v2.zip" # The model filename.zip + +# When the model was trained on Python 3.8 the pickle protocol is 5 +# But Python 3.6, 3.7 use protocol 4 +# In order to get compatibility we need to: +# 1. Install pickle5 (we done it at the beginning of the colab) +# 2. Create a custom empty object we pass as parameter to PPO.load() +custom_objects = { + "learning_rate": 0.0, + "lr_schedule": lambda _: 0.0, + "clip_range": lambda _: 0.0, +} + +checkpoint = load_from_hub(repo_id, filename) +model = PPO.load(checkpoint, custom_objects=custom_objects, print_system_info=True) +``` + +Let's evaluate this agent: + +```python +# @title +eval_env = gym.make("LunarLander-v2") +mean_reward, std_reward = evaluate_policy(model, eval_env, n_eval_episodes=10, deterministic=True) +print(f"mean_reward={mean_reward:.2f} +/- {std_reward}") +``` + +## Some additional challenges 🏆 +The best way to learn **is to try things by your own**! As you saw, the current agent is not doing great. As a first suggestion, you can train for more steps. With 1,000,000 steps, we saw some great results! + +In the [Leaderboard](https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard) you will find your agents. Can you get to the top? + +Here are some ideas to achieve so: +* Train more steps +* Try different hyperparameters of `PPO`. You can see them at https://stable-baselines3.readthedocs.io/en/master/modules/ppo.html#parameters. +* Check the [Stable-Baselines3 documentation](https://stable-baselines3.readthedocs.io/en/master/modules/dqn.html) and try another models such as DQN. +* **Push your new trained model** on the Hub 🔥 + +**Compare the results of your LunarLander-v2 with your classmates** using the [leaderboard](https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard) 🏆 + +Is moon landing too boring to you? Try to **change the environment**, why not using MountainCar-v0, CartPole-v1 or CarRacing-v0? Check how they works [using the gym documentation](https://www.gymlibrary.dev/) and have fun 🎉. + +________________________________________________________________________ +Congrats on finishing this chapter! That was the biggest one, **and there was a lot of information.** + +If you’re still feel confused with all these elements...it's totally normal! **This was the same for me and for all people who studied RL.** + +Take time to really **grasp the material before continuing and try the additional challenges**. It’s important to master these elements and having a solid foundations. + +Naturally, during the course, we’re going to use and deeper explain again these terms but **it’s better to have a good understanding of them now before diving into the next chapters.** + + +Next time, in the bonus unit 1, you'll train Huggy the Dog to fetch the stick. + +Huggy + +## Keep learning, stay awesome 🤗 diff --git a/units/en/unit1/introduction.mdx b/units/en/unit1/introduction.mdx new file mode 100644 index 0000000..660ec20 --- /dev/null +++ b/units/en/unit1/introduction.mdx @@ -0,0 +1,28 @@ +# Introduction to Deep Reinforcement Learning [[introduction-to-deep-reinforcement-learning]] + +Unit 1 thumbnail + + +Welcome to the most fascinating topic in Artificial Intelligence: **Deep Reinforcement Learning.** + +Deep RL is a type of Machine Learning where an agent learns **how to behave** in an environment **by performing actions** and **seeing the results.** + +In this first unit, **you'll learn the foundations of Deep Reinforcement Learning.** + + +Then, you'll **train your Deep Reinforcement Learning agent, a lunar lander to land correctly on the Moon** using Stable-Baselines3 , a Deep Reinforcement Learning library. + + +LunarLander + +And finally, you'll **upload this trained agent to the Hugging Face Hub 🤗, a free, open platform where people can share ML models, datasets, and demos.** + +It's essential **to master these elements** before diving into implementing Deep Reinforcement Learning agents. The goal of this chapter is to give you solid foundations. + + +After this unit, in a bonus unit, you'll be **able to train Huggy the Dog 🐶 to fetch the stick and play with him 🤗**. + + + +So let's get started! 🚀 diff --git a/units/en/unit1/quiz.mdx b/units/en/unit1/quiz.mdx new file mode 100644 index 0000000..5dece14 --- /dev/null +++ b/units/en/unit1/quiz.mdx @@ -0,0 +1,168 @@ +# Quiz [[quiz]] + +The best way to learn and [to avoid the illusion of competence](https://www.coursera.org/lecture/learning-how-to-learn/illusions-of-competence-BuFzf) **is to test yourself.** This will help you to find **where you need to reinforce your knowledge**. + +### Q1: What is Reinforcement Learning? + +
+Solution + +Reinforcement learning is a **framework for solving control tasks (also called decision problems)** by building agents that learn from the environment by interacting with it through trial and error and **receiving rewards (positive or negative) as unique feedback**. + +
+ + + +### Q2: Define the RL Loop + +Exercise RL Loop + +At every step: +- Our Agent receives ______ from the environment +- Based on that ______ the Agent takes an ______ +- Our Agent will move to the right +- The Environment goes to a ______ +- The Environment gives a ______ to the Agent + + + + +### Q3: What's the difference between a state and an observation? + +