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

通俗易懂讲透 Q-Learning:从零学会强化学习核心算法

通俗易懂讲透 Q-Learning:从零学会强化学习核心算法

Q-Learning 是无模型、基于价值迭代的经典强化学习算法,核心就是让智能体通过不断试错,记住每个状态下做什么动作收益最大,最终学到最优决策策略。


一、先搞懂:Q-Learning 到底在干什么?

迷宫寻宝一句话概括:
你在迷宫里找出口,每走一步都有奖励/惩罚,Q-Learning 就是帮你记一本“行动账本”,记录在哪个位置、往哪边走最划算,越走越聪明。

核心逻辑(3 步走)

  1. 探索:一开始瞎走,试试不同方向
  2. 记录:把每一步的好坏记在账本里(Q 值)
  3. 利用:后面按账本选最优动作,少走弯路

最终目标:让智能体拿到最大的累计奖励


二、关键概念:一看就懂

1. Q 值(动作价值函数)

  • 全称:Q(s, a)
  • 含义:在状态 s下,做动作 a未来能拿到的总收益
  • 简单说:这个位置做这个动作“值不值”

2. 贝尔曼方程(Q 更新的依据)

这是 Q-Learning 的数学灵魂,不用怕,拆解开很简单:

Q(s, a) = 当前奖励 r + γ × 下一个状态的最大Q值
  • r:做完动作立刻拿到的奖励
  • γ(折扣因子):未来奖励的重要程度(0~1)
    • 接近1:更看重长远收益
    • 接近0:只看眼前好处

3. Q 值更新公式(最重要!)

Q(s,a) = Q(s,a) + α × [ r + γ×maxQ(s',a') − Q(s,a) ]
  • α(学习率):每次更新改多少(0~1)
    • 大:学得快,容易震荡
    • 小:学得稳,速度慢
  • maxQ(s’,a’):下一个状态里,最好动作的 Q 值

一句话理解:用“新的更好估计”去修正“旧的估计”

4. 探索 vs 利用(核心矛盾)

  • 探索(Explore):随机选动作,找新路线
  • 利用(Exploit):按账本选最优动作
  • ε-贪心策略
    • ε概率随机探索
    • 1−ε概率选最优动作
    • 常用:训练初期ε大,后期ε慢慢减小

三、Q-Learning 标准流程(背下来也能用)

  1. 初始化 Q 表
    所有状态-动作对的 Q 值初始化为 0 或小随机数。
  2. 循环多轮训练(episode)
    1. 把智能体放回起点
    2. 用 ε-贪心选动作
    3. 执行动作,拿到奖励 r 和新状态 s’
    4. 按公式更新 Q 值
    5. 把当前状态换成新状态
  3. 收敛后输出最优策略
    每个状态直接选 Q 值最大的动作。

伪代码(极简版)

初始化 Q 表全为0 设置 α, γ, ε for 每一轮训练: 初始化状态 s while 没到终点: 用ε-贪心选动作 a 执行a,得到r, s' 更新 Q(s,a) s = s'

四、实战案例:用 Q-Learning 走迷宫

我们用一个9行8列迷宫,手把手跑通代码,本科生/研究生都能直接跑。

1. 迷宫环境定义

  • 0:可走路径
  • 1:墙(障碍物)
  • 起点:(0, 0)
  • 终点:(8, 0)

2. 奖励规则(关键!)

  • 到终点:+10 奖励
  • 撞墙:-1 惩罚
  • 每走一步:-0.1(鼓励快点到终点)

3. 完整可运行代码(Python)

importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.animationasanimation# 迷宫环境类classMaze:def__init__(self,maze):self.maze=np.array(maze)self.n_rows,self.n_cols=self.maze.shape self.start=(0,0)self.goal=(8,0)self.state=self.startdefreset(self):self.state=self.startreturnself.statedefstep(self,action):row,col=self.state# 0上 1右 2下 3左ifaction==0:row=max(0,row-1)elifaction==1:col=min(self.n_cols-1,col+1)elifaction==2:row=min(self.n_rows-1,row+1)elifaction==3:col=max(0,col-1)self.state=(row,col)# 奖励设置ifself.state==self.goal:reward=10done=Trueelifself.maze[row,col]==1:reward=-1done=Trueelse:reward=-0.1done=Falsereturnself.state,reward,done# Q-Learning 智能体classQLearning:def__init__(self,env,alpha=0.1,gamma=0.9,epsilon=0.3,episodes=1000):self.env=env self.alpha=alpha self.gamma=gamma self.epsilon=epsilon self.episodes=episodes# Q表:行×列×4个动作self.q_table=np.zeros((env.n_rows,env.n_cols,4))self.path_per_episode=[]defchoose_action(self,state):ifnp.random.rand()<self.epsilon:returnnp.random.choice(4)else:row,col=statereturnnp.argmax(self.q_table[row,col])deftrain(self):forepisodeinrange(self.episodes):state=self.env.reset()done=Falsepath=[state]whilenotdone:action=self.choose_action(state)next_state,reward,done=self.env.step(action)row,col=state next_r,next_c=next_state# Q值更新self.q_table[row,col,action]+=self.alpha*(reward+self.gamma*np.max(self.q_table[next_r,next_c])-self.q_table[row,col,action])state=next_state path.append(state)self.path_per_episode.append(path)ifstate==self.env.goal:print(f"第{episode+1}轮到达终点!")# 迷宫布局maze=[[0,1,0,0,0,0,1,0],[0,1,0,1,1,0,1,0],[0,0,0,0,1,0,0,0],[1,1,1,0,1,1,1,1],[0,0,0,0,0,0,0,0],[0,1,1,1,1,1,1,1],[0,0,0,0,0,0,0,0],[1,1,1,1,1,1,1,0],[0,0,0,0,0,0,0,0]]# 初始化环境与智能体env=Maze(maze)agent=QLearning(env,episodes=1000)agent.train()# 动态可视化训练过程fig,ax=plt.subplots(figsize=(8,8))defupdate(frame):path=agent.path_per_episode[frame]render=env.maze.copy()for(r,c)inpath:render[r,c]=2ax.clear()ax.imshow(render,cmap="coolwarm",vmin=0,vmax=2)ax.set_title(f"训练轮次:{frame+1}")ax.text(0,0,"S",color="white",fontweight="bold")ax.text(0,8,"G",color="white",fontweight="bold")returnax ani=animation.FuncAnimation(fig,update,frames=len(agent.path_per_episode),repeat=False)plt.show()

4. 代码说明(一看就懂)

  • Maze 类:管迷宫环境,负责移动、给奖励
  • QLearning 类:管智能体,选动作、更新 Q 表
  • 可视化:动态展示每一轮的行走路径,越到后面路径越短、越直

五、Q-Learning 优缺点(面试/论文必背)

优点

  1. 无模型:不用知道环境规则,直接交互学习
  2. 简单稳定:公式清晰,容易实现
  3. 收敛保证:满足条件时一定能学到最优策略

缺点

  1. 维度灾难:状态/动作一多,Q 表巨大存不下
  2. 收敛慢:高维空间需要大量训练
  3. 连续空间不行:只能处理离散状态/动作

六、适用场景与实际应用

适用前提

  • 状态和动作必须离散
  • 有明确奖励/惩罚
  • 能充分探索状态空间

实际落地场景

  1. 游戏 AI:走迷宫、贪吃蛇、简单棋类
  2. 机器人路径规划:AGV 小车、避障导航
  3. 资源调度:数据中心负载、带宽分配
  4. 广告/推荐:优化投放策略、点击率最大化

七、总结(最核心的 3 句话)

  1. Q-Learning =记 Q 表 + 按贝尔曼方程更新
  2. 动作选择靠ε-贪心平衡探索与利用
  3. 适合离散、小状态空间,大场景用 DQN 改进
http://www.jsqmd.com/news/671971/

相关文章:

  • 从《新概念英语》到技术文档:如何像考古学家一样‘挖掘’并理解复杂系统(以Kubernetes为例)
  • Windows安装安卓应用终极指南:告别模拟器的轻量级解决方案
  • Proteus数码管仿真避坑指南:共阴共阳接反、段码表错误、动态扫描残影怎么办?
  • 从“一团糟”到“高级感”:避开Unity粒子系统这3个新手常踩的坑(以火焰特效为例)
  • 分享智能电梯安全技术供应商选购要点,推荐哪家看这里 - myqiye
  • 乙巳马年春联生成终端惊艳效果:生成结果嵌入NFT合约的区块链版权存证演示
  • SystemVerilog里用disable fork,为啥总把隔壁进程也“误杀”了?
  • GetQzonehistory:一键备份QQ空间说说的免费神器,永久保存青春回忆
  • 【转】[C#] Dapper 的 Not In 有坑
  • 从零到一:基于Spring Cloud Alibaba + Nacos + Sentinel的电商秒杀系统实战
  • SkiaSharp实战:5分钟搞定跨平台图表生成(支持导出PDF/SVG,含自动换行文本库推荐)
  • 为什么你的Dify插件总被拒绝上架?——基于217个审核失败案例的合规性逆向分析报告
  • ComfyUI-Inpaint-Nodes:3种方法彻底解决模型加载失败问题
  • 从相关到因果:一文读懂因果Transformer的核心与应用
  • 如何调试和测试前端代码:全面指南与最佳实践
  • 告别MCU直连U盘的烦恼:用CH376模块为你的Arduino/ESP32项目轻松扩展USB存储
  • 因果AI的稳定之锚:一文读懂不变性学习
  • 紧急采购SMC气管?推荐几家支持现货速发、全国发货的正规代理商 - 品牌推荐大师
  • Dify微调效率提升370%的关键路径,从数据预处理到评估部署的7个不可跳过的黄金检查点
  • 伸展树
  • 终极指南:3分钟解决Minecraft MASA模组英文界面困扰的完整方案
  • 有实力的佛山本地推拉门源头厂家,极简轻奢风格产品系列全吗 - 工业品牌热点
  • STM32CubeMX LL库串口通信避坑指南:从配置到中断处理的完整流程(基于STM32F103)
  • 最新版本2026年Anaconda安装教程+配置+环境创建教程
  • 因果AI新引擎:干预表示学习全解析:从原理到产业落地
  • 2026青海家装市场消费痛点与本地装修设计公司综合梳理 - 深度智识库
  • 万字详解 RAG 向量索引算法和向量数据库
  • 已知前、中、后序中两种遍历结果以重建二叉树
  • 手把手教你为STM32移植AK09918磁力计驱动(附Linux驱动对比与源码)
  • 用树莓派控制电源?PyVISA+SCPI硬件自动化全攻略(2024新版)