简介
什么是强化学习
强化学习是一种机器学习方法,它可以帮助计算机学会在不断尝试和经验积累中做出最佳决策。用通俗的方式来说,强化学习就像是训练一只宠物狗学会做任务一样。
想象一只狗要学会取球。一开始,它可能不知道该怎么做,但主人可以使用奖励和惩罚来引导它学习。如果狗成功地取到球,主人就会给它一些小吃作为奖励。狗会记住这个行为,并在未来更努力地去取球,因为它知道这会带来奖励。如果狗一次次试图但没有成功,它可能会明白自己需要改变策略。
强化学习中的计算机也是这样学习的。它通过不断地尝试各种行动,观察结果,并根据奖励或惩罚来调整策略,逐渐学会如何在特定环境中做出最好的决策。这种方法在自动驾驶、游戏中的人工智能,以及其他需要智能决策的领域都有广泛的应用。就像训练一只宠物一样,强化学习是通过实践和反馈来提高机器的能力,使其能够在复杂的环境中做出明智的选择。
和监督学习的区别
监督学习和强化学习是两种不同的机器学习方法,它们之间有一些重要的区别:
-
数据标签的存在与否:
- 监督学习:在监督学习中,存在带有明确标签或答案的训练数据。模型的任务是学习如何从输入数据中预测或分类这些标签。例如,给定一组图片和相应的标签(猫或狗),模型要学会将新的图片正确分类为猫或狗。
- 强化学习:在强化学习中,没有明确的标签或答案。代替标签,模型需要通过与环境的互动来学会在不同的情境下做出决策,以最大化一个奖励信号。
-
学习方式:
- 监督学习:监督学习是通过提供输入数据和相应的正确答案来训练模型。模型根据这些答案进行调整,目标是最小化预测错误。训练数据对模型的性能至关重要。
- 强化学习:强化学习是通过与环境的互动和试错来学习的。模型采取行动,观察结果,然后根据获得的奖励或惩罚来调整策略。模型需要在不断的尝试中逐渐优化其行为策略。
-
应用领域:
- 监督学习:监督学习通常用于分类、回归和识别任务,例如图像分类、自然语言处理中的文本分类等,其中有明确的标签可供训练。
- 强化学习:强化学习更适用于需要做出一系列决策的任务,如自动驾驶、机器人控制、游戏玩法等。它在没有明确答案的情况下,通过学习如何最大化奖励来解决问题。
-
反馈类型:
- 监督学习:监督学习依赖于明确的正误反馈,即模型的预测与真实标签之间的差异。这种反馈通常是离散的,可以明确地告诉模型何时出错。
- 强化学习:强化学习依赖于稀疏的奖励信号,这些信号可能不是在每个时间步都提供的,而是在完成一系列动作后才出现。这种反馈通常是连续的,模型需要通过多次尝试来推断出哪些动作导致了更好的奖励。
总之,监督学习和强化学习是两种不同的学习范式,适用于不同类型的问题和应用领域。监督学习依赖于有标签的数据和明确的正误反馈,而强化学习则依赖于与环境的互动和稀疏的奖励信号来学习如何在复杂任务中做出决策。
强化学习方法汇总
Modelfree和Modelbased
Model-Free(无模型)和Model-Based(有模型)是强化学习中两种不同的方法,用于解决决策问题。它们之间的主要区别在于如何处理环境和决策的方式。
-
Model-Free(无模型)强化学习:
-
基本思想:Model-Free方法不试图建立关于环境的内部模型,而是直接学习从状态到动作的映射,并基于已经观察到的经验来做出决策。
-
工作方式:模型无关的方法通常使用价值函数(Value Function)或策略函数(Policy Function)来表示决策策略。这些函数告诉智能体在给定状态下应该选择哪个动作以最大化累积奖励。
-
优点:无模型方法通常更适用于复杂的、不确定的环境,因为它们不需要对环境的内部工作方式进行建模。它们可以通过不断尝试来学习最佳策略。
-
示例应用:Q-learning、Deep Q-Networks(DQN)等都是无模型强化学习方法的示例。
-
-
Model-Based(有模型)强化学习:
-
基本思想:Model-Based方法试图建立一个关于环境的内部模型,这个模型可以模拟环境的动态,包括状态转移和奖励的生成。
-
工作方式:有模型方法首先学习环境模型,然后使用模型来进行规划和决策。通过模拟环境,它们可以在不实际执行动作的情况下预测未来可能的状态和奖励,并选择最佳的动作。
-
优点:有模型方法通常更高效,因为它们可以使用模型来规划未来的决策,而不必在实际环境中进行大量的试错。这些方法通常在数据效率上表现较好。
-
示例应用:Monte Carlo Tree Search(MCTS)、Model Predictive Control(MPC)等都是有模型强化学习方法的示例。
-
选择Model-Free还是Model-Based方法通常取决于问题的性质和可用的数据。在不确定性高、模型复杂或者数据稀缺的情况下,Model-Free方法可能更适合。而在可建模且可控制的环境中,Model-Based方法可能更有效。有时候,这两种方法也可以结合使用,以充分利用它们的优势。
基于概率和基于价值
在强化学习中,基于概率和基于价值是两种不同的方法,用于建立决策策略和指导智能体的行为。以下是它们的介绍:
-
基于概率的方法:
-
基本思想:基于概率的方法关注的是建立一个策略函数(Policy Function),该函数定义了在每个状态下采取每个可能动作的概率分布。智能体根据这个概率分布来选择动作。
-
工作方式:策略函数可以是确定性策略,即给定状态总是选择相同的动作,也可以是随机性策略,即给定状态下选择动作的概率分布。智能体根据这些概率来做出决策。
-
优点:基于概率的方法可以处理不确定性,并允许智能体在相同状态下采取不同的行动,以便更好地探索环境。它们也适用于连续动作空间的问题。
-
示例应用:策略梯度方法(Policy Gradient Methods)是基于概率的方法的典型示例,它们通过最大化累积奖励来更新策略参数。
-
-
基于价值的方法:
-
基本思想:基于价值的方法侧重于估计每个状态或状态-动作对的价值,即它们对于实现累积奖励的贡献有多大。这些价值函数用于指导动作选择。
-
工作方式:有两种主要类型的价值函数,一种是状态值函数(State Value Function),用于估计在某个状态下能够获得的期望累积奖励;另一种是动作值函数(Action Value Function),用于估计在某个状态下采取某个动作后能够获得的期望累积奖励。
-
优点:基于价值的方法可以提供更具体的指导,告诉智能体在每个状态下应该采取哪个动作或者在哪个状态下更有价值。它们通常在数据效率上更高,因为它们可以使用状态的价值信息来规划决策。
-
示例应用:Q-learning和Deep Q-Networks(DQN)是基于价值的方法的典型示例,它们估计状态-动作对的价值,并根据最大化估计的价值来选择动作。
-
选择基于概率还是基于价值的方法通常取决于问题的性质和需要。基于概率的方法适用于处理随机性较大的问题,而基于价值的方法更适合于需要具体的动作建议和规划的问题。有时候,这两种方法也可以结合使用,以充分利用它们的优势。
回合更新和单步更新
在强化学习中,回合更新(Episodic Updates)和单步更新(Online Updates)是两种不同的策略,用于更新智能体的学习模型(例如价值函数或策略函数)。它们有不同的更新时间点和应用场景:
-
回合更新(Episodic Updates):
-
基本思想:回合更新是指在每个完整的任务或回合结束后才进行模型的更新。在这种方法中,智能体需要完成一个完整的任务,然后根据任务的结果来调整学习模型。
-
工作方式:智能体收集经验并执行一系列动作,直到任务结束。一旦任务结束,智能体会回顾整个任务的经验,然后使用这些经验来更新模型参数,以改进未来的决策策略。
-
应用场景:回合更新通常用于在每个任务或回合之后进行学习,适用于离散任务或那些可以分为不同回合的连续任务,例如棋类游戏或机器人导航。
-
-
单步更新(Online Updates):
-
基本思想:单步更新是指在每一步操作后都对模型进行更新。在这种方法中,智能体在每个时间步都学习并更新模型,而不必等待整个任务结束。
-
工作方式:智能体在执行每个动作后,会立即观察到奖励信号并更新模型参数。这样,模型可以在任务进行中实时地调整决策策略。
-
应用场景:单步更新通常用于连续任务,尤其是那些需要实时决策的情况,例如自动驾驶或实时游戏。
-
选择回合更新还是单步更新取决于问题的性质和要求。回合更新通常对于离散任务或任务可以划分为不同回合的情况更为适用,因为它们在任务结束后才进行一次学习,可以更好地考虑长期的奖励。而单步更新适用于需要实时决策的连续任务,因为它们允许智能体在任务进行中及时适应变化的环境。在实际应用中,有时候也可以结合使用这两种更新策略,以兼顾长期和实时决策的需求。
在线学习和离线学习
在线学习(Online Learning)和离线学习(Offline Learning)是两种不同的机器学习方法,它们关注数据的获取方式和学习模型的时间点。以下是它们的介绍:
-
在线学习(Online Learning):
-
基本思想:在线学习是一种持续学习的方式,模型会在不断产生新数据的情况下逐步更新自己。模型会在实时或连续产生的数据流中进行学习,而不需要事先存储所有数据。
-
工作方式:在在线学习中,模型接收一个样本(数据点)后,立即进行学习和参数更新。然后,模型可以丢弃该样本,继续接收下一个样本。这个过程是连续的,模型不会停止学习,以适应新的数据和变化的环境。
-
应用场景:在线学习适用于需要实时更新和适应性的任务,如在线广告点击预测、机器人控制、金融交易等领域。模型在不断变化的数据流中进行学习,以保持其性能。
-
-
离线学习(Offline Learning):
-
基本思想:离线学习是一种批量学习的方式,模型在已经收集好的数据集上进行学习和训练。数据集通常是固定的,不再添加新数据。
-
工作方式:在离线学习中,模型首先获取整个数据集,然后在这个数据集上进行批量学习。一旦模型完成了学习过程,它通常不会再使用这个数据集,除非需要重新训练。
-
应用场景:离线学习适用于那些数据不再改变或只会定期更新的任务。例如,通过历史销售数据来预测未来销售趋势,或者通过固定的数据集进行图像分类。
-
选择在线学习还是离线学习取决于问题的性质和可用的数据。在线学习适用于需要实时性和持续适应性的任务,而离线学习适用于那些数据不再改变或只有周期性更新的任务。在实际应用中,有时候也可以将两者结合使用,例如,使用离线学习在静态数据集上进行预训练,然后通过在线学习来进行模型的在线微调。
Q-learning
什么是Q learning
行为准则
Q-learning的行为准则可以用一句通俗易懂的话来概括:
Q-learning告诉智能体在每种情况下,应该选择哪个动作以便获得最多奖励。
具体来说,Q-learning使用一个叫做Q值的表格,其中每一行表示一种情况(也叫状态),每一列表示可选的动作。每个单元格中的数字表示采取某个动作后,可以获得的奖励预期值。
智能体在每个时刻根据当前情况,查看Q值表格,然后选择具有最高Q值的动作。但为了探索新的可能性,有时候它也会随机尝试其他动作。随着不断的尝试和奖励的反馈,Q-learning会逐渐调整Q值,以便在每种情况下做出最优的动作选择。
通过这种方式,Q-learning可以帮助智能体在不断的学习和尝试中,逐渐学会如何在复杂的环境中做出明智的决策,以最大化累积的奖励。这就像是一个人在不断的试错中学会了在每种情况下采取最好行动一样。
Q表
Q-learning 的行为准则 Q 表格是通过不断地在智能体与环境互动的过程中进行更新和提升的。下面是关于如何更新和提升 Q 表的整理:
-
Q 表的初始化:
- 首先,Q 表格被初始化为初始值,通常可以将所有 Q 值初始化为零或其他合适的初始值。
-
智能体与环境的互动:
- 智能体从一个起始状态(s1)开始,根据当前的 Q 表格选择一个动作(a1或a2)并执行它。
- 智能体观察到环境的反馈,包括奖励(reward)和新状态(s2),并将这些信息用于更新 Q 表格。
-
Q 值的更新:
- 根据 Q-learning 更新规则,Q 表格中的 Q 值根据以下公式进行更新:
- 根据 Q-learning 更新规则,Q 表格中的 Q 值根据以下公式进行更新:
-
重复迭代:
- 重复上述过程,智能体与环境不断互动,每一步都选择动作并更新 Q 表格。
- 随着时间的推移,Q 表格会根据不断的经验更新,其中包含了在不同状态下采取不同行动的最佳策略。
-
探索和利用:
- 在更新 Q 表时,通常使用 ε-贪婪策略来平衡探索(尝试新动作)和利用(选择最佳动作)的需求。ε 表示在一部分时间内随机选择动作的概率,以便智能体可以继续探索环境。
通过这个过程,Q-learning 的行为准则 Q 表格逐渐收敛到最优策略,使智能体能够在不断的尝试和学习中,做出最优的决策以最大化累积的奖励。这就是 Q-learning 如何通过不断更新 Q 值来提升决策策略的方式。
Q-learning使用Q表格来记录每种情况下采取不同动作的预期奖励值。通过贝尔曼方程的迭代,可以将Q值向未来的状态传播,形成一个关于状态的长期奖励观念。
- 初始时,Q值被初始化为一些初始值,通常为零。
- 当智能体与环境互动时,它会选择动作并观察奖励和新状态。
- 智能体使用贝尔曼方程来更新Q值,这个方程考虑了当前奖励以及在未来状态下选择最佳动作可能带来的奖励。
- 贝尔曼方程的 γ(折扣因子)部分代表了时间的衰减效应。当 γ 为1时,Q值考虑未来所有奖励。当 γ 为0时,智能体只关注当前奖励。
- 随着γ从0变化到1,可以将其视为机器人逐渐获得更好的“眼镜”,能够看到未来奖励,并逐渐变得有远见,不仅考虑眼前的奖励,还为自己的未来着想。
总之,Q-learning通过迭代地更新Q值,考虑未来奖励和折扣因子γ的影响,使智能体能够学会长期最优决策策略,类似于具有不同度数“近视”的机器人逐渐变得有远见,更好地规划未来行动。
举个小例子
-o---T
# T 就是宝藏的位置, o 是探索者的位置
有个大概的 RL 概念就行, 知道 RL 的一些关键步骤就行, 这节的算法不用仔细研究。
预设值
import numpy as np
import pandas as pd
import time
N_STATES = 6 # 1维世界的宽度
ACTIONS = ['left', 'right'] # 探索者的可用动作
EPSILON = 0.9 # 贪婪度 greedy
ALPHA = 0.1 # 学习率
GAMMA = 0.9 # 奖励递减值
MAX_EPISODES = 13 # 最大回合数
FRESH_TIME = 0.3 # 移动间隔时间
Q表
def build_q_table(n_states, actions):
table = pd.DataFrame(
np.zeros((n_states, len(actions))), # q_table 全 0 初始
columns=actions, # columns 对应的是行为名称
)
return table
定义动作
# 在某个 state 地点, 选择行为
def choose_action(state, q_table):
state_actions = q_table.iloc[state, :] # 选出这个 state 的所有 action 值
if (np.random.uniform() > EPSILON) or (state_actions.all() == 0): # 非贪婪 or 或者这个 state 还没有探索过
action_name = np.random.choice(ACTIONS)
else:
action_name = state_actions.argmax() # 贪婪模式
return action_name
b=choose_action(2,a)
print(b)
这是一个选择动作的函数,根据 Q-learning 的 epsilon-greedy 策略来选择动作。让我解释其中的步骤:
-
state_actions = q_table.iloc[state, :]
:这一行代码从 Q 表格q_table
中选取了给定状态state
对应的行(即某个状态下所有可选动作的 Q 值)。 -
(np.random.uniform() > EPSILON) or (state_actions.all() == 0)
:这是 epsilon-greedy 策略的一部分,它决定了在选择动作时是采取贪婪策略(根据 Q 值来选择最优动作)还是随机策略(随机选择动作)。-
如果
(np.random.uniform() > EPSILON)
为真,意味着以概率1 - EPSILON
采取随机策略。这是为了探索新的动作。 -
或者如果
(state_actions.all() == 0)
为真,意味着当前状态下的所有动作的 Q 值都是0,也采取随机策略。这是为了确保每个状态至少被探索一次,避免陷入局部最优解。
-
-
如果上述条件不满足,即既不是随机策略也不是贪婪策略,那么将采取贪婪模式,选择具有最高 Q 值的动作,即
action_name = state_actions.argmax()
。
总之,choose_action
函数根据 epsilon-greedy 策略来选择动作,平衡了探索(随机选择)和利用(选择最优动作)的需求。这是 Q-learning 算法中重要的一部分,有助于智能体在学习过程中逐渐优化决策策略。
环境反馈S_,R
环境更新
强化学习主循环
下面的内容, 大家大概看看就行, 这节内容不用仔细研究