强化学习入门-免模型预测
文章目录
- 基本概念
- 蒙特卡洛估计
- 时序差分估计
- 核心思路:结合两种“学习套路”
- 单步时序差分:走一步看一步的更新
- 时序差分误差:判断“预估”和“实际”的差距
- 特殊情况:遇到“终点”怎么办?
基本概念
- 有模型与免模型的区别:
前者:状态转移概率是已知的(动态规划、世界模型)
后者:环境未知 (基本的强化学习方法) - 预测与控制:
预测:主要目的是估计或计算环境中的某种期望值
控制:如何选择动作以达到最高得分
蒙特卡洛估计
个人认为,蒙特卡洛算法的核心思想就是利用抽样获得的大量数据来估计总体
蒙特卡洛算法主要分成两类:
蒙特卡洛方法主要分成两种算法,一种是首次访问蒙特卡洛方法,另外一种是每次访问蒙特卡洛方法。
区别:
前者:对于每个状态,只记录在回合中第一次出现时的回报,忽略后续再次访问同一状态的回报
伪代码
for each episode:generate trajectory S₀, A₀, R₁, S₁, A₁, R₂, ..., S_TG = 0for t from T-1 downto 0:G = γG + R_{t+1} # 计算回报if S_t not in S₀, S₁, ..., S_{t-1}: # 首次访问N(S_t) += 1V(S_t) += (G - V(S_t)) / N(S_t) # 增量式更新
伪代码
for each episode:generate trajectory S₀, A₀, R₁, S₁, A₁, R₂, ..., S_TG = 0for t from T-1 downto 0:G = γG + R_{t+1}N(S_t) += 1 # 每次访问都计数V(S_t) += (G - V(S_t)) / N(S_t)
后者:记录每次访问状态时的回报,计算所有访问的回报平均值
时序差分估计
可以把时序差分估计方法理解成一种“边体验边学习”的智能算法。
核心思路:结合两种“学习套路”
- 它学了蒙特卡洛方法的“从实际经历中学习”:就像你做完一件事,会根据当下得到的反馈(比如奖励)和接下来可能遇到的情况来调整对这件事的判断。
- 又学了动态规划的“用已有经验推新经验”:比如你知道下一步怎么做更划算,就会用这个判断来优化当前的选择,不用等整件事完全结束再总结。
单步时序差分:走一步看一步的更新
最简单的单步时序差分,就像下棋时走一步后就立刻调整策略:
-
你走了一步(当前状态),得到了一些奖励(比如吃了对方一个子),然后看对方可能怎么应对(下一状态)。
-
不用等这盘棋下完,你马上根据“当前奖励(V(St)V(S_{t})V(St))+对下一步的判断(rt+1+γV(st+1)r_{t+1}+\gamma V(s_{t+1})rt+1+γV(st+1)),更新对“刚才那步棋”的评价。
V(st)←V(st)+α[rt+1+γV(st+1)−V(st)]V(s_t) \leftarrow V(s_t) + \alpha [r_{t+1} + \gamma V(s_{t+1}) - V(s_t)]V(st)←V(st)+α[rt+1+γV(st+1)−V(st)] -
这里的“对下一步的判断”其实是还没完全验证的估计值,用这个估计值来更新当前的判断,就叫“自举”——相当于用自己现有的经验(哪怕不完美)来完善自己,不用等所有信息都齐了。
时序差分误差:判断“预估”和“实际”的差距
咱们做判断时,经常会发现“预想的”和“实际发生的”有差距。比如你以为走一步能得10分,结果只得了8分,还差2分,这个差距就是“时序差分误差”。算法会根据这个误差来调整后续的判断,让预估越来越准。公式如下:δ=rt+1+γV(st+1)−V(st)\delta = r_{t+1} + \gamma V(s_{t+1}) - V(s_t)δ=rt+1+γV(st+1)−V(st)
特殊情况:遇到“终点”怎么办?
如果走到了游戏结束、任务完成的“终止状态”(比如棋下完了,或者到达目的地了),就没有“下一步”了。这时候算法会直接把“下一步的估计值”设为0,只根据当前的奖励来更新对最后一步的评价——就像考试结束了,不用想“接下来考什么”,直接根据这次的得分总结就好。
总的来说,时序差分的核心就是“不等结束,边做边改,用现有估计不断优化”,既比等全部结束再总结(蒙特卡洛)更灵活,又比完全依赖已有固定经验(动态规划)更贴近实际变化。
注:部分信息来自AI
原文:免模型预测