From be1b10c98bf5c4401476da51d7ec34496f2ebb79 Mon Sep 17 00:00:00 2001
From: GuopingWin <731061720@qq.com>
Date: Sun, 12 Mar 2023 14:20:58 +0800
Subject: [PATCH 1/4] add homework
---
my_homework/.gitignore | 6 +
my_homework/README.md | 15 +
my_homework/ch2/homework2.ipynb | 307 ++++++++++++
my_homework/ch2/homework2_3.py | 56 +++
my_homework/ch3/homework3.ipynb | 459 ++++++++++++++++++
my_homework/ch3/homework3_2.py | 68 +++
my_homework/ch4/home_analyse.ipynb | 113 +++++
my_homework/ch4/homework4.py | 55 +++
my_homework/ch4/ppof_ch4_code_p1.py | 326 +++++++++++++
.../files/conda-environment.yaml | 0
.../files/config.yaml | 29 ++
.../files/output.log | 4 +
.../files/requirements.txt | 179 +++++++
.../files/wandb-metadata.json | 50 ++
.../files/wandb-summary.json | 1 +
.../logs/debug-internal.log | 341 +++++++++++++
.../logs/debug.log | 27 ++
17 files changed, 2036 insertions(+)
create mode 100644 my_homework/.gitignore
create mode 100644 my_homework/README.md
create mode 100644 my_homework/ch2/homework2.ipynb
create mode 100644 my_homework/ch2/homework2_3.py
create mode 100644 my_homework/ch3/homework3.ipynb
create mode 100644 my_homework/ch3/homework3_2.py
create mode 100644 my_homework/ch4/home_analyse.ipynb
create mode 100644 my_homework/ch4/homework4.py
create mode 100644 my_homework/ch4/ppof_ch4_code_p1.py
create mode 100644 my_homework/ch4/run-20230312_134251-g1s73ewz/files/conda-environment.yaml
create mode 100644 my_homework/ch4/run-20230312_134251-g1s73ewz/files/config.yaml
create mode 100644 my_homework/ch4/run-20230312_134251-g1s73ewz/files/output.log
create mode 100644 my_homework/ch4/run-20230312_134251-g1s73ewz/files/requirements.txt
create mode 100644 my_homework/ch4/run-20230312_134251-g1s73ewz/files/wandb-metadata.json
create mode 100644 my_homework/ch4/run-20230312_134251-g1s73ewz/files/wandb-summary.json
create mode 100644 my_homework/ch4/run-20230312_134251-g1s73ewz/logs/debug-internal.log
create mode 100644 my_homework/ch4/run-20230312_134251-g1s73ewz/logs/debug.log
diff --git a/my_homework/.gitignore b/my_homework/.gitignore
new file mode 100644
index 0000000..571a1f5
--- /dev/null
+++ b/my_homework/.gitignore
@@ -0,0 +1,6 @@
+.idea
+DI-engine
+ding_study
+wandb
+output
+.data
\ No newline at end of file
diff --git a/my_homework/README.md b/my_homework/README.md
new file mode 100644
index 0000000..1cd000f
--- /dev/null
+++ b/my_homework/README.md
@@ -0,0 +1,15 @@
+# PPOxFamily
+this repository is to learn family algorithms of PPO.
+
+more details in: [https://github.com/opendilab/PPOxFamily](https://github.com/opendilab/PPOxFamily)
+
+
+
+
+
+## TODO
+- [x] finish all the code in class one to four
+- [x] correct notes
+- [x] theorical inference processes
+- [ ] 🆕class five
+
diff --git a/my_homework/ch2/homework2.ipynb b/my_homework/ch2/homework2.ipynb
new file mode 100644
index 0000000..1ddb8ea
--- /dev/null
+++ b/my_homework/ch2/homework2.ipynb
@@ -0,0 +1,307 @@
+{
+ "cells": [
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 1. 重参数化技巧"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "一开始写错了,以为是对`eps`求导,变成了\n",
+ "\n",
+ "![](demo/reparam_gradient.png)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 117,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "naive grad variance: [5.74129343 1.00604956 0.17195452 0.08618732 0.01622461]\n",
+ "reparameterization grad variance: [0.39380306 0.03859908 0.00890374 0.00394094 0.00082136]\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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YmNjmz2zv+rfv7+ysrJ05swZvffee+revbskKTo6WsHBwQ6v4YkTJ3T+/HmH1zAzM1NXr161r7Np0ya1atVKQ4YMad4n4udc9Z6Lj4/Xjh07VF5ebl9n06ZNGjRokFq3bt08T8bHufs9Fx8f73Afteu44rPSp4pFp06dJEk5OTkOy3Nycuy3wXM05PXq1KmTw5tDkiorK3Xz5k1e02aSlpamZ599VtOnT9e3vvUt9e7dWzt37lTLli3VqVMnlZaW6vbt2w7bfPk1rO81rr0NzcdV7zleU/dqjvfc3dZp1aqVQkNDm5TflNlNAXiPjRs32n/OzMxUWlqazp8/r8TERBUXF5uYDPBN3v6e86k9FleuXJEkRUZGOiyPjIy03wbP0ZDX68qVK3WOdrZarWrbti2vqUlu376tkydPql+/frpy5YpCQkLUqlUrh3W+/BrW9xrX3obm46r3HK9p83LHe+5u69y+fVslJSVNyutTxeLs2bPKzs7WlClT7MtsNptiY2OVmppqYjLUpyGvV2pqqtq0aaNRo0bZ13nooYdksViUlpbW7JkhhYeHq2/fvsrOztaBAwdUVlbm8BoOGDBAPXv2dHgNhw0bpg4dOtjXmTp1qm7fvq2jR482e35/5qr3XGpqqiZOnKjAwC92ek+dOlXHjx9Xbm5u8zwZP+KO91xqaqrDfdSu46rPStOPgHVmhIeHG1FRUUZUVJRhGIbx4osvGlFRUUb37t0NqfpUqps3bxqzZs0yhg4daqxatYrTTb389Vq/fr1x4MABY/To0cbYsWONEydOcLppM47XX3/dmDhxotGzZ08jPj7e2Lx5s3H16lWjffv2hlR96tu5c+eMBx980Bg1apSxe/duY/fu3fbta09927hxozF8+HBj2rRpRk5ODqebumk0x3suIiLCyM7ONt555x1j8ODBRmJiolFQUMDppi4azfGeqz3d9De/+Y0xcOBA41vf+pb/nm46adIkoz5///vf7ev84he/MLKzs43i4mJjy5YtRv/+/U3P7a/DFa9XmzZtjKVLlxp5eXlGbm6u8X//939GeHi46c/NX8ayZcuMrKwso6SkxLh48aKxbNkyo0+fPvbbQ0JCjD/+8Y/GjRs3jIKCAuPDDz80IiMjHe6jR48exrp164zCwkLj6tWrxuuvv25YrVbTn5svjuZ6zw0bNszYsWOHUVxcbFy8eNH48Y9/bPpz95XRXO+5SZMmGQcPHjRKSkqM06dPG88884xL8jNtOgAAcBmfOsYCAACYi2IBAABchmIBAABchmIBAABchmIBAABchmIBAABchmIBAABchmIBAABchmIBAABchmIBAABchmIBAABchmIBAABc5v8Dy9hk/NClnCoAAAAASUVORK5CYII=",
+ "text/plain": [
+ "