lec 1 课程介绍及概要

  1. 所有监督学习问题都可以被重新表述成一个增强学习问题,即便这不见得是一个好主意。如将输入定义为观测,输出定义为行动,损失函数定义为奖励。

  2. 一个基于深度增强学习的机器人控制系统如下图。机器人摄像头为深度神经网络提供像素图像输入,深度神经网络提供马达扭矩级别的控制输出,形成一个序贯决策循环。神经网络的前几层卷积层可以认为是视觉皮层,而后几层全连接层认为是马达皮层,类似于生物组织中大脑区域的分化。任务的挑战:第一点是它不像监督学习,通常没有人告诉它看到什么图像就应该做什么样的马达指令。第二点是它的行动会产生影响后果,不能只关注一个决策是不是做对了,而更应该关注整个序贯决策的正确性,直到产生我们想要的结果。因此深度增强学习的实践很多是一个试错的过程:系统尝试去做一件事情,观察结果后调整策略
    在这里插入图片描述
    在这里插入图片描述

lec 2 监督学习与模仿学习

1. 观察与状态

观察可反映现有状态,动作是基于观察预测出来的,而动作执行后改变的是状态。如果观察能完全反映状态,则为全观察,之前的观察无用;若观察能部分反映状态,例如下图猎豹被小汽车挡住,则之前的观察有用。
这里有一个性质,也就是S(t+1)被认为仅由a(t)和s(t)影响,而与之前的状态和行动无关:也就是之前的所有后果全部被包含在状态s(t)之中了,你可以忘掉过去所有的东西,此谓 Markov 性,也是序贯决策问题的重要假设。注意到对于观测来说,这个性质是不成立的,观测序列不具有 Markov 性。
在这里插入图片描述

2.数据分布

如下图所示,我们现在要模拟黑线轨迹(训练数据为黑线),由于任何模型的模拟结果总有误差,在一个微小误差后,红线略微偏移,导致到了一个模型从未见过的状态(因为训练数据没有),在这个状态中可能会犯的错误比之前的失误更大,导致误差越来越大,最后发散到一个很离谱的地方。
这本质上是因为序贯决策的特性才导致了这样的问题:如果只是一个单独的问题,也许会犯点小错误,但这个错误是有限的;而这里的决策并不是独立同分布,每个行动都会影响下一个状态,这样错误就会被累积起来。
究其原因是因为训练数据和真实情况数据分布不太一样。在这里插入图片描述

解决这个问题其实不难,增加训练数据,使得训练数据和真实数据分布一模一样,如下图,让模型见过所有情况,从而对误差自我矫正在这里插入图片描述

一种思路叫DAgger,它 是实时收集模型结果,并对其打标,然后加入训练数据,这个过程周而复始,直到收敛在这里插入图片描述
DAgger 的问题:
a. 这个过程是Non-Markovian behavior,人类做选择时是参考之前的经验,而这种方法只看到当前状态就做决定
解决办法: 把所有历史数据也加到模型输入中
b. 多模态问题,人类对一样的状态可能做的选择前后不一样,这些选择其实都是正确的,而模型的选择只有一种
解决办法:
一. 是使用高斯分布的混合,即把分布表示为在这里插入图片描述
的加权线性组合,这样就可以代表一些多峰分布;这五类方式的主要缺点是需要指出这个分布有多少个峰,如果有十个峰的话可能还是很麻烦的。
二. 是使用隐性密度模型 (Implicit Density Model),这类模型可以表达任意概率分布:虽然它本身还是输出一个高斯分布或者一个什么其他的简单分布,甚至可以是一个值。现在我们输入的不仅仅是一个观测图像本身,同样也输入一个噪音进去,譬如给定维数的多元高斯噪音,然后得到输出。这一模型可以学习任何的非线性函数,可以把单峰的噪音变成多峰的输出。我自己感觉这个模型输入了一个随机噪音进去,对应了原分布的某一个位置,有点像概率论里面的分布变换。这种方法的主要问题是这个模型很难训练。
三. 是使用自回归离散化 (Autoregressive Discretization)。如果有连续的动作,一个可行的方法是将其离散化;但是如果维度大了,离散化后的联合分布将维度灾难。一个小技巧是避免联合离散化所有维度。假设我们有三个维度,首先我们离散化维度 1,通过诸如 Softmax 的方法得到维度 1 的几个离散分类的分布P(d1)。然后我们从这个分布里面进行抽样,得到维度 1 的值(其实是某个分类),然后把这个值输送给另一个神经网络(顺便还有图像或者某些隐藏层数据),这个神经网络给出离散化后维度 2 的分布,再如此得到维度 3 的分布。这样做的一个好处是,维度 2 的分布是以维度 1 的样本为条件的,即P(d2|d1)。这样就可以表示出任何的联合分布,但是在一个时段只需要离散化一个维度。当你训练这样的模型时,只需要给每个维度的正确值就可以了,做一个标准的监督学习过程。在测试中,需要依此采样然后馈入后续网络之中。

3.模仿学习的数据问题

模仿学习极其依赖人打标的数据,而人标注数据可能会有以下的问题:
a. 标注数据需求可能特别大,成本高昂
b. 有些数据人类并不好标注,比如控制电机的转速,电压等等
c. 人类可以自主学习而机器则不能,自主学习的好处是我们可以通过自己的经验获得无限量的数据,看到错误可以自我修正,达到连续的自我提升。

lec 3 增强学习简介

1.强化学习目标

最大化整个流程的收益:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 强化学习基本机构

在这里插入图片描述
在这里插入图片描述

3. Q-function与Value-function

强化学习目标解析:
在这里插入图片描述
在这里插入图片描述
基于Q-function与Value-function的两种思路:
a. Q-learning,构建好Q函数,无需管agent网络的好坏
b. 利用Q-V函数优化agent网络
在这里插入图片描述

4.强化学习的类型

策略梯度法:这类算法直接对目标函数关于参数求梯度。本质是一阶最优化算法,求解无约束优化问题的通用方法。
值函数方法:这类方法尝试去近似估计最优策略下的值函数或 Q 函数,而并不揣测策略函数是什么。注意此时策略并需要不显式表达出来,只需要选择使得 Q 函数最大的行动即可(或者值函数类似于动态规划中的手段)。
演员-评论家 (actor-critic) 方法:这类方法尝试去近似估计当前策略下的值函数或 Q 函数,并用这个信息求一个策略的梯度,改进当前的策略。所以也可以看作是策略梯度法和值函数方法的一个混合体。
基于模型 (model-based) 的增强学习方法:它需要去估计转移概率来作为模型,描述物理现象或者其他的系统动态。有了模型以后,可以做很多事情。譬如可以做行动的安排(不需要显式的策略),可以去计算梯度改进策略,也可以结合一些模拟或使用动态规划来进行无模型训练。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在强化学习中,没有一个单纯的算法在所有情形下都表现得很好,因此算法之间需要有很多权衡点:首先是样本效率 (sample efficiency),就是要有一个不错的策略效果需要橙色方块收集多少数据;其次是稳定性和易用性,主要体现在选择超参数和学习率等调参的难度,在不同的算法中这个难度可以差别很大。不同的算法也有不同的前提假设:有些算法假设系统动态和策略是随机的,有些是确定性的;有些连续有些离散;有些有限期 (episodic) 有些无限期。还有一个很现实的问题是,在不同的问题下,要去表示一个东西的难度是不一样的,譬如有些问题去表示一个策略是比较容易的,而有些问题去拟合模型更容易:因此方法的选择对于特定问题很有关系。

在橙色方块中,我们主要关心样本效率。样本效率意味着我们要得到一个好的策略,需要收集的样本数量:这决定了我们需要在模拟器或者真实世界运行我们的策略多久才能让它到一个稳定状态。最重要的一点是,我们的算法是否是离线 (off-policy) 的。离线的意义是我们可以在不用现在的策略去生成新样本的情况下,就能改进我们的策略。其实就是能够使用其他策略生成过的历史遗留数据来使得现在的策略更优。在线 (on-policy) 算法指的是每次策略被更改,即便只改动了一点点,我们也需要去生成新的样本。在线算法用于梯度法通常会有一些问题,因为梯度算法经常会走梯度步,些许调整策略就得生成大量样本。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图是一个算法间的样本效率比较图(是非常粗糙的,具体效果如何其实非常依赖于特定的问题)。以竖线为分界点,离线算法有较高的样本效率,在线算法则较低。如最右侧的进化算法,甚至都不使用梯度信息,只是把参数当成一些黑盒子,使用一些不可微函数的方法来作用在参数上:它们需要最多的样本,因为它们没有利用梯度信息。在线的策略梯度法也是在线算法,每次策略更改后需要重新收集数据,但它利用了梯度信息所以会高效一些。演员-评论家算法在两侧都可以有。离线的 Q 学习法,通常学习 Q 函数可以是完全离线的,样本效率较高。基于模型的深度增强学习方法更有效,更极端的基于模型的浅度增强学习方法不去拟合神经网络,使用一些更加高效的贝叶斯方法,但通常会引入一些很强的假设来作用于一些特定的问题。在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐