Skip to content

基于值函数的学习

📅 发表于 2018/04/21
🔄 更新于 2025/07/23
👁️ — 次访问
📝 3566 字
11 分钟
强化学习
#值函数
#时序差分
#SARSA
#Q学习
#Q网络
#DQN
#蒙特卡罗
#动态规划
#策略迭代
#值迭代

基于值函数的学习方法:贝尔曼方程,动态规划、蒙特卡洛、时续差分、Q网络。

强化学习基于值函数的学习方法。最重要要是SARSA、Q学习、DQN。但是这些都依赖于前面的动态规划和蒙特卡罗方法。

强化学习基础笔记

贝尔曼和贝尔曼最优方程

  1. V(s)函数和Q(s,a)函数
  2. 贝尔曼方程(选择所有可能的均值)
  3. 贝尔曼最优方程(直接选择最大值)

V函数与Q函数

V函数:以s为初始状态,执行策略π得到的期望回报(所有轨迹回报的均值)

Vπ(s)=Eτp(τ)[t=0T1rt+1τs0=s]

Q函数:以s为初始状态,执行动作a,执行策略π得到的期望回报

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

利用V函数去计算Q函数

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

贝尔曼方程

V(s)的贝尔曼方程,选择所有a的期望回报, 也是Q函数的均值V(s)=Ea[Q(s,a)]

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

Q(s,a)函数的贝尔曼方程

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

贝尔曼最优方程

V(s)函数的贝尔曼最优方程,实际上是直接选择所有a中的最大回报

V(s)=maxaEsp(ss,a)[r(s,a,s)+γV(s)]

Q(s,a)函数的贝尔曼最优方程

Q(s,a)=Esp(ss,a)[r(s,a,s)+γmaxaQ(s,a)]

值函数的学习方法

  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. 迭代法优化策略

步骤如下,直到收敛

  1. 随机初始化一个策略
  2. 计算该策略的值函数动态规划蒙特卡罗
  3. 根据值函数来设置新的策略

比如

给一个初始策略π(as), 根据Qπ(s,a)去不断迭代去优化,得到新的策略函数π(as)确定性策略),直到收敛。

π(as)={1a=argmaxa^Qπ(s,a^)0others

新策略的值函数会不断变大:

Qπ(s,a^)Qπ(s,a^)

动态规划算法

总体思想

  1. 思想:已知模型,通过贝尔曼方程来迭代计算值函数,通过值函数去优化策略为固定策略
  2. 两种方法:策略迭代-贝尔曼方程(所有可能的均值),值迭代-贝尔曼最优方程(直接)
  3. 缺点:要求模型已知,效率太低

基于模型的强化学习,叫做模型相关的强化学习,或有模型的强化学习。

1. 动态规划思想

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

2. 两种方法

  • 策略迭代算法 : 贝尔曼方程更新值函数,算出所有值函数,计算均值
  • 值迭代算法:贝尔曼最优方程更新值函数,直接优化计算最大值

3. 缺点

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

策略迭代算法

  1. 已知模型:状态转移概率p(ss,a)和奖励函数r(s,a,s)
  2. 使用贝尔曼方程迭代计算Vπ(s)求均值Vπ(s)=EaEs[r(s,a,s)+γVπ(s)]
  3. 利用Vπ(s)去计算Qπ(s,a)求均值Qπ(s,a)=Es[r(s,a,s)+γVπ(s)]
  4. 根据Qπ(s,a)更新策略π(s)=a,选择最好的动作a,更新为固定策略

1. 初始化策略

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

2. 使用贝尔曼方程迭代计算值函数Vπ(s)

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

3. 利用值函数Vπ(s)计算Qπ(s,a)

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

4. 根据Qπ(s,a)更新策略,选择最好的动作a,更新为固定策略

s,π(s)=argmaxaQ(s,a)

值迭代算法

  1. 最优值函数:最优策略对应的值函数
  2. 贝尔曼最优方程:V(s)=maxaEsp(ss,a)[r(s,a,s)+γV(s)] ,直接选择最大的a
  3. 值迭代算法:最优方程更新值函数V(s), 计算Q(s,a), 更新策略π(s)=a

1. 最优值函数

最优策略π对应的值函数就是最优值函数

V(s)=maxaQ(s,a)

2. 贝尔曼最优方程

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

3. 值迭代算法

值迭代算法:使用贝尔曼最优方程去更新值函数,收敛时的值函数就是最优值函数,对应的策略也是最优的策略。

1、 初始化值函数

sS,V(s)=0

2、 使用贝尔曼最优方程更新V(s),直到收敛

sS,V(s)=maxaEsp(ss,a)[r(s,a,s)+γV(s)]

3、 计算Q(s,a)

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

4、 更新策略π(s)=a

s,π(s)=argmaxaQ(s,a)

5、 输出策略π

蒙特卡罗采样学习方法

  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 - 2026