原创|一文读懂强化学习的Q学习算法

前沿也要数据派 2024-07-23 10:58:43

作者:陈之炎

本文约4800字,建议阅读9分钟

本文介绍一篇收录在《IEEE TRANSACTIONS ON INFORMATION THEORY》的论文。

强化学习中的价值学习算法是一类重要的强化学习算法,它们通过学习价值函数来指导智能体的行为选择。价值函数表示在特定状态下,智能体采取不同行动所能获得的长期累积回报的期望值。Q学习是一种基于状态-行动值函数(Q函数)的强化学习算法。在每个时间步,Q学习通过更新Q函数来改善策略。该算法通过不断地更新Q函数来估计状态-行动值函数的最优值,并利用该函数来制定最优策略。

图片来源:网络

Q-Learning算法用于在未知环境中训练一个智能体(agent)做出最优决策。该算法的核心思想是学习一个价值函数Q(s,a),其中s表示当前状态,a表示智能体在该状态下采取的行动。Q(s,a)表示在当前状态下采取行动a所能获得的期望奖励值。Q值越高,则说明该行动对获得最大奖励的贡献越大。

在训练过程中,智能体不断地探索环境,通过观察每个状态下采取不同行动所获得的奖励来更新Q值。具体来说,智能体采取当前状态下Q值最高的行动,然后观察该行动带来的奖励,根据奖励值更新Q值,以此来不断优化Q值函数,使其逐渐收敛到最优值。更新Q值的公式为:

Q(s,a) = Q(s,a) + α(r + γ max Q(s',a') - Q(s,a))

其中,Q(s,a)表示在状态s下采取行动a的Q值,α是学习率(控制每次更新的权重),r是执行行动a后,智能体能够得到的立即奖励,γ是折扣因子(控制未来奖励的权重,表示对未来奖励的重视程度),s'和a'表示执行当前行动后进入的新状态和新的行动,max(Q(s',a'))表示在下一个状态s'中采取所有可能行动中的最大Q值。

通过不断地迭代更新Q值,智能体最终可以学习到在不同状态下采取不同行动的最优策略,从而实现自主决策。

下面通过一个具体的例子详细解读Q-Learning算法。

问题的提出:智能体需要学习一张迷宫地图,其中包含起点和终点,并且智能体只能根据自己的当前位置和周围环境信息,采取一些行动。在每个时间步骤,智能体都需要根据其当前状态(位置)和执行的行动,更新其Q值,Q值表示采取该行动能够带来的长期回报(预期收益)。通过迭代地更新Q值,智能体可以逐渐学习到每个状态下采取每个行动的预期收益,进而找到从起点到终点的最短路径。

下面是求解迷宫问题的源代码:

import numpy as npimport random

# 迷宫环境,0表示可以走的路,1表示墙maze = np.array([[0, 0, 0, 1, 0], [1, 1, 0, 1, 0], [0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 1, 0]]) # 定义Q表,初始值为0Q = np.zeros([5, 5, 4])# 定义参数alpha = 0.1 # 学习率gamma = 0.9 # 折扣因子epsilon = 0.1 # 探索率num_episodes = 1000 # 训练次数# 定义行动actions = ['up', 'down', 'left', 'right']# Q-Learning算法主循环for i in range(num_episodes): # 随机选择起始状态 state = [random.randint(0, 4), random.randint(0, 4)] # 一直循环,直到到达终点或超过最大步数 while state != [2, 4]: # 探索或利用策略选择行动 if random.uniform(0, 1) < epsilon: action = random.choice(actions) else: action = actions[np.argmax(Q[state[0], state[1]])] # 执行行动并观察奖励和新状态 if action == 'up' and state[0] > 0 and maze[state[0]-1, state[1]] == 0: new_state = [state[0]-1, state[1]] reward = 0 elif action == 'down' and state[0] < 4 and maze[state[0]+1, state[1]] == 0: new_state = [state[0]+1, state[1]] reward = 0 elif action == 'left' and state[1] > 0 and maze[state[0], state[1]-1] == 0: new_state = [state[0], state[1]-1] reward = 0 elif action == 'right' and state[1] < 4 and maze[state[0], state[1]+1] == 0: new_state = [state[0], state[1]+1] reward = 0 else: new_state = state reward = -1 # 更新Q值 Q[state[0], state[1], actions.index(action)] = (1 - alpha) * Q[state[0], state[1], actions.index(action)] + \ alpha * (reward + gamma * np.max(Q[new_state[0], new_state[1]])) # 更新状态 state = new_state # 打印每100次训练的结果 if i % 100 == 0: print("Episode {}: Steps = {}".format(i, -Q[0, 0, 0]))``

Q-learning算法可以在迭代的过程中不断更新Q-table,直到Q值收敛为止。在Q值收敛后,智能体可以根据Q-table选择在每个状态下采取的最优行动,从而找到从起点到终点的最短路径。

Q-Learning算法可以应用于多种场景,包括但不限于以下几个示例:

l游戏智能体训练:通过Q-Learning算法训练游戏智能体,使其学会在游戏中采取最优的行动策略,以获得最高的得分。例如,在经典的Atari游戏中,Q-Learning算法可以被用来训练游戏智能体,在不断地尝试中学会如何最优化地操作游戏控制器。

机器人路径规划:Q-Learning算法可以应用于机器人路径规划领域。通过学习机器人在不同状态下采取不同行动的最优策略,可以实现机器人在复杂环境中快速、准确地找到最优路径。自然语言处理:Q-Learning算法可以应用于自然语言处理领域。例如,可以将自然语言问题转化为状态,将回答问题的语句转化为行动,使用Q-Learning算法来学习最优的回答策略。股票交易决策:Q-Learning算法可以应用于股票交易决策领域。例如,可以将不同股票价格和市场指数作为状态,将不同的交易行为(例如买进或卖出)作为行动,使用Q-Learning算法来学习最优的交易策略。

结论:Q-learning算法是一种无模型(model-free)强化学习方法,无需提前获取完备的模型,通过不断地迭代更新Q值,智能体最终可以学习到在不同状态下采取不同行动的最优策略,从而实现自主决策。

0 阅读:0

前沿也要数据派

简介:感谢大家的关注