顺序以周博磊老师强化学习纲要课程为主,增加王树森老师强化学习基础的知识补充,和蘑菇书的知识补充,作为学习记录

第四章:价值函数近似

主要内容包括:

  1. 价值函数近似基本原理介绍(Value Function Approximation, VFA)
  2. 线性价值函数近似(在预测和控制方面的应用)
  3. 非线性价值函数近似(主要是DQN的介绍)

一、价值函数近似基本原理的介绍:

  1. 引入原因:

    1. 之前是问题更多是少量状态的RL问题,所以可以用Qtable,即用表格形式存储每个状态s下动作a取得的奖励(这里的少量如悬崖行走问题的4*16,mountain car问题的1600等)
    2. 实际强化问题大多是大规模状态的问题,包括本身状态量巨大,或是连续状态空间,状态量无穷(这里的大量如国际象棋10^47  围棋10^170次方,事实上所有可观测宇宙的原子个数也只有10^80)
    3. 在解决问题的过程中,我们所用到的奖励函数R(ModelFree没有)、策略函数π、状态价值函数V和动作价值函数Q都与状态有关。
    4. 当状态数量过大时,价值函数的计算就十分困难,出现维度灾难(即在涉及向量的计算问题中,随着维数增加,计算量会随指数倍增长,事情变得不可控)
    5. 导致结果:在前一章ModelFree中基于Q表格(Lookup Table)提出的的解决方法就不再适用,需要研究如何将ModelFree方法应用到这种大规模状态情况。
  2. 引出解决大规模马尔可夫过程问题的方法:函数近似

    1. 不再使用表格形式,而是通过函数近似的方法代替真实的价值函数(使用带参数的近似函数)
    2. 优势:从已知状态泛化到未知状态,避免学习、存储每一个状态信息,使用插值方法估计没有出现过的状态(不需要对所有状态得到观测)
    3. 参数w可以使用MC(蒙特卡洛采样)或TD learning方法实现近似估计
  3. 函数近似的多种方法:
    1. 线性特征(Linear feature representations)(设计特征再进行线性叠加)
    2. 神经网络(Neural networks)(有效的拟合函数)
    3. 决策树(Decision trees)
    4. 近邻取样(Nearest neighbors)
    5. 主要介绍前两类,因为前两类可微分,这种性质方便我们优化相关参数(使用梯度下降更新)
  4. 参数优化(以价值函数的优化为例)(本章最重要的内容就是对梯度增量中的近似函数进行优化)
    1. 由于某些原因需要极小化(极大化)目标函数(损失函数)J(w)
    2. 这里我们需要极小化的损失函数J(w)如下,这里使用了均方误差(自定义的):(在已知当前给定状态s时的真正价值Vπ的情况下,希望我们所拟合的函数能够在不断更新后逐渐接近真实值,也就是说状态时定值,通过对参数的优化来极小化函数)
    3. 可能存在的误区:已知的价值函数真实值(orcle)的状态是有限的,而我们希望通过优化自己估计的价值函数,从而得到更多的状态对应价值。

    4. 使用梯度下降的方式对参数进行优化

      1. 梯度在数学中

        1. 单变量函数,梯度就是函数的微分,代表切线斜率
        2. 多变量函数,梯度是一个向量,向量有方向,梯度的方向指出了函数在给定点的上升最快的方向(参数其实也是一个向量)(只知道方向不知道长度)
      2. 目标:通过迭代优化参数找到目标函数的最小值或收敛到最小值
      3. 方法:对于可微分的函数来说,由于梯度的方向是函数变化最快的方向,找到给定点的梯度,再通过我们所设定的步长,可以得到参数如何变化能让函数值下降最快。
      4. 结果:通过反复求梯度,就能到达局部最小值(对于只有一个最值的函数,局部最小值即全局最小值)
      5. 公式中:负号表示向梯度相反的方向前进,即梯度下降 ;α称为学习率或步长,控制每一步的距离,避免错过最低点;1/2是为了求偏导时消去2不影响结果
      6. 缺点:受学习率影响很大;对于有多个极值的函数来说,它永远不能保证全局最优性,只能保证局部最低
  5. 状态s的描述
    1. 输入状态,提取对应的特征向量作为状态进行后续运算

    2. 具体特征是人为设定的,基于要解决的问题设计自己需要的特征

      1. 车的位置、速度、加速度
      2. cart的位置、速度、木杆角度、旋转角速度
    3. 将特征作为状态的函数表示状态,输入给价值函数、策略函数等,得到对应值

二、线性模型拟合价值函数

  1. 策略评估的函数近似(策略评估就是预测当前状态的价值)

    1. 已知orcle

      1. 相关函数变形

        1. 近似价值函数:(特征的线性叠加,对特征向量和参数进行线性组合)

        2. 需要最小化的损失函数:

        3. 梯度更新增量:(这个形式只有线性模型才适用)

      2. 线性模型的优势:对于线性模型来说,随机梯度下降的结果会接近全局最优解,即我们得到的局部最优解几乎就是全局最优解(找到最佳拟合价值函数的模型)

      3. 特殊的特征定义:Table Lookup Feature
        1. one-hot vector:向量中只有一个位置的值是1,即当前状态对应位置元素,其他值都是0

        2. 此时的线性模型:

        3. 于是此时的拟合价值函数就是:(wk即参数)

    2. model-free预测的近似(无oracle)
      1. 不知道真实价值V^π(s),只有来自环境的回报(重点区别在于梯度增量的计算)
      2. 回顾:(oracle 真实标签)
        1. model-free预测的目的是,给定一个策略,估计对于每个状态它的价值
        2. 方法:MC、TD来估计价值函数
        3. 维护一个个lookup table来存储V/Q的估计值
      3. 方法:将函数近似同时放入model-free 预测的循环中
        1. 优化价值函数
        2. 利用优化好的价值函数优化价值函数的近似(优化参数)
        3. 对比:
          1. 已知真实价值:

          2. MC方法代替真实价值

          3. TD target代替真实价值:

        4. 两种方法的对比:
          1. 对于MC方法:

            1. 回报Gt对于真实价值来说是无偏的(即均值等于真实值)
            2. 对于线性和非线性的价值函数近似都可以收敛
          2. 对于TD方法:
            1. TD target对于真实价值来说是有偏的(因为自身包含正在优化大参数,不够准确,不是真实的梯度)(又称为semi-gradient)
            2. 在线性的价值函数近似可以达到、接近整体最优解
  2. 控制部分的函数近似:
    1. 控制部分包括策略评估(预测)和策略优化,将动作价值函数进行函数近似,就可以适用于更大规模的状态情况
    2. 动作价值函数也可以以相同的方式进行函数近似
    3. 已知orcle
      1. 相关函数表示

        1. 动作价值函数近似:

        2. 损失函数:

        3. 梯度增量:

      2. 线性模型拟合:
        1. 状态的特征表示:

        2. 动作价值函数近似:

        3. 梯度增量:

    4. 未知orcle
      1. MC方法:

      2. Sarsa TD target:

      3. Q-learning TD target:

      4. 具体算法:(Sarsa算法与semi-gradient Sarsa算法的对比)
        1. 强调无模型状态
        2. 通过更新参数的方法更新函数,强调大数据的拟合
      5. 关于收敛(关于两种TD方法Sarsa与Q-learning)
        1. 当存在价值函数估计时,由于梯度中存在需要优化的参数本身,梯度并不是很准确
        2. 更新过程中,有两个近似过程(Bellman backup与价值函数近似),会引入很多噪声
        3. 结果:使用off-policy或使用非线性函数近似时收敛过程很不稳定,价值函数估计不准确
      6. 控制算法的收敛性:
        1. 状态较少时都可以收敛(小规模MDP可以找到最优解)
        2. 线性特征拟合前两者可以找到近似最优解,Qlearning很难找到最优解
        3. 近似函数选择非线性函数(神经网络)都很难保证得到最优解
  3. 题外话1:强化学习的死亡三角(Deadly Triad)
    1. 最重要的三点不确实因素:
    2. 函数估计:利用函数近似价值函数,利用近似会引入误差
    3. Bootstarpping(自举):基于之前的估计值进一步估计 (主要发生在TD方法中)
    4. Off-policy 训练:两个policy导致采集数据与实际优化数据不同,也引入了不确定因素
  4. 题外话2:由单步优化变为块优化(Batch优化)
    1. 前述方法都是单步优化,实际效率很低

    2. 保存一个training batch,直接优化batch中的所有样本,实现函数拟合

    3. 具体方法:

      1. 前提:存在一个数据库保存了一系列样本(pair)

      2. 根据方法的不同(MC、TD)选择对应target(替换不同v),优化参数w,使其对每个pair都达到极小化(这个是一次优化)

      3. 可能数据过大无法全部计算,则对数据库进行随机采样,利用采样数据对w进行迭代优化(这个是一次抽一部分,迭代优化)

      4. 这种方式与直接优化数据集的效果是一样的


三、非线性函数拟合

  1. 对比:

    1. 线性模型:人为确定表示状态的特征向量,线性价值函数将其进行线性叠加,然后就用于估计v值,计算损失函数,得到梯度表达式,对于Model-free则使用MC或TD方法将真实价值进行替换
    2. 前述方法是线性模型,需要人为确定对应特征向量才能良好工作,但这件事情其实很困难
    3. 存在非线性函数拟合,可以将特征提取与价值函数学习结合,神经网络是常用的非线性函数拟合方法
  2. 神经网络介绍
    1. 神经网络是多层参数叠加函数,神经网络内部有许多网络层,将其一层一层叠加起来,最终得到想要的输出。

    2. 使用链式法则优化参数(后向传播)

    3. 后向传播介绍
      1. 解决神经网络在训练模型时的参数更新问题,对权重进行优化,使得神经网络能够学习到从任意输入到输出的准确映射
      2. 梯度的意义在于,它在一定程度上表示了这个参数对整体结果的一个影响情况
      3. 就像链式求导,对每个参数的求导都会变成多个求导的乘积 

    4. 卷积神经网络:每一层都是由卷积层叠加起来的
  3. 强化学习与深度学习的结合:深度强化学习(Deep Reinforcement Learning)
    1. 主要特点:使用神经网络实现RL中函数的拟合(动作/状态价值函数,环境模型等)
    2. 一般使用SGD(随机梯度下降)实现参数优化
    3. 挑战:过多的模型参数需要优化;Deadly Triad(收敛问题,得到的解与最优解并不一致)
  4. DQN(Deep Q-Network)
    1. 出现时间:2015年DeepMind发表论文:Human-level control through deep reinforcement learning,提出了用神经网络拟合Q函数,在Atari游戏中取得了近似于人的表现能力,其实拟合的是最优动作价值函数Qstar
    2. 主要思想:

      1. 使用卷积神经网络拟合Q函数(由于DQN是Q-learning方法与深度学习结合的产物,所以神经网络拟合的其实是最佳动作价值函数即Qstar函数)
      2. 将游戏界面作为输入(连续4帧像素级别的图像)
      3. 输出是18个操作(所有动作的分数)
      4. 奖励是游戏的分数增减
      5. 内部是两层卷积网络和一层全连接将输入变为输出
    3. Qlearning中存在的问题:
      1. 样本之间相关性过高,导致学习比较困难(从像素级别来说,连续的每个画面之间的区别其实是很小的)
      2. 高估问题(最大化和自举)
    4. 解决方法和DQN的优化方法:
      1. 经验回放:experience replay(2个优势) 相关性和经验的重复利用避免 浪费
      2. target network(自举)、Double DQN(最大化)
    5. 经验回放:experience replay
      1. 重复利用经验避免浪费;打破序列顺序消除相关性
      2. 使用replay buffer(容器)存储不同游戏环境里的sample(在王树森老师的视频中将其称为transition,具体buffer中存放多少transition由具体应用决定)

      3. 存在特定网络为容器中填充内容
      4. 为了训练网络:每次从中随机采样,并用其计算TD target ,再用target进行随机梯度下降更新参数w

      5. 随机采样降低了相关度,更有利于学习(以及对经验的重复利用)
      6. 这也是随机梯度下降的主要思想,通过每次随机采样的数据对参数进行更新,当数据过大时,就可以在不采样使用完全部数据的情况下,得到一个误差范围内可接受的梯度值。
      7. 对经验回放的改进:Prioritized Experience Replay(优先经验回放)
        1. 主要思想:用非均匀抽样代替均匀抽样
        2. transition的重要性各不相同,比如超级玛丽中正常关卡和Boss关卡,后者更加稀缺也更加重要,transition需要被充分利用
        3. 可以使用TD error的绝对值表示重要性(即价值的真实值-价值函数近似值,因为训练的DQN由于不熟悉场景,预测的值就会偏离真实值(或估计的真实值)导致TD error的绝对值大)
        4. 给重要的transition更高的权重
        5. 非均匀抽样的两种方法:

          1. 抽样概率正比于TD error
          2. 抽样概率反比于rank(t)(是TD error的序号)
          3. 原理相同:TDerror越大,transition被抽样的概率越大
        6. 非均匀抽样可能导致预测有偏差
          1. 原因:概率由 TD error决定,不同的transition的重要性不同
          2. 解决:均匀抽样:所有的transition有相同的学习率;非均匀抽样:不同的transition应当设定不同的学习率

          3. 对于抽样概率较大的transition,它的学习率应当比较小
          4. β是个超参数,建议一开始值设定较小,最终逐渐接近1
        7. 流程:
          1. 对于刚获得的transition,不知道它的TD error,所以先将其TD error设为最大,获得最高优先级,以便下一次被选中
          2. 每一次从buffer中采样时,也要同时更新TD error,即每一次需要更新它的选中概率
    6. 高估问题的产生原因(使用TD算法,会导致DQN高估真实的动作价值)
      1. 高估并不是DQN自身的属性,而是由Qlearning算法造成的,因此解决高估就需要对Qlearning算法进行优化
      2. 原因一:计算TD target会存在最大化,它会导致高估 
        1. 这里的最大化是指在计算Qlearning的TDtarget时使用的最大化函数
        2. 已知我们在估计动作价值函数时会存在误差,即使我们认为误差是无偏的,即加入均值为0的噪声,最大化函数仍然会使我们所计算得到的值是大于或等于实际值的(这里存在一个我不会证明的数学原理)
      3. 原因二:bootstropping:使用自己的估计去进一步估计自己
        1. 从上式可知,我们希望我们所估计的值会进一步靠近计算的yt(因为它一半基于真实值一半基于估计值)
        2. 因此,在逐次计算中高估现象会越来越严重
      4. 真正问题:高估问题的真正危害在于:非均匀的高估
        1. 使用动作价值函数对动作进行打分,这其实是一种相对的比较
        2. 因此,如果是绝对的高估,反而不会影响动作的最终选择
        3. 但由于采样时的选择,以及所有的transition在buffer中出现频率也是不同的,这导致高估是非均匀的
        4. 非均匀的高估会对动作选择产生影响
      5. 解决方法:
        1. 切断自举:使用target network
        2. 避免最大化造成高估:double DQN
    7. target network(Fixed target)
      1. 目的:为了使训练更加稳定(使用另一个神经网络计算TD target而不是正要学习的网络自己)
      2. 理解:
        1. 猫要追上老鼠

        2. 两个都是即时更新,会产生奇怪的优化轨迹,导致训练不稳定

        3. 修复方法:降低老鼠的移动频率,让猫有足够的时间接近target,使训练更有效
      3. 方法:计算TD target的网络的参数w^−的更新与实际参数w存在时间差,w^−的更新慢于w(对于右边的target使用专门的target network进行更新)(为了方便更新,它的神经网络结构与DQN完全相同,只有参数不同)

      4. 流程:
        1. 从replay buffer中取tuples

        2. 计算target:注意这里的w已经不是同一个w了

        3. 更新w

    8. Double DQN
      1. 目的:在target network的基础上做出进一步的改进,缓解最大化造成的高估
      2. 方法:将TD target的计算过程进行进一步的拆分:

      3. 对比:
        1. Qlearning中使用target network后:

        2. 使用Double DQN后:

      4. 原因:由于此时选择的最优动作,并不一定是在target network参数下的最优动作,因此可以缓解最大化造成的高估
    9. 题外话:Sarsa算法中自举的问题仍然存在,但根据公式可知Sarsa中并不存在最大化造成高估的问题,因此Sarsa中只需要target network即可
      1. 关于高估问题参考了博主UQI-LIUWJ的理解,感谢分享

强化学习基础知识梳理(4)相关推荐

  1. 强化学习基础知识梳理(5)

    顺序以周博磊老师强化学习纲要课程为主,增加王树森老师强化学习基础的知识补充,和蘑菇书的知识补充,作为学习记录 第五章:策略优化基础 主要内容: 基于策略优化的强化学习 常见策略优化算法:Policy ...

  2. 1120_野火RT-Thread教程学习4_RTT学习基础知识梳理

    野火RT-Thread教程学习笔记4_RTT学习基础知识梳理 Grey 全部学习汇总:GitHub - GreyZhang/g_RT-Thread: learning and hacking RT-T ...

  3. 深度强化学习基础知识 思维导图

    学习了王树森老师的深度强化学习入门课件,将各个算法整理在如下思维导图中. 深度强化学习基础知识 思维导图

  4. 领导1v1谈话_让谈话强化学习基础知识1

    领导1v1谈话 Update: Part 2 is published! Let's Talk Reinforcement Learning - The Fundamentals - Part 2 更 ...

  5. 强化学习基础知识笔记[6] - DQN

    参考资料 [1] 深度强化学习系列 第一讲 DQN 本文主要是对该资料学习的笔记,并且加入了一些自己的想法,如有错误欢迎指出. DQN 算法引入 DQN算法在Q-Learning算法上改进而来,具体改 ...

  6. 深度学习基础知识(八):神经网络基础之导数

    这个专栏主要是想和大家分享一下深度学习的基础知识,主要是以吴恩达老师深度学习课程内容作为基础,并补充了很多其他内容希望让整体内容更加容易理解和系统化.如果想要了解具体专栏里面有什么内容的话,可以看一看 ...

  7. 论文浅尝-综述 | 基于强化学习的知识图谱综述

    转载公众号 | 人工智能前沿讲习 论文来源:https://crad.ict.ac.cn/CN/10.7544/issn1000-1239.20211264 摘要:知识图谱是一种用图结构建模事物及事物 ...

  8. python语法基础知识总结-Python基础知识梳理 - 第01部分

    在开始Python基础知识梳理前, 先安装下环境. 以下过程是在Linux操作系统, root用户下进行的, 主要安装了2.7版本的python, 和pip, ipython, virtualenv等 ...

  9. Js基础知识梳理系列

    小序:总是感觉自己的技术一直在原地踏步,想学习一些新的技术,但学起来很吃力,而且总是没有什么实际的收获,似乎进入了所谓的"瓶颈期".问了一些前辈是否也遇到过同样的问题,他们给我的解 ...

最新文章

  1. dubbo2.5.6从下载到编译成功并且部署成功过程
  2. golang 字符串比较 不区分大小写
  3. javascript基础 (2)
  4. mysql win7 sp1 常见问题_win7旗舰版安装不了mysql问题-------win7系统版本选择问题的一点探索...
  5. VS Tools for AI全攻略
  6. mariadb mysql表_mysql/mariadb学习记录——创建删除数据库、表的基本命令
  7. expected an indented block
  8. 聊聊技术人的中年危机
  9. .NET基础拾遗(1)类型语法基础和内存管理基础
  10. 元年深度 | 侧袋机制应用实务探讨
  11. java计算机毕业设计房产中介管理系统源码+系统+lw+数据库+调试运行
  12. c语言定时器实验程序,89C51单片机实验三 定时器实验
  13. python自动生成采集规则_快速制作规则及获取规则提取器API
  14. 基于mapnik的地图符号编辑器功能介绍
  15. 按揭贷款买房流程及注意事项详解 你准备好买房了吗
  16. Python简单实现图像融合
  17. SpringBoot SSO整合
  18. Mysql的插件下载流程
  19. M1卡区块控制位详解
  20. 政策频繁出台,智能网联汽车安全如何“驾驭”?

热门文章

  1. 三种方法:写一个函数,每调用一次函数,就会将num的值增加1,&&可能遇到的问题
  2. 索尼手机怎么开通Android,索尼第一款Xperia智能手机并不是Android系统
  3. 80C51定时器中断
  4. 我的世界java版合成表_我的世界:Java版和基岩版的5个合成表差异,知道半数,老MC无疑。...
  5. QGC地面站二次开发(一)地面站介绍以及软件框架(3)QGC汉化步骤介绍
  6. java camel_Apache Camel到底是什么?
  7. IP 地址的三种表示形式
  8. 天线基础知识(一)天线分类
  9. swf文件格式分析(一)
  10. 嵌入式linux开发 (十) RAM(4) I.MX6ULL外扩DDR3L