From f91be9a9367ac490febf83b131bac29d54fd57c5 Mon Sep 17 00:00:00 2001 From: Trance-0 <60459821+Trance-0@users.noreply.github.com> Date: Tue, 30 Sep 2025 11:24:12 -0500 Subject: [PATCH] updates --- content/CSE510/CSE510_L11.md | 300 ++++++++++++++++++ .../CSE510/Partial_Observable_Gridworld.png | Bin 0 -> 25167 bytes 2 files changed, 300 insertions(+) create mode 100644 content/CSE510/CSE510_L11.md create mode 100644 public/CSE510/Partial_Observable_Gridworld.png diff --git a/content/CSE510/CSE510_L11.md b/content/CSE510/CSE510_L11.md new file mode 100644 index 0000000..dcf08ea --- /dev/null +++ b/content/CSE510/CSE510_L11.md @@ -0,0 +1,300 @@ +# CSE510 Deep Reinforcement Learning (Lecture 11) + +> Materials Used +> +> - Much of the material and slides for this lecture were taken from Chapter 13 of Barto & Sutton textbook. +> +> - Some slides are borrowed from Rich Sutton’s RL class and David Silver's Deep RL tutorial + +Problem: often the feature-based policies that work well (win games, +maximize utilities) aren't the ones that approximate V / Q best + +- Q-learning's priority: get Q-values close (modeling) +- Action selection priority: get ordering of Q-values right (prediction) + +Value functions can often be much more complex to represent than the +corresponding policy + +- Do we really care about knowing $Q(s, \text{left}) = 0.3554, Q(s, \text{right}) = 0.533$ Or just that "right is better than left in state $s$" + +Motivates searching directly in a parameterized policy space + +- Bypass learning value function and "directly" optimize the value of a policy + +
+Examples + +Rock-Paper-Scissors + +- Two-player game of rock-paper-scissors + - Scissors beats paper + - Rock beats scissors + - Paper beats rock +- Consider policies for iterated rock-paper-scissors + - A deterministic policy is easily exploited + - A uniform random policy is optimal (i.e., Nash equilibrium) + +--- + +Partial Observable GridWorld + +![Partial Observable Grid World](https://notenextra.trance-0.com/CSE510/Partial_Observable_GridWorld.png) + +The agent cannot differentiate the grey state + +Consider features of the following form (for all $N,E,S,W$ actions): + +$$ +\phi(s,a)=1(\text{wall to} N, a=\text{move} E) +$$ + +Compare value-based RL, suing an approximate value function + +$$ +Q_\theta(s,a) = f(\phi(s,a),\theta) +$$ + +To policy-based RL, using a parameterized policy + +$$ +\pi_\theta(s,a) = g(\phi(s,a),\theta) +$$ + +Under aliasing, an optimal deterministic policy will either + +- move $W$ in both grey states (shown by red arrows) +- move $E$ in both grey states + +Either way, it can get stuck and _never_ reach the money + +- Value-based RL learns a near-deterministic policy + - e.g. greedy or $\epsilon$-greedy + +So it will traverse the corridor for a long time + +An optimal **stochastic** policy will randomly move $E$ or $W$ in grey cells. + +$$ +\pi_\theta(\text{wall to }N\text{ and }S, \text{move }E) = 0.5\\ +\pi_\theta(\text{wall to }N\text{ and }S, \text{move }W) = 0.5 +$$ + +It will reach the goal state in a few steps with high probability + +Policy-based RL can learn the optimal stochastic policy + +
+ +## RL via Policy Gradient Ascent + +The policy gradient approach has the following schema: + +1. Select a space of parameterized policies (i.e., function class) +2. Compute the gradient of the value of current policy wrt parameters +3. Move parameters in the direction of the gradient +4. Repeat these steps until we reach a local maxima + +So we must answer the following questions: + +- How should we represent and evaluate parameterized policies? +- How can we compute the gradient? + +### Policy learning objective + +Goal: given policy $\pi_\theta(s,a)$ with parameter $\theta$, find best $\theta$ + +In episodic environments we can use the start value: + +$$ +J_1(\theta) = V^{\pi_\theta}(s_1)=\mathbb{E}_{\pi_\theta}[v_1] +$$ + +In continuing environments we can use the average value: + +$$ +J_{avV}(\theta) = \sum_{s\in S} d^{\pi_\theta}(s) V^{\pi_\theta}(s) +$$ + +Or the average reward per time-step + +$$ +J_{avR}(\theta) = \sum_{s\in S} d^{\pi_\theta}(s) \sum_{a\in A} \pi_\theta(s,a) \mathcal{R}(s,a) +$$ + +here $d^{\pi_\theta}(s)$ is the **stationary distribution** of Markov Chain for policy $\pi_\theta$. + +### Policy optimization + +Policy based reinforcement learning is an **optimization** problem + +Find $\theta$ that maximises $J(\theta)$ + +Some approaches do not use gradient + +- Hill climbing +- Simplex / amoeba / Nelder Mead +- Genetic algorithms + +Greater efficiency often possible using gradient + +- Gradient descent +- Conjugate gradient +- Quasi-newton + +We focus on gradient descent, many extensions possible + +And on methods that exploit sequential structure + +### Policy gradient + +Let $J(\theta)$ be any policy objective function + +Policy gradient algorithms search for a _local_ maxima in $J(\theta)$ by ascending the gradient of the policy with respect to $\theta$ + +$$ +\Delta \theta = \alpha \nabla_\theta J(\theta) +$$ + +Where $\nabla_\theta J(\theta)$ is the policy gradient. + +$$ +\nabla_\theta J(\theta) = \begin{pmatrix} +\frac{\partial J(\theta)}{\partial \theta_1} \\ +\frac{\partial J(\theta)}{\partial \theta_2} \\ +\vdots \\ +\frac{\partial J(\theta)}{\partial \theta_n} +\end{pmatrix} +$$ + +and $\alpha$ is the step-size parameter. + +### Policy gradient methods + +The main method we will introduce is Monte-Carlo policy gradient in Reinforcement Learning. + +#### Score Function + +Assume the policy $\pi_\theta$ is differentiable and non-zero and we know the gradient $\nabla_\theta \pi_\theta(s,a)$ for all $s\in S$ and $a\in A$. + +We can compute the policy gradient analytically + +We define the **Likelihood ratio** as: + +$$ +\begin{aligned} +\nabla_\theta \pi_\theta(s,a) = \pi_\theta(s,a) \frac{\nabla_\theta \pi_\theta(s,a)}{\pi_\theta(s,a)} \\ +&= \nabla_\theta \log \pi_\theta(s,a) +\end{aligned} +$$ + +The **Score Function** is: + +$$ +\nabla_\theta \log \pi_\theta(s,a) +$$ + +
+Example + +Take the softmax policy as example: + +Weight actions using the linear combination of features $\phi(s,a)^T\theta$: + +Probability of action is proportional to the exponentiated weights: + +$$ +\pi_\theta(s,a) \propto \exp(\phi(s,a)^T\theta) +$$ + +The score function is + +$$ +\begin{aligned} +\nabla_\theta \ln\left[\frac{\exp(\phi(s,a)^T\theta)}{\sum_{a'\in A}\exp(\phi(s,a')^T\theta)}\right] &= \nabla_\theta(\ln \exp(\phi(s,a)^T\theta) - (\ln \sum_{a'\in A}\exp(\phi(s,a')^T\theta))) \\ +&= \nabla_\theta\left(\phi(s,a)^T\theta -\frac{\phi(s,a)\sum_{a'\in A}\exp(\phi(s,a')^T\theta)}{\sum_{a'\in A}\exp(\phi(s,a')^T\theta)}\right) \\ +&=\phi(s,a) - \sum_{a'\in A} \prod_\theta(s,a') \phi(s,a') +&= \phi(s,a) - \mathbb{E}_{a'\sim \pi_\theta(s,a')}[\phi(s,a')] +\end{aligned} +$$ + +--- + +In continuous action spaces, a Gaussian policy is natural + +Mean is a linear combination of state features $\mu(s) = \phi(s)^T\theta$ + +Variance may be fixed $\sigma^2$, or can also parametrized + +Policy is Gaussian, $a \sim N (\mu(s), \sigma^2)$ + +The score function is + +$$ +\nabla_\theta \log \pi_\theta(s,a) = \frac{(a - \mu(s)) \phi(s)}{\sigma^2} +$$ + +
+ +#### Policy Gradient Theorem + +For any _differentiable_ policy $\pi_\theta(s,a)$, + +for any of the policy objective function $J=J_1, J_{avR},$ or $\frac{1}{1-\gamma}J_{avV}$, the policy gradient is: + +$$ +\nabla_\theta J(\theta) = \mathbb{\pi_\theta}[\nabla_\theta \log \pi_\theta(s,a) Q^{\pi_\theta}(s,a)] +$$ + +
+Proof + +Take $\phi(s)=\sum_{a\in A} \nabla_\theta \pi_\theta(a|s)Q^{\pi}(s,a)$ to simplify the proof. + +$$ +\begin{aligned} +\nabla_\theta V^{\pi}(s)&=\nabla_\theta \left(\sum_{a\in A} \pi_\theta(a|s)Q^{\pi}(s,a)\right) \\ +&=\sum_{a\in A} \left(\nabla_\theta \pi_\theta(a|s)Q^{\pi}(s,a) + \pi_\theta(a|s) \nabla_\theta Q^{\pi}(s,a)\right) \text{by linear approximation}\\ +&=\sum_{a\in A} \left(\nabla_\theta \pi_\theta(a|s)Q^{\pi}(s,a) + \pi_\theta(a|s) \nabla_\theta \sum_{s',r\in S\times R} P(s',r|s,a) \left(r+V^{\pi}(s')\right)\right)\text{rewrite the Q-function as sum of expected rewards from actions} \\ +&=\sum_{a\in A} \left(\nabla_\theta \pi_\theta(a|s)Q^{\pi}(s,a) + \pi_\theta(a|s) \sum_{s',r\in S\times R} P(s',r|s,a) \nabla_\theta \left(r+V^{\pi}(s')\right)\right) \\ +&=\phi(s)+\sum_{a\in A} \left(\pi_\theta(a|s) \sum_{s'\in S} P(s'|s,a) \nabla_\theta V^{\pi}(s')\right) \\ +&=\phi(s)+\sum_{s\in S} \sum_{a\in A} \pi_\theta(a|s) P(s'|s,a) \nabla_\theta V^{\pi}(s') \\ +&=\phi(s)+\sum_{s\in S} \rho(s\to s',1)\nabla_\theta V^{\pi}(s') \text{ notice the recurrence relation}\\ +&=\phi(s)+\sum_{s'\in S} \rho(s\to s',1)\left[\phi(s')+\sum_{s''\in S} \rho(s'\to s'',1)\nabla_\theta V^{\pi}(s'')\right] \\ +&=\phi(s)+\left[\sum_{s'\in S} \rho(s\to s',1)\phi(s')\right]+\left[\sum_{s''\in S} \rho(s\to s'',2)\nabla_\theta V^{\pi}(s'')\right] \\ +&=\cdots\\ +&=\sum_{x\in S}\sum_{k=0}^\infty \rho(s\to x,k)\phi(x) +\end{aligned} +$$ + +Just to note that $\rho(s\to x,k)=\sum_{a\in A} \pi_\theta(a|s) P(x|s,a)^k$ is the probability of reaching state $x$ in $k$ steps from state $s$. + +Let $\eta(s)=\sum_{k=0}^\infty \rho(s_0\to s,k)$ be the expected number of steps to reach state $s$ from state $s_0$. + +Note that $\sum_{s\in S} \eta(s)$ is constant depends solely on the initial state $s_0$ and policy $\pi_\theta$. + +So $d^{\pi_\theta}(s)=\frac{\eta(s)}{\sum_{s'\in S} \eta(s')}$ is the stationary distribution of the Markov Chain for policy $\pi_\theta$. + +$$ +\begin{aligned} +\nabla_\theta J(\theta)&=\nabla_\theta V^{\pi}(s_0)\\ +&=\sum_{s\in S} \sum_{k=0}^\infty \rho(s_0\to s,k)\phi(s)\\ +&=\sum_{s\in S} \eta(s)\phi(s)\\ +&=\sum_{s\in S} \eta(s)\sum_{a\in A} \frac{\eta(s)}{\sum_{s'\in S} \eta(s')}\phi(s)\\ +&\propto \sum_{s\in S} \frac{\eta(s)}{\sum_{s'\in S} \eta(s')}\phi(s)\\ +&=\sum_{s\in S} d^{\pi_\theta}(s)\sum_{a\in A} \nabla_\theta \pi_\theta(a|s)Q^{\pi_\theta}(s,a)\\ +&=\left[\sum_{s\in S} d^{\pi_\theta}(s)\sum_{a\in A} \pi_\theta(a|s)\right]\nabla_\theta Q^{\pi_\theta}(s,a)\\ +&= \mathbb{E}_{\pi_\theta}[\nabla_\theta \log \pi_\theta(s,a) Q^{\pi_\theta}(s,a)] +\end{aligned} +$$ + +
+ +#### Monte-Carlo Policy Gradient + +We can use the score function to compute the policy gradient. + +## Actor-Critic methods + +### Q Actor-Critic + +### Advantage Actor-Critic \ No newline at end of file diff --git a/public/CSE510/Partial_Observable_Gridworld.png b/public/CSE510/Partial_Observable_Gridworld.png new file mode 100644 index 0000000000000000000000000000000000000000..5c1c42517ce6fea06bcef9171a03cbe07553d1a9 GIT binary patch literal 25167 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