【强化学习】Q-Learning算法详解

这篇具有很好参考价值的文章主要介绍了【强化学习】Q-Learning算法详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 Q-Learning算法简介

1.1 行为准则

我们做很多事情都有自己的行为准则,比如小时候爸妈常说:不写完作业就不准看电视。所以我们在写作业这种状态下,写的好的行为就是继续写作业,知道写完他,我们还可以得到奖励。不好的行为就是没写完就跑去看电视了,被爸妈发现,后果很严重。小时候这种事情做多了,也就变成我们不可磨灭的记忆。这和我们提到的Q-Learning有什么关系呢?原来Q-Learning也是一个决策过程,和小时候的这种情况差不多。我们举例说明。
假设现在我们处于写作业的状态,而且我们以前没有尝试过写作业时看电视,所以现在我们有两种选择:1,继续写作业,2,跑去看电视。以为以前没有被惩罚过,所以我选看电视,然后现在的状态变成了看电视,我又选了看电视,接着我还是看电视,最后爸妈回家,发现我没写完作业就去看电视了,狠狠的惩罚了我一次,我也深刻地记下了这一次的经历,并在我脑海中将“没写完作业去看电视”这种行为更改为负面行为,我们接下来看看Q-Learning根据很多这样的经历是如何决策的。
qlearning算法,人工智能算法,算法,强化学习,Q-Learning,人工智能

1.2 Q-Learning决策

假设我们的行为准则已经学习好了,我们现在处于状态s1,我在写作业,我有两个行为a1,a2,分别是看电视和写作业,根据我的经验,在这种s1状态下,a2写作业带来的潜在奖励要比a1看电视高,这里的潜在奖励我们用一个有关于s和a的Q表格代替。在我的记忆Q表格中,Q(s1, a1)=-2要小于Q(s1, a2)=1,所以我们判断要选择a2作为下一个行为。现在我们的状态更新为s2,我们还是有两个同样的选择,重复上面的过程,在行为准则Q表中寻找Q(s2,a1)Q(s2,a2)的值,并比较他们的大小,选取比较大的一个。接着根据a2我们到达s3并在此重复上面的决策过程。Q-Learning的方法就是这样决策的。看完决策我们在来研究一下这张行为准则Q表是通过什么样的方式更改,提升的。
qlearning算法,人工智能算法,算法,强化学习,Q-Learning,人工智能

1.3 Q-Learning更新

所以回到之前的流程,根据Q表的估计,因为在s1中,a2的值比较大,通过之前的决策方法,我们在s1采取了a2,并到达s2,这是我们开始更新用于决策的Q表,接着我们并没有在实际中采取任何行为,而是再想象自己在s2上采取了每种行为,分别看看两种行为哪一个的Q值大,比如说Q(s2,a2)的值比Q(s2,a1)的大,所以我们把大的Q(s2,a2)乘上一个衰减值γ(比如是0.9)并加上到达s2时所获取的奖励R(这里我们还没有获取到棒棒糖,所以奖励为0)因为会获取实实在在的奖励R,我们将这个作为我现实中Q(s1,a2)的值,但是我们之前是根据Q表估计Q(s1,a2)的值。所以有了现实和估计值,我们就能更新Q(s1,a2),根据估计与现实的差距,将这个差距乘以一个学习效率α累加上老的Q(s1,a2)的值变成新的值。但时刻记住,我们虽然用maxQ(s2)估算了一下s2的状态,但还没有在s2上做出任何的行为,s2的行为决策要等到更新完了以后再重新另外做。这就是off-policy的Q-Learning是如何决策和学习优化决策的过程。
qlearning算法,人工智能算法,算法,强化学习,Q-Learning,人工智能

2 Q-Learning整体算法

qlearning算法,人工智能算法,算法,强化学习,Q-Learning,人工智能
上图概括了之前所有的内容。这也是Q-Learning的算法,每次更新我们都用到了Q现实和Q估计,而且Q-Learning的迷人之处就是在Q(s1,a2)现实中,也包含了一个Q(s2)的最大估计值,将对下一步的衰减的最大估计和当前所得到的奖励当成这一步的现实。最后描述一下这套算法中一些参数的意义。ε-greedy是用在决策上的一种策略,比如ε=0.9时,就说明有90%的情况我会按照Q表的最优值选择行为,10%的时间使用随机选行为。α是学习率,来决定这次的误差有多少是要被学习的,α是一个小于1的数。γ是对未来reward的衰减值。我们可以这样想:
qlearning算法,人工智能算法,算法,强化学习,Q-Learning,人工智能
重写一下Q(s1)的公式,将Q(s2)拆开,因为Q(s2)可以像Q(s1)一样,是关于Q(s3)的,所以可以写成这样,然后以此类推,不停地这样写下去,最后就能携程这样,可以看出Q(s1)是有关于之后所有的奖励,但这些奖励正在衰减,离s1越远的状态衰减越严重。可以想象Q-Learning的机器人天生近视眼,γ=1时,机器人有了一副合适的眼镜,在s1看到的Q是未来没有任何衰变的奖励,也就是机器人能清清楚楚看到之后所有步的全部价值,但是当γ=0,近视机器人没了眼镜,只能摸到眼前的reward,同样也就只在乎最近的大奖励,如果γ从0变到1,眼镜的度数由浅变深,对远处的价值看得越清楚,所以机器人渐渐变得有远见,不仅仅只看眼前的利益,也为自己的未来着想

3 代码解析

可运行的代码地址如下(免费下载):https://download.csdn.net/download/shoppingend/85186697

3.1 Q-Learning算法更新

qlearning算法,人工智能算法,算法,强化学习,Q-Learning,人工智能
上面将的整个算法就是一直不断的更新Q-table里的值,然后再根据新的值来判断要在某个state采取怎样的action。Q-Learning是一个off-policy的算法,因为里面的max action让Q-table的更新可以不基于正在经历的经验(也可以是现在学习着很久以前的经验,甚至是学习他人的经验)。不过本例子我们没有运用到 off-policy,而是把Q-Learning用在了on-policy上,也就是现学现卖,将现在经历的直接当场学习并运用。
下面的代码,我们可以根据上面的图片中的算法对应起来,这就是整个 Q-Learning 最重要的迭代更新部分。

def update():
    # 学习 100 回合
    for episode in range(100):
        # 初始化 state 的观测值
        observation = env.reset()

        while True:
            # 更新可视化环境
            env.render()

            # RL 大脑根据 state 的观测值挑选 action
            action = RL.choose_action(str(observation))

            # 探索者在环境中实施这个 action, 并得到环境返回的下一个 state 观测值, reward 和 done (是否是掉下地狱或者升上天堂)
            observation_, reward, done = env.step(action)

            # RL 从这个序列 (state, action, reward, state_) 中学习
            RL.learn(str(observation), action, reward, str(observation_))

            # 将下一个 state 的值传到下一次循环
            observation = observation_

            # 如果掉下地狱或者升上天堂, 这回合就结束了
            if done:
                break

    # 结束游戏并关闭窗口
    print('game over')
    env.destroy()

if __name__ == "__main__":
    # 定义环境 env 和 RL 方式
    env = Maze()
    RL = QLearningTable(actions=list(range(env.n_actions)))

    # 开始可视化环境 env
    env.after(100, update)
    env.mainloop()
3.2 主结构
class QLearningTable:
    # 初始化
    def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9):

    # 选行为
    def choose_action(self, observation):

    # 学习更新参数
    def learn(self, s, a, r, s_):

    # 检测 state 是否存在
    def check_state_exist(self, state):
3.3 预设值
import numpy as np
import pandas as pd


class QLearningTable:
    def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9):
        self.actions = actions  # a list
        self.lr = learning_rate # 学习率
        self.gamma = reward_decay   # 奖励衰减
        self.epsilon = e_greedy     # 贪婪度
        self.q_table = pd.DataFrame(columns=self.actions, dtype=np.float64) 
3.4 决定行为
    def choose_action(self, observation):
        self.check_state_exist(observation) # 检测本 state 是否在 q_table 中存在(见后面标题内容)

        # 选择 action
        if np.random.uniform() < self.epsilon:  # 选择 Q value 最高的 action
            state_action = self.q_table.loc[observation, :]

            # 同一个 state, 可能会有多个相同的 Q action value, 所以我们乱序一下
            action = np.random.choice(state_action[state_action == np.max(state_action)].index)

        else:   # 随机选择 action
            action = np.random.choice(self.actions)

        return action
3.5 学习

我们根据是否是terminal state(回合终止符)来判断应该如何更新Q-table。更新的方式:update = self.lr * (q_target - q_predict)
这可以理解成神经网络中的更新方式,学习率 ×(真实值 - 预测值)。将判断的误差传递回去,有着和神经网络更新的异曲同工之妙。

    def learn(self, s, a, r, s_):
        self.check_state_exist(s_)  # 检测 q_table 中是否存在 s_ (见后面标题内容)
        q_predict = self.q_table.loc[s, a]
        if s_ != 'terminal':
            q_target = r + self.gamma * self.q_table.loc[s_, :].max()  # 下个 state 不是 终止符
        else:
            q_target = r  # 下个 state 是终止符
        self.q_table.loc[s, a] += self.lr * (q_target - q_predict)  # 更新对应的 state-action 值
3.6 检测state是否存在

这个功能就是检测Q-table中有没有当前state的步骤了,如果还没有当前的state,那么我们就插入一组全0数据,当做这个state的所有action初始values。

    def check_state_exist(self, state):
        if state not in self.q_table.index:
            # append new state to q table
            self.q_table = self.q_table.append(
                pd.Series(
                    [0]*len(self.actions),
                    index=self.q_table.columns,
                    name=state,
                )
            )

文章来源:莫凡强化学习https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/文章来源地址https://www.toymoban.com/news/detail-792848.html

到了这里,关于【强化学习】Q-Learning算法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 强化学习基础篇[2]:SARSA、Q-learning算法简介、应用举例、优缺点分析

    【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍 :【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项

    2024年02月07日
    浏览(41)
  • 强化学习Q-learning实践

    前篇文章介绍了强化学习系统红的基本概念和重要组成部分,并解释了 Q-learning 算法相关的理论知识。本文的目标是在 Python3 中实现该算法,并将其应用于实际的实验中。 闲话少说,我们直接开始吧! 为了使本文具有实际具体的意义,特意选择了一个简单而基本的环境,可

    2024年02月08日
    浏览(61)
  • 强化学习Q-learning入门

    本文为最近学习的强化学习 Q-learning 的学习笔记,主要用于总结和日常记录,本文主要讲解相应的必备入门知识。 闲话少说,我们直接开始吧! 我们小时候都经历过以下情形:我们做错了某年事,受到了惩罚,我们学习后,在遇到类似的状况,我们将不会再犯错。同样,许

    2024年02月08日
    浏览(52)
  • 强化学习 - Q-learning(Q学习)

    强化学习中的 Q-learning (Q学习)是一种用于 学习在未知环境中做出决策的方法 。它是基于值函数的方法,通过学习一个值函数 Q,该函数表示在给定状态和动作下,期望的累积奖励。 以下是一个简单的 Q-learning 的实现教程,使用 Python 进行演示。这里我们考虑一个简单的驾

    2024年01月24日
    浏览(58)
  • 【强化学习】Q-learning训练AI走迷宫

    Q-learning? 最简单 的强化学习算法! 不需要 深度学习网络的算法! 带有概率性的 穷举 特性!(甚至还有一点点动态规划的感觉) Q-learning是一种基于强化学习的算法,用于解决 Markov决策过程 (MDP)中的问题。 这类问题我们理解为一种可以用 有限状态机 表示的问题。它具

    2024年01月22日
    浏览(61)
  • 【机器学习】强化学习(六)-DQN(Deep Q-Learning)训练月球着陆器示例

    概述 Deep Q-Learning(深度 Q 学习)是一种强化学习算法,用于解决决策问题,其中代理(agent)通过学习在不同环境中采取行动来最大化累积奖励。Lunar Lander 是一个经典的强化学习问题,其中代理的任务是控制一个着陆舱在月球表面着陆,最小化着陆过程中的燃料消耗。 以下

    2024年01月25日
    浏览(62)
  • Pytorch深度强化学习案例:基于Q-Learning的机器人走迷宫

    本专栏重点介绍强化学习技术的数学原理,并且 采用Pytorch框架对常见的强化学习算法、案例进行实现 ,帮助读者理解并快速上手开发。同时,辅以各种机器学习、数据处理技术,扩充人工智能的底层知识。 🚀详情:

    2024年02月04日
    浏览(57)
  • 强化学习应用(二):基于Q-learning的物流配送路径规划研究(提供Python代码)

    Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每个状态动作对的价值。Q值表示在特定状态下采取某个动作所能获得

    2024年01月21日
    浏览(61)
  • 强化学习应用(六):基于Q-learning的无人机物流路径规划研究(提供Python代码)

    Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个价值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的表格来学习最优策略。Q值表示在给定状态下采取某个动作所能

    2024年02月22日
    浏览(45)
  • 强化学习应用(四):基于Q-learning的无人机物流路径规划研究(提供Python代码)

    Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个价值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的表格来学习最优策略。Q值表示在给定状态下采取某个动作所能

    2024年01月17日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包