强化学习简介及分类

本文介绍了强化学习的基础概念,包括其解决的问题类型、学习方法及分类。重点解释了序贯决策问题,并探讨了强化学习与监督学习的区别。同时,对基于模型和无模型的强化学习算法进行了对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习强化学习,因此开设强化学习专栏,记下强化学习的学习笔记,

什么是强化学习?
强化学习又称再励学习、评价学习,是一种重要的机器学习方法,但是在传统的机器学习方法中并没有提到强化学习,而在连接主义学习中,把学习算法分为三种类型,即非监督学习(unsupervised learning)、监督学习(supervised leaning)和强化学习。

强化学习主要解决序贯决策问题。
什么叫序贯决策问题?
序贯决策是指按时间顺序排列起来,以得到按顺序的各种决策(策略),是用于随机性或不确定性动态系统最优化的决策方法。(此处参考百度百科)
如何解决?
它不关⼼输⼊⻓什么样, 只关⼼当前输⼊下应该采⽤什么动作才能实现最终的⽬标。 再
次强调, 当前采⽤什么动作与最终的⽬标有关。 也就是说当前采⽤什么动作, 可以使得整个任务序列达到最优。 如何使整个任务序列达到最优呢?这就需要智能体不断地与环境交互, 不断尝试, 因为智能体刚开始也不知道在当前状态下哪个动作有利于实现⽬标。 智能体通过动作与环境进⾏交互时, 环境会返给智能体⼀个当前的回报, 智能体则根据当前的回报评估所采取的动作:有利于实现⽬标的动作被保留, 不利于实现⽬标的动作被衰减。强化学习和监督学习的共同点是两者都需要⼤量的数据进行训练, 但是两者所需要的数据类型不同。 监督学习需要的是多样化的标签数据, 强化学习需要的是带有回报的交互数据。 由于输入的数据类型不同, 这就使得强化学习算法有它自己的获取数据、 利用数据的独特方法。

强化学习问题有以下几种分类:
1、 根据强化学习算法是否依赖模型可分为基于模型的强化学习算法和无模型的强化学习算法。
这两类算法的共同点是通过与环境交互获得数据,不同点是利用数据的方式不同。基于模型的强化学习算法利用与环境交互得到的数据学习系统或者环境模型,再基于模型进行序贯决策。无模型的强化学习算法则是直接利用与环境交互获得的数据改善自身的行为。两类方法各有优缺点,一般来讲基于模型的强化学习算法效率要比无模型的强化学习算法效率更高,因为智能体在探索环境时可以利用模型信息。但是有些根本无法建立模型的任务只能利用无模型的强化学习算法。由于无模型的强化学习算法不需要建模,所以和基于模型的强化学习算法相比,更具有通用性。
2、 根据策略的更新和学习方法,强化学习算法可分为基于值函数的强化学习算法、基于直接策略搜索的强化学习算法以及AC的方法。
所谓基于值函数的强化学习方法是指学习值函数,最终的策略根据值函数贪婪得到。也就是说,任意状态下,值函数最大的动作为当前最优策略。基于直接策略搜索的强化学习算法,一般是将策略参数化,学习实现目标的最优参数。基于AC的方法则是联合使用值函数和直接策略搜索。
3、 根据环境返回的回报函数是否已知,强化学习算法可以分为正向强化学习和逆向强化学习。
在强化学习中,回报函数是人为指定的,回报函数指定的强化学习算法称为正向强化学习。很多时候,回报无法人为指定,如无人机的特效表演,这时可以通过机器学习方法由函数自己学出来回报。
---------引用自《深入浅出强化学习:原理入门》

### 强化学习中的分类策略梯度 #### 定义与概述 在强化学习领域,策略梯度方法是一种直接优化策略参数的方法。这类方法旨在最大化累积奖励的期望值,而不是依赖于价值函数作为中介[^3]。 #### 策略梯度的优势与挑战 基于策略强化学习方法能够处理连续动作空间的问题,并且可以更容易地找到最优解。然而,这些方法通常具有较高的样本复杂性和计算成本。此,在某些情况下可能会遇到局部极小值或鞍点等问题,这会影响最终性能。 #### REINFORCE算法简介 一种简单的无模型策略梯度算法称为REINFORCE,该算法利用蒙特卡罗采样的方式评估每一步操作的好坏程度,并据此调整权重以提高未来获得更高回报的可能性。具体来说,就是按照当前策略执行一系列行动直到结束一局游戏(episode),记录下所有的状态转移序列以及对应的即时奖励,最后根据整个过程来更新网络参数[^4]。 ```python import torch from torch import nn from torch.distributions.categorical import Categorical class PolicyGradient(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(PolicyGradient, self).__init__() self.network = nn.Sequential( nn.Linear(input_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, output_dim), nn.Softmax(dim=-1) ) def forward(self, state): action_probs = self.network(state.float()) dist = Categorical(action_probs) return dist def reinforce(env, policy_net, optimizer, num_episodes=500): for episode in range(num_episodes): states, actions, rewards = [], [], [] done = False state = env.reset() while not done: probs = policy_net(torch.tensor([state])) action = probs.sample().item() next_state, reward, done, _ = env.step(action) states.append(state) actions.append(action) rewards.append(reward) state = next_state returns = calculate_returns(rewards) update_policy(policy_net, optimizer, states, actions, returns) def calculate_returns(rewards, gamma=0.99): G = 0 returns = [] for r in reversed(rewards): G = r + gamma * G returns.insert(0,G) return returns def update_policy(policy_net, optimizer, states, actions, returns): optimizer.zero_grad() log_probs = [] for i in range(len(states)): prob_dist = policy_net(torch.tensor([states[i]])) log_prob = prob_dist.log_prob(torch.tensor(actions[i])) log_probs.append(log_prob) loss = (-torch.stack(log_probs).sum() * torch.tensor(returns)).mean() loss.backward() optimizer.step() ``` 此代码片段展示了如何构建一个基本版本的Policy Gradient模型并应用到环境中去训练它。这里采用PyTorch库来进行神经网络搭建和自动求导运算[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值