当前位置: 首页 > news >正文

强化学习·价值学习-MC,TD和Q-learning算法

文章目录

  • 价值学习方法
    • 蒙特卡洛(MC)
      • 核心思想
      • 实现
      • 数值例子
    • 时序差分(TD)
      • 核心思想
      • 实现
      • 数值例子
  • Q-learning
    • 定义
    • 算法
    • Off-policy和On-policy
    • 数值例子
    • 代码实现
  • Deep Q-learning
    • 数据处理
    • 实现
    • 经验回放
    • 固定Q-Target
    • 双重Q-Network

价值学习方法

更新的是V-value或Q-value。
策略函数是价值的结果

  • 策略函数一般是Greedy或者eplison-Greedy策略。π ( a ∣ s ) : a ∗ = arg ⁡ max ⁡ a Q ( s , a ) \pi(a|s):a^*=\arg\max_a{Q(s,a)}π(as):a=argmaxaQ(s,a)

Greedy策略:始终选择使得Q-value或者V-value的最大的动作。
eps:控制探索和利用的比例,防止陷入局部最优解。

蒙特卡洛(MC)

核心思想

learning at the end of the episode,只在一次完整的序列结束后才更新V-value

实现

更新公式如下:

  • α \alphaα:学习率
  • G t − V ( S t ) G_t-V(S_t)GtV(St):类似深度学习中的梯度,我们需要"向上"更新新的V-value。
  • G t G_tGt表示未来的累积奖励,必须在一个完整序列结束后才能知道

数值例子

时序差分(TD)

核心思想

每一步更新一遍V-value。

实现

  • 一开始对于所有V-value初始化为0
  • 对于当前时刻的状态s t s_tst使用公式更新v t + 1 ( s t ) v_{t+1}(s_t)vt+1(st)
  • 对于其他状态(没有被当前时刻选中的状态),其V-value保持不变。

数值例子

  • s_0表示我们处于起点,s_1表示我们吃掉第一个奶酪。
  • R_1+s_1表示我们新的估计,也叫做TD Target。
  • 新的估计和原始估计的差值代表一种"梯度",表示更新方向。

Q-learning

定义

  • 与TD算法关键的区别在于:这次我们要更新的是Q-value,一个动作和状态的元组(V ( S t + 1 ) → Q ( S t + 1 , A t + 1 ) ) V(S_{t+1})\rightarrow Q(S_{t+1},A_{t+1}))V(St+1)Q(St+1,At+1))),需要事先考虑随机变量A t + 1 A_{t+1}At+1的取值。
  • 我们在进行step之后,并不知道下一次状态选择哪一个动作,因此这里我们可以采取一些策略:可以保持与policyπ \piπ一致,可以选择其他的策略,一般Q-learning选择贪心策略,即选择最优的Q-value估计

算法

  • 在当前状态s t s_tst,首先根据policyπ \piπ得到动作a t a_tat
  • 然后我们转移到下一个状态s t + 1 s_{t+1}st+1得到即刻奖励r t + 1 r_{t+1}rt+1
  • 我们现在有四个元组( s t , a t , s t + 1 , r t + 1 ) (s_t,a_t,s_{t+1},r_{t+1})(statst+1rt+1)
  • 需要确定Q ( s t + 1 , A t + 1 ) Q_(s_{t+1},A_{t+1})Q(st+1,At+1),通常我们遍历所有的A t + 1 A_{t+1}At+1选择最大Q-value的动作:max ⁡ a ′ Q ( s t + 1 , a ′ ) \max_{a'}Q(s_{t+1},a')maxaQ(st+1,a)作为我们估计的Q-value。
  • 根据TD算法的公式对现有状态的Q-value进行更新。
  • 注意:其他状态的Q-value保持不变。

Off-policy和On-policy

选择动作时的策略(例如Greedy和eplison-Greedy)是否与更新时的策略(Greedy)一致

例如:Q-learning使用贪心策略更新Q-value的估计,但是Saras选择eps-贪心策略,确保与动作选择一致。因此前者是off-policy(与policy不一致),后者是on-policy(与policy)一致。

数值例子





代码实现

The training loop goes like this:

For episode in the total of training episodes: Reduce epsilon (since we need less and less exploration) Reset the environment For step in max timesteps: Choose the action At using epsilon greedy policy Take the action (a) and observe the outcome state(s') and reward (r) Update the Q-value Q(s,a) using Bellman equation Q(s,a) + lr [R(s,a) + gamma * max Q(s',a') - Q(s,a)] If done, finish the episode Our next state is the new state
  • 实现起来就是两个for循环,第一个for循环遍历每一个完整动作序列,第二个for循环遍历每一个动作。
  • 然后根据公式采取行动,更新之前状态的Q表即可!
deftrain(n_training_episodes,min_epsilon,max_epsilon,decay_rate,env,max_steps,Qtable):forepisodeintqdm(range(n_training_episodes)):# Reduce epsilon (because we need less and less exploration)epsilon=min_epsilon+(max_epsilon-min_epsilon)*np.exp(-decay_rate*episode)# Reset the environmentstate,info=env.reset()step=0terminated=Falsetruncated=False# repeatforstepinrange(max_steps):# Choose the action At using epsilon greedy policyaction=epsilon_greedy_policy(Qtable,state,epsilon)# Take action At and observe Rt+1 and St+1# Take the action (a) and observe the outcome state(s') and reward (r)new_state,reward,terminated,truncated,info=env.step(action)# Update Q(s,a):= Q(s,a) + lr [R(s,a) + gamma * max Q(s',a') - Q(s,a)]Qtable[state][action]=Qtable[state,action]+learning_rate*(reward+gamma*np.max(Qtable[new_state,:])-Qtable[state,action])# If terminated or truncated finish the episodeifterminatedortruncated:break# Our next state is the new statestate=new_statereturnQtable

Deep Q-learning

Q-learning只适合状态数较少的情况,如果对应星际入侵这种游戏,那么状态空间太大,不适合使用表格法的方法更新Q-value.

使用神经网络Q-Network来接受状态(这时候状态不一定是像素,而是一张图片,甚至是抽象的东西),然后输出对应动作的Q值(就是一个n_action维度的向量)。

数据处理

  • 简单来说就是对画面进行简化处理,降低状态,同时提供运动信息。

实现

  • 我们有两个网络:Q-Network和Q-Target。
  • Q-Network用于表示当前对于状态s,给定a下的经验估计
  • Q-Target表示对于未来状态s’的经验估计



这并不是与Q-Learning相比的唯一区别。深度Q学习训练可能存在不稳定性,主要原因是结合了非线性Q值函数(神经网络)和自助法(即用现有估计值更新目标,而非实际完整回报)。
为了帮助我们稳定培训,我们实施了三种不同的解决方案:

  • 体验重玩以更高效地利用经验。
  • 固定Q目标以稳定训练。
  • 双深度Q学习,用于处理Q值高估的问题。

经验回放

  • 解决了状态之间相关性比较强的问题

固定Q-Target

  • 我们对于Q-Target一无所知,我们通常使用Q-Network的参数来对齐Q-Target,问题是Q-Target的参数变化会随着Q-Network而变化,这就导致了训练时候的更新路径震荡和不确定。
  • 解决方法:没固定C个step才更新一次Q-target,分为软更新(加权平滑)和硬更新(直接赋值)。

双重Q-Network

http://www.jsqmd.com/news/409303/

相关文章:

  • day95(2.24)——leetcode面试经典150
  • 强化学习·导论
  • 一些喜欢的 ACG 曲
  • 灰色关联度模型正负性问题的研究及其改进附Matlab代码
  • 小程序商城开发怎么选?5 家优质平台实测推荐,避开低价陷阱不踩雷 - 企业数字化改造和转型
  • 基于动态神经网络NARX/GRNN/BP/RBF的IBM收盘价预测-时间序列预测附Matlab代码
  • 性价比封神!微信小程序开发平台排名,零隐形消费平台优先选 - 企业数字化改造和转型
  • 基于经验模态分解和粒子群优化支持向量机(EMD+PSO_SVM)大坝变形预测附Matlab代码
  • Metasploit新手入门|从安装到首次漏洞探测
  • 高效科研工具:9大论文目录生成软件,自动更新功能详解
  • 中小商家首选|十大小程序开发公司排名,年费低至700元 - 企业数字化改造和转型
  • 学术研究必备:盘点9款智能目录生成工具,一键自动更新
  • Sass/SCSS继承深度解析
  • Metasploit常用命令速查备忘单(高频实操版)
  • 题解:AcWing 884 高斯消元解异或线性方程组
  • 2026-2-24 论文
  • linux+lvgl工程保存配置读取配置
  • XHS Agent 开发博客:用 AI 自动化小红书内容运营的技术实践
  • .net 8程序如何在信创的arm64架构下运行【nuget包如何判断能不能在arm架构跑呢】
  • 学术写作神器:9大自动目录生成软件,更新功能全面解析
  • Metasploit实战常见问题排查(10个高频问题,新手必看)
  • 高效论文工具:9款智能目录生成软件,支持实时自动更新
  • 题解:AcWing 883 高斯消元解线性方程组
  • 科研必备:9款论文目录生成工具,智能更新功能全解析
  • 2026最新Java毕设选题大全|零基础可做+源码现成+答辩稳过(软件专业专属)
  • cursor日志0224
  • HWiNFO(硬件检测工具)
  • 图片浏览器 XnViewMP
  • 闪贴键11
  • 中国AI发展趋势深度解读(非常详细),从小白到行业专家,收藏这一篇就够了!