-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontent.json
1 lines (1 loc) · 155 KB
/
content.json
1
[{"title":"Spatial Transformer Networks","date":"2019-10-30T14:01:30.000Z","path":"2019/10/30/Spatial Transformer Networks/","text":"对人类来说,我们只需一眼便能快速识别我们所处的环境以及环绕在我们身边的物体。当我们看到一张图片或是环看四周的时候,无需刻意观察,多数时候也能立即描述出场景特征并标记出每一个对象。 当计算机看到一张图像(输入一张图像)时,它看的是一大堆像素值。根据图片的分辨率和尺寸,它将看到一个 32 x 32 x 3 的数组(3 指代的是 RGB 值)。为了讲清楚这一点,假设我们有一张 JPG 格式的 480 x 480 大小的彩色图片,那么它对应的数组就有 480 x 480 x 3 个元素。 问题定义当你提供给计算机这一数组后,它将输出描述该图像属于某一特定分类的概率的数字(比如:80% 是猫、15% 是狗、5% 是鸟) 我们想要计算机做什么我们想要计算机能够区分开所有提供给它的图片 当我们看到一幅狗的图片时,如果有诸如爪子或四条腿之类的明显特征,我们便能将它归类为狗。同样地,计算机也可以通过寻找诸如边缘和曲线之类的低级特点来分类图片,继而通过一系列卷积层级建构出更为抽象的概念。这是 CNN(卷积神经网络)工作方式的大体概述。 对于计算机视觉任务来说,我们希望模型可以对于物体姿势或位置的变化具有一定的不变性,从而在不同场景下实现对于物体的分析。传统 CNN 中使用卷积和 Pooling 操作在一定程度上实现了平移不变性,但这种人工设定的变换规则使得网络过分的依赖先验知识,既不能真正实现平移不变性(不变性对于平移的要求很高),又使得CNN对于旋转,扭曲等未人为设定的几何变换缺乏应有的特征不变性。 CNN卷积层下图的动画中,绿色表示原图像素值,红色数字表示卷积核中的参数,黄色表示卷积核在原图上滑动。右图表示卷积运算之后生成的feature map。 卷积核在原图上滑动,进行卷积运算,得到特征图feature map 权值共享: 卷积核扫过整张图片的过程中,卷积核参数不变。 局部连接: feature map上每个值仅对应着原图的一小块区域,原图上的这块局部区域称作感受野(receptive field) 池化层用一个像素代替原图上邻近的若干像素,在保留 feature map 特征的同时压缩其大小 为什么 CNN 能够成功?先来介绍两个概念: 平移不变性(translation invariant) 对输入进行平移不改变输出的结果。 平移等价性(translation equivalence) 当输入发生平移时,输出也应该相应地进行平移 这对于图像分类问题来说肯定是最理想的,因为对于一个物体的平移并不应该改变它的类别。 而对于其它问题,比如目标检测,语义分割来说,这个性质则不应该有,原因是当输入发生平移时,输出也应该相应地进行平移。这种性质又称为平移等价 卷积层带来了平移等价性,池化层赋予了弱的平移不变性。 ##Motivation当处理分类任务时,通常希望我们的系统对输入变化具有鲁棒性。通过这种方式,如果输入经历了某种“转换”,那么我们的分类模型理论上应该吐出与转换前相同的类标签。 我们的图像分类模型可能面临的“挑战”有: scale variation: 现实世界和图像中尺寸的变化 viewpoint variation: 观察者的视角不同 deformation: 非刚体可能会变形并扭曲成不同寻常的形状 虽然对人类来说,对它们进行分类的任务似乎微不足道。 但我们的计算机算法只能处理具有亮度值的原始3D数组,因此输入图像的微小变化就可以改变相应阵列中的每个像素值。因此,我们理想的图像分类模型在理论上应该能够将物体姿态和变形从纹理和形状中分离出来。 CNN的问题只要输入图片稍微改一个像素、平移一个像素,CNN的输出就会发生巨大的变化 如果输入发生了扭曲等改变,CNN 的输出更加不会是不变的了。对于 CNN 来说,只有一个局部的,预先定义好的池化层来提供微弱的平移不变性。 那我们有什么办法能够加入平移不变性呢,先介绍一下仿射变换 Image Transformations在讨论仿射变换之前,我们首先讨论线性变换。我们定义如下: 向量 $K$ 包含两个坐标点:$\\begin{bmatrix} x \\\\y \\end{bmatrix}$ 矩阵 $M=\\begin{bmatrix}a & b \\\\c & d \\end{bmatrix} $ 线性变换 $T$ 被定义为矩阵的积 $K’ = T(K) = MK$。其中 a,b,c,d 是\b线性变换的参数。 Identity Transformation如果 $M = \\begin{bmatrix}1 & 0 \\\\0 & 1\\end{bmatrix} $ $K’ = \\begin{bmatrix}1 & 0 \\\\0 & 1\\end{bmatrix}\\begin{bmatrix}x \\\\y\\end{bmatrix} =\\begin{bmatrix}x \\\\y\\end{bmatrix} = K$ 这意味着点 $K$ 点在平面上没有移动。 Scaling 如果 $M = \\begin{bmatrix}a & 0 \\\\0 & e\\end{bmatrix} $ $K’ = \\begin{bmatrix}a & 0 \\\\0 & e\\end{bmatrix}\\begin{bmatrix}x \\\\y\\end{bmatrix} =\\begin{bmatrix}ax \\\\ey\\end{bmatrix}$ 这意味这对 $K$ 点进行了缩放。 有一种特殊的缩放情况,称为各向同性缩放,其中 $x$ 和 $y$ 方向的缩放因子是相同的,比如 $s$,在这种情况下,放大图像对应于 $s>1$,而缩小图像对应于$s<1$。 Rotation 如果 $M = \\begin{bmatrix}\\cos{\\theta} & -\\sin{\\theta} \\\\\\sin{\\theta} & \\cos{\\theta}\\end{bmatrix}$ $K’ = \\begin{bmatrix}\\cos{\\theta} & -\\sin{\\theta} \\\\\\sin{\\theta} & \\cos{\\theta}\\end{bmatrix}\\begin{bmatrix}x \\\\y\\end{bmatrix} =\\begin{bmatrix}x\\cos{\\theta}- y\\sin{\\theta} \\\\x\\sin{\\theta} + y\\cos{\\theta}\\end{bmatrix}$ 将 $K$ 点进行旋转。 Shear 当我们要剪切图像时,我们将 $y$ 方向偏移与 $x$ 成比例的距离,将 $x$ 方向偏移与 $y$ 成比例的距离。 将 $M$ 设置为: $M = \\begin{bmatrix}1 & b \\\\d & 1\\end{bmatrix}$ 得到: $K’ = \\begin{bmatrix}1 & b \\\\d & 1\\end{bmatrix}\\begin{bmatrix}x \\\\y\\end{bmatrix} =\\begin{bmatrix}x + by \\\\y + dx\\end{bmatrix}$ 前面介绍的三种线性变换的缺点是不能表示平移,因为它不是线性变换。 但是,平移是非常重要且必要的变换,因此我们希望能够将其封装在矩阵表示中。 Translation我们希望通过一种变换,将 $K$ 点分别向 $x$ 和 $y$ 的方向平移 $e$ 和 $f$ 的距离,即: $K’ = \\begin{bmatrix}x+e \\\\y+f\\end{bmatrix} =T(K)$ 我们尝试用矩阵和\b向量运算构造一下: $\\begin{bmatrix}x+e \\\\y+f\\end{bmatrix} =\\begin{bmatrix}1 & 0 \\\\0 & 1\\end{bmatrix}\\begin{bmatrix}x \\\\y\\end{bmatrix} +\\begin{bmatrix}e \\\\f\\end{bmatrix}$ 将加号\b包括到矩阵\b积运算中: $\\begin{bmatrix}x+e \\\\y+f\\end{bmatrix} =\\begin{bmatrix}1 & 0 & e\\\\0 & 1 & f\\end{bmatrix}\\begin{bmatrix}x \\\\y \\\\1\\end{bmatrix}$ 多添加两个参数$e$ 和 $f$, 我们就可以得到平移变换。 Summary 我们可以推广我们的结果,并用6个参数矩阵表示我们的4个仿射变换(所有的线性变换都是仿射变换) $M= \\begin{bmatrix} a & b & c \\\\ d & e & f \\end{bmatrix}$ 更有直觉性,让我们再来看看下面的猫的图片: 如果我们的模型可以从左到右使用某种剪裁和尺度标准化组合来简化后续的分类任务,这不就是非常理想的吗? Spatial Transformer Networks如何添加仿射变换呢,大家先自己思考一下。 应当是对输入做仿射变换得到的输出作为 CNN 新的输入。 这个变换应当是根据输入的不同,有不同的变换,也就是仿射变换矩阵中6个参数的值应该是自适应的。 是对像素点的位置做仿射变换,而不是像素值做仿射变换。 STN由上图所示的三个组件构成: localisation network grid generator sampler Localisation NetworkLocalisation Network 的目标是输出仿射变换的参数 $\\theta$。 输入: 特征图 U,形状为 (H, W, C) 输出: 变换矩阵 $\\theta$,形状为 (6,) 结构: 全连接层,卷积层都可。 Parametrised Sampling Grid网格生成器的工作是输出参数化的采样网格,该网格是一组点,应在这些点上对输入图进行采样以产生所需的转换输出。$$\\begin{bmatrix}x^{s}_i \\\\y^{s}_i\\end{bmatrix} =T_\\theta (G_i) = A_\\theta\\begin{bmatrix}x^t_i \\\\y^t_i \\\\1\\end{bmatrix} =\\begin{bmatrix} \\theta_{11} & \\theta_{12} & \\theta_{13} \\\\\\theta_{21} & \\theta_{22} & \\theta_{23}\\end{bmatrix}\\begin{bmatrix}x^t_i \\\\y^t_i \\\\1\\end{bmatrix}$$ Differentiable Image Sampling由于双线性插值是微分的,因此非常适合当前的任务。 借助输入特征图和参数化的采样网格,我们可以进行双线性采样,并获得形状为(H’,W’,C’)的输出特征图 V。 双线性插值 Bilinear Interpolation当图像经历仿射变换(如旋转或缩放)时,图像中的像素会四处移动。当输出的像素位置没有直接映射到输入图像中的像素位置时,这就是问题。 假设旋转图像后,我们需要找到位置(6.7,3.2)的像素值。 然而不存在这种位置的像素值。 算法我们的目标是计算点 $P$ 的像素值。 我们先计算 $R_1$ 和 $R_2$ 的像素值: $$R_1 = \\frac{x_2 - x}{x_2 - x_1}Q_{11} + \\frac{x - x_1}{x_2 - x_1}Q_{21}$$ $$R_2 = \\frac{x_2 - x}{x_2 - x_1}Q_{12} + \\frac{x - x_1}{x_2 - x_1}Q_{22}$$ 再计算点 $P$ 的像素值:$$P = \\frac{y_2 - y}{y_2 - y_1}R_1 + \\frac{y - y_1}{y_2 - y_1}R_2$$ 结果展示视频演示 REF Spatial Transformer Networks https://kevinzakka.github.io/2017/01/10/stn-part1/","tags":[{"name":"DL","slug":"DL","permalink":"https://gyh75520.github.io/tags/DL/"}]},{"title":"Relational inductive biases, deep learning, and graph networks","date":"2019-05-07T14:01:30.000Z","path":"2019/05/07/Relational_inductive_bias/","text":"论文认为:组合泛化(combinatorial generalization)是AI中最首要的任务,要达到这个目的,结构化表征(structured representations)和计算能力(computations)很关键。如生物学中,将先天基因和后天孕育结合在一起,因此我们必须摒弃在”手动设计结构(hand-engineering)“和”端到端(end-to-end)”二选一的错误做法,而是把两者结合起来:深度学习+基于结构的方法:图网络。 研究问题要探索的是:如何在深度学习结构中学习实体(entities),关系(relations),规则(rules)并组合起来,然后在其结构中实现关系归纳偏置(relational inductive biases)? 对此,本文提出了一种可在AI中应用的新模块,即图网络,图网络通过提供一个接口用来操作结构化知识并处理结构上的行为。那么图网络如何实现关系推理(relational reasoning)和组合泛化(combinatorial generalization)呢? 一种关键的人类的智能能力——以有限表示无穷 (A key signature of human intelligence is the ability to make “in finite use of fi nite means”)。即用一些集合的元素(如句子,单词)进行无限的组合(组成句子,文章)。这也反映出了组合泛化原则:从已有的模块进行组合,来达到推理,预测等功能。 人类组合泛化能力依赖于我们对结构化表示和关系推理的认知(Humans’ capacity for combinatorial generalization depends critically on our cognitive mechanisms for representing structure and reasoning about relations.)。人类使用分级制来提取行为和表示的差别和共性,同时面对新颖的问题,会采用相似技能与常规经验相组合(composing familiar skills and routines)来解决。即:我们通过对齐两个域之间的关系结构,并根据其中一个域来对另一个域相对应的知识得出一个推论或类比。 我们在学习的时候(接受一个正确实例的时候), 可以做两个事情 将新的知识放入已有的结构化知识框架. 调整框架去适应新的知识. 对比过去的AI算法,往往都陷入“端到端”的设计哲学中,并强调最小化先验表征和计算假设,并避免明确的结构和手工设计结构。正是由于深度学习刻意避开了组合性和明确的结构方法,而面对像复杂语言、场景理解、结构化数据推理、基础训练上的迁移学习和少量经验学习这些需要组合泛化功能实现的任务,深度学习在这些任务上就难以实现了。 正如生物学里先天因素和后天因素是共同发挥作用的,本文认为“人工构造”(hand-engineering)和“端到端”学习也不是只能从中选择其一,本文主张结合两者的优点,从它们的互补优势中受益。 整篇文章都是从关系归纳偏置(relational inductive biases)的视角来研究各种深度学习方法,表明现有的方法往往带有关系假设,这些假设并不总是显式的或立即可见的。然后,文章提出了一个基于实体和关系的推理的通用框架——称之为图网络——用于统一和扩展现有的对图进行操作的方法,并描述了使用图网络作为构建块构建强大架构的关键设计原则。 关系归纳偏置(Relational inductive biases)关系推理(relational reasoning): 实体(entitiy): 具有属性的元素,比如具有大小和质量的物体。 关系(relation): 实体之间的属性。两个物体之间的关系,比如具有相同的尺寸,A比B更重等。在这里,我们关注实体之间的配对关系。 规则(rule): 将实体和关系映射到新的实体和关系的函数。 图模型能取得成功是因为捕获到了真实世界生成过程的稀疏结构,并且支持能够进行推理和学习的算法。 归纳偏置(Inductive biases):我们把在学习过程中,实体之间关系和相互作用施加约束叫做归纳偏置。 学习过程涉及到寻找一个解空间中的解,归纳偏置(inductive biases)允许一个学习算法优先选择一个解决方案或者解释方案(solution or interpretation)。归纳偏置经常会以提高灵活性来提高样本复杂性,并可由偏差-方差来权衡理解。 我们利用机器学习算法要做的是, 利用一个学习器, 通过学习样本使得学习器对于任意输入(可以不包含在训练数据中)可以产生正确的预测. 那么, 这个假设就决定了在面对未知数据下如何去作出判断. 例如, 在线性回归中, 作出的假设(归纳偏置)是, 输出与输入是线性的。 归纳偏置表还表现在: 最大边界:当要在两个类别间画一道分界线时,试图去最大化边界的宽度。这是用于支持向量机的偏置。这个假设是不同的类别是由宽界线来区分。 最小描述长度(Minimum description length):当构成一个假设时,试图去最小化其假设的描述长度。假设越简单,越可能为真的。见奥卡姆剃刀。 最少特征数(Minimum features):除非有充分的证据显示一个特征是有效用的,否则它应当被删除。这是特征选择(feature selection)算法背后所使用的假设。 最近邻:假设在特征空间(feature space)中一小区域内大部分的样本是同属一类。给一个未知类别的样本,猜测它与它最紧接的大部分邻居是同属一类。这是用于最近邻居法的偏置。这个假设是相近的样本应倾向同属于一类别。 需要注意的是,这些假设不需要是明确的,它们反映了模型或算法如何与现实世界交互。 关系归纳偏置除此之外, 还有还有很多 no-relational inductive biase. activation non-linearities weight decay, dropout , batch and layer normalization , data augmentation 这些称为非关系归纳偏置, 与上面的关系归纳偏置进行对比, 我们就可以大概知道: 关系归纳偏置 是 应用了关系推理的归纳偏置. 是具有生成能力的. Rel Inductive bias 推广到深度模型深度学习中的各种模型其实就可以看作是由不同的初级building block组成的复杂的深层的层级结构或者图结构. 初级building block包括, “fully connected” , “convolutional layers”等等等等很多. 复杂的结构, 例如 MLP就是由多个 “fully connected” 组成的. 这个时候, “MLP” 也可以作为一个block. 而CNNs就是由 “convolutional layers” 和 “MLP” 组成的一个新的block. 最重要的是, 不同的block都包含着不同的 “relational inductive biase”, 也就是不同的设计指导思想. 下图是几个例子: 每个深度模型的entities, relations 和 rules都是不一样的, 为了更好的理解他们, 这里定义了几个术语. arguments : 是 rule functions的输入, 就是entities和relations reused, shared : 指的是 rule functions 是否被reused或者shared(也就是说不同relation(连线)之间是否使用相同的rules(激活函数,不同权重算不同函数)). interactions, isolation : 得出的结果是全部entities之间协作的结果的话就是interactions, 否则就是isolation. Fully connected entities : 网络中的 units relations : all-to-all rules : 由 weights and biase 指定 rules 的输入参数是 the full input signall, 而且 no reuse and no isolation of information. 关系归纳偏置 : very weak, 每个输入 units 都决定了输出的 units。 Convolutional layers entities : 还是独立的unit relations : 是稀疏的, 不再是全部连接. 关系归纳偏置 : locality and translation invariance locality : 意思是空间相近的实体有联系远的没有. translation invariance : 局部单元对于rules(卷积子)的复用,Spatial translation(平移不变性) 远距离单元之间是isolated 的 Recurrent layers rule : 接受 a step’s inputs 和 hidden state 作为arguments. reused : The rule is reused over each step 关系归纳偏置 : temporal invariance 全部是 Interaction. Computations over sets and graphs举了一个例子: 预测由 n 个行星组成的太阳系质心,其中的属性(例如,质量,位置,速度等)由 {x1, x2, …, xn}表示。对于这样的计算,行星的顺序并不重要,可以仅用汇总的平均质量来描述这个状态。然而,如果我们使用一个MLP来完成这个任务,学习某个特定输入(x1, x2, …, xn)的预测不一定会转化为在不同的排序下对同一个输入进行预测(xn, x1, …, x2)。既然有n!这种可能的排列,在最坏的情况下,MLP可以将每个排序视为不同,因此需要指数数量的输入/输出训练示例来学习近似函数。 当然,在许多问题中,置换不变并不是唯一重要的基本结构形式。例如,一个集合中的每个对象都可能受到集合中其他对象的成对交互的影响。在我们的行星场景中,现在考虑预测每个行星在一段△t时间间隔后的位置。在这种情况下,使用汇总的平均质量是不够的,因为每个行星的运动取决于其他行星对其施加的力量。相反,我们可以计算每个物体的状态 $x_i^{‘} = f(x_i,\\sum_j g(x_i,x_j))$,其中 g函数计算第 j 个行星对第 i 个行星上产生的作用力,f 函数的输入是自身的重力和外力。(我们可以将相同的分析扩展到更加纠缠的结构,这些结构依赖于三元组之间的关系(即g (xi, xj, xk)),四元组等等。我们注意到,如果我们限制这些函数只对空间上接近的xi子集进行操作,那么我们会以类似于CNN的方式结束。在最纠结的意义上,在存在单个关系函数g (x1, …, xn)的情况下,我们以类似完全连接层的结构结束。) 上面的太阳系例子说明了两个关系结构:一种是不存在关系,另一种是包含所有配对关系。许多现实世界的系统属于这两个极端之间,比如,一些实体拥有关系而另一些实体没有关系。在我们的太阳系的例子中,如果系统由行星和它们的卫星组成,那么可以忽略其他行星和当前卫星之间的相互作用力。实际上,这意味着只计算一些对象之间的相互作用。 Graph Networks Block图网络模型遍布监督学习,半监督学习,无监督学习,强化学习等领域。并能在视觉理解,few-shot learing ,动态物理结构(the dynamics of physical systems),多代理系统(multi-agent systems),知识图谱推理,预测化学分子和图像分割 接下来就是本文提出的 ‘graph network framwork’,使用图结构进行表征,在此基础上定义一类用来进行关系推理的函数。该 GN 框架泛化并扩展了多种图神经网络。MPNN,统一了不同种图网络和卷积云网络算法,NLNN则统一了多种“self-attention”算法。 注:图网络并不是只可以在神经网络上使用。 功能:从一些基本的 building blocks 去构建复杂的结构 组成: GN框架的基本单元是 GN block. 输入是graph. (表现在网络中就是unit) 输出是graph 执行的是基于结构的计算 graph 的 node 是实体(entities), edges 是 关系(relations) 图网络的设计理念: 灵活表示(Flexible representations) 可控内部结构 (Configurable within-block structure) 可组合多块体系结构(Composable multi-block architectures) graph 的定义 实体被定义为图的节点,关系为边。 图被定义为一个三元组,$G =(u,V,E)$ $node \\; v_i$ : 拥有属性 attribute, 抽象含义是一个node, 具体值是 attribute $v_i$ 。$V = { v}_{i =1: N_v} $, 是所有nodes的集合。 $edge\\; e_k$ : 拥有属性, 抽象含义是一个 edge, 具体值是 attribute $e_k$。$E = { ( e_k ,r_k ,s_k ) }_{k =1: N_e} $, 是所有edges的集合。 $global\\; attributes\\; u$: 图的全局属性。 上面是三个基本组成元素. “sender” node $s_k$ : edge $e_k$ 的发射端 node “receiver” node $r_k$ : edge $e_k$ 的接受端 node Internal structure of a GN block一个GN模块包括三个更新函数 $\\phi$ 和三个聚合函数 $\\rho$。 GN模块的计算步骤如下图: 注意:这三个基本组成元素的更新顺序可以被人为定义。 对每个边的状态进行的更新:$$e_k^{‘} = \\phi^e(e_k,v_{r_k},v_{s_k},u)$$蓝色为输出, 黑色为输入 对每个点的状态进行的更新:$$v_i^{‘} = \\phi^v(\\bar{e_i}^{‘},v_{i},u)$$其中,$\\bar{e_i}^{‘} = \\rho^{e \\rightarrow v}(E_i^{‘})$ $\\rho$ 是个聚合函数, 其接受参数为一个边的集合. 然后利用集合中所有边的信息去调整一个node的状态. 对全局状态进行跟新:$$u^{‘} = \\phi^u(\\bar{e}^{‘},\\bar{v}^{‘},u)$$其中包含两个聚合函数: $\\bar{e}^{‘} = \\rho^{e \\rightarrow u}(E_i)$$\\bar{v}^{‘} = \\rho^{v \\rightarrow u}(V_i)$ 第一个, 其接受参数为一个边的集合. 然后利用集合中所有边的信息去调整全局状态。 第二个, 其接受参数为一个点的集合. 然后利用集合中所有点的信息去调整全局状态。 聚合函数需要具有的特点 对于参数的顺序不敏感 可以接受不定数的变量 举例 : elementwise summation, mean, maximum 图网络中的关系归纳偏置(Relational inductive biases in graph networks) 图网络可表示实体内任意关系,GN’s输入决定实体如何交互和隔离,而非那些固定结构; 图表示实体和关系作为集合,集合排列不变,意味着GN’s对于这些元素顺序不变; GN的边、节点分别可在所有边和节点上重复使用,GNs自动支持一种组合泛化形式。 Design principles for graph network architectures一般来说,该框架并不局限属性的表示和函数的形式,在这里,本文更关注深度学习架构,使得GN block 成为一个可学习的 graph-to-graph function approximator。 Flexible representationsGN的灵活性体现在两点: 属性值表征的灵活性 图的结构本身的灵活性 Attribute 属性值的形式 global, node, edge 的属性可以使用任意的形式表达的. 在深度模型中, 通常是采用real-value vector or tensor 的形式. 输出的单元 根据任务的不同, 输出的东西也是可以不同的. 有三种基本类型的输出. edge-focused GN : 采取边作为输出 node-focused GN : 采取点作为输出, 这个是我们常见的研究 graph-focused GN : 采取global作为输出 还可以有三种的混合形式:Relational inductive bias for physical construction in humans and machine:这个研究同时利用edge和global去预测一个(人和机器)基于动作的策略。 Graph structure有两种场景: 1.输入明确指出了关系结构; 2.必须推断或假设关系结构。 第一个方式的例子:知识图谱以及句法树以及社会网络问题, 这样的问题中, edge是根据其相连实体来确定的.也就是说, 是基于一个知识图谱或者句法树等等.第二个方式的例子:例如, visual scenes, 自然语料库等等. 这样的初始的情况下我们不知道实体之间的任何关系.具体的例子就是, 将句子中的每一个词汇视为一个node,将图片分 cell,每一个cell 代表一个实体。 Configurable within-block structure通过对GN进行个性化的定制,我们可以得到不同的网络模型。 Full GN Block首先是完整的 GN Block: Non-local neural network先来简单介绍一下 NLNN:Non-local neural network在捕捉长距离特征之间依赖关系的基础上提出了一种非局部信息统计的注意力机制。 不管是 CV 任务还是 NLP 任务,都需要捕捉长范围依赖。在时序任务中,RNN 是一种主要的捕获长范围依赖手段,而在 CNN 中是通过堆叠多个卷积块来形成的大感受野。目前的卷积和循环结构都是在空间或者时间上的局部操作,长范围的依赖捕获是通过重复堆叠,并且反向传播得到,会有一些问题: 捕获长范围特征依赖需要累计很多层的网络,导致学习效率太低 当需要在比较远的位置之间来回传递消息时,卷积或时序局部操作很困难 由于网络需要累计很深,需要小心的设计模块和梯度 Local & Non-local Local 这个词说的是感受野。以卷积操作为例,它的感受野大小就是卷积核大小,只考虑了局部区域, 因此都是 Local 运算。相反,Non-Local 就是值感受野很大,而不仅仅是一个局部区域。 作者提出了一个泛化、简单、可直接嵌入到当前网络的非局部算子,可以捕获时间、空间和时空的长范围依赖。这样设计的好处: 相比较于不断堆叠卷积和 RNN 算子,Non-local 直接计算两个位置(可以是时间位置、空间位置和时空位置)之间的关系即可快速捕捉长范围依赖 Non-local 的计算效率高 Non-local 可以保证输入尺度和输出尺度不变,这种设计使得 Non-local block 可以很容易嵌入到网络架构中去 Non-local Block 为了能够当作一个组件接入到以前的神经网络中去, Non-local 操作的输入和输出大小一致,具体来说,公式如下: $$y_i = \\frac{1}{C(x)} \\sum_{\\forall j} f(x_i,x_j)g(x_j)$$ 公式中,输入是 x ,可以使图像、序列、视频等,输出是 y。 i 是输出特征图的一个位置,j 是输入所有可能位置索引, f 是相似性计算函数,计算输出中第 i 个位置和其他所有位置的相似性。 g 是一个简单的映射函数,可以看成计算一个点的特征,也就是说,为了计算输出层的一个点,需要将输入的每个点都考虑一遍,而且考虑的方式很像 attention :输出的某个点在原图上的 attention ,而 mask 则是相似性给出。参看下图。 从 GN 的角度来看: 这里的 Entity(Node) 就是公式中的 x,Node的属性就是x的值。两两 Node 之间包含双向的 Edge(很明显也存在双向的自边)。Edge 的属性是 $(a_k^{‘},b_k^{‘})$。 显而易见,这里的 $\\alpha^e$ 就是 $f$ 函数,$\\beta^e$ 就是 $g$ 函数。聚合函数 $\\rho^{e\\rightarrow v}$ 就是 NLNN 的表达式。 Relation NetworksVisual reasoning是个非常重要的问题,由于ResNet等大杀器出现,visual recognition任务本身快要被解决,所以计算机视觉的研究方向逐渐往认知过程的更上游走,即逻辑推理。 下图截取自该论文,可以对 Visual reasoning 又一个更直观的理解: RN 的网络结构十分简单:$$RN(O) = f_\\phi (\\sum_{i,j}g_\\theta(o_i, o_j))$$ Inputs: $O={o_1, …, o_n}$ MLPs: $f_\\phi, g_\\theta$ $g_\\theta$: 使用一个全连接的神经网络来量化 $o_i$ 和 $o_j$ 的关系,任意两个对象之间的关系使用同一套参数 $g_\\theta(,)$ $f_\\phi (\\sum_{i,j}g_\\theta(o_i, o_j))$: 考虑所有组合的关系,相当于考虑一个完全连接图,在这个图上计算各个边的权重,把重要的关系凸显出来,f 函数就计算了这个重要关系的集合。 RNs有以下三个特点: 可以学习推理。这里 RNs 计算了所有的两个对象之间的关系,当然也可以只计算部分两个对象之间的关系,这里的“部分”需要预定义 RNs的数据效率更高(data efficient)。RNs 使用一个 g 函数来计算所有的关系,任意两个对象之间的关系使用同一套参数,泛化能力更强 RNs作用在一个集合上。对输入和输出都是与顺序无关的(input/output invariation) 从 GN 的角度来看: 这里的 Entity(Node) 就是公式中的 o,Node的属性就是 o 的值。两两 Node 之间包含双向的 Edge(很明显也存在双向的自边),Edge 的属性就是$NN_e$的值。$NN_e$ 就是 g 函数,$NN_u$ 就是 f 函数。 小结这篇文章给了我们一个抽象的理解深度模型方法的框架,看完之后加深了对很多模型的理解。 Composable multi-block architectures一个GN block的输入和输出都是 graph, 那么一个 Block 的输出就可以当成另外一個 BLock 的输入.即 $$G^{‘} = GN_2(GN_1(G))$$ 可以但不限于下面三种组合方式: 总结私认为,GN 中最为关键的思想就是 Relations。本文将该框架对应于图的神经网络中各种最新的方法进行了归纳和扩展,图网络 GN 被设计为使用可定制的图到图的模块来构建复杂体系结构,它们的关系归纳偏置促进了组合泛化比其它标准机器学习构建块有更高的效率。 REF Relational inductive biases, deep learning, and graph networks https://zhuanlan.zhihu.com/p/40733008 https://zhuanlan.zhihu.com/p/38861547","tags":[{"name":"DL","slug":"DL","permalink":"https://gyh75520.github.io/tags/DL/"}]},{"title":"Attention","date":"2019-02-24T14:01:30.000Z","path":"2019/02/24/Attention/","text":"Attention Mechanism 非常流行,广泛用于机器翻译、语音识别、计算机视觉等很多领域。它之所以这么受欢迎,是因为 Attention 赋予了模型区分辨别的能力。深度学习中的注意力机制从本质上和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。 人类的注意力机制可以使我们专注于某个具有“高分辨率”的区域(即查看黄色方框中的尖耳),同时以“低分辨率”感知周围的图像(观察背后的雪景和服装),最后调整聚焦点然后做出推断,这是一只狗。 给定图像的一小块,图像的其他区域包含了这一小块区域应该显示什么的线索。我们希望在黄色的方框中看到尖尖的耳朵,是因为我们看到了狗的鼻子,右边的尖耳朵以及柴犬的眼睛。然而,底部的毛衣和毯子不如那些狗的特征有用。 同样地,我们可以用一句话或近距离的上下文来解释单词之间的关系,当我们看到吃的时候,我们期待着很快会遇到一个食物的单词。 对于上图来说,eating 和 apple 有着更高的 attention,与它更近的 green 反而 attention 低。 Seq2Seq ModelSeq2Seq 全名是Sequence to Sequence,也就是从序列到序列的过程。Seq2Seq常见情形为机器翻译,Seq2Seq 包含两部分 Encoder 和 Decoder。一旦将句子输入 Encoder ,即可从 Decoder 获得目标句。 图中的 C 指的是 context vector ,context vector 可以想象成一个含有所有输入信息的向量,也就是 Encoder 当中最后一个 hidden state。Encoder 将输入句压缩成固定长度的 context vector ,context vector 即可完整表达输入句,再透过 Decoder 将 context vector 内的信息产生输出。 这样做存在两个问题: 把输入 x 的所有信息压缩到一个固定长度的隐向量 C 。当输入句子长度很长时,特别是比训练集中最初的句子还长时,模型的性能急剧下降。 把输入 x 编码成一个固定长度的 C ,对于句子中每个词都赋予相同的权重。但是词与词之间的翻译一般有对应关系,如果对输入的每个词赋予相同的权重,没有表现出翻译的区分度。 机器翻译中的 Attention model前面展示的 Encoder-Decoder 模型是没有体现出 注意力 的。观察下目标句子中每个单词的生成过程:$$y_1 = G(C)$$$$y_2 = G(C,y_1)$$$$y_3 = G(C,y_1,y_2)$$ 其中 G 是非线性的变换函数。可以发现,在生成目标句子的单词时,无论生成哪个单词,它们使用的输入句子 Source 的语义编码 C 都是一样的,没有任何区别。这意味着 Source 中每个单词对生成某个目标单词 $y_i$ 来说影响力都是相同的,没有体现出注意力。 在 Attention model 中,Encoder 和 Seq2Seq 一样是从输入句 $ x_1,x_2,x_3…x_m$ 产生 $ h_1,h_2,h_3…h_m $的 hidden state, 再计算目标句 $ y_1,y_2,y_3..y_m $。差别就在于 context vector 怎么计算。 $$C_i = \\sum_{j=1}^{T_x} \\alpha_{ij}h_j$$ Context vector 是通过 attention score $\\alpha$ 乘上输入句的 hidden state 加权求和。Attention score 用来衡量输入句中每个文字对目标句中的每个文字所带来的重要性的程度。 $$ Attention \\; score \\; \\alpha_{ij} = \\frac{exp(e_{ij})}{\\sum_{k=1}^{T_x}exp(e_{ik})} $$ 其中$$Socre \\; e_{ij}=a(s_{s_{i-1}},h_j)$$ 在计算 Score 中,a 代表Alignment model,它根据输入字位置 j 和输出字位置 i 计算这两者的关联程度计算出 $score \\; e_{ij}$。 下表是几种常见的 attention mechanisms 和对应的 alignment score functions: 有了 $Score \\; e_{ij}$之后,即可通过 softmax 计算出 Attention score ,Context vector 也可以得到。我们可以将 Context vector 列为矩阵,通过此矩阵看到输入端文字和输出端文字间的对应关系。 x 轴和 y 轴分别对应输入轴和输出轴,每个像素表示输入句中的第 j 个文字对应目标句中的第 i 个文字的权重大小,即 Attention score (0:黑,1:白)。 可以把 Attention 理解为从大量信息中有选择地筛选出少量最重要的信息并聚焦到这些重要信息上,忽略大多不重要的信息。其中聚焦的过程体现再权重系数的计算上,权重越大越聚焦于对应的特征值上,即权重代表了信息的重要性,而对应特征是其需要重点学习的知识。 Attention 机制应用分为三步: 根据已有的结果与隐变量 h 建立相关性,即 $Socre \\; e_{ij}=a(s_{s_{i-1}},h_j)$ 对步骤一中的关系原始分进行归一化处理,即 $ Attention \\; score \\; \\alpha_{ij} = \\frac{exp(e_{ij})}{\\sum_{k=1}^{T_x}exp(e_{ik})} $ 根据归一化的权重系数对隐变量 h 中的数值进行加权求和,即 $C_i = \\sum_{j=1}^{T_x} \\alpha_{ij}h_j$ 视觉应用中的 Attention Model与机器翻译中的 Attention 应用思想类似,视觉中的 Attention 其实也是学出一个权重分布,再拿这个权重分布施加在原来特征之上。不过施加权重的方式略有差别,视觉应用一般有以下几种施加方式: 1. 加权可以保留所有的分量做加权(soft attention)2. 可以在分布中以某种采样策略选取部分分量做加权(hard attention)3. 加权可以作用在原图上4. 加权可以作用在空间尺度上,给不同空间区域加权5. 加权可以作用在 Channel 尺度上,给不同通道特征加权6. 加权可以作用在不同时刻的历史特征上 等 soft 和 hard attention 的定义起源于 Show, Attend and Tell: Neural Image Caption Generation with Visual Attention 文章。图像标注(Image caption),就是从图片中自动生成一段描述性文字,类似于“看图说话”。机器不仅要检测出图像中的物体,而且要理解物体之间的相互关系,最后还要用合理的语言表达出来。 Image caption model with LSTM在讨论 attention 之前,我们快速回顾以下如何使用 LSTM 进行图像标注,图像标注同样离不开 Encoder-Decoder 结构。 Encoder使用 CNN 从图片提取特征 X ,作为 LSTM cells(Decoder) 的输入。每个 LSTM cell 接受上一个隐状态 $h_{t-1}$ 和 图像特征 X ,输出新的隐状态 $h_{t}$。最后我们使用 $h_{t}$ 对下一个单词进行预测。 $$h_t = f(x,h_{t-1})$$$$next word = g(h_t)$$ AttentionLSTM 与 Attention 模型之间的关键区别在于 Attention 会关注特定区域和对象,而不是平等地处理整个图像。例如,标注的一开始,我们首先 Attention 走向我们的这个人。我们预测的第一个单词为 “A”,并将上下文更新为 “A”。我们保持 Attention 的区域不变,预测下一个单词为 “man”。对于接下来的预测,我们的 Attention 转移到他手里拿了什么。通过不停的探索和转移 Attention 区域,我们生成了这张图片的标注 “ A man holding a couple plastic containers is walking down an intersection towards me.” 从数学来看,我们替换 LSTM 模型中的 X:$$h_t = f(x,h_{t-1})$$ 使用 Attention module:$$h_t = f(attention(x,h_{t-1}),h_{t-1})$$ Attention module 的输入为 $h_{t-1}$ 和 四个 CNN 提取的高维空间区域($x_1,x_2,x_3,x_4$)。为了更好的理解,下图将 features map 可视化为它可能表示的原图。 Soft attentionSoft attention 的计算和前文介绍的机器翻译Attention model 方法一致。 由于使用了Attention机制,我们可以根据权重系数 $\\alpha$ 的大小,得知在生成每个词时模型关注到了图片的哪个区域。下图展示了一些例子,每个句子都是模型自动生成的,在图片中用白色高亮标注了生成下划线单词时模型关注的区域: 使用 Soft attention 的整个模型光滑、可微,利用反向传播来进行 end-to-end 训练。 Hard attention在 Soft attention 中,我们为每个 $x_i$ 都计算了一个权重 $ Attention score \\alpha$,并使用它作为计算 LSTM 输入的加权平均。而 Hard attention 使用 $\\alpha$ 表示是否选择 $x_i$ 作为 LSTM 的输入。 Hard Attention是一个随机的过程。Hard Attention不会选择整个encoder的输出做为其输入,Hard Attention 会依概率 Si 来采样 encoder 输出的一部分来进行计算,而不是整个encoder的输出。为了实现梯度的反向传播,需要采用蒙特卡洛采样的方法来估计模块的梯度。 Hard Attention 无法嵌入到网络中进行学习,这也导致 Soft Attention 更受欢迎。 相关论文:soft attention: esidual Attention Network for Image Classification Squeeze-and-Excitation Networks CBAM: Convolutional Block Attention Module hard attention: Recurrent Models of Visual Attention RAM 应用强化学习机制,在每一个时间点,agent 只能在一个局部的区域获取图像部分信息; 根据后的部分信息提取网络特征,对局部图像进行分类,弱分类正确 奖励 +1,否则 +0; 根据奖励信息引导 agent 寻找下一个局部区域,从而获得图像中有效的局部位置。 这个寻找图像局部区域的过程,可以理解为 RAM 算法学习Hard Attention 的过程。 Multiple Object Recognition with Visual Attention 作用在原图: Recurrent Models of Visual Attention Multiple Object Recognition with Visual Attention Hierarchical Attentive Recurrent Tracking (使用了分层 待补坑) 作用在空间区域: Show, Attend and Tell: Neural Image Caption Generation with Visual Attention Residual Attention Network for Image Classification Squeeze-and-Excitation Networks BAM: Convolutional Block Attention Module 作用在时间序列: Action recognition using visual attention Attending to Distinctive Moments: Weakly-Supervised Attention Models for Action Localization in Video Attention-aware deep reinforcement learning for video face recognition 3D Attention-Based Deep Ranking Model for Video Highlight Detection 机器翻译中的 Self-Attention之前的 Attention 存在以下几个方面的问题 Attention 机制过度依赖在 Encoder-Decoder 架构上 Attention 机制依赖于 Decoder 的循环解码器,所以依赖于 RNN、LSTM 等循环结构 Attention 依赖循环结构,无法做到并行训练,训练速度受到影响 Attention 本质是通过对比输入空间和输出空间的特征,学习 Attention 权重因子 Attention 忽略了输入句中文字间的关系,同时也忽略了输出句中文字间的关系 Self-Attention 脱离了 Encoder-Decoder 架构和循环结构,并且针对输入空间特征或者输出空间特征单独学习权重因子,它不需要同时依赖两个空间的联系。 Self-Attention 是 Google 在 “Attention is all you need” 论文中提出的 The Transformer 模型中主要的概念之一。 在 Attention model 是从输入句 $ x_1,x_2,x_3…x_m $ 产生 $ h_1,h_2,h_3…h_m $的 hidden state,通过 $Attention \\; socre \\; \\alpha $ 乘上 input 的加权求和得到 Content vector C。有了 Content vector C 和 hidden state vector 即可计算目标句 $ y_1,y_2,y_3..y_m $。 我们从另外一个角度来看 Attention model : 输入句的每个文字是由一些列成对的 构成,而目标文字中每个字是 Query 。那么就可以用 Key 、 Value 、 Query 去重新解释如何计算 Context vector,通过计算 Query 和各个 Key 的相似性,得到 每个 Key 对应 Value 的权重系数,权重系数代表信息的重要性,即 Attention Score 。最后对 Value 进行加权求和,就可以得到最终的 Context vector。 The Transformer 计算 Attention 的方式有三种,如下图 Encoder self attention 存在于 Encoder 中 Decoder self attention 存在于 Decoder 中 Encoder-Decoder attention 这种 Attention 和之前的 Attention 相似 计算 Encoder self attention 首先,创建 Encoder 的输入向量 Q 、 K 、 V,举个例子,“Are you very big?”中的每个单词的隐向量都有自己的 Q 、 K 、 V。 接着计算 $score (q_t,k_s)$ ,和 Attention model 中的 $score e_{ij}$ 类似。假设我们计算第一个单词 “Are” 的 self-attention ,我们将输入句中的每个单词 “Are” “you” “very” “big” 分别和 “Are” 去做比较,这个分数决定了我们在 encode 某个特定位置的单词时,应该给予多少 Attention 。所以,我们计算位置 1 的 Self-attention, 第一个分数是 $Similarity(Are,Are)$,第二个分数是$Similarity(Are,you)$,以此类推。 然后将得到的分数做一层 softmax 得到 Attention Score。代表我们应该放多少 Attention 在这个位置。 最后一步就是把 Attention Score 乘上 Value,然后加总得到 Context vector Z。 整个计算过程如下图所示: 计算 Decoder self attention Decoder 的运作模式和 Encoder 类似,不同的地方在于,为了避免解码时,还在翻译前半段,就突然得到了后半段的句子,所以会在计算 self-attention 时的 softmax 前 mask 掉未来的位置。 Encoder-Decoder attention Encoder-Decoder attention 和 Encoder/Decoder attention 不一样,它的Query 来自于 Decoder attention,而 Key 和 Value 则是来自于 Encoder 的 output。 Multi-head attention 如果我们只计算一个 attention ,很难捕捉到句子中所有空间信息,为了优化模型,论文提出了一个新的做法:Multi-head attention。不仅仅对 Key 、 Value 、Query 做单一的 attention ,而是把 Key 、 Value 、Query 线性映射到不同的空间 h 次,再各自做 attention。这样就可以从不同的维度和表示的子空间里学习到相关的信息。 通过 The Transformer ,我们可以使用 Multi-head attention 来解决并行化和计算复杂度过高的问题,依赖关系也可以通过 Self-attention 中单词与单词之间的比较方式来克服。 SNAILTransformer 模型没有 RNN 或者 CNN 结构,即使引入位置相关的编码,也是一种序列顺序的弱整合,对于位置敏感的任务,比如强化学习,这是一个问题。 待补坑 视觉中的 Self-AttentionNon-local Neural Networks 在捕捉长距离特征之间依赖关系的基础上提出了一种非局部信息统计的注意力机制。 不管是 CV 任务还是 NLP 任务,都需要捕捉长范围依赖。在时序任务中,RNN 是一种主要的捕获长范围依赖手段,而在 CNN 中是通过堆叠多个卷积块来形成的大感受野。目前的卷积和循环结构都是在空间或者时间上的局部操作,长范围的依赖捕获是通过重复堆叠,并且反向传播得到,会有一些问题: 捕获长范围特征依赖需要累计很多层的网络,导致学习效率太低 当需要在比较远的位置之间来回传递消息时,卷积或时序局部操作很困难 由于网络需要累计很深,需要小心的设计模块和梯度 Local & Non-local Local 这个词说的是感受野。以卷积操作为例,它的感受野大小就是卷积核大小,只考虑了局部区域, 因此都是 Local 运算。相反,Non-Local 就是值感受野很大,而不仅仅是一个局部区域。 作者提出了一个泛化、简单、可直接嵌入到当前网络的非局部算子,可以捕获时间、空间和时空的长范围依赖。这样设计的好处: 相比较于不断堆叠卷积和 RNN 算子,Non-local 直接计算两个位置(可以是时间位置、空间位置和时空位置)之间的关系即可快速捕捉长范围依赖 Non-local 的计算效率高 Non-local 可以保证输入尺度和输出尺度不变,这种设计使得 Non-local block 可以很容易嵌入到网络架构中去 Non-local Block 为了能够当作一个组件接入到以前的神经网络中去, Non-local 操作的输入和输出大小一致,具体来说,公式如下: $$y_i = \\frac{1}{C(x)} \\sum_{\\forall j} f(x_i,x_j)g(x_j)$$ 公式中,输入是 x ,可以使图像、序列、视频等,输出是 y。 i 是输出特征图的一个位置,j 是输入所有可能位置索引, f 是相似性计算函数,计算输出中第 i 个位置和其他所有位置的相似性。 g 是一个简单的映射函数,可以看成计算一个点的特征,也就是说,为了计算输出层的一个点,需要将输入的每个点都考虑一遍,而且考虑的方式很像 attention :输出的某个点在原图上的 attention ,而 mask 则是相似性给出。参看下图。 为了能让 Non-local操作作为一个组件,可以直接插入任意的神经网络中,作者把 Non-local 设计成 residual block 的形式,让 Non-local操作去学 x 的 residual: $$z_i = W_z \\cdot y_i + x_i$$ $W_i$ 实际上是一个卷积操作,它的输出 channel 数跟 x 一致。这样以来,Non-local 操作就可以作为一个组件,组装到任意卷积神经网络中。 嵌入在 action recognition 框架中的attention map 可视化效果: 图中的箭头表示,之前若干帧中的某些像素对最后图(当前帧)的脚关节像素的贡献关系。由于是 soft-attention,其实每帧每个像素对其有贡献关系,图中黄色箭头是把贡献最大的关系描述出来。 跟全连接层的联系 我们知道,Non-local block 利用两个点的相似性对每个位置的特征做加权,而全连接层则是利用 position-related 的 weight 对每个位置做加权。于是,全连接层可以看成 Non-local block 的一个特例: 任意两点的相似性仅跟两点的位置有关,而与两点的具体坐标无关,即 $f(x_i, x_j)=w_{ij}$ g 是identity函数, $g(x_i)=x_i$ 归一化系数为1。归一化系数跟输入无关,全连接层不能处理任意尺寸的输入。 跟 Self-attention 的联系 Embedding的1*1卷积操作可以看成矩阵乘法: $\\theta(\\mathbb{x}_i)= W_{\\theta} \\cdot \\mathbb{x}_i; \\quad \\phi(\\mathbb{x}_j)=W_{\\phi} \\cdot \\mathbb{x}_j \\quad \\Rightarrow \\quad \\theta(\\mathbb{x})= W_{\\theta} \\cdot \\mathbb{x}; \\quad \\phi(\\mathbb{x})= W_{\\phi} \\cdot \\mathbb{x}$ 于是, $y=\\text{softmax}(\\mathbb{x}^T \\cdot W_{\\theta}^T \\cdot W_\\phi \\cdot \\mathbb{x}) \\cdot g(\\mathbb{x})$ 这和 Attention is all you need 提出的 Self-attention 一致: $Attention(Q,K,V)= softmax(\\frac {QK^T}{\\sqrt d_k}) V $ GAN的 Self-Attention待补坑 基于 Attention 的字符识别待补坑 基于 Attention 的图片生成待补坑 强化学习中结合 AttentionDeep Attention Recurrent Q-Networ最早结合 Attention 到 RL 中的文章 Deep Attention Recurrent Q-Network 在空间进行加权,这里的空间是图片输入 CNN 之后得到的特征空间 features map。具体做法如下图: 本文和 Show, Attend and Tell: Neural Image Caption Generation with Visual Attention 类似,通过计算隐状态 $h_t$ 和 $v_{t+1}$ 的相似性,得到 $Attention \\; Score \\; \\alpha$, 然后计算 $v_{t+1}$ 的加权平均得到 $z_{t+1}$,作为 DQN(使用 LSTM)的输入。 同样的,本文也有 Soft attention 和 Hard Attention 两种计算方式。 Soft Attenton$the \\; context \\; z_t$ 表示为所有特征空间 $v_t^i$ 的加权和,i 代表特征空间每个特征。 计算 $Attention \\; Score \\; \\alpha$ 的为 Attention Network g: $$g(v_t^i,h_{t-1}) = exp(Linear(Tanh(v_t^i)+Wh_{t-1})))/Z$$ 其中 $Linear(Tanh(v_t^i)+Wh_{t-1}))$ 计算隐状态 $h_t$ 和 $v_{t+1}$ 的相似性,Z 是归一化因子,也就是 Softmax。 最后计算 $Z_t$ : $$z_t = \\sum_{i=1}^L g(v_t^i,h_{t-1})v_t^i$$ Hard AttentonHard Attenton 采样的时候要求仅仅从图像也就是特征空间中采样一个 patch。 这个采样可以看成从 $v_t^0 … v_t^N$ 选择一个特征,把这个看成 N 个动作,我们的 Attention Network g 输出就是这 N 个动作的概率,很自然想到使用策略梯度。 策略的更新可以表示为:$$ \\nabla \\theta_t^g \\propto \\nabla_{\\theta_t^g} log \\pi_g(i_t|v_t,h_{t-1})R_{t}$$ 这里的 $R_t$ 是选择 Attention 区域 $i_t$ 后的累计回报。 添加一个新的网络 $G_t = Linear(h_t)$ 用于估计值 $R_t$ ,借鉴 Advantage 的思想,最后 Attention Network 参数更新方式如下: $$ \\theta_{t+1}^g = \\theta_t^g + \\alpha \\nabla_{\\theta_t^g}log \\pi_g(i_t|v_t,h_{t-1})(G_t - Y_t)$$ 其中 $Y_t = r_t + \\gamma max_{a_{t+1}} Q(s_{t+1},a_{t+1})$,Advantage 部分为 $(G_t - Y_t)$ 除了 Attention Network,model 剩余的部分和 DQN 基本上一致 实验 可以看出,这种简单的设计并没有体现出加入 attention 的优势。 Control of Memory, Active Perception, and Action in MinecraftControl of Memory, Active Perception, and Action in Minecraft 是对记忆进行加权,也就是对输入 state sequence 进行加权。 如上所示,一共有I型迷宫、匹配迷宫、随机迷宫和带指示器的随机迷宫4种迷宫。每种迷宫的任务设计即有相似,又有区别: I型迷宫: 在此迷宫中,有一个指示器,其颜色为绿色或黄色,两种颜色出现的几率一致。当指示器颜色为绿色时,史蒂夫需要前往蓝色处得到+1的奖励,如果去了红色处,则会得到-1的惩罚。当指示器颜色为绿色时,情况相反。 匹配迷宫: 在此迷宫中,有两个房间。如果两个房间中底板的图样一致,史蒂夫需要前往蓝色方块处,得到+1奖励,如果去了红色则-1。如果两个房间中底板的图样不一致,那么情况相反。 随机迷宫: 迷宫的形态每次都是随机产生的,其中有两种类型的任务: 单一目标:找到蓝色方块+1奖励,如果过程中触碰了红色方块则惩罚-1。 顺序目标:先踩上红色方块得到+0.5奖励,再踩上蓝色方块得到+1奖励。如果踩方块顺序错误,则得到-0.5和-1的惩罚。 带指示器随机迷宫: 情况和随机迷宫类似,但是有指示器,会显示绿色或者黄色,两种颜色显示概率相等,也有两种任务: 有指示器的单一目标:如果指示器是黄色,那么找到红色方块得到+1奖励,踩上蓝色方块则-1惩罚(史蒂夫的第一次死亡正是在这种情况下)。如果指示器是绿色,那么那么找到蓝色方块得到+1奖励,踩上红色方块则-1惩罚。 有指示器的顺序目标:如果指示器是黄色,那么史蒂夫要先踩上蓝色方块,再踩上红色方块。如果指示器是绿色,那么史蒂夫要先踩上红色方块,再踩上蓝色方块。顺序正确则分别得到+0.5和+1的奖励,顺序错误就得到-0.5和-1的惩罚。 这些任务被称为认知启发任务(Cognition-inspired tasks)。也就是说,这些任务需要一定的认知能力才能完成。想象一下我们人在这些迷宫中做这些任务。我们需要思考(比如碰到红色会电死),我们需要记忆(比如匹配迷宫任务中两个房间的形状),我们甚至需要推理(比如匹配迷宫中如果房间形状相同则选择蓝色),我们还需要决策(也就是每一个时刻应该往左边走还是右边走)。 本文设计了一个 Memory 结构,具体如下: 很明显可以看出这是一个 soft attention,整个 model 包含三个部分 Encoding, Memory and Context Encoding这一步和DQN的神经网络一样,就是使用一个CNN来提取特征,不同的是这里只是到全连接层,目的是为了获取经过CNN压缩的图像特征信息。上图的 $\\varphi$ 就是表示这个卷积处理的过程。 $$ e_t = \\phi^{enc}(x_t)$$ MemoryWrite:$$M_t^{key}=W^{key}E_t$$$$M_t^{val}=W^{val}E_t$$ 其中的 W 是参数。输入是已经编码的图像特征信息 $E_t = concate(e_{t-1},e_{t-2},…,e_{t-M})$,输出就是存起来的“记忆”M。 Read$Attention \\; score \\; \\alpha$ 计算如下: $$p_{t,i} = \\frac{exp(h_t^TM_t^{key}[i])}{\\sum^M_{j=1} exp (h_t^TM_t^{key}[j]))}$$ Attention Context (在本文被称为 Memory):$$o_t = M_t^{val}p_t$$ Context加入 $ o_t$ 后,LSTM 的更新公式为$$ [h_t,c_t] = LSTM([e_t,o_{t-1}],h_{t-1},c_{t-1})$$也就是把上一个时刻提取的记忆也作为输入 最后计算 Q 函数公式如下:$$ q_t = \\varphi^q(h_t,o_t)$$ FRMQN 的结构如下: 我们都知道LSTM也是一个记忆模块,那么为什么还专门弄一个 Memory 呢? LSTM影响的是 Context 上下文。而 Memory 则可以直接影响最后的Q值。两者的作用不一样。从功能实现上看,Memory更具化某一个记忆而且是最近的M次观察的记忆,而LSTM则是累积整个时间序列的记忆。 实验以匹配迷宫任务为例,我们观察下面这张图表: 通过训练,使用FRMQN结构的算法最后能够在训练集的所有任务中顺利达成目标。而算法在面对其并没有见过的测试用的匹配迷宫时,凭借它在训练中的得到的“经验”,顺利达成任务的概率是91.8%。 Multi-focus Attention Network for Efficient Deep Reinforcement LearningMulti-focus Attention Network for Efficient Deep Reinforcement Learning 来自 AAAI 2017 Workshop on What’s next for AI in games 提出了一个 Multi-focus Attenion Network,可以应用到 Single Agent 和 Multi-Agent。 上图是一个 grid world 导航任务的地图。每个 cell 代表这个地图的一个像素点,整个地图就是模型的输入。Agent A 按照(W1,W2,W3,W4) 的顺序依次访问每个 cell 。两幅图中,W1 的绝对位置不同,但是相对 A 的位置相同。因此,如果 RL model 学会了左边的图的策略,那么它在学右图的任务时应该可以 faster 。然而,这两张图对于 DQN 来说是完全两个不同的 states。所以,学习右图 A 到 W1 是一个独立的过程。前面介绍的 DARQN 算法,只有一层 attention ,只学习到了一种 entities 的关系。 于是,本文提出了 Multi-focus Attention Network,尝试学习多种 Attentions。 Multi-focus Attention Network整个 model 分为四个部分,(a) Input segmentation, (b) Feature extraction, (c) Parallel attentions, (d) State-action value estimation。 Input segmentation这个模块将输入简单分成多个 segments ,将其称为 partial states。具体做法,将输入图像划分成均匀的 grid ,有规则的选择 cells 作为 partial state。 Feature extraction这个模块是为了构建 Key Value。 对于每个 partial state,先通过一个公共的特征提取层,比如 CNN。 $$ c_i = f_f(s_i) \\; for \\; all \\; i \\in (0,1,…,K)$$ 然后构建 Key 和 Value: $$Key_i = W_{key} \\cdot c_i$$$$Val_i = f_v(W_{val} \\cdot c_i)$$ 其中的 i 都表示第 i 个 partial states,$f_v$ 代表激活函数 Parallel attentions为了学到不同的 Attentions,我们就要有不同的 Query ,这里不再使用 RNN 中隐状态作为 Query。本文定义了 N 个 selector vector $a_0,a_1,…,a_{N-1}$ 作为 N 个 Query。 于是可以得到 N 个 Attention Score: $$A_i^N = \\frac{exp(a_n \\cdot Key^T_i)}{\\sum_j exp(a_n \\cdot Key_j^T)} \\; for \\; all \\;n \\in (0,1,…,N-1)$$ 所有的 $a_n$ 都在训练之前随机初始化,为了让不同的 attention layers 学到不同的 attentions ,还加入了正则化,这里不再赘述。 State-action value estimation很自然地,我们可以得到 N 个 context vector h:$$ h_n = \\sum_i Val_i \\cdot A_i^n$$ 接着我们把 N 个 vector 拼接起来 :$$ g = concat(h_0,h_1,…,h_N) $$ g 就是最后计算 Q 函数的输入: $$ Q = f_q(g)$$ Extension to the Multi-Agent Reinforcement Learning在 Multi-Agent 的任务中,每个 Agent 观察的是 partially atates,是整个环境状态的一部分。 Input segmentation和 Single Agent 一样,不再赘述 Feature extraction$$ c_i = f_f(s_i) \\; for \\; all \\; i \\in (0,1,…,K)$$ 然后构建 Key 和 Value,Query: $$Key_i = W_{key} \\cdot c_i$$$$Val_i = f_v(W_{val} \\cdot c_i)$$$$ a_i = W_a\\cdot c_i$$ 这里的 i 不再表示第 i 个 partial states,而是表示第 i 个 Agent。注意到这里的 Query 和前面不一样了。 于是可以得到 K 个 Agent 的 Attention Score: $$A_j^i = \\frac{exp(a_i \\cdot Key^T_j)}{\\sum_{j’} exp(a_i \\cdot Key_{j’}^T)} \\; for \\; all \\;i,j \\in (0,1,…,K)$$ $A_j^i$ 表示 Agent j 对 Agent i 的权重。越高表示Agent j 拥有对 Agent i 更有用的信息。 State-action value estimation同样地,我们可以得到 K 个 Agent 的 context vector h:$$h_i = \\sum_j Val_j \\cdot A_j^i \\in (0,1,…,K)$$$$g = concate(Val_i,h_i)$$这里 $h_i$ 是第 i 个 Agent 的 communication feature 最后计算每个Agent 的 Q 值: $$ Q_i = f_q(g_i)$$ 实验https://www.youtube.com/watch?v=SgTPicFbj5Q Relational Deep Reinforcement LearningRelational Deep Reinforcement Learning 使用了 Self-Attention 在空间进行加权。 实验做的好 Relational recurrent neural networksRelational recurrent neural networks 使用了 Self-Attention 对记忆进行加权。 Multi-Agent 中结合 Attention待补坑 REF: https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html https://zhuanlan.zhihu.com/p/37601161 https://medium.com/@bgg/seq2seq-pay-attention-to-self-attention-part-1-%E4%B8%AD%E6%96%87%E7%89%88-2714bbd92727 https://jhui.github.io/2017/03/15/Soft-and-hard-attention/ https://medium.com/@bgg/seq2seq-pay-attention-to-self-attention-part-2-%E4%B8%AD%E6%96%87%E7%89%88-ef2ddf8597a4 https://zhuanlan.zhihu.com/p/33345791 https://zhuanlan.zhihu.com/p/21320865","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"},{"name":"CV","slug":"CV","permalink":"https://gyh75520.github.io/tags/CV/"}]},{"title":"RND(Exploration by Random Network Distillation)算法","date":"2018-11-20T14:01:30.000Z","path":"2018/11/20/RND/","text":"传统上,Agent 从他们的经验中学习下一状态预测模型,并将预测误差用作内在 reward。与现有方法不同,RND引入的内在 reward 基于预测下一状态下固定且随机初始化的神经网络的输出。在不熟悉的状态下,很难预测输出,因此奖励很高。 它可以应用于任何强化学习算法,实现简单而且高效。 研究问题强化学习( RL )方法的目标是最大化策略的期望 return。当环境中有大量 reward 时,传统的探索方法很有效,这些奖励很容易通过随机的一系列行动找到,但是当奖励很少且很难找到时,这种方法往往会失效。 经典的 DQN 算法在《蒙特祖玛的复仇》中无法取得任何得分。简单的探索策略极不太可能得到任何奖励,或者看到该级别的24个房间中的更多,从那时起,该游戏进展被许多人视为探索进步的代名词。 之前有关 Curiosity-Driven 的文章大都是从经验中学习下一状态的预测模型,并将预测结果和实际结果的误差作为内在 reward 使用。 基于 Curiosity-Driven 的 Next-State 预测模型 Noisy-TV 问题Agent 被安排在一个迷宫里,它的任务是找到最高奖励的对象(和在超市里找奶酪的道理一样)。迷宫中有一台电视,而 Agent 有它的遥控器。但是电视只有几个台(每个台放的节目不一样),每按一下遥控器,电视就会随机切换频道。在这种情况下, Agent 应该怎么做呢? 对于基于误差的好奇心方程来说,调换频道会导致较大的奖励,因为每次换台都是无法预测的,充满惊喜。重要的是,当所有频道轮换一遍之后,随机选择仍会让 Agent 感到惊奇, Agent 仍然可能会预测错误。所以, Agent 为了获得不断的惊喜、得到奖励,就会一直站在电视机前不走。所以为了避免这种情况,该如何重新定义好奇心呢? 因为 TV 上的\b节目是随机播放的,也就是下一状态根本无法预测,之前的 Curiosity-Driven 的预测模型无法解决这个问题。在《蒙特祖玛的复仇》游戏里,基于 与现有方法不同,RND引入的内在 reward 基于预测下一状态下固定且随机初始化的神经网络的输出。在《蒙特祖玛的复仇》游戏中,基于 Curiosity-Driven 的算法会出现在两个房间来回切换的问题。 Random Network Distillation对于预测模型,一般来说,预测误差和四个因素有关: 预测器无法泛化,因为训练集不够 预测目标是随机的 缺少必要的输入信息 模型能力不足以适应目标函数 第一点是必要的,泛化能力差就代表了预测误差高也就是好奇心高。第二点导致到了Noisy-TV问题,应该避免。同样的,第三点和第四点也要去除。 于是提出了RND算法,引入的内在 reward 是基于预测下一状态下 固定且随机初始化的神经网络 的输出。 通过两张图片的对比可以发现,之前的 Curiosity-Driven 算法输入是 $(O_i,a_i)$,输出是下一状态的预测 \b$\\hat{f_{i+1}}$,对于 Noisy-TV 问题,下一状态 $\\hat{f_{i+1}}$ 是无法确定的,自然也就无法预测,永远会算出一个很高的好奇心,对应了第二点。 而RND模型预测的输出是确定的,规避了第二点。为了避免三号和四号因素,RND 选择和目标网络相同的架构。 实验超级马里奥: Agent通过了11关,找到了许多隐藏的房间,并打败了库巴大魔王。 蒙特祖玛的复仇: 最好成绩,当然是24个房间都攻破,顺利通过第一关,得分17.5k。 并且,多数情况下,智能体都能解锁20-22个房间,得分14.5k。 对比一下,人类平均分是4.7k。 等等 REF: Exploration by Random Network Distillation https://blog.openai.com/reinforcement-learning-with-prediction-based-rewards/","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"MADDPG(Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments)算法","date":"2018-11-19T14:01:30.000Z","path":"2018/11/19/MADDPG/","text":"由于环境状态由多个Agent的行为共同决定,本身具有不稳定性(non-stationarity),这就导致 Q-learning 算法很难训练,policy gradient 算法的方差会随着智能体的增加变得更大。 本文提出了一种AC方法的变体 MADDPG ,每个 agent 学习的过程中都可以知晓其他 agent 的策略,进行中心化训练和非中心化执行,取得了显著效果\b。 研究问题在 multi-agent 环境中,大多数的设置是 agent 不能直接知道其他 agent的 action,policy 等信息的, 传统强化学习方法很难用在multi-agent环境上,一个主要的原因是每个agent的策略在训练的过程中都是不断变化的,这导致对每个agent个体来说,环境都是不稳定的,即有$P(s^{‘}|s,a,π_1,…,π_N) \\not = P(s^{‘}|s,a,π^{‘}_1,…,π^{‘}_N)$,对任意的$π_i\\not =π^{‘}_i$。 某种程度上来说,一个agent根据这种不稳定的环境状态来优化策略是毫无意义的,在当前状态优化的策略在下一个变化的环境状态中可能又无效了。这就导致不能直接使用经验回放(experience replay)的方法进行训练,这也是Q-learning失效的原因。对于policy gradient方法来说,随着agent数量增加,环境复杂度也增加,这就导致通过采样来估计梯度的优化方式,方差急剧增加。 这些问题归根到底,是因为agent之间没有交互,不知道队友或者对手会采取什么策略,导致只根据自己的情况来选择动作,而忽略了整体。作者提出的解决方法也很简单:采用中心化的训练和非中心化的执行。即在训练的时候,引入可以观察全局的critic来指导actor训练,而测试的时候只使用有局部观测的actor采取行动。 idea既然在实际中不知道其他 agent 的信息,但是其他的 agent 的信息能够很好的帮助学习,很自然的就会想:那么我们就在训练的时候使用这些信息,实际运用的时候的不用这些信息,那就不就很自然地学习出一个更好的 agent 了。 更进一步:我们想要在off-line的时候利用更多的信息学习出一个拥有比较好policy的agent,但是为了能够在实际的设置中使用,这个agent的policy的输入与输出在训练与实际使用的时候应该一样,所以无法直接把额外的信息直接结合在policy的输入中,那么有一种想法就是这些额外的信息既然无法直接用,那么就拿来做更准确的梯度的估计,那么很直观的想法就是用AC。 主要的原因是:AC分为actor,critic,如果实际使用中不进行训练的话,那么on-line与off-line的共同点就是actor,所以这里的actor我可以设计的尽可能通用,比如只采用自己的observation, $\\pi_i(a|o_i)$ ,然后将额外的信息交给critic,让critic能够帮助 policy 算出更准确的梯度。 具体方法先画一个简图来说明DDPG结构的输入输出:当策略训练好后,只需要actor与环境交互,即只需要绿色的循环,其中actor的输入为环境状态$S$,输出为具体动作 $a$ 。而在训练过程中,需要critic获得当前的环境状态和actor采取的动作,组成状态动作对(S,a)作为输入,输出状态动作对的价值V(或Q)来评估当前动作的好坏,并帮助actor改进策略。 接着是 MADDPG,以两个agent为例,同样画出输入输出的简图如下: 当模型训练好后,只需要两个actor与环境交互,即只需要绿色的循环。这里区别于单个agent的情况,每个agent的输入状态是不一样的。环境输出下一个全信息状态SallSall后,actor1 和 actor2 只能获取自己能够观测到的部分状态信息$S_1,S_2$。而在训练过程中,critic1和critic2可以获得全信息状态,同时还能获得两个 agent 采取的策略动作$a_1,a_2$。也就是说,actor虽然不能看到全部信息,也不知道其他actor的策略,但是每个actor有一个上帝视角的导师,这个导师可以观测到所有信息,并指导对应的actor优化策略。整个过程为中心化的训练和去中心化的执行。这种改进,理论上将之前环境不稳定的问题得以缓解。 即$P(s^{‘}|s,a,π_1,…,π_N) \\not = P(s^{‘}|s,a,π^{‘}_1,…,π^{‘}_N)$,对任意的$π_i\\not =π^{‘}_i$转变为$P(s^{‘}|s,a_1,…,a_N,π_1,…,π_N)=P(s^{‘}|s,a_1,…,a_N)=P(s^{‘}|s,a_1,…,a_N,π_1^{‘},…,π_N^{‘}) $ for any $π_i \\not =π_i^{‘}$。 Inferring Policies of Other Agents知道其他agent的策略这个假设其实特别强, 放宽假设:知道对手的action,不知道对手的policy。然后通过观察到的action来拟合出对手的policy 所以可以采用极大似然估计来估计policy,另外加上一个entropy让policy不会太确定: $$L(\\phi_i^j) = -E_{o_j, a_j}[log \\hat u^j_i(a_j|o_j) + \\lambda H(\\hat u_i^j) ]$$ loss = 交叉熵 + 自熵 critic更新的时候使用估计出来的 policy。 Agents with Policy Ensembles很多时候agent使用的策略只对当前的其他agent使用的策略有效,一旦其他agent稍微变化效果就变差,所以在这里我们对每个agent都训练k个不同的策略,然后在每次play的时候就在这个策略集中随机挑选一个,那么这样就有可能能够学出k个不同的策略,但是在实际中,我们只使用一个policy,所以我们可以利用这k个策略来做权衡,学习出一个总的策略: $$J_e(u_i) = E_{k \\sim unif(1, K), s \\sim p^u, a \\sim u_i^{(k)}}[R_i(s, a)]$$ 对于每个sub policy单独采用MADDPG学习 实验https://www.youtube.com/watch?time_continue=20&v=QCmBo91Wy64 REF: Lowe R , Wu Y , Tamar A , et al. Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments[J]. 2017. http://www.cnblogs.com/initial-h/p/9429632.html https://zhuanlan.zhihu.com/p/32333293","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"UNREAL(UNsupervised REinforcement and Auxiliary Learning)算法","date":"2018-08-30T14:01:30.000Z","path":"2018/08/30/Unreal/","text":"作者通过添加辅助任务增强了A3C(Asynchronous Actor Critic)算法。这些辅助任务共享网络参数,但是它们的价值函数是通过 n-step 的 off-policy 的 Q-Learning 来学习的。辅助任务只用于学习更好的表示,而不直接影响主任务的任务control。这种改进被称为UNREAL(Unsupervised Reinforcement and Auxiliary Learning),在性能和训练效率方面优于A3C。 ideaA3C 算法充分使用了 Actor-Critic 框架,是一套完善的算法,因此,我们很难通过改变算法框架的方式来对算法做出改进。UNREAL 算法在 A3C 算法的基础上,另辟蹊径,通过在训练 A3C 的同时,训练多个辅助任务来改进算法。UNREAL 算法的基本思想来源于我们人类的学习方式。人要完成一个任务,往往通过完成其他多种辅助任务来实现。比如说我们要收集邮票,可以自己去买,也可以让朋友帮忙获取,或者和其他人交换的方式得到。UNREAL 算法通过设置多个辅助任务,同时训练同一个 A3C 网络,从而加快学习的速度,并进一步提升性能。 UNREAL 算法本质上是通过训练多个面向同一个最终目标的任务来提升行动网络的表达能力和水平,符合人类的学习方式。值得注意的是,UNREAL 虽然增加了训练任务,但并没有通过其他途径获取别的样本,是在保持原有样本数据不变的情况下对算法进行提升,这使得 UNREAL 算法被认为是一种无监督学习的方法。基于 UNREAL 算法的思想,可以根据不同任务的特点针对性地设计辅助任务,来改进算法。 网络结构 更详细的网络结构(来自 https://github.com/miyosuda/unreal) : AUXILIARY CONTROL TASKS包括像素控制和隐藏层激活控制。 像素控制(Pixel Control)像素控制是指控制输入图像的变化,使得图像的变化最大。因为图像变化大往往说明Agent在执行重要的环节,通过控制图像的变化能够改善动作的选择。 如何定义\b该任务的 pseudo-reward:将网络输入的 84x84 RGB 图片裁剪成 80x80 的图片,将裁剪的图片以 4x4 cell 为单位分成 20x20 个 gird,每个 cell 的 reward 通过计算每个pixel 和 channels 的像素差的平均值得到。网络最后的输出是 $N_{act}$ x20x20 的 $Q^{aux}$。 具体的网络结构参照图 特征控制(Feature Control)隐藏层激活控制则是控制隐藏层神经元的激活数量,目的是使其激活量越多越好。这类似于人类大脑细胞的开发,神经元使用得越多,可能越聪明,也因此能够做出更好的选择。 类似于 Pixel Control 对 pseudo-reward 的定义,我们计算隐藏层的神经元激活数量作为reward。网络最后的输出也是 $N_{act}$ x20x20 的 $Q^{aux}$。 为了更好的理解辅助控制任务,我们和另外两种很自然的辅助任务的方法做比较。 第一个baseline是pixel reconstruction loss,类似于DSR中对 $\\phi(s_i)$进行反卷积,能够使得网络能够更好的区分不同的状态。 第二个baseline是input change prediction loss,这个可以被看作是预测\b立即的reward,reward的计算类似Pixel Control。( pixel control 是control任务,它预测的是Q值)。 从上图可以看出,pixel reconstruction 可以加速初始的学习,但是会损坏最后的得分。因为它过于专注于重建视觉输入中不相关的部分而没有专注于和奖励有关的部分。 AUXILIARY REWARD TASKS因为在很多场景下,回馈 r 并不是每时每刻都能获取的(比如在 Labyrinth 中吃到苹果才能得1分),所以让神经网络能够预测回馈值会使其具有更好的表达能力。为了学习到最大化reward的policy,Agent 需要能识别出那些可能会产生高 reward 的状态。对 rewarding 状态有良好表示的 Agent能够学习到更好的价值函数,这也意味着Agent能够更容易和更好的学习到策略。 与学习价值函数和学习策略不同,Reward Prediction 任务仅仅只是用来优化Agent 的 features,因此加入 Reward Prediction 不会对原有的价值函数和策略产生偏差。 在 UNREAL 算法中,使用历史连续多帧的图像输入来预测下一步的 reward 作为训练目标,这是一个三分类任务,预测值为 +,0,- 的概率。至关重要的是,由于奖励往往是稀疏的,我们使用 skewed 技术使得 $P(r != 0) = P(r = 0)= 0.5$。能这么做的原因,我猜测是因为这只是一个监督学习。我们只需要将 replay memory 分割成两个集合,分别是reward = 0 的样本和 reward != 0 的样本。 另一个细节是,这里并没有用 LSTM。作者也解释了原因,大概是说这个 auxiliary task,reward prediction 的目的是关注 immediate reward, rather than long-term returns。 Value Function Replay相当于从replay buffer中重新采样进行 V 值函数回归。这一部分相当于将A3C输出的V值网络训练的更好,V值网络更好,策略网络也会更好。 UNREAL结合上述的辅助任务,得到UNREAL算法,Loss函数如下:$$L_{UNREAL}(\\theta)= L_{A3C}+\\lambda_{VR} L_{VR} + \\lambda_{PC} \\sum_cL_{Q}^{(c)}+\\lambda_{RP} L_{RP}$$ 其中 VR = Value Function Replay, PC = Pixel Control, RP = Reward Prediction。在实际的训练中,Loss被拆分成单独的部分训练。 实验实验环境Atari 和 3D迷宫游戏 Labyrinth 实验设置 \bAgent 训练使用的是 n-step Returns,n = 20 Replay \bBuffer 的大小 = 2000 辅助控制任务使用 off-polcy RL 算法(例如,n-step Q-Learning),这样就可以使用经验回放 结果Labyrinth:38% -> 83% human-normalized score.Significantly faster learning, 11x across all levels. Atari:表现更好,更robust。 REF: Jaderberg M, Mnih V, Czarnecki W M, et al. Reinforcement Learning with Unsupervised Auxiliary Tasks[J]. 2016.","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"深度后续强化学习 Deep Successor Reinforcement Learning","date":"2018-05-30T14:01:30.000Z","path":"2018/05/30/Deep_Successor_RL/","text":"一般地,在只给定原始输入观察和奖赏值的情况下,通过基于模型(model-based)或者模型无关 (model-free)的DRL算法可以学习到鲁棒的值函数。后续状态表示法 (Successor Representation, SR)为学习值函数提供了第 3 种选择。 model-based 和 model-free(图片来自论文:The successor representation in human reinforcement learning) MB: Agent 学习环境模型,利用这个模型,我们就可以进行动态规划。如果状态和动作空间巨大,对计算力就会有很大的要求。 MF: Agent 不需要对环境进行建模,将长期动作值直接存储起来,一个经典的例子就是Q-Learning ,对动作值函数 Q 存储起来。因缓存了值函数,所以计算就很高效。 SR: 结合了 MF 的高效性和 MB 的灵活性。对突出奖赏(distal reward)的变化十分敏感。有能力分解出更有价值的子目标。 Successor RepresentationSR 将值函数分 解为两个部分: 后续状态映射图(successor map) 奖赏预测(reward predictor) 后续状态映射图表示在给定当前状态下到达未来某一状态占有率的期望。奖赏预测表示从状态到奖赏 值的映射。在 SR 中,这两个部分以内积的形式构成值函数. $$ Q^\\pi(s,a) = \\mathbb{E}[\\sum^{\\infty}_{t=0}\\gamma^tR(s_t)|s_0 = a,a_0 =a]$$$$ M(s,s’,a)=\\mathbb{E}[\\sum^{\\infty}_{t=0}\\gamma^t1[s_t=s’]|s_0=s,a_0=a]$$ 其中 $1[.]$当参数为true时=1$$ Q^{\\pi} = \\sum_{s’ \\in S} M(s,s’,a)R(s’) $$我们可以看到,Q 值的计算是每个时间step下带有折扣因子$\\gamma$的\breward之和。而SR的计算方式是先计算一个状态在未来占有率的期望,乘上 $R(s)$ 就得了该状态在未来的reward,然后将所有状态的 reward\b 累加起来。 Deep Successor Reinforcement Learning理解了SR , 我们就希望能够将 SR 和深度学习模型结合起来。 很自然的想法,我们可以构造 $M(s,s’,a)$ 网络,输入是 s 和 s‘,输出是各个动作的 M 值(假设动作空间是离散的)。同样的,$R(s)$ 网络的输入是 s ,输出是该状态 s 下的 reward。 问题就是大部分环境下,状态\b是连续的,很明显,遍历所有状态的 M和 R 值然后计算 Q 值是不现实的。 \b本文作者设计的结构如下: \b\b第一部分,状态 $s_t$ 通过卷积层(参数为 $\\theta$ ),得到高阶特征,然后平铺成 512 维度特征 $\\phi(s_t)$。然后使用一个简单的线性回归得到奖赏预测 $R(s_t) \\approx \\phi(s_t) \\cdot w$ 。w 表示权值向量。 第二部分 ,基于 $\\phi(s_t)$ 使用一个参数为 $\\alpha$ 的深度神经网络 $u_\\alpha $ 来近似表示 \b$m(s_t,a) \\approx u_\\alpha(\\phi(s_t,),a)$。 为了更好的理解图中的 $m_{s,a}$,$Q^{\\pi} = \\sum_{s’ \\in S} M(s,s’,a)R(s’)$ $Q^{\\pi} = \\sum_{s’ \\in S} M(s,s’,a)\\phi(s’) * w$ 因为 w 一旦训练好之后就是固定的,所以$Q^{\\pi} = (\\sum_{s’ \\in S} M(s,s’,a)\\phi(s’)) * w$我们只要构造一个网络 \b$m(s,a) \\approx \\sum_{s’ \\in S} M(s,s’,a)\\phi(s’)$$Q^{\\pi} = m(s,a) \\cdot w$ 这样就可以免去对所有状态的\b遍历! 因为参数 $\\theta$ 训练后用来获取 $\\phi(s)$, $\\phi(s_t)$ 同时是第一部分和第二部分的输入,这就要求$\\phi(s)$ :1)能够准确预测 状态 s 的 reward2)能够区分不同的状态 第一点只要最小化损失函数 $L^r_t(w,\\theta) = (R(s_t)-\\phi_{s_t}w)^2$,第二点我们需要使用一个深度卷积自动编码器(反卷基)重建图像,定义一个L2损失函数:$L^a_t(\\theta’,\\theta) = (g_{\\tilde{\\theta}}(\\phi_{s_t})-s_t)^2$ 因为 $Q(s_t,a) = R(s_t) + \\gamma max_{a’}Q(s_{t+1,a’})$ $m_{s_t,a}\\cdot w = \\phi_{s_t} \\cdot w + \\gamma m_{s_{t+1,a’}}\\cdot w$ $m_{s_t,a} = \\phi_{s_t} + \\gamma m_{s_{t+1,a’}}$ 其中 $a’ = argmax_am_{s_{t+1},a} \\cdot w$ 所以successor map 部分的 Loss 为:$L^m_t(w,\\theta) = \\mathbb{E}[(\\phi_{s_t}+\\gamma u_{\\alpha_{prev}}(\\phi_{s_t+1},a’) - u_{\\alpha}(\\phi_{s_t},a))^2]$ 我们先最小化 $L^r_t(w,\\theta)+L^a_t(\\theta’,\\theta)$ 得到最优的\b参数$(\\theta^{opt} ,w^{opt} )$,然后固定这两个参数我们\b最小化$L^m_t(w,\\theta)$,得到最优的 $\\alpha^{opt} $。 算法 这部分类似SARSA的过程。 自动子目标提取 给定一个随机策略,训练\b\b\b DSR 直到收敛,我们可以获得大量的序列 $\\tau = {m_{s_1,a_1},m_{s_2,a_2}…,m{s_n,a_n}}$。通过归一化割(Nomalized cut)算法 得到一些 subgoal。 这种方法的一个固有局限性是,由于随机策略,子目标候选常常非常嘈杂。此外,子目标提取算法应该是非参数的而且处理灵活数量的子目标。 实验在两个游戏环境和DQN的比较:\b为了证明SR对突出奖赏(distal reward)的变化十分敏感。 总结第一篇将SR\b和\b深度学习模型结合。DSR可以自动提取子目标,这就可以与分层强化学习相结合。 REF: Kulkarni T D, Saeedi A, Gautam S, et al. Deep Successor Reinforcement Learning[J]. 2016.","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"事后经验回放 Hindsight Experience Reply","date":"2018-03-22T14:01:30.000Z","path":"2018/03/22/Hindsight_Experience_Reply/","text":"提出一种新的经验回放方法,能够在稀疏且binary reward 环境中训练 RL 算法。 idea人类在学习的时候,很多情况下不能完全也不需要完全达到自己特定的目标,才能学到特定的经验和技术。人类在学习的时侯,可能会尝试不同的手段和方法来做一件事,虽然可能这个方法在特定的任务上T不奏效,但这样的方法可能完成了其他的任务T’,当你下次需要做个任务T’时,你可以用这些经验来完成。比如在一个射击靶子游戏中,靶子随机出现某个位置,射中reward = 0 否则为 -1 。你可能很多都枪射歪了,这对强化学习来说,这些样本学不到任何有用的经验。但是如果把射歪的位置看成靶子的位置,这对强化学习来说就是一个有用的样本。将射歪的位置看成靶子的位置,相当于设置了一个新的 Goal。 所以基于上面的思路,如果我们的目的是做一类比较接近的goal的话,或者我们能构造出与当前goal比较接近的一系列goal的话,我们就有可能利用另外的goal来衡量policy在环境中的trajectory 的好坏,虽然在大部分的goal中这个轨迹可能是比较差的,但是如果我们的goal是要达到 s_n 的话,那么这个policy其实好的。然后利用这个trajectory来进行学习,这里值得注意一下,我个人的理解是:对于这些goal需要具有一定的联系(内在的相似性),这样这个trajectory训练出来的效果才有可能对于完成另外goal有帮助。 所以既然感觉有点浪费,就会想要利用起来,这部分也就是HER做的事情:如果我们能够知道r(s, a, g)的话,那么对于上面采样出来的 $\\tau$ 中的 (s, a, r(a, s, g), s’, g) ,我们可以选择不同的goal,让这里面的reward变成1,就是意味着:这个transition tuples能够有效地帮助这个goal进行学习。那么replay buffer中reward为1的transition tuples数目就得到了一定的提升,可能就能够有效地帮助agent学习。 下面是HER的算法,简单地解释一下就是:利用当前policy在环境中交互获得trajectory $\\tau$ ,然后将 (s, a, r(a, s, g), s’, g) 存储在replay buffer中,然后再挑选一些其他的goal对这个trajectory $\\tau$ 中的g和r做修改,然后存储在replay buffer中,之后就是普通的基于replay buffer算法中常见的从buffer中sample,然后训练等过程中。 算法下面是HER的算法,简单地解释一下就是:利用当前policy在环境中交互获得 trajectory $\\tau$ ,然后将 (s, a, r(a, s, g), s’, g) 存储在 replay buffer 中,然后再挑选一些其他的 goal 对这个 trajectory $\\tau$ 中的 g 和 r 做修改,然后存储在r eplay buffer 中,之后就是普通的基于replay buffer 算法中常见的从 buffer 中 sample,然后训练等过程中。 那么关于如果挑选其他的goal就是一项很玄学的地方了,在论文里面提出了几种不同的方法: final — goal corresponding to the final state in each episodefuture — replay with k random states which come from the same episode as the transition being replayed and were observed after itepisode — replay with k random states coming from the same episode as the transition being replayedrandom — replay with k random states encountered so far in the whole training procedure 实验实验环境 这里有三种任务: Pushing. 把物体推到指定的位置 Sliding. 推动物体,使它滑动到某个位置 Pick-and-place. 拿起物体,移动到空中的某个位置 在这个环境中: Reward:在没有到到达goal时,都是-1,到达goal时候为0 Goal:为在空间中随机生成的位置(所以我感觉这也是有效的一点) Observations:gripper(机器手)在这个空间中的绝对位置,需要推动物体object和goal相对gripper的相对位置 一些局限HER目前看上去局限很多(当然也就是改进的地方)。比如这里就直接假设reward和goal可以直接控制的,但是很多情况下并不是,可能我们就是要实现固定的几个goal,而且不知道这里面的reward,同样goal之间的关系可能不是特别紧密,那么HER该怎么用呢?(基本假设都出现了问题) 另外就是这里实验的设计,goal变了,其实导致了 (s,a,r, s’, g) 中 s 的改变(s 和 goal 进行拼接),这个s里面是会体现goal的,但是很多时候,我们无法直接修改s,比如玩video game。 最后,HER 是和 Off-Policy 的 RL 算法进行结合,原因是:On-Policy 中 Q 值的更新用的 s‘ 是确定的,我们选择其他的goal的时候,无法及时更新到 s‘||新goal 的 Q 值。Off-Policy 中的 max 操作 可以保证我们更新到新的 Q 值。 REF: Andrychowicz M, Wolski F, Ray A, et al. Hindsight Experience Replay[J]. 2017.","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"David Silver 强化学习 5 模型无关控制 Model-Free Control","date":"2018-03-11T09:01:30.000Z","path":"2018/03/11/David_Silver_RL_5/","text":"简介 Introduction上一讲主要讲解了在模型未知的情况下如何进行预测。所谓的预测就是评估一个给定的策略,也就是确定一给定策略下的状态(或状态行为对)的价值函数。这一讲的内容主要是在模型未知的条件下如何优化价值函数,这一过程也称作模型无关的控制。 现实中有很多此类的例子,比如控制一个大厦内的多个电梯使得效率最高;控制直升机的特技飞行,机器人足球世界杯上控制机器人球员,围棋游戏等等。所有的这些问题要么我们对其模型运行机制未知,但是我们可以去经历、去试;要么是虽然问题模型是已知的,但问题的规模太大以至于计算机无法高效的计算,除非使用采样的办法。本节的内容就专注于解决这些问题。根据优化控制过程中是否利用已有或他人的经验策略来改进我们自身的控制策略,我们可以将这种优化控制分为两类: 一类是遵循策略学习(On-policy Learning): 其基本思想是个体已有一个策略,并且遵循这个策略进行采样,或者说采取一系列该策略下产生的行为,根据这一系列行为得到的奖励,更新状态函数,最后根据该更新的价值函数来优化策略得到较优的策略。由于要优化的策略就是当前遵循的策略,这里姑且将其翻译为“遵循策略”。 另一类是脱离策略学习(Off-policy Learning): 其基本思想是,虽然个体有一个自己的策略,但是个体并不针对这个策略进行采样,而是基于另一个策略进行采样,这另一个策略可以是先前学习到的策略,也可以是人类的策略等一些较为优化成熟的策略,通过观察基于这类策略的行为,或者说通过对这类策略进行采样,得到这类策略下的各种行为,继而得到一些奖励,然后更新价值函数,即在自己的策略形成的价值函数的基础上观察别的策略产生的行为,以此达到学习的目的。这种学习方式类似于“站在别人的肩膀上可以看得更远”。由于这些策略是已有的策略,这里姑且翻译为“脱离策略”。 On-Policy Monte-Carlo Control在本节中我们使用的主要思想仍然是动态规划的思想。先来回顾下动态规划是如何进行策略迭代的。 通用策略迭代(回顾) 通用策略迭代的核心是在两个交替的过程之间进行策略优化。一个过程是策略评估,另一个是改善策略。如上图的三角形区域所示,从一个策略π和一个价值函数V开始,每一次箭头向上代表着利用当前策略进行价值函数的更新,每一次箭头向下代表着根据更新的价值函数贪婪地选择新的策略,说它是贪婪的,是因为每次都采取转移到可能的、状态函数最高的新状态的行为。最终将收敛至最优策略和最优价值函数。 注意使用动态规划算法来改善策略是需要知道某一状态的所有后续状态及状态间转移概率:$\\pi ^{‘}(s)= \\arg\\max_{a\\in A} R_s^a + P_{ss^{‘}}^a V(s^{‘})$ 不基于模型控制的两个条件那么这种方法是否适用于模型未知的蒙特卡洛学习呢?答案是否定的,这其中至少存在两个问题。其一是在模型未知的条件下无法知道当前状态的所有后续状态,进而无法确定在当前状态下采取怎样的行为更合适。解决这一问题的方法是,使用状态行为对下的价值Q(s,a)来代替状态价值 : $ \\pi ^{‘}(s)= \\arg\\max_{a\\in A} Q(s,a)$ 这样做的目的是可以改善策略而不用知道整个模型,只需要知道在某个状态下采取什么什么样的行为价值最大即可。具体是这样:我们从一个初始的 Q 和策略 $\\pi$ 开始,先根据这个策略更新每一个状态行为对的 Q 值,s 随后基于更新的 Q 确定改善的贪婪算法。 即使这样,至少还存在一个问题,即当我们每次都使用贪婪算法来改善策略的时候,将很有可能由于没有足够的采样经验而导致产生一个并不是最优的策略,我们需要不时的尝试一些新的行为,这就是探索(Exploration)。 $\\epsilon$-贪婪探索 的目标使得某一状态下所有可能的行为都有一定非零几率被选中执行,也就保证了持续的探索,$1-\\epsilon$ 的概率下选择当前认为最好的行为,而 $\\epsilon$ 的概率在所有可能的行为中选择(也包括那个当前最好的行为)。数学表达式如下: 定理: 使用Ɛ-贪婪探索策略,对于任意一个给定的策略\\pi,我们在评估这个策略的同时也总在改善它。 证明: 注:在证明上述定理过程中使用的不等式是在经过合理、精心设计的。 解决了上述两个问题,我们最终看到蒙特卡洛控制的全貌:使用Q函数进行策略评估,使用Ɛ-贪婪探索来改善策略。该方法最终可以收敛至最优策略。如下图所示: 图中每一个向上或向下的箭头都对应着多个 Episode 。也就是说我们一般在经历了多个 Episode 之后才进行依次Q函数更新或策略改善。实际上我们也可以在每经历一个 Episode 之后就更新Q函数或改善策略。但不管使用那种方式,在Ɛ-贪婪探索算下我们始终只能得到基于某一策略下的近似Q函数,且该算法没没有一个终止条件,因为它一直在进行探索。因此我们必须关注以下两个方面:一方面我们不想丢掉任何更好信息和状态,另一方面随着我们策略的改善我们最终希望能终止于某一个最优策略,因为事实上最优策略不应该包括一些随机行为选择。为此引入了另一个理论概念:GLIE。 GLIEGLIE(Greedy in the Limit with Infinite Exploration),直白的说是在有限的时间内进行无限可能的探索。具体表现为:所有已经经历的状态行为对(state-action pair)会被无限次探索;另外随着探索的无限延伸,贪婪算法中Ɛ值趋向于0。例如如果我们取 $\\epsilon = 1/k$( k 为探索的 Episode 数目),那么该Ɛ贪婪蒙特卡洛控制就具备 GLIE 特性。 基于GLIE的蒙特卡洛控制流程如下: 对于给定策略 $\\pi$ ,采样第k个 Episode:{ $S_{1}, A_{1}, R_{2}, …, S_{T} $} ~ $\\pi$ 对于该Episode里出现的每一个状态行为对S_t和A_t,更其计数和Q函数:$N(S_t, A_t) \\leftarrow N(S_t, A_t) + 1 , Q(S_t, A_t) \\leftarrow + \\frac{1}{N(S_t, A_t)} (G_t - Q(S_t, A_t))$ 基于新的Q函数改善以如下方式改善策略:$\\epsilon \\leftarrow 1/k , \\pi \\leftarrow \\epsilon-greedy(Q)$ 定理:GLIE 蒙特卡洛控制能收敛至最优的状态行为价值函数。 On-Policy Temporal-Difference Control上一讲提到TD相比MC有很多优点:低变异性,可以在线实时学习,可以学习不完整Episode等。因此很自然想到是否可以在控制问题上使用TD学习而不是MC学习?答案是肯定的,这就是下文要讲解的SARSA。 SARSASARSA 的名称来源于下图所示的序列描述:针对一个状态S,以及一个特定的行为A,进而产生一个状态行为对(S,A),与环境交互,环境收到个体的行为后会告诉个体即时奖励R以及后续进入的状态S’;接下来个体遵循现有策略产生一个行为A’,根据当前的状态行为价值函数得到后一个状态行为对(S’,A’)的价值(Q),利用这个Q值更新前一个状态行为对(S,A)的价值。 更直观的解释是这样:一个Agent处在某一个状态S,在这个状态下它可尝试各种不同的行为,当遵循某一策略时,会根据当前策略选择一个行为A,个体实际执行这个行为,与环境发生实际交互,环境会根据其行为给出即时奖励R,并且进入下一个状态S’,在这个后续状态S’,再次遵循当前策略,产生一个行为A’,此时,个体并不执行该行为,而是通过自身当前的状态行为价值函数得到该S’A’状态行为对的价值,利用该价值同时结合个体S状态下采取行为A所获得的即时奖励来更新个体在S状态下采取A行为的(状态)行为价值。 与蒙特卡洛控制不同的时,每一个时间步,也就是在单个Episode内每一次个体在状态S_t采取一个行为后都要更新Q值,同样使用 $\\epsilon$ -贪婪探索的形式来改善策略。 $Q(S,A) \\gets Q(S,A) + \\alpha(R+ \\gamma Q(S^{‘},A^{‘})-Q(S,A))$ On-Policy的 SARSA 算法 定理:满足如下两个条件时,Sarsa算法将收敛至最优行为价值函数。 条件一:任何时候的策略 $\\pi_t(a|s)$ 符合 GLIE 特性; 条件二:步长系数αt满足:$\\sum_{t=1}^{\\infty}{a_t} = \\infty $ 且 $\\sum_{t=1}^{\\infty}{a_t^2} < \\infty $ Sarsa(λ)算法:https://zhuanlan.zhihu.com/p/28108498 Off-Policy Learning现时策略学习的特点就是当前遵循的策略就是个体学习改善的策略。Off-Policy学习(Off-Policy Learning)则指的是在遵循一个策略\\mu(a|s)的同时评估另一个策略\\pi(a|s),也就是计算确定这另一个策略下的状态价值函数v_{\\pi}(s)或状态行为价值函数q_{\\pi}(s, a)。为什么要这么做呢?因为这样可以较容易的从人类经验或其他个体的经验中学习,也可以从一些旧的策略中学习,可以比较两个策略的优劣。其中可能也是最主要的原因就是遵循一个探索式策略的基础上优化现有的策略。同样根据是否经历完整的Episode可以将其分为基于蒙特卡洛的和基于TD的。基于蒙特卡洛的Off-Policy学习仅有理论上的研究价值,在实际中毫无用处。在解释这一结论时引入了“重要性采样(importance sampling)”这个概念,这里就不详述了,有兴趣的读者可以参考原讲义。这里主要讲解常用的TD下的Off-Policy学习。 Off-Policy TD学习Off-PolicyTD学习的任务就是使用TD方法在遵循一个策略 $\\mu(a|s)$ 的同时评估另一个策略 $\\pi(a|s)$。具体数学表示为: 这个公式可以这样解释:个体处在状态S_t中,基于策略 $\\mu$ 产生了一个行为 $A_t$ ,执行该行为后进入新的状态 $S_{t+1}$,那么在当前策略下如何根据新状态的价值调整原来状态的价值呢?Off-Policy的方法就是,在状态S_t时比较分别依据另一个策略 $\\pi$ 和当前遵循的策略 $\\mu$ 产生行为 $A_t$ 的概率大小,如果策略 $\\pi$ 得到的概率值与遵循当前策略 $\\mu$ 得到的概率值接近,说明根据状态 $S_{t+1}$ 价值来更新 $S_t$ 的价值同时得到两个策略的支持,这一更新操作比较有说服力。同时也说明在状态S_t时,两个策略有接近的概率选择行为 $A_t$。假如这一概率比值很小,则表明如果依照被评估的策略,选择 $A_t$ 的机会很小,这时候我们在更新 $S_t$ 价值的时候就不能过多的考虑基于当前策略得到的状态 $S_{t+1}$ 的价值。同样概率比值大于1时的道理也类似。这就相当于借鉴被评估策略的经验来更新我们自己的策略。 应用这种思想最好的方法是基于 TD(0) 的Q-学习(Q-learning)。它的要点在于,更新一个状态行为对的Q价值时,采用的不是当前遵循策略的下一个状态行为对的Q价值,而是采用的待评估策略产生的下一个状态行为对的Q价值。公式如下: $Q(S_t,A_t) \\gets Q(S_t,A_t) + \\alpha(R_{t+1}+ \\gamma Q(S_{t+1},A^{‘})-Q(S_t,A_t))$ 式中,TD目标是基于另一个估策略 $\\pi$ 产生的行为A’得到的Q价值。Q学习最主要的表现形式是:个体遵循的策略是基于当前状态行为价值函数Q(s,a)的一个 $\\epsilon-greedy$ 策略,而目标策略是基于当前状态行为价值函数Q(s,a)不包含 $\\epsilon$ 的单纯greedy策略: $ \\pi (S_{t+1})= \\arg\\max_{a^{‘}} Q(S_{t+1},s^{‘})$ 这样Q学习的TD目标值可以被大幅简化: 这样在状态 $S_t$ 依据Ɛ-greedy遵循策略得到的行为 $A_t$ 的 Q 价值将朝着 $S_{t+1}$ 状态所具有的最大Q价值的方向做一定比例的更新。这种算法能够使 greedy 策略 $\\pi$ 最终收敛到最佳策略。由于个体实际与环境交互的时候遵循的是 $\\epsilon-greedy$ 策略,它能保证经历足够丰富的新状态。 定理:Q学习控制将收敛至最优状态行为价值函数:$Q(s,a) \\rightarrow q_*(s,a)$。 下图是Q学习具体的更新公式和图解: 下图是Q学习的算法流程: 总结DP与TD关系下面两张图概括了各种DP算法和各种TD算法,同时也揭示了各种不同算法之间的区别和联系。总的来说TD是采样+有数据引导(bootstrap),DP是全宽度+实际数据。如果从Bellman期望方程角度看:聚焦于状态本身价值的是迭代法策略评估(DP)和TD学习,聚焦于状态行为对价值函数的则是Q-策略迭代(DP)和SARSA;如果从针对状态行为价值函数的Bellman优化方程角度看,则是Q-价值迭代(DP)和Q学习。","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"David Silver 强化学习 4 模型无关预测 Model-Free Prediction","date":"2017-10-15T13:01:30.000Z","path":"2017/10/15/David_Silver_RL_4/","text":"简介 Introduction上节课中通过动态规划能够解决已知 environment 的 MDP 问题,也就是已知 $S,A,P,R,\\gamma$,其中根据是否已知 policy 将问题又划分成了 prediction 和 control 问题,本质上来说这种 known MDP 问题已知 environment 即转移矩阵与 reward 函数,但是很多问题中 environment 是未知的,不清楚做出了某个 action 之后会变到哪一个 state 也不知道这个 action 好还是不好,也就是说不清楚 environment 体现的 model 是什么,在这种情况下需要解决的 prediction 和 control 问题就是Model-free prediction和Model-free control。显然这种新的问题只能从与 environment 的交互得到的 experience 中获取信息。 这节课要解决的问题是Model-free prediction,即未知environment的Policy evaluation,在给定的 policy 下,每个state的 value function 是多少。 蒙特卡洛强化学习 Monte-Carlo Reinforcement Learning蒙特卡洛强化学习是假设每个 state 的 value function 取值等于多个 episodes 的 return Gt 的平均值,它需要每个 episode 是完整的流程,即一定要执行到终止状态。 蒙特卡洛策略评估 Monte-Carlo Policy Evaluation目标: 在给定策略下,从一系列的完整Episode经历中学习得到该策略下的状态价值函数。 数学描述如下: 基于特定策略 $\\pi$ 的一个 Episode信 息可以表示为如下的一个序列:$S_{1}, A_{1}, R_{2}, S_{2}, A_{2}, …, S_{t}, A_{t}, R_{t+1}, …, S_{k}$ ~ $\\pi$ t 时刻状态 $S_{t}$ 的收获:$G_{t} = R_{t+1} + \\gamma R_{t+2} + … + \\gamma^{T-1} R_{T}$其中 T 为终止时刻。 该策略下某一状态 s 的价值:$v_{\\pi}(s) = E_{\\pi} [ G_{t} | S_{t} = s ]$ 在状态转移过程中,可能发生一个状态经过一定的转移后又一次或多次返回该状态,此时在一个Episode里如何计算这个状态发生的次数和计算该Episode的收获呢?可以有如下两种方法: 首次访问蒙特卡洛策略评估在给定一个策略,使用一系列完整Episode评估某一个状态s时,对于每一个Episode,仅当该状态第一次出现时列入计算: 状态出现的次数加1: $N(s) \\leftarrow N(s) + 1$总的收获值更新: $S(s) \\leftarrow S(s) + G_{t}$状态s的价值: $V(s) = S(s) / N(s)$当 $N(s) \\rightarrow \\infty$ 时, $V(s) \\rightarrow v_{\\pi}(s)$ 每次访问蒙特卡洛策略评估在给定一个策略,使用一系列完整Episode评估某一个状态s时,对于每一个Episode,状态s每次出现在状态转移链时,计算的具体公式与上面的一样,但具体意义不一样。 状态出现的次数加1: $N(s) \\leftarrow N(s) + 1$总的收获值更新: $S(s) \\leftarrow S(s) + G_{t}$状态s的价值: $V(s) = S(s) / N(s)$当 $N(s) \\rightarrow \\infty$ 时, $V(s) \\rightarrow v_{\\pi}(s)$ 累进更新平均值 Incremental Mean这里提到了在实际操作时常用的一个实时更新均值的办法,使得在计算平均收获时不需要存储所有既往收获,而是每得到一次收获,就计算其平均收获。 理论公式如下: 这个公式比较简单。把这个方法应用于蒙特卡洛策略评估,就得到下面的蒙特卡洛累进更新。 蒙特卡洛累进更新对于一系列 Episodes 中的每一个: $S_{1}, A_{1}, R_{2}, S_{2}, A_{2}, …, S_{t}, A_{t}, R_{t+1}, …, S_{k} $ 对于Episode里的每一个状态 $S_{t}$ ,有一个收获 $G_{t}$ ,每碰到一次 $S_{t}$ ,使用下式计算状态的平均价值 $V(S_{t})$ :其中: 在处理非静态问题时,使用这个方法跟踪一个实时更新的平均值是非常有用的,可以扔掉那些已经计算过的 Episode 信息。此时可以引入参数 $\\alpha$ 来更新状态价值: 以上就是蒙特卡洛学习方法的主要思想和描述,由于蒙特卡洛学习方法有许多缺点(后文会细说),因此实际应用并不多。接下来介绍实际常用的TD学习方法。 时序差分学习 Temporal-Difference Learning时序差分学习简称TD学习,它的特点如下:和蒙特卡洛学习一样,它也从Episode学习,不需要了解模型本身;但是它可以学习不完整的 Episode ,通过自身的引导(bootstrapping),猜测 Episode 的结果,同时持续更新这个猜测。 我们已经学过,在Monte-Carlo学习中,使用实际的收获(return) $G_{t} $来更新价值(Value):$V(S_{t}) \\leftarrow V(S_{t}) + \\alpha (G_{t} - V(S_{t}))$ 在 TD 学习中,算法在估计某一个状态的价值时,用的是离开该状态的即刻奖励 $R_{t+1}$ 与下一状态 $S_{t+1}$ 的预估状态价值乘以衰减系数 $\\gamma$ 组成,这符合 Bellman 方程的描述:$V(S_{t}) \\leftarrow V(S_{t}) + \\alpha (R_{t+1} + \\gamma V(S_{t+1}) - V(S_{t}))$ 式中:$R_{t+1} + \\gamma V(S_{t+1})$ 称为 TD 目标值$\\delta_{t} = R_{t+1} + \\gamma V(S_{t+1}) - V(S_{t})$ 称为 TD 误差 BootStrapping 指的就是TD目标值 $R_{t+1} + \\gamma V(S_{t+1})$ 代替收获 $G_t$ 的过程,暂时把它翻译成“引导”。 示例——驾车返家 想象一下你下班后开车回家,需要预估整个行程花费的时间。假如一个人在驾车回家的路上突然碰到险情:对面迎来一辆车感觉要和你相撞,严重的话他可能面临死亡威胁,但是最后双方都采取了措施没有实际发生碰撞。如果使用蒙特卡洛学习,路上发生的这一险情可能引发的负向奖励不会被考虑进去,不会影响总的预测耗时;但是在TD学习时,碰到这样的险情,这个人会立即更新这个状态的价值,随后会发现这比之前的状态要糟糕,会立即考虑决策降低速度赢得时间,也就是说你不必像蒙特卡洛学习那样直到他死亡后才更新状态价值,那种情况下也无法更新状态价值。 TD算法相当于在整个返家的过程中(一个Episode),根据已经消耗的时间和预期还需要的时间来不断更新最终回家需要消耗的时间。 基于上表所示的数据,下图展示了蒙特卡洛学习和TD学习两种不同的学习策略来更新价值函数(各个状态的价值)。这里使用的是从某个状态预估的到家还需耗时来间接反映某状态的价值:某位置预估的到家时间越长,该位置价值越低,在优化决策时需要避免进入该状态。对于蒙特卡洛学习过程,驾驶员在路面上碰到各种情况时,他不会更新对于回家的预估时间,等他回到家得到了真实回家耗时后,他会重新估计在返家的路上着每一个主要节点状态到家的时间,在下一次返家的时候用新估计的时间来帮助决策;而对于TD学习,在一开始离开办公室的时候你可能会预估总耗时30分钟,但是当你取到车发现下雨的时候,你会立刻想到原来的预计过于乐观,因为既往的经验告诉你下雨会延长你的返家总时间,此时你会更新目前的状态价值估计,从原来的30分钟提高到40分钟。同样当你驾车离开高速公路时,会一路根据当前的状态(位置、路况等)对应的预估返家剩余时间,直到返回家门得到实际的返家总耗时。这一过程中,你会根据状态的变化实时更新该状态的价值。 Monte-Carlo VS. Temporal Difference在谈两种算法的优劣前,先谈谈 Bias/Variance tradeoff 的问题。平衡 Bias/Variance 是机器学习比较经典的一个问题,bias 是指预测结果与真实结果的差值,variance 是指训练集每次预测结果之间的差值,bias 过大会导致欠拟合它衡量了模型是否准确,variance 过大会导致过拟合衡量了模型是否稳定。如果 $G_t$ 和 $R_{t+1} + \\gamma v_{\\pi} (S_{t+1})$ 跟真实值一样,那么就是无偏差估计。因为在MC算法中,它是将最终获得的 reward 返回到了前面的状态,因此是真实值,但是它采样的 episode 并不能代表所有的情况,所以会导致比较大的 variance 。而 TD的 $R_{t+1} + \\gamma v_{\\pi} (S_{t+1})$ 跟真实值是有偏差的,在计算的过程基于随机的状态、转移概率、reward 等等,涵盖了一些随机的采样,因此 variance 比较小。 示例——AB已知:现有两个状态(A和B),MDP未知,衰减系数为1,有如下表所示8个完整Episode的经验及对应的即时奖励,其中除了第1个Episode有状态转移外,其余7个均只有一个状态。 问题:依据仅有的Episode,计算状态A,B的价值分别是多少,即V(A)=?, V(B)=? 答案:V(B) = 6/8,V(A)根据不同算法结果不同,用MC算法结果为0,TD则得出6/8。 解释:应用MC算法,由于需要完整的 Episode ,因此仅 Episode1 可以用来计算A的状态价值,很明显是0;同时B的价值是6/8。应用 TD 算法时,TD 算法试图利用现有的 Episode 经验构建一个 MDP(如下图),由于存在一个 Episode 使得状态A有后继状态 B ,因此状态A的价值是通过状态B的价值来计算的,同时经验表明 A 到 B 的转移概率是100%,且A状态的即时奖励是0,并且没有衰减,因此A的状态价值等于 B 的状态价值。 确定性等价 Certainty EquivalenceMC算法试图收敛至一个能够最小化状态价值与实际收获的均方差的解决方案,这一均方差用公式表示为: 式中,k 表示的是 Episode 序号, K 为总的 Episode 数量, t 为一个 Episode 内状态序号(第1,2,3…个状态等), $T_{k}$ 表示的是第 k 个Episode总的状态数, $G^{k}_{t}$ 表示第 k 个 Episode 里 t 时刻状态 $S_{t}$ 获得的最终收获, $V(S^{k}_{t})$ 表示的是第 k 个 Episode 里算法估计的 t 时刻状态 $S_{t}$ 的价值。 TD算法则收敛至一个根据已有经验构建的最大可能的马儿可夫模型的状态价值,也就是说TD算法将首先根据已有经验估计状态间的转移概率: 同时估计某一个状态的即时奖励: 最后计算该MDP的状态函数。 三种强化学习算法Monte-Carlo, Temporal-Difference 和 Dynamic Programming 都是计算状态价值的一种方法,区别在于,前两种是在不知道Model的情况下的常用方法,这其中又以MC方法需要一个完整的Episode来更新状态价值,TD则不需要完整的Episode;DP方法则是基于Model(知道模型的运作方式)的计算状态价值的方法,它通过计算一个状态S所有可能的转移状态S’及其转移概率以及对应的即时奖励来计算这个状态S的价值。 关于是否采用 Bootstrap: MC 没有引导数据,只使用实际收获;DP和TD都有引导数据。 关于是否用采样 Sampling: MC和TD都是应用样本来估计实际的价值函数;而DP则是利用模型直接计算得到实际价值函数,没有样本或采样之说。 下面的几张图直观地体现了三种算法的区别: MC: 采样,一次完整经历,用实际收获更新状态预估价值 TD:采样,经历可不完整,用喜爱状态的预估状态价值预估收获再更新预估价值 DP:没有采样,根据完整模型,依靠预估数据更新状态价值 上图从两个维度解释了四种算法的差别,多了一个穷举法。这两个维度分别是:采样深度和广度。 当使用单个采样,同时不走完整个Episode就是TD; 当使用单个采样但走完整个Episode就是MC; 当考虑全部样本可能性,但对每一个样本并不走完整个Episode时,就是DP; 当既考虑所有Episode又把Episode从开始到终止遍历完,就变成了穷举法。 需要提及的是:DP利用的是整个MDP问题的模型,也就是状态转移概率,虽然它并不实际利用样本,但是它利用了整个模型的规律,因此认为是Full Width的。 TD(λ)TD(0) 是指在某个状态 s 下执行某个动作后转移到下一个状态 s′ 时,估计 s′ 的 return 再更新 s ,假如 s 之后执行两次动作转移到 s″ 时再反回来更新s的值函数,那么就是另一种形式,从而根据 step 的长度 n 可以扩展 TD 到不同的形式,当 step 长度到达当前 episode 终点时就变成了 MC。 定义 n-step 收获:$G_t^{(n)} = R_{t+1} + \\gamma R_{t+2} + … + \\gamma ^{n-1}R_{t+n}+\\gamma ^nV(S_{t+n})$ n = 1 时 即 TD(0) 那么,n-step TD 学习状态价值函数的更新公式为:$V(S_t) \\leftarrow V(S_t) + \\alpha(G_t^{(n)} - V(S_t))$ 既然存在 n-step 预测,那么n=?时效果最好呢? 前向认知 TD(λ) The Forward View of TD(λ)如果将不同的 n 对应的 $G_t^{(n)}$ 平均一下,这样能够获得更加 robust 的结果,而为了有效的将不同 $G_t^{(n)}$ 结合起来,对每个 n 的 $G_t^{(n)}$ 都赋了一个权重 $1-\\lambda,(1-\\lambda)\\lambda,…,(1-\\lambda)\\lambda^{n-1},\\lambda^{T-t-1}$ ,T 是状态的总数, t 表示了在第几个状态 ,所有的权重加起来为1,这样又能得到一组更新 value function 的公式。 $G_t^{\\lambda} = (1-\\lambda)\\sum_{n=1}^{\\infty }\\lambda^{n-1}G_t^{(n)}$为了更好的把episode的terminal state体现出来,我们可以写成下式:$G_t^{\\lambda} = (1-\\lambda)\\sum_{n=1}^{T-t-1 }\\lambda^{n-1}G_t^{(n)} + \\lambda^{T-t-1}G_t^{(T-t)}$ $V(S_t) \\leftarrow V(S_t) + \\alpha(G_t^{\\lambda} - V(S_t))$ 下图是各步收获的权重分配图 对于每个访问到的state,我们都是从它开始向前看所有的未来reward,并决定如何结合这些reward来更新当前的state。每次我们更新完当前state,我们就到下一个state,永不再回头关心前面的state。这种感觉就像下图一样: TD(λ)对于权重分配的图解 对于 n=3 的 3-步收获,赋予其在 $\\lambda$ 收获中的权重如左侧阴影部分面积,对于终止状态的 T-步 收获,T以后的所有阴影部分面积。而所有节段面积之和为1。这种几何级数的设计也考虑了算法实现的计算方便性。 在实际任务中这类算法却很少用,因为不便于实现:在n-step TD中,你需要等待 n 步之后观测得到的reward和state。如果n很大,这个等待过程就是个问题,存在很大的滞后性,这是一个待解决问题。那么n-step TD有什么意义呢?n-step TD的思想可以让我们更好理解接下来的”资格迹“方法。 后向认知 TD(λ) The Backward View of TD(λ)TD(λ)的后向视角非常有意义,因为它在概念上和计算上都是可行而且简单的。具体来说,前向视角只提供了一个非常好但却无法直接实现的思路,因为它在每一个timestep都需要用到很多步之后的信息,这在工程上很不高效。而后向视角恰恰解决了这个问题,采用一种带有明确因果性的递增机制来实现TD(λ),最终的效果是在on-line case和前向视角近似,在off-line case和前向视角精确一致。 后向视角的实现过程中,引入了一个额外的和每个state都相关的存储变量,它的名字就叫做“资格迹”。在t时刻的状态s对应的资格迹,标记为 $Z_t(s) \\in \\mathbb{R}^+$ 。资格迹的更新方式如下: 稍微解释一下上面式子的含义:在一开始,每个episode中的所有状态都有一个初始资格迹,然后时间开始走。到下一个timestep,被访问到的那个状态,其资格迹为前一个时刻该状态资格迹乘上一个(decay param 乘 discount param),然后加1,表示当前时刻,该状态的资格迹变大;其他未被访问的状态,其资格迹都只是在原有基础上乘以(decay param*discount param),不用加1,表明它们的资格迹都退化了。 我们把λ成为“迹退化参数”,把上式这种更新方式的资格迹叫做“累加型资格迹”。因为它在状态被访问的时候累加,不被访问的时候退化。如下图: 常规的TD误差如下式:$\\delta_t = R_{t+1} + \\gamma V_t(S_{t+1})-V_t(S_t)$ 但是在TD(λ)的后向视角中,这个误差却可以影响所有“最近”访问过的状态的,对于这些状态来说,TD误差如下: $\\Delta V_t(s) = \\alpha \\delta_tZ_t(s) \\;\\;for \\; all \\; s\\in S$ 可以这么说:后向视角的TD(λ),才是真正的TD(λ)。我们来更形象地表述一下后向视角的过程:每次在当前访问的状态得到一个误差量的时候,这个误差量都会根据之前每个状态的资格迹来分配当前误差。这就像是一个小人,拿着当前的误差,然后对准前面的状态们按比例扔回去,就像下图一样: λ=0:TD(λ)退化成TD(0),除了当前状态,其他所有状态的资格迹为0。这时候,小人不再向前面扔误差量,而是只给当前状态了。随着λ变大,但是小于1,更多状态的误差被当前误差所影响,越远的,影响越小。我们称越远的状态被分配的credit(可以理解为信用)越少。 λ=1:当 $\\gamma$ 不等于1时, $\\delta_t$ 依照 $\\gamma^k$ 逐步递减;如果 $\\gamma$ 等于1,那么资格迹就不再递减。我们把λ=1时的TD算法也叫做TD(1)。 传统MC如果不走到episode结束,是什么都学不到的。而且传统MC只适用于非连续式,有明确终点状态的任务。再看TD(1),读者可以把它想象成拖着一条移动的长尾巴的MC类算法(你可以把传统MC看成是有一条固定的长尾巴算法),可以即时地从正在进行的episode中学习,基于它的控制方法可以及时地修正后续episode的生成方式。因此TD(1)不仅适用于片段式任务,也适用于连续性任务。 Equivalence of Forward and Backward Views参考:https://zhuanlan.zhihu.com/p/27773020 小结下表给出了λ取各种值时,不同算法在不同情况下的关系。 内容的图标总结:","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"David Silver 强化学习 3 动态规划解决MDP的Planning问题","date":"2017-09-21T13:01:30.000Z","path":"2017/09/21/David_Silver_RL_3/","text":"简介 Introduction当问题具有下列特性时,通常可以考虑使用动态规划来求解: 第一个特性是一个复杂问题的最优解由数个小问题的最优解构成,可以通过寻找子问题的最优解来得到复杂问题的最优解; 子问题在复杂问题内重复出现,使得子问题的解可以被存储起来重复利用。 马尔可夫决策过程(MDP)具有上述两个属性:Bellman方程把问题递归为求解子问题,价值函数就相当于存储了一些子问题的解,可以复用。因此可以使用动态规划来求解MDP。 我们用动态规划算法来求解一类称为“规划 Planning”的问题。“规划”指的是在了解整个MDP的基础上求解最优策略,也就是清楚模型结构的基础上:包括状态行为空间、转换矩阵、奖励等。这类问题不是典型的强化学习问题,我们可以用规划来解决 Predict 和 Control 问题。 策略迭代 Policy Iteration这个解决途径主要分为两步: Policy Evaluation:基于当前的Policy计算出每个状态的value function $V$ (迭代计算直到收敛)\b Policy Improvment:基于当前的value function,采用贪心算法来找到当前最优的Policy $\\pi$ 如此反复多次,最终得到最优策略 $\\pi^{star}$ 和最优状态价值函数 $V^{star} $ ( star 代表 \b* )。 下图是一个叫Small Gridworld的例子,左上角和右下角是终点,γ=1,移动一步 reward=-1,起始的random policy是朝每个能走的方向概率相同。 策略改善 Policy Improvment 理论证明思考:很多时候,策略的更新较早就收敛至最优策略,而状态价值的收敛要慢很多,是否有必要一定要迭代计算直到状态价值得到收敛呢? 值迭代 Value Iteration优化原则 Principle of Optimality一个最优策略可以被分解为两部分:从状态 s 到下一个状态 s’ 采取了最优行为 $A_*$ ;在状态 s’ 时遵循一个最优策略。 从上面原理出发,如果已知子问题的最优值 v∗(s′),那么就能通过第一个Bellman Optimality Equation将 v∗(s) 也推出来。因此从终点开始向起点推就能把全部状态最优值推出来。Value Iteration 通过迭代的方法,通过这一步的 $v_k (s’)$ 更新下一步的 $v_{k+1}(s)$ ,最终收敛到最优的 v∗ ,需要注意的是中间生成的value function的值不对应着任何 policy。 考虑下面这个Shortest Path例子,左上角是终点,要求的是剩下每一个格子距离终点的最短距离,每走一步,reward=-1 因此,针对MDP要解决的两个问题,有如下几种方式来解决。针对prediction,因为它的目标是在已知的Policy下得到收敛的value function,因此针对问题不断迭代计算Bellman Expectation Equation就够了,但是control则需要同时获得最优的policy,那么在Iterative Policy Evaluation的基础上加入一个选择Policy的过程就行了,也就是上面的Policy Iteration,另外Value Iteration虽然在迭代的过程中没有显式计算出policy,但是在得到最优的value function之后就能推导出最优的policy,因此也能用做解决control问题。","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"学徒学习 Apprenticeship learning via inverse reinforcement learning","date":"2017-09-15T13:01:30.000Z","path":"2017/09/15/Apprenticeship_learing/","text":"学徒学习是Ng(吴恩达)和Abbeel提出来的。学徒学习是这样:Agent从专家示例中学到回报函数,使得在该回报函数下所得到的最优策略在专家示例策略附近。 回报函数$R(s)$ 假设为:$R\\left(s\\right)=w^T\\cdot\\phi\\left(s\\right)$,其中$\\phi(s)$为映射特征的基函数,可以为多项式基底,也可以为傅里叶基底。文中是以线性函数为基底。逆向强化学习求的就是回报函数中的系数w。策略 $\\pi$ 的值函数为:$v_{\\pi}(s) = E_{\\pi}[\\sum_{t=0}^{\\infty}\\gamma^t R(s_t)]$将回报函数代入:$v_{\\pi}(s) = w^T E_{\\pi}[\\sum_{t=0}^{\\infty}\\gamma^t \\phi(s_t)]$ 将上式右半部分定义为特征期望:$\\mu\\left(\\pi\\right)=E_{\\pi}[\\sum_{t=0}^{\\infty}\\gamma^t \\phi(s_t)]$。需要注意的是,特征期望跟策略 $\\pi$ 有关,策略不同时,策略期望也不相同 当给定m条专家轨迹后,根据定义我们可以估计专家策略的特征期望为:$\\hat{\\mu}_E=\\frac{1}{m}\\Sigma_{i=1}^{m}\\Sigma_{t=0}^{\\infty}\\gamma^t\\phi\\left(s_{t}^{\\left(i\\right)}\\right)$其中,专家状态序列为专家轨迹:${ s_{0}^{(i)},s_{1}^{(i)},\\cdots }_{i=1}^{m}$ 逆向强化学习可以归结为如下问题: 找到一个策略,使得该策略的表现与专家策略相近。我们可以利用特征期望来表示一个策略的好坏,找到一个策略,使其表现与专家策略相近,其实就是找到一个策略 $\\tilde{\\pi}$ 的特征期望与专家策略的特征期望相近,即使如下不等式成立:$\\lVert\\mu\\left(\\tilde{\\pi}\\right)-\\mu_E\\rVert_2\\le\\epsilon$ 当该不等式成立时,对于任意的权重$\\lVert w\\rVert_1\\le 1$,值函数满足如下不等式: 算法 其中第二行的目标函数为: $t^{(i)}=\\max_{w:\\lVert w\\rVert_2\\le 1}\\min_{j\\in{0\\cdots(i-1)}}w^T(\\mu_E-\\mu^{(j)})$ 写成标准的优化形式为:注意,在进行第二行求解时,$\\mu^{\\left(j\\right)}$中的 $j\\in{0,1,\\cdots ,i-1}$是前i-1次迭代得到的最优策略。也就是说第i次求解参数时,i-1次迭代的策略是已知的。这时候的最优函数值t相当于专家策略 $\\mu_E$ 与i-1个迭代策略之间的最大边际。 我们可以从支持向量机的角度去理解。专家策略为一类,其他策略为另一类,参数的求解其实就是找一条超曲面将专家策略和其他策略区分开来。这个超平面使得两类之间的边际最大。 第四行是在第二行求出参数后,便有了回报函数$R=\\left(w^{\\left(i\\right)}\\right)^T\\phi$,利用该回报函数进行强化学习,从而得到该回报函数下的最优策略 $\\pi^{\\left(i\\right)}$。 总结学徒逆向强化学习方法分为两步:第一步在已经迭代得到的最优策略中,利用最大边际方法求出当前的回报函数的参数值;(该计算需要用到QP(二次规划)求解器或者\bSVM求解器。文中也给出了一种不\b使用\b求解器的简单算法。)第二步利用求出的回报函数的参数值进行正向强化学习方法求得当前最优的策略,然后重复第一步。 需要注意的是,$\\phi(s)$ 中输入的 s \b为 i 个特征:$s^1,s^2,…,s^i$,if 第 i 个特征存在,$s^i = 1$,else $s^i = 0$。又因为$\\lVert w\\rVert_1\\le 1$,所以$R\\le 1$。 ref: Abbeel, P., & Ng, A. Y. (2004). Apprenticeship learning via inverse reinforcement learning. International Conference on Machine Learning(Vol.11, pp.1). ACM.","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"David Silver 强化学习 2 MDP","date":"2017-08-18T13:01:30.000Z","path":"2017/08/18/David_Silver_RL_2/","text":"在强化学习中,马尔可夫决策过程(Markov decision process, MDP)是对完全可观测的环境进行描述的,也就是说观测到的状态内容完整地决定了决策的需要的特征。几乎所有的强化学习问题都可以转化为MDP。本讲是理解强化学习问题的理论基础。 马尔可夫过程 Markov Process马尔可夫性 Markov Property 某一状态信息包含了所有相关的历史 只要当前状态可知,历史信息 history 就可以被丢弃 当前状态就可以决定未来 The future is independent of the past given the present即该状态具有马尔可夫性。 可以用下面的状态转移概率公式来描述马尔可夫性:$P_{ss’} = P[S_{t+1}=s’|S_t=s]$ 下面的状态转移矩阵定义了所有状态的转移概率:式中n为状态数量,矩阵中每一行元素之和为1. 马尔可夫过程 Markov Process马尔可夫过程 又叫马尔可夫链(Markov Chain),它是一个无记忆的随机过程,可以用一个元组表示,其中S是有限数量的状态集,P是状态转移概率矩阵。 如下图1圆圈内是状态,箭头上的值是状态之间的转移概率。class是指上第几堂课,facebook指看facebook网页,pub指去酒吧,pass指通过考试,sleep指睡觉。例如处于class1有0.5的概率转移到class2,或者0.5的概率转移到facebook。 从而可以产生非常多的随机序列,例如C1 C2 C3 Pass Sleep或者C1 FB FB C1 C2 C3 Pub C1 FB FB FB C1 C2 C3 Pub C2 Sleep等。这些随机状态的序列就是马尔可夫过程。 马尔可夫奖励过程 Markov Reward Process马尔可夫奖励过程在马尔可夫过程的基础上增加了奖励 R 和衰减系数 γR是一个奖励函数。S 状态下的奖励是某一时刻(t)处在状态s下在下一个时刻 (t+1) 能获得的奖励期望:$R_{s} = E[R_{t+1} | S_{t} = s ]$ 衰减系数 Discount Factor: γ∈ [0, 1],其远期利益具有一定的不确定性,符合人类对于眼前利益的追求等。 回报 Return定义:回报 $G_{t}$ 为在一个马尔可夫奖励链上从 t 时刻开始往后所有的奖励的有衰减的总和。公式如下:$G_t = R_{t+1}+\\gamma R_{t+2}+…=\\sum_{k=0}^{\\infty}\\gamma^kR_{t+k+1}$其中衰减系数体现了未来的奖励在当前时刻的价值比例,在k+1时刻获得的奖励R在t时刻的体现出的价值是 $\\gamma^k R$ ,γ 接近0,则表明趋向于“近视”性评估;γ 接近1则表明偏重考虑远期的利益。 价值函数 Value Function状态值函数给出了某一状态或某一动作的长期价值。定义:一个马尔可夫奖励过程中的状态值函数为从该状态开始的马尔可夫链回报的期望:$v(s) = E [ G_{t} | S_{t} = s ]$ 价值函数的推导Bellman方程 - MRP先尝试用价值的定义公式来推导看看能得到什么:这个推导过程相对简单,仅在导出最后一行时,将 $G_{t+1}$ 变成了 $v(S_{t+1})$ 通过方程可以看出 v(s) 由两部分组成,一是该状态的即时奖励期望,即时奖励期望等于即时奖励,因为根据即时奖励的定义,它与下一个状态无关;另一个是下一时刻状态的价值期望,可以根据下一时刻状态的概率分布得到其期望。如果用s’表示s状态下一时刻任一可能的状态,那么Bellman方程可以写成:$v(s) = E[G_t|S_t=s]= E[R_{t+1} + \\gamma (R_{t+2}+\\gamma R_{t+3}+…) | S_t=s]= E[R_{t+1} + \\gamma G_{t+1} | S_t=s] = ER_s + \\gamma \\sum_{s’\\in S}P_{ss’}v(s’) $ 下图已经给出了 γ=1 时各状态的价值(该图没有文字说明 γ=1,根据视频讲解和前面图示以及状态方程的要求,γ 必须要确定才能计算),状态 $C_{3}$ 的价值可以通过状态 Pub 和 Pass 的价值以及他们之间的状态转移概率来计算:$4.3 = -2 + 1.0 ( 0.6 10 + 0.4 * 0.8 )$ Bellman方程的矩阵形式和求解实际上,计算复杂度是 $O(n^{3})$ , n 是状态数量。因此直接求解仅适用于小规模的MRPs。大规模MRP的求解通常使用迭代法。常用的迭代方法有:动态规划Dynamic Programming、蒙特卡洛评估Monte-Carlo evaluation、时序差分学习Temporal-Difference,后文会逐步讲解这些方法。 马尔可夫决策过程 Markov Decision Process相较于马尔可夫奖励过程,马尔可夫决策过程多了一个动作(动作)集合A,它是这样的一个元组: 。看起来很类似马尔可夫奖励过程,但这里的P和R都与具体的动作a对应,而不像马尔可夫奖励过程那样仅对应于某个状态,A表示的是有限的动作的集合。具体的数学表达式如下:$P^a_{ss’} = P[S_{t+1}=s’|S_t=s,A_t=a]$$R^a_{s} = E[R_{t+1} | S_{t} = s,A_t=a ]$ 下图给出了一个可能的MDP的状态转化图。图中红色的文字表示的是采取的动作,而不是先前的状态名。对比之前的学生MRP示例可以发现,即时奖励与动作对应了,同一个状态下采取不同的动作得到的即时奖励是不一样的。由于引入了Action,容易与状态名混淆,因此此图没有给出各状态的名称;此图还把Pass和Sleep状态合并成一个终止状态;另外当选择”去查阅文献”这个动作时,主动进入了一个临时状态(图中用黑色小实点表示),随后被动的被环境按照其动力学分配到另外三个状态,也就是说此时Agent没有选择权决定去哪一个状态。 策略 Policy $\\pi$策略 $\\pi$是概率的集合或分布,其元素 $\\pi(a|s)$ 为对过程中的某一状态s采取可能的动作 a 的概率。用 $\\pi(a|s)$ 表示。 一个策略完整定义了 Agent 的动作方式,也就是说定义了 Agent 在各个状态下的各种可能的动作方式以及其概率的大小。Policy 仅和当前的状态有关,与历史信息无关;同时某一确定的Policy是静态的,与时间无关;但是 Agent 可以随着时间更新策略。 当给定一个MDP: M = < S, A, P, R, $\\gamma$ > 和一个策略 $\\pi$,那么状态序列 $S_{1},S_{2},…$ 是一个马尔可夫过程 < $S$,$P^{\\pi}$> :状态转移概率公式表示: $P^\\pi_{ss’}=\\sum_{a\\in A}\\pi(a|s)P^a_{ss’}$在执行策略 $\\pi$ 时,状态从 s 转移至 s’ 的概率等于一系列概率的和,这一系列概率指的是在执行当前策略时,执行某一个动作的概率与该动作能使状态从s转移至s’的概率的乘积。 同样的,状态和奖励序列 $S_{1}, R_{2}, S_{2}, R_{3}, S_{3}, … $是一个马尔可夫奖励过程 < $S$, $P^{\\pi}$, $R^{\\pi}$, $\\gamma$ >奖励函数表示:$R^\\pi_{s}=\\sum_{a\\in A}\\pi(a|s)R^a_{s}$当前状态s下执行某一指定策略得到的即时奖励是该策略下所有可能动作得到的奖励与该动作发生的概率的乘积的和。 策略 $\\pi$ 在MDP中的作用相当于 agent 可以在某一个状态时做出选择,进而有形成各种马尔可夫过程的可能,而且基于策略产生的每一个马尔可夫过程是一个马尔可夫奖励过程,各过程之间的差别是不同的选择产生了不同的后续状态以及对应的不同的奖励。 基于策略 $\\pi$ 的价值函数 Value Function状态值函数 State-Value Function V定义 $v_\\pi(s)$ 是在 MDP 下的基于策略 $\\pi$ 的状态值函数,表示从状态s开始,遵循当前策略时所获得的收获的期望;或者说在执行当前策略 $\\pi$ 时,衡量个体处在状态s时的价值大小。数学表示如下:$v_{\\pi}(s) = E_{\\pi}[G_t|S_t=s]$ 注意策略是静态的、关于整体的概念,不随状态改变而改变;变化的是在某一个状态时,依据策略可能产生的具体动作,因为具体的动作是有一定的概率的,策略就是用来描述各个不同状态下执行各个不同动作的概率。 动作值函数 Action-Value Function Q定义 $q_{\\pi}(s,a)$ 为动作值函数,表示在执行策略 $\\pi$ 时,对当前状态 s 执行某一具体动作 a 所能的到的收获的期望;或者说在遵循当前策略 $\\pi$ 时,衡量对当前状态执行动作 a 的价值大小。动作值函数一般都是与某一特定的状态相对应的。动作值函数的公式描述如下:$q_{\\pi}(s,a)= E_{\\pi}[G_t|S_t=s, A_t=a]$ 由于策略$\\pi(a|s)$是可以改变的,因此两个值函数的取值不像MRP一样是固定的,那么就能从不同的取值中找到一个最大值即最优值函数(这节课没有讲如何求解)。MDP需要解决的问题并不是每一步到底会获得多少累积reward,而是找到一个最优的解决方案。 Bellman期望方程 Bellman Expectation Equation根据这两个值函数的定义,它们之间的关系表示为 $v_{\\pi}(s) = \\sum_{a\\in A}\\pi(a|s)q_{\\pi}(s,a)$ $q_{\\pi}(s,a) = R_s^a + \\gamma \\sum_{s’\\in S}P_{ss’}^av_{\\pi}(s’)$ 第二个式子是说当选择一个action之后,转移到不同状态下之后获取的reward之和是多少。将两个式子互相代入,可以得到如下的Bellman期望方程。 $v_{\\pi}(s) = \\sum_{a\\in A}\\pi(a|s)(R_s^a + \\gamma \\sum_{s’\\in S}P_{ss’}^av_{\\pi}(s’))$ $q_{\\pi}(s,a) = R_s^a + \\gamma \\sum_{s’\\in S}P_{ss’}^a\\sum_{a’\\in A}\\pi(a’|s’)q_{\\pi}(s’,a’)$ 下图解释了红色空心圆圈状态的状态价值是如何计算的,遵循的策略随机策略,即所有可能的动作有相同的几率被选择执行。和MRP类似的,我们也可以得到矩阵形式和求解 最优价值函数最优状态值函数 $v$ 指的是在从所有策略产生的状态值函数中,选取使状态 s 值最大的函数:$v_* = \\max \\limits_{\\pi} v_{\\pi}(s)$ 类似的,最优动作值函数 $q (s,a)$ 指的是从所有策略产生的动作值函数中,选取是状态动作对 <$s$, $a$> 价值最大的函数:$q_* (s,a) = \\max \\limits_{\\pi} q_{\\pi}(s,a)$ 最优价值函数明确了MDP的最优可能表现,当我们知道了最优价值函数,也就知道了每个状态的最优价值,这时便认为这个MDP获得了解决。 最优策略当对于任何状态 s,遵循策略 $\\pi$ 的价值不小于遵循策略 $\\pi$’ 下的价值,则策略 $\\pi$ 优于策略 $\\pi$’:$\\pi \\geq \\pi^{‘} if v_{\\pi}(s)\\geq v_{\\pi^{‘}}(s) ,\\forall s $定理 对于任何MDP,下面几点成立: 存在一个最优策略,比任何其他策略更好或至少相等; 所有的最优策略有相同的最优价值函数; 所有的最优策略具有相同的动作值函数。 寻找最优策略可以通过最大化最优动作值函数来找到最优策略:对于任何MDP问题,总存在一个确定性的最优策略;同时如果我们知道最优动作值函数,则表明我们找到了最优策略。 Bellman最优方程 Bellman Optimality Equation针对 $v$ 一个状态的最优价值等于从该状态出发采取的所有动作产生的动作价值中最大的那个动作价值:针对 $q$,在某个状态 s 下,采取某个动作的最优价值由2部分组成,一部分是离开状态 s 的即刻奖励,另一部分则是所有能到达的状态 s’ 的最优状态价值按出现概率求和: 组合起来,得到Bellman最优方程: 满足bellman最优方程,意味着找到了最优策略。也就是$v_\\pi (s) = \\max \\limits_{a} q_{\\pi}(s,a)$,也就是不需要在进行策略改进。 求解Bellman最优方程Bellman最优方程是非线性的,没有固定的解决方案,通过一些迭代方法来解决:价值迭代、策略迭代、Q学习、Sarsa等。后续会逐步讲解展开。 MDP延伸——Extensions to MDPs","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"David Silver 强化学习 1 Introduction","date":"2017-08-14T13:01:30.000Z","path":"2017/08/14/David_Silver_RL_1/","text":"强化学习的特点(不同于其他机器学习): 没有监督数据、只有奖励信号 奖励信号不一定是实时的,而很可能是延后的,有时甚至延后很多。 时间(序列)是一个重要因素 当前的行为影响后续接收到的数据 The RL Problem奖励 Reward 一个Reward $R_{t}$ 是信号的反馈,是一个标量 它反映 Agent 在 t 时刻做得怎么样 Agent 的工作就是最大化累计奖励 强化学习主要基于这样的”奖励假设”:所有问题解决的目标都可以被描述成最大化累积奖励。 序列决策 Sequential Decision Making 目标:选择一系列的 Action 以最大化未来的总体奖励 这些 Action 可能是一个长期的序列 奖励可能而且通常是延迟的 有时候宁愿牺牲即时(短期)的奖励以获取更多的长期奖励 个体和环境 Agent & Environment可以从个体和环境两方面来描述强化学习问题。在 t 时刻,Agent 可以: 做出一个行为 $A_{t}$ 有一个对于环境的观察评估 $O_{t}$ 从环境得到一个奖励信号 $R_{t}$ Environment 可以: 接收 Agent 的动作 $A_{t}$ 更新环境信息,同时使得Agent可以得到下一个观测 $O_{t+1}$ 给Agent一个奖励信号 $R_{t+1}$ 历史和状态 History & State历史 历史是观测、行为、奖励的序列: $H_{t} = O_{1}, R_{1}, A_{1},…, O_{t-1}, R_{t-1}, A_{t-1}, O_{t}, R_{t}$ 状态 状态是所有能够决定将来的已有的信息,是关于历史的一个函数:$S_{t} = f(H_{t})$ 环境状态 Environment State 是环境的私有 representation 包括环境用来决定下一个观测/奖励的所有数据 通常对Agent并不完全可见,也就是Agent有时候并不知道环境状态的所有细节 即使有时候环境状态对Agent可以是完全可见的,这些信息也可能包含着一些无关信息 个体状态 Agent State 是Agent的内部representation 包括Agent可以使用的、决定未来动作的所有信息 Agent State是强化学习算法可以利用的信息 它可以是历史的一个函数: $S^{a}_{t} = f(H_{t})$ 信息状态 Information State包括历史上所有有用的信息,又称Markov状态。也就是说: 如果信息状态是可知的,那么历史可以丢弃,仅需要 t 时刻的信息状态就可以了。例如:环境状态是Markov的,因为环境状态是环境包含了环境决定下一个观测/奖励的所有信息 同样,(完整的)历史 $H_{t}$ 也是Markov的。 完全可观测的环境 Fully Observable Environments Agent能够直接观测到环境状态: $O_{t} = S^{a}_{t} = S^{e}_{t}$ 正式地说,这种问题是一个马尔可夫决策过程(Markov Decision Process, MDP) 部分可观测的环境 Partially Observable Environments Agent 间接观测环境。举了几个例子: 一个可拍照的机器人Agent对于其周围环境的观测并不能说明其绝度位置,它必须自己去估计自己的绝对位置,而绝对位置则是非常重要的环境状态特征之一; 一个交易员只能看到当前的交易价格; 一个扑克牌玩家只能看到自己的牌和其他已经出过的牌,而不知道整个环境(包括对手的牌)状态。 在这种条件下:个体状态 ≠ 环境状态 正式地说,这种问题是一个部分可观测马尔可夫决策过程 (POMDP)。Agent 必须构建它自己的状态 representation $S^{a}_{t}$,比如: 记住完整的历史: $S^{a}_{t} = H_{t}$ 这种方法比较原始、幼稚。还有其他办法,例如 : Beliefs of environment state:此时虽然 Agent 不知道环境状态到底是什么样,但Agent可以利用已有经验(数据),用各种 Agent 已知状态的概率分布作为当前时刻的 Agent 状态的呈现:$S^{a}_{t} = (P[S^e_t=s^1],…,P[S^e_t=s^n])$ Recurrent neural network:不需要知道概率,只根据当前的Agent状态以及当前时刻Agent的观测,送入循环神经网络(RNN)中得到一个当前Agent状态的呈现:$S^{a}_{t} = \\sigma(S^e_{t-1}W_s + O_tW_o)$ Agent的主要组成部分强化学习中的Agent可以由以下三个组成部分中的一个或多个组成: 1. 策略 Policy策略是决定Agent行为的机制。是从状态到行为的一个映射,可以是确定性的,也可以是不确定性的。 确定的 Policy : $a=\\pi(s)$ 随机 Policy : $\\pi(a|s) = P[A_t=a|S_t=s]$ 2. 价值函数 Value Function 是一个对未来奖励的预测 用来评价当前状态的好坏程度 当面对两个不同的状态时,Agent可以用一个Value值来评估这两个状态可能获得的最终奖励区别,继而指导选择不同的行为,即制定不同的策略。同时,一个价值函数是基于某一个特定策略的,不同的策略下同一状态的价值并不相同。某一策略下的价值函数用下式表示:$V_{\\pi}(s) = E_{\\pi}[R_{t+1}+\\gamma R_{t+2}+\\gamma^2 R_{t+3}+…|S_t=s]$ 3. 模型 ModelAgent对环境的一个建模,它体现了Agent是如何思考环境运行机制的(how the agent think what the environment was.),Agent希望模型能模拟环境与Agent的交互机制。 模型至少要解决两个问题:一是状态转化概率,即预测下一个可能状态发生的概率:$P^a_{s s^{‘}} = P[S_{t+1}=s^{‘}|S_t=s,A_t=a]$ 另一项工作是预测可能获得的即时奖励:$R^a_{s} = E[R_{t+1}|S_t=s,A_t=a]$ 模型并不是构建一个Agent所必需的,很多强化学习算法中Agent并不试图(依赖)构建一个模型。 注:模型仅针对Agent而言,环境实际运行机制不称为模型,而称为环境动力学(dynamics of environment),它能够明确确定Agent下一个状态和所得的即时奖励。 Agent的分类解决强化学习问题,Agent可以有多种工具组合,比如通过建立对状态的价值的估计来解决问题,或者通过直接建立对策略的估计来解决问题。这些都是Agent可以使用的工具箱里的工具。因此,根据Agent内包含的“工具”进行分类,可以把Agent分为如下三类: 仅基于价值函数的 Value Based:在这样的Agent中,有对状态的价值估计函数,但是没有直接的策略函数,策略函数由价值函数间接得到。 仅直接基于策略的 Policy Based:这样的Agent中行为直接由策略函数产生,Agent并不维护一个对各状态价值的估计函数。 演员-评判家形式 Actor-Critic:Agent既有价值函数、也有策略函数。两者相互结合解决问题。 此外,根据Agent在解决强化学习问题时是否建立一个对环境动力学的模型,将其分为两大类: Model Free:这类Agent并不视图了解环境如何工作,而仅聚焦于价值和/或策略函数。 Model Based:Agent尝试建立一个描述环境运作过程的模型,以此来指导价值或策略函数的更新。 学习和规划 Learning & Planning学习: 环境初始时是未知的 Agent不知道环境如何工作 Agent通过与环境进行交互,逐渐改善其行为策略。 规划: 环境如何工作对于Agent是已知或近似已知的 Agent并不与环境发生实际的交互,而是利用其构建的模型进行计算 在此基础上改善其行为策略。 一个常用的强化学习问题解决思路是,先学习环境如何工作,也就是了解环境工作的方式,即学习得到一个模型,然后利用这个模型进行规划。 探索和利用 Exploration & Exploitation强化学习是一种试错(trial-and-error)的学习方式,一开始不清楚environment的工作方式,不清楚执行什么样的行为是对的,什么样是错的。因而agent需要从不断尝试的经验中发现一个好的policy,从而在这个过程中获取更多的reward。 在这样的学习过程中,就会有一个在Exploration和Exploitation之间的权衡,前者是说会放弃一些已知的reward信息,而去尝试一些新的选择,即在某种状态下,算法也许已经学习到选择什么action让reward比较大,但是并不能每次都做出同样的选择,也许另外一个没有尝试过的选择会让reward更大,即Exploration希望能够探索更多关于environment的信息。而后者是指根据已知的信息最大化reward。例如,在选择一个餐馆时,Exploitation会选择你最喜欢的餐馆,而Exploration会尝试选择一个新的餐馆。","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"}]},{"title":"从Fictitious Play 到 NFSP","date":"2017-07-27T13:13:00.000Z","path":"2017/07/27/从Fictitious Play 到 NFSP/","text":"博弈论Normal-form game在博弈论中,Normal-form game是对game的一种描述。Normal-form game通过矩阵来表示game。下图就是一个payoff矩阵:Normal-form game是一种静态模型,这个模型假设每个player仅选择一次action或策略。Normal-form game适用于描述不需要考虑博弈进程的完全信息静态(Complete information static)博弈。 静态博弈players同时进行决策 动态博弈players的决策顺序有先后 完全信息(Complete information)在完全信息博弈中,players的游戏结构和players的payoff矩阵是众所周知的,但players可能看不到其他players所做的所有动作。 完美信息(Perfect information)在完美信息博弈中,每个player可以观测到其他players的动作,但可能缺乏关于他人的payoff或游戏结构的信息。 Extensive-form gameExtensive-form game是一种动态模型。通过使用树这种图形来表示game。不仅给出了博弈结果,还描述了博弈过程,如给出博弈中参与人的行动顺序,以及决策环境和行动空间等。完美信息下的Extensive-form game:If player 1 plays D, player 2 will play U’ to maximise his payoff and so player 1 will only receive 1. However, if player 1 plays U, player 2 maximises his payoff by playing D’ and player 1 receives 2. Player 1 prefers 2 to 1 and so will play U and player 2 will play D’ 非完美信息下的Extensive-form game: 信息集 是一组决策节点: 集合中的每个节点都只属于一个player; 当player到达信息集时,player不能区分信息集中的节点。即,如果信息集包含多个节点,则该集合所属的player不知道集合中的哪个节点已经到达。 下图的虚线连接的两个节点2代表player2的一个信息集,player2不知道player1采取的是U还是D。补充:在扑克游戏中,player不知道的是对方的手牌信息而不是这个例子中的动作。player 2 cannot observe player 1’s move. Player 1 would like to fool player 2 into thinking he has played U when he has actually played D so that player 2 will play D’ and player 1 will receive 3. ref : https://en.wikipedia.org/wiki/Extensive-form_game Extensive-form game和Normal-form game的转换下图是Extensive-form game的一个例子:player1有三个信息集,每个信息集里面有两种行动,所以player1有8种策略;player2有两个信息集,每个信息集里面有两种行动,所以player2有4种策略。所以转换成Normal-form game是一个横8纵4的矩阵. FSP in Extensive-Form GamesExtensive-Form 定义扩充 ChanceChance被认为是一个特别的player,遵循一个固定的随机策略,决定了chance节点进入每个分支的概率分布。(如扑克游戏中的发牌)。 Information State我们假设游戏具有perfect recall,即每个player当前的信息状态u隐含了之前的信息状态和行动序列: Behavioural Strategy在给定Information State时,动作action的概率分布。Behavioural Strategy 输出player i在信息状态u下,动作的概率分布。Normal-Form 定义扩充 Pure Strategyplayer在可能遇到的所有情况下都有一个确定的动作action。(payoff矩阵中的每一行和列都是一个Pure Strategy) Mixed StrategyMixed Strateg是Player i的Pure Strategy的概率分布。 Fictitious Play在normal form下:当前策略 = 现有策略和bestResponse的加权平均。 Realization-equivalence也就是说,Extensive-Form下的Behavioural Strategy和Normal-form下的Mixed Strategy存在一种等价。Extensive-Form也可以使用Normal-form下的Fictitious Play来求纳什均衡解。 Extensive-Form Fictitious Play 代表到信息状态u的sequence = sequence 中每个节点选择每个action的概率乘积 下图是对Lemma 6的一个计算的验证。 我们通过Theorem7更新Behavioural Strategy,可以收敛到纳什均衡。 具体算法XFP: 计算bestResponse 更新策略,使用Theorem7 重复上面的过程 Fictitious Self-PlayXFP会有维度灾难。generalised weakened fictitious play只需要近似bestResponse,甚至允许更新中的一些扰动。 Fictitious Self-Play: 使用强化学习去计算bestResponse 使用监督学习更新策略 样本的采集 GENERATEDAT()方法需要在理解一下。 Neural Fictitious Self-Play强化学习和监督学习都使用神经网络去学习出一个函数。 FSP中样本采集的混合策略 ,在NSFP中是函数,不能简单相加。转换成 ,使用概率完成上面式子中的加操作。 REF: Topics in Algorithmic Game Theory February 8, 2010 Lecturer: Constantinos Daskalakis Lecture 2 Fictitious Self-Play in Extensive-Form Games Deep Reinforcement Learning from Self-play in imperfect-information games","tags":[{"name":"RL","slug":"RL","permalink":"https://gyh75520.github.io/tags/RL/"},{"name":"博弈论","slug":"博弈论","permalink":"https://gyh75520.github.io/tags/博弈论/"},{"name":"ML","slug":"ML","permalink":"https://gyh75520.github.io/tags/ML/"}]},{"title":"opencv3 --python3 mac下配置","date":"2017-07-22T11:38:00.000Z","path":"2017/07/22/opencv3 --python3 mac配置/","text":"安装Anaconda把Anaconda安装的python版本设置为默认启动版本修改.bash_profile文件:123456789101112# Setting PATH for Python 2.7 # The orginal version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}" export PATH # Setting PATH for Python 3.4 # The orginal version is saved in .bash_profile.pysave PATH="/Library/Frameworks/Python.framework/Versions/3.4/bin:${PATH}" export PATH # added by howard export PATH="/usr/local/anaconda3/bin:$PATH" PATH替换成自己的路径 根据该脚本,先会去找 /usr/local/anaconda3/bin ,发现有,就为当前路径下的解释器环境,并执行。—— 所以,想设置python的版本,直接把你想添加的路径export上去,并放在后面。ref: http://blog.csdn.net/u010692239/article/details/52701626 安装opencv1brew install opencv3 --with-python3 安装好后,在最后它会提示你如果想要Python也能调用opencv接口的话,需要执行下面命令:1234If you need Python to find bindings for this keg-only formula, run:```bashecho /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth echo打印输出,>>重定向,执行完这句,可以在/usr/local/lib/python2.7/site-packages/目录下得到一个文件opencv3.pth。但是我们来看看它所放置的目录,这个目录是系统自带的Python目录,而我们使用的Anaconda里的Python,所以你需要将其重定向输出的路径改到Anaconda中Python目录下,比如我的:1echo /usr/local/opt/opencv3/lib/python3.6/site-packages >> /usr/local/anaconda3/lib/python3.6/site-packages/opencv3.pth ref: http://blog.csdn.net/willard_yuan/article/details/46721831 安装完成之后你一定会迫不及待的去测试一下:123pythonimport cv2RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa 如果出现上述错误,证明你numpy的版本不对,升级版本:1pip install numpy --upgrade","tags":[{"name":"opencv3","slug":"opencv3","permalink":"https://gyh75520.github.io/tags/opencv3/"},{"name":"mac","slug":"mac","permalink":"https://gyh75520.github.io/tags/mac/"}]},{"title":"HEXO+Github搭建博客","date":"2016-10-17T15:33:00.000Z","path":"2016/10/17/first/","text":"hexo是一款基于Node.js的静态博客框架。 之前是想着写博客,一方面是给自己做笔记,可以提升自己的写作、总结能力,这里记录一下linux下面Hexo搭建的步骤。 配置环境 安装Node.js 安装Git Github新建仓库和连接新建repository(仓库)登陆Github账号后,点击右上角的“+”号按钮,选择“New repository” 在Create a new repository界面填写仓库名必须为【your_user_name.github.io】固定写法 填写完成点Create repository创建完成 生成SSH Keys:我们如何让本地git项目与远程的github建立联系?这时候就要用到SSH Keys 使用ssh-keygen命令生成密钥对 1ssh-keygen -t rsa -C\"这里是你申请Github账号时的邮箱\" 然后系统会要你输入密码:(我们输入的密码会在你提交项目的时候使用) 12Enter passphrase (emptyforno passphrase):<输入加密串>Enter same passphrase again:<再次输入加密串> (终端提示生成的文件路径)找到你生成的密钥找到id_rsa.pub用终端进入编辑,复制密钥。 添加你的SSH Key到ssh-agent登陆Github,点击右侧用户按钮,选择Settings 点击 Add SSH key 按钮,将复制的密钥粘贴到 Key 栏 测试能不能链接成功1ssh -T [email protected] 执行结果 Permanently addedtheRSA host keyforIP address ‘192.30.252.130’tothelistofknown hosts.Are you sure you wanttocontinueconnecting (yes/no)?<输入yes>Hi username! You’ve successfully authenticated,butGitHubdoesnot 现在你已经可以通过SSH链接到Github了 正式安装HexoNode和Git都安装好后,首先创建一个文件夹,如blog,用户存放hexo的配置文件,然后进入blog里安装Hexo。我安装的是hexo 3.0以上的版本。 执行如下命令安装Hexo: 1sudo npm install -g hexo-cli 初始化然后,执行init命令初始化hexo,命令: 1hexo init 好啦,至此,全部安装工作已经完成!blog就是你的博客根目录,所有的操作都在里面进行。 生成静态页面 1hexo generate(hexo g也可以) 本地启动 启动本地服务,进行文章预览调试,命令: 1hexo server 浏览器输入http://localhost:4000 然后建立关联,blog文件夹下有: _config.yml node_modules public source db.json package.json scaffolds themes 现在我们需要修改_config.yml文件,翻到最下面,改成像我这样:1234567deploy: type: git repo: https://github.com/**gyh75520**/**gyh75520**.github.io.git branch: master 加粗的部分替换成前面的配置的your_user_name 然后执行命令: 1npm install hexo-deployer-git --save 然后,执行配置命令: 1hexo deploy 到这里项目已经部署到了github pages上 访问https://your_user_name.github.io 查看自己的博客吧O(∩_∩)O 备注:没有权限的话记得在命令前加上sudo Mac篇在mac配置,执行如下命令安装Hexo: 1sudo npm install -g hexo-cli 报错:1npm ERR! 解决:把官方的源替换成淘宝的源,替换的方法12npm install -g cnpm --registry=https://registry.npm.taobao.orgcnpm install -g hexo-cli Hexo下mathjax的转义问题我们平时使用markdown写文档的时候,免不了会碰到数学公式,好在有强大的Mathjax,可以解析网页上的数学公式,与hexo的结合也很简单,可以手动加入js,或者直接使用hexo-math插件.大部分情况下都是可以的,但是Markdwon本身的特殊符号与Latex中的符号会出现冲突的时候: — 的转义,在markdown中,_是斜体,但是在latex中,却有下标的意思,就会出现问题。 \\\\\\的换行,在markdown中,\\\\\\会被转义为\\\\,这样也会影响影响mathjax对公式中的\\\\\\进行渲染 解决办法:参考 https://segmentfault.com/a/1190000007261752","tags":[{"name":"HEXO","slug":"HEXO","permalink":"https://gyh75520.github.io/tags/HEXO/"}]}]