Skip to content

基于值函数的学习

📅 发表于 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更新策略
  • 值迭代算法

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

3. 缺点

  • 要求模型已知p(ss,a)r(s,a,s)
  • 效率太低:可以通过神经网络来近似计算值函数

策略迭代算法

策略迭代算法

核心思想

  • 显式维护和更新策略,通过策略评估策略改进 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π(s,a)1Nn=1NG(τ(n)),根据Q去改进策略
  2. ϵ: 依概率选择πϵ(s)=π(s)
  3. 同策略和异策略:采样与改进策略相同为同策略
  4. 需要拿到完整的轨迹才能对策略评估更新模型,效率较低

模型无关的强化学习也称为无模型的强化学习。蒙特卡罗方法:

在不知p(ss,a)r(s,a,s) 的情况下, 需要智能体和环境进行交互,并且收集一些样本。然后根据这些样本去求解马尔可夫决策过程最优策略

Q函数Qπ(s,a),初始状态为s, 执行动作a后,策略π能得到的期望总回报。

Qπ(s,a)=Eτp(τ)[G(τ)τs0=s,τa0=a]

模型未知,Q函数可以通过采样来计算。

1. 蒙特卡罗方法

1、从状态s、 动作a开始随机游走探索环境, 采集N个样本(N个轨迹)

2、得到N个轨迹τ(1),,τ(N),得到它们的总回报G(τ(1)),,G(τ(N))

3、利用轨迹的总回报去估计出Qπ(s,a)Qπ(s,a)Q^π(s,a)=1Nn=1NG(τ(n))

4、基于Qπ(s,a)改进策略ϵ贪心法

5、在新的策略下,再去采集样本、去估计Q,再去改进策略,直到收敛

2. 利用和探索

如果采用确定性策略 :

  • 则每次试验得到的轨迹是一样的
  • 只能计算出Qπ(s,π(s)) ,无法计算出Qπ(s,a),即无法计算出其它的a的Q函数
  • 只对当前环境进行了利用,而没有探索
  • 而试验的轨迹应该覆盖所有的状态和动作,以找到更好的策略

采用**ϵ贪心法**

πϵ(s)={π(s)依概率 1ϵa(随机选择)依概率 ϵ

3. 同策略和异策略

  • 同策略:采样策略πϵ(s), 改进策略πϵ(s), 相同
  • 异策略:采样策略πϵ(s), 改进策略π(s), 不同。可以使用重要性采样、重要性权重来优化π

时序差分学习算法

总体思想

  1. 无需知道完整轨迹就能对策略进行评估。时序差分学习=蒙特卡罗+动态规划
  2. 贝尔曼估计轨迹的回报G(τ0:T(N))=r(s,a,s)+γQ^N1π(s,a)
  3. 增量计算Q^Nπ(s,a)Q^Nπ(s,a)=Q^N1π(s,a)+α(G(τ(N))Q^N1π(s,a))

蒙特卡罗方法需要拿到完整的轨迹,才能对策略进行评估。

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

1. 增量计算Q^Nπ(s,a)

蒙特卡罗方法:从状态s,动作a开始,随机游走,采样N个样本

G(τ(N)) :第N次试验的总回报

Q^Nπ(s,a) :第N次试验后值函数的平均值,推导如下:

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^Nπ(s,a)第N次后的平均 = N-1次后的平均 + 一个增量α是一个较小的权值。

Q^Nπ(s,a)=Q^N1π(s,a)+α(G(τ(N))Q^N1π(s,a))

增量 :实际回报与估计回报直接的误差。

δ=G(τ(N))Q^N1π(s,a)

2. 贝尔曼方程估计G(τ(N))

s,a开始,采样下一步的状态和动作(s,a) ,得到奖励r(s,a,s)

无需得到完整的轨迹去计算总回报,使用贝尔曼方程去估计第N次试验后面(s,a)的总回报。

使用N-1次实验后的Q^N1π(s,a),去估计第N次试验中后续(s,a)的总回报 G(τ1:T(N)τs1=s,τa1=a)

G(τ0:T(N))=r(s,a,s)+γG(τ1:T(N)τs1=s,τa1=a)r(s,a,s)+γQ^N1π(s,a)

3. 两种算法

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

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

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

5. 总结

贝尔曼估计总回报(马尔可夫性,动态规划)

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)

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为终止状态

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

1. 思想目的

要算出Q^Nπ(s,a),只需知道下面三项:

  • 当前状态和动作(s,a)
  • 得到的奖励r(s,a,s)
  • 下一步的状态和动作(s,a)

不断优化Q函数,减少实际值和预期值的差距。

2. 核心计算

结合增量计算Q^Nπ(s,a) , 贝尔曼方程估计G(τ(N))

Q^Nπ(s,a)=Q^N1π(s,a)+α(G(τ(N))Q^N1π(s,a))G(τ0:T(N))=r(s,a,s)+γQ^N1π(s,a)

得到:

Q^Nπ(s,a)=(1α)Q^N1π(s,a)+α(r(s,a,s)+γQ^N1π(s,a))

简单点

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

3. SARSA算法步骤

输入:状态空间S, 动作空间A,折扣率γ, 学习率α

输出:策略π(s)

1 初始化

随机初始化Q(s,a),平均初始化策略π(s)

s,a,π(as)=1|A|

2 计算所有Q(s,a), 直到全部收敛

选择初始状态s,和动作a=πϵ(s)。从(s,a)开始向后执行,直到s为终止状态

a. 执行动作,得到新状态和新动作

  • 当前状态s,动作a
  • 执行动作a:得到奖励r和新状态s
  • 选择新动作:a=πϵ(s)

b. 增量计算 Q(s,a)

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

c. 更新策略π(s)

π(s)=argmaxaAQ(s,a)

d. 状态前进

ss,aa

Q学习算法

  1. SARAS:s,ar,s, 选择新状态a=πϵ(s),值函数Q(s,a)
  2. Q:s,选择当前动作a=πϵ(s)r,s,直接选择最大的值函数maxaQ(s,a)

SARAS是Q学习算法的一种改进。

1. SARAS

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

2. 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网络

1. Q网络

s,a 是状态动作s,a的向量表达。 用函数Qϕ(s,a)Qπ(s,a)

参数为ϕ的神经网络Qϕ(s,a),则称为Q网络。输入两个向量,输出为1个实数。

Qϕ(s)=[Qϕ(s,a1)Qϕ(s,am)][Qπ(s,a1)Qπ(s,a1)]

2. 两种逼近

学习一组参数ϕ使得Qϕ(s,a)逼近值函数Qπ(s,a)

蒙特卡罗方法:Q^π(s,a)=1Nn=1NG(τ(n)),总回报的平均

时序差分方法:E[r+γQϕ(s,a)]

3. Q学习的目标函数

以Q学习为例,采用随机梯度下降来优化,目标函数(减小差距)如下:

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

一般,标记是一个标量,不包含参数;不依赖于网络参数,与网络独立。

J(θ)=12mi=1m(y(i)实际目标值fθ(x(i)))2

两个问题:

  • 实际目标值不稳定。参数学习的目标依赖于参数本身。label本身也包含参数
  • 样本之间有很强的相关性

Deep Q Network

深度Q网络(deep Q-networks, DQN)

  • 目标网络冻结。在一个时间段,固定目标值中的参数
  • 经验回放。构建经验池来去除数据相关性
  • 经验池。最近的经历组成的数据集

带经验回放的DQN算法

带经验回放的深度Q网络。

1. 初始化经验池、Q网络参数、目标Q网络参数

  • 经验池: D,容量为N
  • Q网络参数:ϕ
  • 目标Q网络的参数:ϕ^=ϕ

2. 要让s,a,Qϕ(s,a)都收敛

每一次初始化起始状态为s, 遍历直到s为最终态

3. 每一时刻

生成新数据加入经验池

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步更新:ϕ^ϕ

4. DQN算法中经验池的优点

1、去除样本相关性,避免陷入局部最优

经验池中抽取样本代替当前样本进行训练,打破了与相邻训练样本的相关性,避免陷入局部最优。

2、经验回放类似于监督学习

s

总结

策略迭代

已知模型。利用贝尔曼方程算均值)迭代计算出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