Skip to content

(18年笔记)基于值函数的学习

📅 发表于 2018/04/21
🔄 更新于 2018/04/21
👁️ -- 次访问
📝 0 字
0 分钟
强化学习
#值函数
#时序差分
#SARSA
#Q学习
#Q网络
#DQN
#蒙特卡罗
#动态规划
#策略迭代
#值迭代
笔记
  • 强化学习基于值函数的学习方法。
  • 最重要的是SARSA、Q学习、DQN。但是这些都依赖于前面的动态规划和蒙特卡罗方法。

值函数的学习方法

摘要
  1. 穷举所有策略选择最好策略(没用)
  2. 迭代优化策略,根据策略的值函数去优化策略 (重点)
  3. 动态规划(已知状态转移概率p(ss,a)和奖励函数r(s,a,s)
  4. 蒙特卡罗方法(不知模型),先采一些样本,再优化
  5. 时序差分学习算法:SARAS和Q学习
  6. 深度Q网络
值函数策略学习方法

值函数(Vπ(s)Qπ(s,a) )用来对策略π(as)进行评估。

1. 穷举策略法 (无用)

  • 如果策略有限,可以对所有策略进行评估,选出最优策略
s,π=argmaxπVπ(s)
  • 缺点:实际策略空间|A||S|非常大,根本无法搜索。

2. 迭代优化策略法 (重点)

  • 核心步骤

    • 随机初始化一个策略
    • 计算该策略的值函数动态规划蒙特卡罗 等方法
    • 根据值函数来设置新的策略
  • 例子

    • 给一个初始策略π(as)根据Qπ(s,a)去不断迭代去优化,直到收敛。
    • 得到新策略函数π(as)确定性策略
    • 新策略的值函数不断变大Qπ(s,a^)Qπ(s,a^)
π(as)={1a=argmaxa^Qπ(s,a^)0others

动态规划算法

总体思想

动态规划算法

1. 动态规划思想

  • 已知环境模型:状态转移概率p(ss,a)奖励r(s,a,s)
  • 迭代计算值函数:通过贝尔曼或贝尔曼最优方程,先算V(s),再算Q(s,a)
  • 通过值函数来优化策略:一般为优化为固定策略π(s)=a

2. 两种方法

  • 策略迭代算法

    • 有策略均等初始化策略贝尔曼方程迭代计算V函数(均值)
    • 再计算Q函数,依Q更新策略
  • 值迭代算法

    • 无策略,直接优化V函数均0初始化V函数贝尔曼最优方程迭代计算V函数(最大a)
    • 直到V函数收敛,再计算Q函数,依Q更新策略

3. 缺点

  • 要求模型已知p(ss,a)r(s,a,s)
  • 效率太低:状态动作数量太多时,无法计算,如棋盘361个位置、每位置3种状态,则棋盘状态有3361个,无法计算
    • 可以通过神经网络来近似计算值函数

策略迭代算法

策略迭代算法

核心思想

  • 显式维护和更新策略,通过策略评估策略改进 2个步骤来完成1次更新
  • 给定策略π(初始随机),
    • 使用贝尔曼方程(所有a求期望)来算出该策略下各状态的价值函数 Vπ(s)
    • 再算出 Qπ(s,a)更新策略

关键步骤

  • 均等概率初始化策略π(a|s)
s,a,π(as)=1|A|
  • 使用贝尔曼方程迭代计算该策略各状态s的价值函数 Vπ(s),所有a求均值
s,Vπ(s)=Eaπ(as)Esp(ss,a)[r(s,a,s)+γVπ(s)]=Eaπ(as)[Q(s,a)]
  • 利用Vπ(s) 计算 Qπ(s,a)函数
Qπ(s,a)=Esp(s|s,a)[r(s,a,s)+γVπ(s)]
  • 根据Qπ(s,a)更新策略π(s)=a,选择最好的动作a,更新为固定策略,最终输出策略π
s,π(s)=argmaxaQ(s,a)

价值迭代算法

值迭代算法

核心思想

  • 无需策略,通过贝尔曼最优方程直接迭代更新V(s) 直到其收敛收敛后再算Q(s,a)π
  • 收敛时的值函数就是最优值函数对应的策略 π最优的策略
V(s)=maxaQ(s,a)

关键步骤

  • 均0初始化值V(s)函数
sS,V(s)=0
  • 无需策略,使用贝尔曼最优方程迭代计算V(s)直到其收敛
  • 每次迭代选择最大化当前价值的动作
sS,V(s)=maxaEsp(ss,a)[r(s,a,s)+γV(s)]=maxa[Q(s,a)]
  • 收敛后,利用值Vπ(s) 计算 Qπ(s,a)函数
Qπ(s,a)=Esp(s|s,a)[r(s,a,s)+γVπ(s)]
  • 最后,根据Qπ(s,a)更新策略π(s)=a,选择最好动作a, 最终输出策略π
s,π(s)=argmaxaQ(s,a)

蒙特卡罗采样方法

模型无关的强化学习

参考文章

采样学习方法

蒙特卡洛采样学习方法

1. 背景

  • 智能体和环境交互采集一些样本根据样本期望来估计Q函数,求解最优策略
  • 模型未知,不知p(s|s,a)r(s,a,s)通过采样来计算Q(s,a)
Qπ(s,a)Eτp(τ)[G(τ)τs0=s,τa0=a]1Ni=1NG(τi)

2. 方法步骤

  • 状态s,动作a 开始随机游走探索环境采集N个样本/轨迹得到轨迹总回报
:τ(1),τ(2),,τ(N)G(τ(1)),G(τ(2)),,G(τ(N))
  • 利用轨迹总回报去估计 Qπ(s,a)
Qπ(s,a)Q^π(s,a)=1Ni=1NG(τ(i))
  • 也可增量计算,不用每次计算平均值。
QNπ(s,a)=QN1π(s,a)+α(G(τ(N))QN1π(s,a))
  • 基于 Qπ(s,a) 改进策略 π(a|s)ϵ 贪心法 鼓励探索和利用。
  • 新策略下,再去采集样本估计Q改进策略,直到收敛

3. 缺点

  • 依赖每条轨迹的真实回报 G(τ)需每个轨迹完成以后(回合结束),才能算出真实回报,再利用回报去更新价值函数。
  • 在回合结束之前,价值函数的估计不会发生改变,学习效率较低不适用于长序列任务

增量计算Q回报

增量计算Q(s,a), TD算法

背景

  • 需拿到所有轨迹的回报后平均,才能算出Q值,效率低。原始公式
Qπ(s,a)Q^π(s,a)=1Ni=1NG(τ(i))

增接迭代计算回报(Q值)

  • 第N次后的平均(Q值) = 第N-1次后的平均(Q值) + 第N次的1个增量
QNπ(s,a)=QN1π(s,a)+α(G(τN)QN1π(s,a))
  • 增量(蒙特卡洛误差) = 轨迹真实回报 - 期望回报
δ=G(τ(N))Q^N1π(s,a)
  • 具体推导过程
Q^Nπ(s,a)=1Ni=1NG(τ(i))=1N(G(τ(N))+i=1N1G(τ(i)))=1N(G(τ(N))+(N1)Q^N1π(s,a))=Q^N1π(s,a)+1N(G(τ(N))Q^N1π(s,a))=Q^N1π(s,a)N1+α(G(τ(N))Q^N1π(s,a))N
  • 符号定义
    • QN1π(s,a)N-1次实验(轨迹)后的Q函数值
    • QNπ(s,a)N次实验(轨迹)后的Q函数值
    • G(τ(i)) :第i条轨迹/第i次实验的真实回报

优点

  • 每采样一个新轨迹τs,a就可以更新Q^π(s,a)
  • 无需拿到所有轨迹的回报后才计算Q值,而为增量迭代计算

利用和探索

利用探索

1. 利用和探索

  • 试验轨迹应覆盖所有状态和动作,以找到更好的策略
  • 采用 ϵ贪心法 👏,少数情况下随机选择动作,鼓励对环境进行探索
πϵ(s)={π(s)=argmaxaQπ(s,a),依概率 1ϵ(利用)a,依概率 ϵ(探索)
  • 如用纯贪心法 ,则没有探索,只对环境进行利用
    • 每次试验得到的轨迹是一样的
    • 只能算出Qπ(s,π(s)) ,无法计算出Qπ(s,a),即无法计算出其它动作a的Q函数

2. 同策略和异策略

  • 同策略(on-policy) (普通MC)

    • 环境交互的行为(采样)策略,和评估价值的目标(改进)策略相同,都是πϵ(s)
  • 异策略(off-policy)

    • 采样策略是πϵ(s), 优化的目标策略是π,采样和改进策略不同
  • 我们希望:行为策略能尽可能探索环境目标策略直接利用已有经验选取最佳策略。

3. 重要性采样

  • 思想:通过在一个分布上采样,来估计另一个分布下的期望值。

  • RL:

    • 用策略μ 生成数据,来估计策略π价值函数,实现off-policy
    • 为每个μ轨迹回报,赋予重要性采样权重,弥补矫正2个策略的差异
    • 从而实现用一个策略的数据来估计另一个策略的价值函数
    Eτpπ(τ)[G(τ)]1Ni=1Npπ(τi)pμ(τi)G(τi)
  • wi=pπ(τi)pμ(τi) 重要性采样权重

时序差分学习算法

总体思想

TD 摘要
  1. 时序差分学习=蒙特卡罗+动态规划,无需知道完整轨迹就能对策略进行评估。
  2. 蒙特卡罗增量计算价值函数Q^π(s,a)=Q^π(s,a)+α(G(τs,a,s,a)Q^π(s,a))
  3. 贝尔曼估计轨迹回报G(τs,a,s,a)=r(s,a,s)+γQ^π(s,a)
背景
  • 动态规划效率低状态动作数量多,难以计算
  • 蒙特卡罗效率低需拿到完整轨迹才能对策略进行评估和更新
  • 时序差分(TD)
    • 蒙特卡罗的改进,引入动态规划来提高效率
    • 模拟一段轨迹,每行动一步或几步,就利用贝尔曼方程评估行动前状态的价值
TD 整体思想

时序差分学习(temporal-difference learning)结合了动态规划蒙特卡罗方法。

1. 改进蒙特卡罗 增量计算Q^Nπ(s,a)

  • 第N次后的Q值 = 第N-1次后的Q值 + 1个增量
  • 增量是第N条轨迹实际回报和预测回报的误差α是一个较小的权值
Q^Nπ(s,a)=Q^N1π(s,a)+α(G(τ(N))Q^N1π(s,a))
  • 依赖:每条轨迹的真实回报 G(τ)

2. 利用贝尔曼估计轨迹回报G(τ(N))

  • 无需完整轨迹,利用⭐Q函数贝尔曼方程动态规划,来估计完整轨迹回报 G(τ),Q(s,a)
  • s,a开始,采样下一步状态动作(s,a)得到奖励r(s,a,s)即可估计轨迹回报
G(τs,a,s,a)=r(s,a,s)+γG(τs0=s,a0=a)r(s,a,s)+γQ^π(s,a)
  • ⭐用当前Q^N1π(s,a),去估计当前轨迹未来(s,a)总回报 G(τ1:T(N)) ‼️

3. 总结

  • 贝尔曼估计总回报(马尔可夫性,动态规划)
G(τ)r(s,a,s)+γQ(s,a)
  • 增量更新值函数(蒙特卡罗)
Q(s,a)Q(s,a)+α(G(τ)Q(s,a))Q(s,a)Q(s,a)+α(r+γQ(s,a)Q(s,a))Q(s,a)Q(s,a)+α(r+γQ(s,a)Q(s,a)
两种算法和比较

1. 两种算法

  • SARSA:同策略。采样动作a=πϵ(s)和值函数更新Q(s,a),都关于同一个策略πϵ
  • Q学习:直接选择最大的值函数maxaQ(s,a)更新,更新的Q是关于策略π的。

2. 蒙特卡罗方法和时序差分方法比较

  • 蒙特卡罗方法需完整路径才能知道总回报,不依赖马尔可夫性质
  • 时序差分学习只需一步就能知道总回报,依赖于马尔可夫性质

SARSA算法

摘要
  1. 当前s,a, 奖励r(s,a,s), 新的s,a, 优化Q(s,a)
  2. 贝尔曼估计实际奖励G(τ)r+γQ(s,a)
  3. 增量计算QQ(s,a)Q(s,a)+α(r+γQ(s,a)Q(s,a))
  4. 更新策略π(s)π(s)=argmaxaAQ(s,a)
  5. SARAS:优化所有Q(s,a)直到收敛。对每一个s,a,每一步状态转移,计算Q,直到s为终止状态
State Action Reward State Action

SARASState Action Reward State Action,一种同策略的时序差分学习算法。

1. 核心思想

  • 蒙特卡罗增量计算Q函数,其中轨迹回报贝尔曼估计来计算

  • 不断优化Q函数减少实际值和预期值的差距,通过下面3项来更新Q^π(s,a)

    • 当前状态动作s,a

    • 奖励r(s,a,s)

    • 下一步状态动作s,a

2. 核心推导

  • 增量计算价值函数 Q^π(s,a)
Q^π(s,a)=Q^π(s,a)+α(G(τs,a,s,a)Q^π(s,a))
  • 贝尔曼方程估计轨迹回报 G(τ(N))
G(τs,a,s,a)=r(s,a,s)+γQ^π(s,a)
  • 得到最终Q函数更新方程
Q^π(s,a)=Q^π(s,a)+α(r(s,a,s)+γQ^π(s,a)Q^π(s,a))
  • 本质:蒙特卡罗增量计算Q函数,其中轨迹回报贝尔曼估计来计算
Q^π(s,a)=Q^π(s,a)+α(r(s,a,s)+γQ^π(s,a),Q^π(s,a))

3. SARSA 算法步骤

  • 随机初始化策略π(s)不断迭代直到Q(s,a)收敛,进行以下迭代
  • 确定初始状态动作s,a,不断执行以下流程,直到s为终止态
    • 执行动作a:得到奖励r新状态s
    • 新状态s依概率选择新动作a=πϵ(s)
    • 更新Q函数Q^π(s,a)=Q^π(s,a)+α(r(s,a,s)+γQ^π(s,a)Q^π(s,a))
    • 更新策略πQ(s,a)=argmaxaQ(s,a)
    • 状态前进ss,aa

Q学习算法

Q学习

核心思想

  • 整体和SARAS类似,区别:
    • 不通过πϵ来选下一步动作a,而是直接选择最优的Q函数
    • 更新后的Q函数是关于π,而非πϵ,是一种异策略的TD算法

核心推导

  • Q函数推导公式
    • 直接选择最大的Q函数不用依概率选择a对应的Q
Q^π(s,a)=Q^π(s,a)+α(r(s,a,s)+γmaxaQ^π(s,a)Q^π(s,a))

核心流程

  • 在状态s,选择动作a=πϵ(s)
  • 执行动作a:得到奖励r新状态s
  • 新状态s不依概率选择新动作 ,而是直接选择最优的Q函数
  • s状态前进 ss,直到s为终止态

DQN 算法

Q网络

Q 网络

1. 背景

  • 连续的状态动作空间里计算值函数Q(s,a)

2. 核心思想

  • 使用神经网络参数Qϕ(s,a)近似逼近值函数Q(s,a)
  • s,a 是 状态动作s,a向量表示
Qϕ(s,a)Qπ(s,a)Qϕ(s)=[Qϕ(s,a1)Qϕ(s,am)][Qπ(s,a1)Qπ(s,a1)]
  • 若是蒙特卡罗方法,参数逼近平均总回报
Qϕ(s,a)Q^π(s,a)=1Nn=1NG(τ(n))
  • 若是SARAS算法,参数逼近贝尔曼方程估计的轨迹回报
Qϕ(s,a)Es,a[r(s,a,s)+γQϕ(s,a)]
  • 若是Q学习算法,参数逼近贝尔曼最优方程估计的轨迹回报
Qϕ(s,a)Es[r(s,a,s)+γmaxaQϕ(s,a)]

3. Q网络的目标函数(以Q学习为例)

  • 以Q学习为例,采用SGD来优化,目标函数如下:
L(s,a,s;ϕ)=(r+γmaxaQϕ(s,a)Qϕ(s,a)网络值)2J(θ)=12mi=1m(y(i)实际目标值fθ(x(i)))2

DQN

DQN

1. 背景

  • Q网络存在2个问题
    • 实际目标值不稳定参数学习的目标依赖于参数本身。label本身也包含参数
    • 样本之间有很强的相关性

2. DQN(Deep Q Networks)

  • 两个方法
    • 目标网络冻结:在一个时间段内,固定目标中的参数
    • 经验回放
      • 构建经验池(最近经历的数据)来去除相关性
      • 训练时,随机从经验池中抽取样本来代替当前样本进行训练,打破和相邻样本的相似性,避免局部最优
      • 类似于监督学习,先收集样本,再在样本上训练

3. DQN的训练过程

  • 初始化经验池 D、容量为N,Q网络参数ϕ目标Q网络参数ϕ^=ϕ

  • 初始化s,执行以下流程,直到s为终止态;目标是让s,a,Qϕ(s,a)收敛

  • 采样动作状态加入经验池

    • 在状态s选择执行动作a=πϵ(s),得到奖励r、新环境状态s
    • (s,a,r,s) 加入经验池D
  • D采样一条数据(ss,aa,rr,ss)。 (去除样本相关性

  • 计算实际目标值Qψ^(ss,aa)(解决目标值不稳定的问题)

Qψ^(ss,aa)={rr,ssrr+γmaxaQϕ^(ss,a),
  • 计算损失函数,梯度下降法去训练Q网络
J(ϕ)=(Qϕ(ss,aa)y)2=(Qϕ(ss,aa)Qψ^(ss,aa))2
  • 状态前进 ss

  • 更新目标Q网络的参数 每隔C步更新:ϕ^ϕ

总结

策略迭代

已知模型。利用贝尔曼方程算均值)迭代计算出V(s),再算出Q(s,a)。选择最好的动作a去优化策略π(s)

s,Vπ(s)=Eaπ(as)Esp(ss,a)[r(s,a,s)+γVπ(s)]Qπ(s,a)=Esp(ss,a)[r(s,a,s)+γVπ(s)]s,π(s)=argmaxaQ(s,a)

值迭代

已知模型。利用贝尔曼最优方程迭代算出V(s),再算出Q(s,a)。选择最好的动作a去优化策略π(s)

sS,V(s)=maxaEsp(ss,a)[r(s,a,s)+γV(s)]Qπ(s,a)=Esp(ss,a)[r(s,a,s)+γVπ(s)]s,π(s)=argmaxaQ(s,a)

蒙特卡罗

未知模型。从(s,a)随机游走,采集N个样本。使用所有轨迹回报平均值近似估计Q(s,a) ,再去改进策略。重复,直至收敛。

Qπ(s,a)Q^π(s,a)=1Nn=1NG(τ(n))

时序差分算法

无需知道完整轨迹就能对策略进行评估。

时序差分学习=动态规划-贝尔曼估计G(τ) + 蒙特卡罗采样-增量计算Q(s,a)

贝尔曼估计轨迹总回报G(τ)

G(τ)r(s,a,s)+γQ(s,a)

增量计算Q(s,a)

Q(s,a)Q(s,a)+α(r+γQ(s,a)Q(s,a))

SARSA

同策略的时序差分算法,是Q学习的改进。

1、当前状态s,当前动作a (初始时选择a=πϵ(s),后续是更新得到的)

2、执行动作a,得到新状态s,得到奖励r(s,a,s)

4、依概率选择新动作a=πϵ(s)新状态新动作的值函数Q(s,a)

5、更新Q函数

Q(s,a)Q(s,a)+α(r+γQ(s,a)Q(s,a))

6、更新状态和动作:s=s,a=a

Q学习

1、当前状态s,选择当前动作a=πϵ(s)

2、执行动作a、得到新状态s和奖励 r(s,a,s)

3、不依概率选择新动作,而是直接选择最大的值函数maxaQ(s,a)

4、更新Q函数

Q(s,a)Q(s,a)+α(r+γmaxaQ(s,a)Q(s,a))

5、更新状态:s=s

Q网络

使用神经网络Qϕ(s,a)去近似值函数Q(s,a)。两个问题:实际目标值不稳定;样本之间具有强相关性。

L(s,a,s;ϕ)=(r+γmaxaQϕ(s,a)Qϕ(s,a)网络值)2

DQN

深度Q网络:

  • 目标网络冻结-稳定目标值Qϕ(s,a)训练网络,Qϕ^(s,a)目标值网络。定期更新参数ϕ^ϕ
  • 经验池的经验回放-去除样本相关性- 每次采集一条数据放入经验池,再从经验池取数据进行训练。

生成新数据加入经验池

1、状态s, 选择动作a=πϵ(s)

2、执行动作a, 得到rs

3、(s,a,r,s) 加入经验池D

采经验池中采样一条数据计算

1、从D中采样一条数据,(ss,aa,rr,ss)。 (去除样本相关性

2、计算实际目标值Qψ^(ss,aa)。 (解决目标值不稳定的问题

Qψ^(ss,aa)={rr,ssrr+γmaxaQϕ^(ss,a),

3、损失函数如下,梯度下降法去训练Q网络

J(ϕ)=(Qϕ(ss,aa)y)2=(Qϕ(ss,aa)Qψ^(ss,aa))2

状态前进

ss

更新目标Q网络的参数

每隔C步更新:ϕ^ϕ

总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025