在一个遥远的围棋王国里,住着一个名叫Q-learner的小棋手。这个王国里的棋盘简化成了3x3大小(实际围棋远大于此,但为了方便理解,我们先从简单开始)。
【机器学习故事版】《围棋小将的智慧之旅》-LMLPHP

有一天,Q-learner决定通过学习来提升自己的棋艺。他找来一本神秘的《围棋秘诀》,书中记载了一种神奇的方法——Q-learning。Q-learner准备了一块干净的棋盘(SimpleGoEnv环境),

class SimpleGoEnv(Env):
    # 定义了简化版围棋环境的各种规则...
env = SimpleGoEnv()

每次开局都是一片空白,等待他去探索。

#估且叫做成长函数吧!
def choose_action(state, q_table, epsilon):

在每一轮对弈中(每个episode),Q-learner都会面临无数可能的落子选择(action)。起初,他会随机尝试各种位置,就像小孩子好奇地在棋盘上摸索(choose_action函数中的epsilon-greedy策略)。

if random.uniform(0, 1) < epsilon:  # 小时候的探索阶段
        return "随缘" + str(random.choice(env.get_legal_moves()))

每当他下完一子后,棋盘就会反馈给他一个奖励(reward),比如连成一线时获得正向奖励,无效动作则得到负向惩罚。同时,他还会关注游戏是否结束(done状态)。

 else:
        # 长大后更依赖于经验,选择当前认为价值最高的动作
        return "智选" + str(np.argmax(q_table[state_row, state_col]))

每一次落子后,Q-learner都会认真反思这一步棋的价值。

# 开始一轮轮的新的冒险
for episode in range(max_episodes):
    story = f"第{episode+1}个冒险开始了..."
    
    # 每次冒险从一张白纸开始
    state = env.reset()

他拿出《围棋秘诀》中的Q-table(一张记录了所有棋局状态下不同落子价值的表格),根据这次实战经验更新表格中的数据(q_table数组)。具体来说,他会结合自己当前这步棋的实际结果以及对未来局势的最佳预期进行调整,使得Q-table能逐步反映出各个局面下的最优决策。

随着一轮轮的训练,Q-learner变得越来越聪明,他的探索逐渐减少,

# 随机行为的不断减少
epsilon -= (1 / max_episodes) if epsilon > 0.1 else 0

更多依赖于已学到的知识(逐渐降低epsilon值)。最终,Q-learner拥有了一个装满智慧的Q-table,里面蕴含着他通过无数次实践得来的宝贵棋艺心得。

# 开始一轮新的冒险
for episode in range(max_episodes):
    story = f"第{episode+1}个冒险开始了..."
    
    # 每次冒险从一张白纸开始
    state = env.reset()

    for step in range(max_steps_per_episode):
        action_story = choose_action(state, q_table, epsilon)
        
        # 执行选定的动作,并观察结果
        next_state, reward, done, _ = env.step(action)

        # 根据最新经历更新智慧宝典
        state_row, state_col = tuple(state.nonzero()[0])
        max_next_q = np.max(q_table[next_state_row, next_state_col])
        q_table[state_row, state_col, action] += learning_rate * (reward + discount_factor * max_next_q - q_table[state_row, state_col, action])

        # 如果冒险结束,则准备进入下一次挑战
        if done:
            break

    # 随着时间推移,Q-learner越来越成熟,减少随机行为
    epsilon -= (1 / max_episodes) if epsilon > 0.1 else 0

【机器学习故事版】《围棋小将的智慧之旅》-LMLPHP

正是通过这种方式,Q-learner不断地积累经验、学习优化策略,从而成长为一名在3x3棋盘上颇具竞争力的围棋小将。

01-18 21:34