NTU ML2023Spring Part2.13 reinforcement learning
RL: reinforcement learning,强化学习
RL 有关的东西实在太多了,所以这只是一篇初探 RL 的学习记录。
做 supervised learning 的时候人类知道输出应该长什么样,但到 reinforcement learning 这边连人都不知道该怎样做最好了。
虽然这时机器不知道标准答案是什么,但它还是会根据行为得到相应的 reward。
什么是 RL?
在这个系列的一开始(Part2.1),LHY 就提出了 maching learning 的本质:找一个函数。
现在在 RL 时,我们有机器作为 actor,还有一个 environment。environment 会给 actor 一个 observation,接着 actor 会给出相应的 action 改变 environment,以此循环。
machine learning 有三步(就像把大象装入冰箱):
- 找一个 function
- 确定 loss
- 优化
RL 也有三步:
-
找一个 actor(实际上也是 observation 到 action 的函数)
-
确定 loss
其实是 reward。
在一局游戏里,机器要做出很多不同的行为,得到相应的 reward,直到最后游戏结束。这样的过程是一个 episode。把一局游戏中所有的 reward 加起来就是 total reward(又叫 return)。我们训练的目标是最大化 total reward.
-
优化
将每一步的 observation 记作 \(s_t\),由 \(s_t\) 产生的 action 记作 \(a_t\),由 \(a_t\) 又会产生下一个 \(s_{t+1}\). 把 \(s,a\) 组成的序列记作 trajectory \(\tau = \{ s_1, a_1, s_2, a_2, \cdots \}\)
由 \(s_t\) 和 \(a_t\) 可以决定一个 reward \(r_t\). 将这些 reward 求和可以得到 return \(R(\tau) = \sum_{t=1}^T r_t\).
你的目标是找一个 actor 的参数来最大化 return.
直接 gradient descent 不就好了吗?你可能会这样想。但问题是,\(a_t\) 往往是随机 sample 出来的,并且你的 environment 和 reward 可能是个不可导的黑箱,还带有随机性。
policy gradient
假设我们知道每个 observation 下的最优 action 是什么,可以尝试用 supervised learning 的方法去最小化正确行为对应的 cross entropy,最大化错误行为对应的 cross entropy(就是每个行为的 cross entropy 的加权和,设权重为 \(A_t\)). 但问题是权重要怎么设置?如何知道哪些行为执行了用处不大,哪些行为一定不能执行?
先考虑如何得到 \(a_t\):拿一个随机的 actor 来过来玩几个 episode,然后把对局记录下来。
-
version 0
一个看起来显然(但不正确)的做法是:让 actor 根据 \(r_t\) 的大小判断 \(a_t\) 是好还是不好。
这样做会让 actor 陷入局部最优解。
-
version 1
于是我们有了另一个版本:把权重设为 \(A_t = \sum_{i=t}^T r_i\).
即考虑这个行动对接下来的所有行动产生的影响。这种方法叫 cumulated reward.
但是仍然有问题:随着时间的推移,\(a_t\) 对后面的行为产生的影响越来越小(因为主要是后面新的行为在产生影响)。
-
version 2
于是我们再次更新,把权重设为 \(A_t = \sum_{i=t}^T \gamma^{i-t} r_i\),其中 \(0 \lt \gamma \lt 1\).
-
version 3
reward 的好坏是相对的。可能一个正的 reward 由于正的不够多也会被认为是坏的,因此我们需要将 \(A_t\) 标准化。
然后就是 policy gradient 的具体步骤。说白了就是重复上面的循环。
- 初始化网络,参数为 \(\theta_0\).
for i in range(1, epochs+1):- 使用 \(\theta_{i-1}\) 玩几局
- 获取资料 \(s_{1 \cdots T}, a_{1 \cdots T}\)
- 计算 \(A_{1 \cdots T}\)
- 计算 loss
- gradient descent(注意这里只能更新一次参数,然后就要重新收集资料)
为什么 gradient descent 只能更新一次?因为之前认为有用的经验可能只能度过新手村,在这之后就没用了。于是有一个想法:要训练的 actor 和要互动的 actor 能否不同?如果可以,就不用每次都花大量时间获取资料 \(s,a\) 了。
可以,这叫 off-policy。原来的那个叫 on-policy. 但这需要另外一些方法。
一个经典的 off-policy 的做法是 proximal policy optimization(PPO). 感性理解一下就是让你的 actor 认识到自己和别人的差距,不要把别人的经验照单全收。
actor 在互动时随机性其实是重要的。如果它从来没有采取过某个行动,那它也许永远都不知道原来还可以这样做。所以说人在年轻的时候就要多尝试(雾)
actor critic
critic:评估一个 actor 的好坏(预测 actor 看到 observation \(s\) 后可能得到的 reward)
对于一个 actor \(\theta\),记 \(V^\theta(s)\) 为 \(\theta\) 看到 \(s\) 后得到的 cumulative reward(的平均值).
有两种方法预测 \(V^\theta (s)\):
-
monte carlo (MC) based approach
暴力跑很多局,然后观察 \(s_t\) 对应的 \(A_t\).
-
temporal difference (TD) approach
不用跑完整局也能预测。
\(V^\theta (s_t) = \sum_{i=t} \gamma^{i-t} r_i\)
\(V^\theta (s_{t+1}) = \sum_{i=t+1} \gamma^{i-t-1} r_i\)
因此有 \(V^\theta (s_t) - \gamma V^\theta (s_{t+1}) = r_t\),可以根据之前预测的 \(V^\theta(s_t)\) 与已知的 \(r_t\) 在 \(t\) 时刻预测 \(t+1\) 时刻的 \(V^\theta (s_{t+1})\).
这两种方法有比较微妙的差异。
之前说到要对 \(A_t\) 做标准化,可以将每个 \(A_t\) 减去 \(V^\theta (s_t)\).
这样还有点小问题,上面的 \(A_t\) 是通过 sample 得到的,为了减小这里的随机性,应该对其取平均值,这其实就是 \(r_t + \gamma V^\theta (s_{t+1}) - V^\theta (s_t)\).
这就是知名的方法 advantage actor-critic.
有一个 trick:actor 和 critic 都要看同样的游戏画面,因此前几层应该是相同的。
还有其他做法:
Deep Q Network (DQN),相关视频 https://youtu.be/o_g9JUMw1Oc,https://youtu.be/2-zGCx4iv_k
reward shaping
用来解决 sparse reward 的问题(例如多数时候 reward 都是 0)。
这时候我们需要想办法去提供额外的 reward 来引导 agent 学习,这就是 reward shaping. 就像是在游戏中一步步升级最后打败大 boss,而不是从新手村出来就开始打 boss.
这种方法需要足够的 domain knowledge.
可以给机器加上好奇心,鼓励它去探索新的事物。见 这篇文章。
learning from demonstration
如果连 reward 都没有呢?例如自动驾驶。当然可以手动写 reward,但这样可能会导致预料之外的结果。
这时可以用 imitation learning. 就是先找一堆示范,然后模仿。
问题来了,这不就变成 supervised learning 了吗?确实可以这样做,这叫 behavior cloning. 但人和机器观察到的东西是不一样的,并且不是所有的行为都值得模仿的。
所以我们需要 inverse reinforcement learning (IRL). 从名字就可以猜出来它实际上怎么做的:原来我们是根据 reward 确定 action,现在是看别人的 action 来反推 reward. 这里的想法是示范行为总会得到最高的 reward,所以在确定 reward 时要每轮和 actor 一起更新。这和 GAN 还是比较像的.
现在还有更高端的科技,给机器看一张图片就能让它做出图中行为,见 https://arxiv.org/abs/1807.04742 和 https://arxiv.org/abs/1903.03698
IRL 认为人类的行为是最好的,如何能让机器青出于蓝而胜于蓝?可以学到水平和人类差不多的时候在 reward 上加限制,或者改变 reward。

浙公网安备 33010602011771号