强化学习
📖 阅读信息
阅读时间:5 分钟 | 中文字符:1813
学习的内容¶
- RL 核心概念:智能体(Agent)、环境(Environment)、动作(Action)、状态(State)、奖励函数(Reward Function)、马尔可夫决策过程(MDP)。
- 经典算法:先掌握 DQN、PPO(最适合车辆控制的入门算法),理解策略梯度、价值函数的基本原理。
- Python RL 框架:重点学 Stable Baselines3 或 PyTorch Lightning,前者封装度高适合快速上手,后者灵活性强适合深度定制。
基本概念¶
找到最好的 Function 使得动作得到的收益(reward)最大
例子¶
强化学习和机器学习¶
机器学习的一般步骤:
- 定义一个带有未知数的 function
- 定义一个损失 function
- 找出使得 loss 最小化的未知数
我们的强化学习也是一样的
- 首先是 function with unknown
- 定义 loss
- 从开始到结束的过程,每一步可能都会得到 reward,最后得到的总的奖励为(return——reward 的总和):\(R=\sum_{t=1}^Tr_t\)
- 在 RL 的情景下,将-R 看做我们的 loss,使得这个 loss 最小,即 reward 最大
- optimization:
常用的算法 policy gradient¶
我们怎么操控 actor 的输出
类似于一个分类的问题
学习得到网络的参数,使得采取的动作与标签(\(\widehat{a}\))(训练的资料)产生的差距最小
推广到很多的训练集上
也就是加权一下:\(L=\sum{A}_ne_n\)
如何控制 actor¶
所以参数的选择就是要:\(\theta^*=arg\min_\theta L\),使得 loss 最小,使得得到的奖励最大
版本 0¶
收集一些训练资料
版本 1¶
所以我们需要真正学习如何去确定某个动作的参数:
将执行了 \(a_1\) 之后所有的增益加起来就是其参数
类推
版本 3¶
进一步优化:(由于随着时间的推移,一步操作对后续操作的影响越来越小)
优化后的公式为:
版本 4¶
对奖赏要进行标准化:
步骤:
- 初始化 actor network 的 \(\theta^{0}\)
- 进行训练 \(i=1->T\):
- 使用 \(\theta^{i-1}\) 去进行训练
- 训练得到数据为: \(\{s_1,a_1\},\{s_2,a_2\},...,\{s_N,a_N\}\)
- 计算参数 \(A_1,A_2,...,A_N\)
- 计算损失 \(L\)
- 进行参数的更新 \(\theta^i\leftarrow\theta^{i-1}-\eta\nabla L\) (只能更新一次)
- 重复上面的步骤
- 此时每次更新一次参数就需要收集一次资料
- 我们可以使用 PPO 来实现不用每次都重新训练:
训练的actor 必须知道它的得到数据的 actor 是不一样的,具体怎么实现不知道 - actor 动作必须要有一定的随机性,尽量全面一点
actor-critic¶
- critic:评估一个 actor 的好坏的性能(当一个 actor 输入一个 s 时(或者加上做一个动作 a)的条件下),获得的收益
- 我们使用的 value function:\(V^{\theta}(s)\)
当使用一个 actor \(\theta\) 时,当输入一个 s 时,接下来得到的 reward 是多少:\(G_1^{\prime}=r_1+\gamma r_2+\gamma^2r_3+......\)
而这里的 \(V^{\theta}(s)\),就是一个预测的作用(未卜先知),就是看到某个游戏画面之后,预测得到的 reward(因为上面的公式是游戏结束后才能完全知道的)
\(V^{\theta}(s)\) 的数值与 actor 有关
为了得到上面的那些值,有哪些方法:
- MC
actor 与环境互动,互动到游戏结束

也就是直接使用训练的资料来得到对应的 \(V^{\theta}(s)\) -
TD:
不需要完全结束,只需要下面的资料:\(\cdots s_t,a_t,r_t,s_{t+1}\cdots\)\[ \begin{aligned}&V^{\theta}(s_{t})=r_{t}+\gamma r_{t+1}+\gamma^{2}r_{t+2}\ldots\\&V^{\theta}(s_{t+1})=r_{t+1}+\gamma r_{t+2}+\cdots\\&V^{\theta}(s_{t})=\gamma V^{\theta}(s_{t+1})+r_{t}\end{aligned} \]
上述两种方法的比较:(还有如何使用上述的方法)
其中的 \(V^\theta(s_b)=3/4\),两种方法都是 0.75(八次的和除以八)
但是 \(V^\theta(s_a)=?\),两种方法得到的数值是不一样的
MC 的话,值为 0 (只看第一次游戏,认为 a, b 两者是相关的,a 之后会影响 b)
TD 的话,值为 \(V^\theta(s_a)=V^\theta(s_b)+r\quad3/4\quad3/4\quad0\)(认为 a, b 之间是不相关的)
进一步的 A 值¶
要减去对应的 \(V\)
为什么值是这样的:\(\{s_t,a_t\}\quad A_t=G_t^{\prime}-V^\theta(s_t)\)
\(V^\theta(s_t)\) 的含义为:
是一个期望值(在看到某个游戏画面时),但是此时不一定会执行 \(a_t\)(因为是随机的),所以最后得到的奖励会有很多种,将所有可能的结果平均一下就是:\(V^\theta(s_t)\)
而 \(G_t^{'}\) 是一定会执行 \(a_t\),得到的 reward 就是\(G_t^{'}\)
- \(\mathrm{A}_{t}>0\):说明执行 \(a_t\) 比平均好
- 反之则没有平均好
但是上述的后一种只是一种可能性,会存在很大的误差:
所以我们最终的版本为:
最后得到的 \(A_t\) 的表达式为:
这就是我们的actor-critic
还有其他的方法,比如说 DQN
reward Shaping¶
我们之前学到的是:

也就是 actor 与环境互动,得到收益,最后得到一个分数 \(A_t\),作为训练的依据
但是,当大多数情况下的 reward 都是 0 时,怎么解决呢(比如下围棋的时候),甚至像训练机械手臂打螺丝的时候,那就更加没有 reward
所以我们需要加入一些 reward(reward shaping)(比如望梅止渴的故事)
一个很有趣的 reward shaping 的做法——添加好奇心(机器在动作的时候得到有意义的新的东西就加分)——有意义的新
但是有时候会面对一些杂讯(那就是无意义的新了)
No reward(完全没有奖励)¶
我们找一些人类,也与环境进行互动

我们凭借这些示范(比如自动驾驶),与环境互动进行训练
这是不是一个 supervised learning?
比如自动驾驶中复制人类的行为,但是存在一个问题(人类和机器观察到的输入可能是不一样的)(人类的示范不会很全面)(同样也不是所有的人类行为都需要模仿)
所以引入接下来的 inverse reinforcement learning(IRL)
我们需要机器从 expert 中学习得到 reward:
- 原则:老师的行为是最棒的(不代表要完全模仿老师的行为)
- 基本的方法:
人为的演示
给一个图像进行模仿




















