小老鼠的迷宫冒险:Q学习揭秘

摘要

Q学习是一种强化学习算法,通过试错和记录经验来优化决策。以“迷宫里的小老鼠”为例,小老鼠的目标是找到奶酪。初始时,小老鼠随机探索迷宫,记录每次选择的路径和结果。通过反复尝试,小老鼠逐渐学会在特定路口选择最优方向,最终找到最短路径。这一过程通过Q表(记分本)实现,Q表记录每个状态和动作的Q值(预期奖励)。每次尝试后,Q表根据即时奖励和未来奖励的估计值进行更新。Q学习的核心公式为:新Q值 = 旧Q值 + 学习率 × [即时奖励 + 折扣率 × 下一步最大Q值 - 旧Q值]。通过不断更新Q表,小老鼠最终学会在迷宫中做出最优决策。


Q学习的故事版解释——“迷宫里的小老鼠”

1. 场景设定

想象有一只小老鼠被放进了一个迷宫。迷宫里有很多路口,每个路口可以选择往左、往右、往前、往后走。迷宫的某个角落藏着一块奶酪,小老鼠的目标就是找到奶酪。

2. 小老鼠的学习过程

第一次尝试
  • 小老鼠什么都不知道,只能瞎走。
  • 走着走着,可能碰到死胡同,也可能误打误撞找到奶酪。
  • 每次找到奶酪后,老鼠会记住自己走过的路线。
反复尝试
  • 老鼠每次都尝试不同的路线。
  • 每当它做出一个选择(比如在某个路口往左走),它会记下这个选择带来的“结果”。
  • 如果这条路最终带它找到了奶酪,它会觉得“在这个路口往左走”是个好选择。
  • 如果走错了,老鼠会觉得“在这个路口往左走”没什么用。
记分本(Q表)
  • 老鼠有一本“记分本”,记录每个路口(状态)每个方向(动作)带来的“分数”(Q值)。
  • 每次尝试后,老鼠会根据结果更新记分本:如果某个选择带来了奶酪,分数就提高;如果带来了死胡同,分数就降低。
越来越聪明
  • 经过多次尝试,老鼠的记分本越来越准确。
  • 以后每次遇到路口,老鼠都会查记分本,优先选择分数高的方向。
  • 最终,老鼠能用最短的路线找到奶酪。

Q学习的核心思想

  • 状态(State):比如老鼠在迷宫的某个位置。
  • 动作(Action):比如往哪个方向走。
  • 奖励(Reward):比如找到奶酪就得分,走错路就扣分。
  • Q值(Q-Value):在某个状态下采取某个动作,最终能获得的总奖励的估计值。
  • 学习过程:不断尝试、记录、更新Q值,最终学会在每个状态下选最优动作。

Q学习的公式(简单理解)

每次老鼠做出一个选择后,都会用下面的方式更新记分本:

新Q值 = 旧Q值 + 学习率 × [即时奖励 + 折扣率 × 下一步最大Q值 - 旧Q值]
  • 学习率:新经验影响记分本的程度。
  • 折扣率:未来奖励的重要性。

总结

Q学习就像一只小老鼠在迷宫里不断试错、记笔记,最终学会了最快找到奶酪的办法。它的秘诀就是:每次尝试后都更新自己的“记分本”,下次遇到同样的情况就能做出更聪明的选择。


接下来我会用具体代码流程图,帮助你更直观地理解Q学习的实现过程。


一、Q学习的流程图(文字版)

开始
  |
  v
初始化Q表(记分本)
  |
  v
重复多次(每一回合):
  |
  v
  选择一个起点(状态)
    |
    v
    重复直到到达终点(如找到奶酪):
      |
      v
      选择一个动作(比如随机探索或查Q表选最优)
        |
        v
      执行动作,观察新状态和奖励
        |
        v
      用Q学习公式更新Q表
        |
        v
      状态更新为新状态
    |
    v
  回合结束
  |
  v
结束

二、Q学习的流程图(Mermaid语法)

你可以在支持Mermaid的平台粘贴以下代码生成流程图:

flowchart TD
    A[开始] --> B[初始化Q表]
    B --> C[每一回合]
    C --> D[选择起点]
    D --> E{是否到达终点?}
    E -- 否 --> F[选择动作]
    F --> G[执行动作,观察新状态和奖励]
    G --> H[更新Q表]
    H --> I[状态更新为新状态]
    I --> E
    E -- 是 --> J[回合结束]
    J --> K{是否训练结束?}
    K -- 否 --> C
    K -- 是 --> L[结束]

三、Q学习的简化代码实现(Python伪代码)

我们用一个简单的迷宫环境(如OpenAI Gym的FrozenLake)来演示Q学习的核心代码:

import numpy as np
import gym

# 创建环境
env = gym.make('FrozenLake-v1', is_slippery=False)  # 4x4冰湖迷宫

# 初始化Q表
Q = np.zeros([env.observation_space.n, env.action_space.n])

# 超参数
learning_rate = 0.8
discount_factor = 0.95
num_episodes = 2000

for episode in range(num_episodes):
    state = env.reset()[0]
    done = False

    while not done:
        # 选择动作:有时探索,有时利用
        if np.random.uniform(0, 1) < 0.1:
            action = env.action_space.sample()  # 随机探索
        else:
            action = np.argmax(Q[state, :])     # 查Q表选最优

        # 执行动作
        next_state, reward, done, _, _ = env.step(action)

        # Q学习公式更新Q表
        Q[state, action] = Q[state, action] + learning_rate * (
            reward + discount_factor * np.max(Q[next_state, :]) - Q[state, action]
        )

        state = next_state

# 训练结束后,Q表就是小老鼠的“记分本”
print("训练好的Q表:")
print(Q)

说明:

  • Q表的每一行代表一个状态,每一列代表一个动作。
  • 训练过程中,Q表不断被更新,最终学会在每个状态下选最优动作。

四、Q学习的核心公式再解释

每次老鼠(智能体)做出一个动作后,Q表的更新公式是:

Q(当前状态, 当前动作) ← Q(当前状态, 当前动作) + 学习率 × [奖励 + 折扣率 × 下一状态的最大Q值 - Q(当前状态, 当前动作)]
  • Q(当前状态, 当前动作):记分本上当前格子的分数
  • 奖励:这一步获得的分数
  • 下一状态的最大Q值:假设以后都做最优选择,能拿到的最高分
  • 学习率:新经验对记分本的影响程度
  • 折扣率:未来奖励的重要性

五、总结

  • Q学习就像小老鼠在迷宫里不断试错、记笔记,最终学会最快找到奶酪的办法。
  • 记分本(Q表)不断被更新,越来越准确。
  • 训练结束后,查Q表就能知道每一步该怎么走。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你一身傲骨怎能输

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值