强化学习—PPO代码实现及个人详解1(python)

上一篇文章我们已经搞定了如何搭建一个可以运行强化学习的python环境,现在我们就跑一下代码,这里我对代码加上一些个人理解,方便基础差一些的朋友进行理解和学习。

我在这段时间对强化学习进行了学习,所以知识和代码基本来自这本:磨菇书

一、定义模型

import torch.nn as nn
import torch.nn.functional as F


class ActorSoftmax(nn.Module):
    def __init__(self, input_dim, output_dim, hidden_dim=256):
        super(ActorSoftmax, self).__init__()
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        self.fc2 = nn.Linear(hidden_dim, hidden_dim)
        self.fc3 = nn.Linear(hidden_dim, output_dim)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        probs = F.softmax(self.fc3(x), dim=1)
        return probs


class Critic(nn.Module):
    def __init__(self, input_dim, output_dim, hidden_dim=256):
        super(Critic, self).__init__()
        assert output_dim == 1  # critic must output a single value
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        self.fc2 = nn.Linear(hidden_dim, hidden_dim)
        self.fc3 = nn.Linear(hidden_dim, output_dim)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        value = self.fc3(x)
        return value

先简单解释下神经网络模型,一般是分为三层,输入层、隐藏层以及输出层,如果系统很复杂,也可以添加隐藏层,但是一般情况下,2、3层就够用了。如果想深入了解神经网络,可以参考这篇文章:神经网络——最易懂最清晰的一篇文章

这一段代码,是定义了两个神经网络模型,一个是演员,另一个是评论家。在 ActorSoftmax 类中,通过输入状态 x 经过神经网络计算得到各个动作的概率分布,而在 Critic 类中,通过输入状态 x 经过神经网络计算得到该状态的价值(即给定状态下的预期累积奖励)。

先说演员,首先我们要初始化,但是调用初始化是需要super的,所以就有了那段函数  super(ActorSoftmax, self).__init__()。之后进入初始化,使用linear,创造线性层,可进行全连接操作(即对输入特征进行加权求和并加上偏置,得到隐藏层的输出结果。这个隐藏层的输出结果会成为下一层的输入,进而参与后续的非线性变换、特征提取等操作。)可以看出,一共三层,第一层是输入层到隐藏层,第二层是隐藏层到隐藏层,第三层是隐藏层到输出层。之后用forword定义前向传播过程。为了让网络学习更加复杂的特征和模式,需要用激活函数relu(也就是在神经网络模型的隐藏层中引入非线性,提高表达能力,一般作用在隐藏层),想要用这个函数,就需要torch.nn.functional,代码里已经命名为F了,而Softmax激活函数应用于输出层,它能够将神经网络输出的原始分数转换为概率分布(其实就是归一化处理)

(关于激活函数,可以看这篇文章进行学习了解:常用的激活函数合集(详细版)

简单来说,就是演员这个大类里面有两个函数,init初始化了全连接层,而forward定义了前向传播,最终通过 softmax 函数得到输出,表示各动作的概率分布

接下来说评论家,初始化和前向传播是一样的,就两点不同,一是初始化时输出维度只能是1,因为最终返还的是状态的价值(一个单一的数值)。

注意:

(1)隐藏层维度是一个需要指定的超参数,而输入维度和输出维度是根据具体问题来确定的,因此没有在模型内部直接赋值,而是作为参数在初始化模型实例时进行传入。(也就是说输入维度和输出维度在后面参数定义时会有)

(2)在归一化函数softmax中,如果没有dim=1,则默认对最后一个维度进行归一化处理,有的话,就对第二个维度进行归一化处理(每一行为一个样本,每一列为一个类别)。

(3)self 是一个标识符,指向类的实例对象本身。

(4)ActorSoftmax 类定义了两个函数:__init__ 函数用于初始化模型的结构,forward 函数用于定义前向传播过程。在类被实例化之前,这些函数是不会自动运行的。

(5)assert函数是当作断言的,即当assert后面的条件为False时,会触发异常,从而中断程序的执行。适当在代码中加入些断言,可以检查程序的逻辑性和正确性。

除了定义模型,后续还会分析定义经验回放、定义智能体、定义训练、定义环境、设置参数、开始训练这几部分,如果大家想先跑通代码看看结果,可以直接去我最上面的蘑菇书链接里找,之后我还会接着对代码进行分析。(以上分析均是个人拙见,可能有问题,欢迎讨论修改)

  • 48
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: PPO (Proximal Policy Optimization) 是一种基于梯度的强化学习算法。它的主要思想是通过对策略的更新来提高策略的效率。主要包括以下步骤: 1. 首先选取一个初始策略,然后使用这个策略在环境中进行多次探索。 2. 收集探索中获得的数据,并使用这些数据来估计策略的价值。 3. 通过梯度下降法来更新策略,使得策略的价值更高。 4. 通过使用一个称为“clip”的技巧来限制策略的更新,以避免策略变得过于激进。 5. 重复上述步骤,直到策略达到最优。 PPO 通过在策略迭代过程中限制更新的幅度来防止策略的更新过于激进,从而提高了稳定性和效率。这也是为什么 PPO 算法在实际应用中表现很好的原因。 ### 回答2: 强化学习ppo算法,全称是Proximal Policy Optimization,是一种用于解决连续动作空间问题的强化学习算法ppo算法的核心思想是通过参数更新策略,优化策略的近似目标函数,以获得更好的策略。它采用了两个核心技术:策略评估和策略改进。 首先,ppo算法使用一个神经网络来表示策略,并基于当前策略采样生成训练数据。然后,利用产生的训练数据来更新策略模型的参数,提高策略的性能。 在策略评估方面,ppo算法采用了一种称为价值函数的辅助函数,用于估计当前策略的优劣。这个价值函数可以帮助判断哪些动作对于获得更好的回报是有帮助的。通过评估策略的优劣,可以确定哪些策略需要得到改进,以及改进的方向。 在策略改进方面,ppo算法使用一种叫做近端策略优化的方法,将策略的更新限制在一个可接受的范围内,防止策略的更新过于剧烈。这种方法可以保证策略更新的稳定性,并且避免一些不可预见的问题。 最后,通过多轮的策略评估和策略改进,ppo算法可以逐步优化策略,提高强化学习的性能。相比于传统的强化学习算法ppo算法具有较强的鲁棒性和稳定性。 总结来说,ppo算法是一种用于解决连续动作空间问题的强化学习算法,通过使用策略评估和策略改进的方法,优化策略模型的参数,以提高策略的性能。它具有鲁棒性和稳定性的优势,适用于许多实际问题的求解。 ### 回答3: 强化学习(Reinforcement Learning)是一种机器学习方法,其通过智能体(agent)与环境(environment)的交互学习,通过观察环境状态和采取不同的行动来优化策略,使得智能体获得更高的奖励。 其中,PPO(Proximal Policy Optimization)是一种基于策略梯度(Policy Gradient)的强化学习算法PPO算法通过定义一个目标函数,通过最大化该目标函数,优化策略。其基本思想是通过充分利用已有数据的经验,进行更新,并保证更新策略与之前的策略之间的差异不会太大,避免过大的策略改变导致训练不稳定。PPO算法的目标函数使用了一种被称为"近似比率(Importance Sampling Ratio)"的技巧,用于约束策略更新的幅度。 PPO算法具体步骤如下: 1. 初始化策略参数 2. 根据当前策略与环境交互采集样本数据 3. 计算采集到的样本数据的优势估计值,用于评估每个状态行动对的价值 4. 根据样本数据计算目标函数,并通过优化算法(如Adam)更新策略参数 5. 重复步骤2-4,直到达到预设的训练轮数或满足停止条件 PPO算法相较于其他强化学习算法的优势在于,其采用了一种近似比率的方法来约束策略更新范围,避免了过于剧烈的改变,增强了算法的稳定性。此外,PPO算法还可通过引入剪切或克隆操作来控制策略更新的幅度,进一步增加算法的稳定性。 总结起来,PPO算法是基于策略梯度的一种强化学习算法,通过近似比率来约束策略更新的幅度,以提高算法的稳定性。通过与环境的交互学习,PPO算法能够优化策略,并使智能体获得更好的奖励。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值