【强化学习理论】时序差分算法

本文介绍了时序差分算法中的代表算法SARSA和Q-learning,它们与动态规划的区别在于是否需要环境的完整模型。SARSA采用在线策略,更新基于实际执行的动作,而Q-learning则可以离线学习,目标是找到最优策略。两种算法都在尝试近似智能体的价值函数,但Q-learning能学习到全局最优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时序差分算法的代表算法

SARSA算法;

Q-learning算法。

时序差分算法与动态规划算法的区别

不同之处

1、使用条件不同

动态规划算法(策略迭代、价值迭代)适用于知道完整MDP建模的环境(因此这类算法也叫model-based方法),智能体能够和环境在线交互,且状态空间、动作空间离散、有限;

时序差分算法(SARSA、Q-learning算法)适用于不知道完整MDP建模的环境(不知道奖励函数、状态转移函数,但知道状态空间、动作空间,这类算法是model-free方法),智能体能够和环境在线交互,且状态空间、动作空间离散、有限。

2、思想不尽相同

时序差分算法有采取动态规划的思想,同时还有采取蒙特卡洛方法的思想。

运用蒙特卡洛方法,即使不知道完整的环境MDP建模,也可以在与环境交互后得到采样样本,用这些样本去近似价值函数。

而运用动态规划思想,可以逐步用后续状态的价值来更新当前状态的价值,最终近似出价值函数(但是单纯只是用动态规划的思想的话,这个价值函数并不是最优的,还要搭配上策略提升定理,才能得到最优价值函数)。

相同之处

用处相同

都是为了求解、近似出智能体的价值函数。

两种时序差分算法的区别

Sarsa算法

(单步)Q函数估计式子
Q(st,at)←Q(st,at)+α[rt+γQ(st+1,at+1)−Q(st,at)] Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha \left [r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \right] Q(st,at)Q(st,at)+α[rt+γQ(st+1,at+1)Q(st,at)]
(多步)Q函数估计式子
Q(st,at)←Q(st,at)+α[rt+γrt+1+γ2rt+2+...+γnQ(st+n,at+n)−Q(st,at)] Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha \left[ r_t + \gamma r_{t+1} + \gamma ^2 r_{t+2} + ... +\gamma^n Q(s_{t+n}, a_{t+n}) - Q(s_t, a_t) \right] Q(st,at)Q(st,at)+α[rt+γrt+1+γ2rt+2+...+γnQ(st+n,at+n)Q(st,at)]
在Sarsa算法里,策略提升是如何进行的?

在这个过程里,为了进行“策略提升”,近似出“最优价值函数”,使用了贪心策略(每次选择能够令Q(st+1,at+1)Q(s_{t+1}, a_{t+1})Q(st+1,at+1)最大的那个at+1a_{t+1}at+1),但是为了避免有些状态动作对(s,a)(s,a)(s,a)从未出现造成估计的价值函数未必最优,因此改造一下原来的贪心策略,使之成为ϵ\epsilonϵ-贪婪策略,以ϵ\epsilonϵ的概率在整个动作空间中随机选择一个动作,以1−ϵ1-\epsilon1ϵ的概率选择价值函数最大的那个动作。

为什么会出现多步Sarsa算法?

想要结合蒙特卡洛和时序差分各自的优势。

蒙特卡洛的优势:无偏。劣势:方差大。

时序差分的优势:方差小。劣势:有偏。

有偏和无偏是根据Q函数的计算式子里面是否有需要估计的值来区分的。蒙特卡洛方法里,价值函数的增量更新方式是这样的:
Vπ(s)←Vπ(s)+α[Gt−Vπ(s)] V^{\pi}(s) \gets V^{\pi}(s) + \alpha \left[ G_t - V^{\pi}(s) \right] Vπ(s)Vπ(s)+α[GtVπ(s)]
Vπ(s)V^{\pi}(s)Vπ(s)本身就是要迭代更新的,有些偏差可以理解,而GtG_tGt不需要估计,因为是与实际环境进行一连串交互后得到的,是真实值。因此“无偏”;而在时序差分方法里,价值函数的增量更新方式中Q(st+1,at+1)Q(s_{t+1}, a_{t+1})Q(st+1,at+1)也是要迭代更新的,在计算Q(st,at)Q(s_t, a_t)Q(st,at)时用到了Q(st+1,at+1)Q(s_{t+1}, a_{t+1})Q(st+1,at+1)这个估计值,是有偏差的,所以说“有偏”。

方差大和方差小是根据最终估计出来的Q函数受状态随机转移影响的大小来区分的。蒙特卡洛方法里,要计算出GtG_tGt,中间每一步的状态转移都是随机的,最终的GtG_tGt会受到每步状态随机转移后得到的rrr的影响,因此说方差大;而时序差分方法里,中间只关注了一步状态转移得到的rrr,估计出来的Q函数也只受这一步状态转移的影响,因此说方差相对更小。

行为策略

用于采集数据的策略,是ϵ\epsilonϵ-贪婪策略。

目标策略

想要优化的策略,也是ϵ\epsilonϵ-贪婪策略。

算法功能

近似出行为策略(ϵ\epsilonϵ-贪婪算法)的价值函数。(因为用的是ϵ\epsilonϵ-贪婪算法,所以可以近似出最优价值函数;如果用的是别的行为策略,比如随机策略(每一个状态下都随便选择一个动作),那么近似出来的就不是最有价值函数了)

model-free方法中的on-policy方法

因为行为策略和目标策略是同一个策略,计算时序差分的价值目标的数据来源于行为策略。

更新时需要的数据是(s,a,r,s′,a′)(s,a,r,s^{\prime},a^{\prime})(s,a,r,s,a)这5个数据,这种方法称为在线策略on-policy学习方法。

Q-learning算法

Q函数估计式子
Q(st,at)←Q(st,at)+α[rt+γmax⁡at+1Q(st+1,at+1)−Q(st,at)] Q(s_t, a_t) \gets Q(s_t, a_t) + \alpha \left[ r_t + \gamma \max \limits_{a_{t+1}}Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \right] Q(st,at)Q(st,at)+α[rt+γat+1maxQ(st+1,at+1)Q(st,at)]

行为策略

用于采集数据的策略,可以是ϵ\epsilonϵ-贪婪策略,也可以是随机策略等其它的策略。

目标策略

想要优化的策略,是最优策略(而不是ϵ\epsilonϵ-贪婪策略)。怎么看出来的呢?因为对于Q函数,它的最优价值函数计算式子(贝尔曼最优方程)是:
Q∗(s,a)=r(s,a)+γ∑s′∈Sp(s′∣s,a)max⁡a′Q∗(s′,a′) Q^*(s,a) = r(s,a) + \gamma \sum_{s^{\prime} \in S} p(s^{\prime} | s,a) \max_{a^{\prime}} Q^*(s^{\prime}, a^{\prime}) Q(s,a)=r(s,a)+γsSp(ss,a)amaxQ(s,a)

算法功能

近似出最优策略的动作价值函数。

model-free方法中的off-policy方法

因为行为策略和目标策略不需要是同一个策略,计算时序差分的价值目标的数据不一定来自于当前的行为策略(比如说当前的行为策略是ϵ\epsilonϵ-贪婪策略,推荐你采用的下一个行为可能是最优动作a1a_1a1,也可能是随机动作a2a_2a2,而计算时序差分的价值目标时,因为增量更新式子里会要求我们采用的行为一定是动作价值最大的那个行为,也就是a1a_1a1,这就出现了行为策略推荐的动作数据和目标策略推荐的动作数据不同的情况。换一种理解是:如果行为策略更换,在同一个状态下,行为策略推荐我采取的action也会换,但是只要Q-table确定,我不会听从行为策略的建议,直接选择Q-table中最优的那个动作)。

更新时需要的数据是(s,a,r,s′)(s,a,r,s^{\prime})(s,a,r,s)这4个数据,这种方法称为离线策略off-policy学习方法。

在线策略on-policy和离线策略off-policy的区别

目标策略和行为策略相同或不同;

离线策略对数据的利用率更高(这一点其实我还不理解):对于每个状态动作对(s,a)(s,a)(s,a),每次出现都会用于计算Q-table中的Q(s,a)Q(s,a)Q(s,a),能够重复使用过往训练样本。而对于在线策略,对于每个状态动作对

### 时序差分算法(TD算法)的原理与实现 时序差分(Temporal Difference, TD)算法是一种结合了蒙特卡洛方法和动态规划的核心思想的强化学习算法[^1]。它在无需完整环境模型的情况下,能够直接从经验中进行学习,并且可以在每个时间步后立即更新价值函数估计值,而不需要等待整个episode结束[^5]。 #### 数学原理 TD算法的核心是通过求解给定策略 $\pi$ 的贝尔曼方程来估计状态值函数 $v_\pi(s)$。对于任意一个状态 $s_t$,其更新公式为: $$ V(s_t) \leftarrow V(s_t) + \alpha [r_{t+1} + \gamma V(s_{t+1}) - V(s_t)] $$ 其中: - $r_{t+1}$ 是从状态 $s_t$ 转移到状态 $s_{t+1}$ 所获得的奖励, - $\gamma$ 是折扣因子,用于衡量未来奖励的重要性, - $\alpha$ 是学习率,控制每次更新的步长, - $V(s_t)$ 和 $V(s_{t+1})$ 分别表示当前状态和下一状态的价值估计。 这个公式中的项 $r_{t+1} + \gamma V(s_{t+1}) - V(s_t)$ 称为时序差分误差(TD error),它反映了新信息与旧估计之间的差异[^1]。 #### 算法实现 以下是一个简单的 TD(0) 算法实现代码示例: ```python def td_learning(env, policy, num_episodes, alpha=0.1, gamma=0.99): # 初始化状态值函数 V = {state: 0.0 for state in env.states} for episode in range(num_episodes): state = env.reset() # 初始化环境并获取初始状态 done = False while not done: action = policy(state) # 根据策略选择动作 next_state, reward, done, _ = env.step(action) # 执行动作并观察结果 # 更新状态值函数 td_target = reward + gamma * V.get(next_state, 0) if not done else reward td_error = td_target - V[state] V[state] += alpha * td_error state = next_state # 转移到下一个状态 return V ``` #### 特点 - **Incremental Learning**:TD算法是一种增量式学习方法,能够在每个时间步后立即更新价值函数估计值[^2]。 - **Model-Free**:与动态规划不同,TD算法不需要知道环境的转移概率和奖励函数,而是直接从经验中学习。 - **Step-by-Step Update**:TD算法可以在每个时间步后更新价值函数,而不需要等到整个episode结束[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值