Sparse Reward

实际上,用强化学习的算法去学 agent 的时候,多数情况下,agent 都是没办法得到奖励的。经常不获得奖励对 agent 的训练来说非常困难。

不管 actor 做了什么事情,得到的奖励都是 0,所以到最后什么都不会学到。

(譬如训练一个机械臂去开门,因为绝大多数情况下机械臂都在去伸手,在最后把门打开了才能获得一个正的奖励)

Reward Shaping

环境有一个固定的奖励。为了让 agent 学的东西是我们想要的样子,我们去刻意设计一些奖励去引导 agent。

如上图所示,在小鹏与的 Q 函数中

  • 对于玩的认知是,当前可以获得一个正的奖励,长时间后获得一个负的奖励
  • 相反地,对于学习的认知是,当前可以获得一个负的奖励,长时间后获得一个正的奖励
  • 假设小鹏与的衰减系数设得比较小的话,那么就总会关注短期奖励,从而会去玩,而不是学习
  • 这个时候,就人为地“给一个棒棒糖”:在采取学习这个动作的时候,将短期奖励也“改”为正的奖励,虽然这个奖励不是环境真正的奖励

Facebook 训练去玩 FPS 游戏 VizDoom 的 agent:设计掉血扣分、耗费弹药扣分、捡到补给包加分、捡到弹药加分、呆在原地扣分

Reward shaping 也会有一定的问题:需要足够好的 domain knowledge。如果追加奖励设计得不恰当,也可能让 agent 误入迷途。

下面介绍一些能加到强化学习算法里面,一般有用的技巧

Curiosity

加上一个新的奖励函数:ICM(intrinsic curiosity module)

ICM 得到的奖励 $r_1^i$ 以 $(s_1, r_1, s_2)$ 这三个东西作为输入

模型的奖励 $R(\tau)$ 就变成 $\sum_{i=1}^T{(r_t + r_t^i)}$

ICM 具体结构的设计

  • 通过 $(s_t, a_t)$(用一个网络)预测下一步状态 $\hat{s}_{t+1}$
  • 将预测的状态 $\hat{s}_{t+1}$ 跟真实状态 $s_{t+1}$ 比较,看看像不像。
  • 如果两个状态越不像,即下一步状态 $s_{t+1}$ 越难被预测准,则奖励 $r_t^i$ 越大。
  • 鼓励冒险(喜欢采取风险比较大的动作)
  • $(s_t, a_t) \to \hat{s}_{t+1}$ 这个用于预测下一步状态的网络(Network 1)另外学习
  • 问题:一些状态难以预测,但是那些状态可能并不重要,例如某些游戏里面的一些“风吹草动”
  • 光是有好奇心还不够,还需要知道哪些状态是重要的,所以对状态加了一个特征抽取器 $\phi$。
  • 特征抽取器 $\phi$ 的训练方法:通过一个 Network 2 来辅助训练,以 $\phi(s_t)$ 和 $\phi(s_{t+1})$ 作为输入,估计一个动作 $\hat{a}_t$,训练目标就是预测出来的动作 $\hat{a}_t$ 要跟真实的动作 $a_t$ 接近。
  • 因为抽出来的状态特征 $\phi(s_t)$ 和 $\phi(s_{t+1})$ 跟动作是相关的,所以跟动作无关的状态特征就会被“干掉”

Curriculum Learning

机器学习中较广泛的概念:为机器的学习做规划,安排训练数据的顺序为由易到难。

先从打低速、血少的怪开始练起,再去打高速、血多的怪。

这样可能会有一个问题:对于不同的任务,都需要事先“精心设计并安排”学习内容。

Reverse Curriculum Generation

从目标状态开始反推

  • 给定一个目标状态 $s_g$(譬如机械臂开门,“门被打开”就是目标状态)
  • 采样一些离目标状态 $s_g$“较近”的状态 $s_1$(譬如,机械臂快够着门把手的状态)
  • 何为“较近”的状态?这又是一个跟具体任务内容强相关的东西……
  • 从状态 $s_1$ 开始,每个轨迹具有奖励 $R(s_1)$
  • 把那些奖励太大(太简单,或是已学会)或者太小(太难,目前根本学不会)的状态 $s_1$ 给删掉
  • 从状态 $s_1$ 开始,采样离 $s_1$“较近”的状态 $s_2$,并且也做类似筛选
  • 循环往复一直做

Hierarchical Reinforcement Learning

阶层式强化学习:有多个 agent,有一些 agent 负责高层次的任务,譬如给其他 agent 定目标。其他 agent 负责将这些目标执行完成。

类比做研究:想 idea →收集数据→跑实验→写 paper

将大任务拆解成若干小任务,将这些小任务再进一步拆解成更小的任务

  • 如果低级的 agent 不能达到高级 agent 所制定的目标,那么高级的 agent 会受到惩罚
  • 每一个低级的 agent 以高级 agent 的“愿景”为输入,决定其要产生什么输出
  • 如果一个 agent 达到了错误的目标,那就 认为最初的目标就是那个错误的目标(譬如教授想要研究生发 paper,但是研究生不知道怎么样变成了 up 主……那就把本来的愿景改成“成为 up 主”)

譬如低级 agent 的目标是要从蓝色点走到黄色的点,高级的 agent 就产生粉色的点,让低级的 agent 逐步到达粉色的点。

Imitation Learning

又叫作 learning by demonstration, apprenticeship learning

砖家来描述如何解决问题:

  • 机器能和环境互动,但是不能显式获得奖励
  • 在某些任务中,很难定义何为奖励(譬如开车、chatbot 的 reward),但是能受到的砖家(人)的建议或范例(与实际环境互动的记录)
  • 手工设计的奖励可能会导致一些不受控的行为

Behavior Cloning

以自动驾驶为例

可以收集人开车的记录(行车记录器),人在某个状态(看到某个画面)的时候做什么行为,那么机器就也要做同样的行为。

所以这也就变成了一个监督学习的问题:收集状态就是 $X$,动作 $y$,机器的动作就是 $\hat{y}$。

这样做比较简单,但是问题在于,能收集到的砖家与环境互动的数据可能非常有限。也就是说,面对没有见过的状态,机器处理这些状态的时候就不知道要干什么。

所以就要有 dataset aggregation:希望收集更多样性的数据,而不是仅收集砖家能看到的那些。希望收集在极端情况下,砖家会执行什么动作。

  • 通过 behavior cloning,得到 actor $\pi_1$
  • 用 $\pi_1$ 来与环境交互
  • 让砖家来标记 $\pi_1$ 在某个状态需要干啥
  • 用新数据来训练 $\pi_2$

还有一个问题:机器会完全复刻砖家的行为,虽然有可能砖家的某些行为并没有什么卵用。但是,机器容量有限,有可能会选择那些不该学的行为去学。

  • 有些行为需要复刻,有些行为需要无视。

还有一个问题:训练数据可能测试数据分布有差异

  • 在训练时:$(s, a) \sim \hat{\pi}$(砖家)
    • actor 采取的状态 $a$ 会影响 $s$ 的分布
  • 在测试时:$(s’, a’) \sim \pi^{*}$(克隆了砖家的 actor)
    • 如果 $\hat{\pi} = \pi^*$,那么 $(s, a)$ 和 $(s’, a’)$ 是来自同一分布的
    • 如果 $\hat{\pi}$ 与 $\pi^*$ 有差异,那么 $s$ 和 $s’$ 可能非常不同(接下来看到的状态受到比较大的影响)

Inverse Reinforcement Learning (IRL)

又名 inverse optimal control

  • 由砖家描述来反推奖励函数是什么
  • 用得到的奖励函数来找到最优的 actor
  • 相较于强化学习的好处:也许对奖励建模变得更加简单。简单的奖励函数能导致复杂的策略。

IRL 的框架

  • 砖家 $\hat{\pi}$ 玩游戏,得到 $N$ 个轨迹 $\{\hat{\tau}_1, \hat{\tau}_2, \ldots, \hat{\tau}_N\}$
  • actor $\pi$ 玩游戏,得到 $N$ 个轨迹 $\{\tau_1, \tau_2, \ldots, \tau_N\}$
  • 拿这两组轨迹去弄到奖励函数 $R$
  • 原则:砖家永远是最棒的(先射箭再画靶)
  • 所以就要找奖励函数 $R$,使得 $\sum_{n=1}^{N}{R(\hat{\tau}_n)} > \sum_{n=1}^{N}{R(\tau_n)}$
  • 得到奖励函数 $R$ 后,再基于这个奖励函数更新 actor(利用强化学习),使得这个 actor 能在奖励函数 $R$ 下得到高分
  • 在这个框架下,actor 就像 GAN 中的 generator,奖励函数 $R$ 就像 GAN 中的 discriminator

IRL 的应用场景

自动驾驶:每个人开车的风格不尽相同

  • 是否压线
  • 是否遵守交通规则
  • 封闭道路和开放道路

机器人

Guided Cost Learning: Deep Inverse Optimal Control via Policy Optimization

先用人拉机器的手让机器学会摆盘子、倒水

Third Person Imitation Learning 机器可能在第三视角,看着砖家操作。

机器观测砖家看到的视野和自己在操作看到的视野是不同的

用到了 domain adversarial learning:希望学一个特征抽取器,让机器在第三人称和在第一人称看到的东西“是一样的”

具体过程没有细讲