强化学习笔记(1)—— 概括与基础

本文深入解析了强化学习的基本概念,包括与监督学习和进化方法的区别,强调了探索-利用困境与贡献度分配问题。通过实例阐述了Agent的决策过程、价值函数和策略类型,以及模型分类。重点介绍了如何在复杂环境中寻找最优策略和面临的挑战。
摘要由CSDN通过智能技术生成

1. 什么是强化学习

1.1 概览

  • RL中我们构建一个Agent,它要与一个复杂且不确定的环境交互,最大化其获得的奖励。换句话说,强化学习就是学习 “做什么(即如何把当前的情境映射成动作)才能使得数值化的收益最大化”,适用于序列决策任务
  • 具备学习能力的智能体必须能在某种程度上感知环境的状态,然后采取动作并影响环境状态,最终逐渐达成其目标,这是智能体在交互中学习的核心

    人们通常使用动态系统理论中的一些思想来形式化强化学习问题,比如马尔可夫决策过程(MDP)就包含了这三个方面 —— 感知动作目标,并将其以简单且不失本质的方式呈现。适用于解决任何这类问题的方法就是强化学习方法。

  • 形式化的形式化交互过程如下所示:第 t t t 轮交互时,Agent 观测到环境状态 S t S_t St,根据其策略 π \pi π 执行动作 A t A_t At,这会导致环境按照状态转移矩阵 P P P 变化为新状态 S t + 1 S_{t+1} St+1,并按奖励函数 R R R 给出奖励 R t + 1 R_{t+1} Rt+1。智能体在 t + 1 t+1 t+1 轮交互时获取 R t + 1 R_{t+1} Rt+1,再次观测环境状态,开启新一轮交互。 这其实就是一个MDP的框架,下一章再深入说明。
    在这里插入图片描述

1.2 强化学习和其他方法的区别

1.2.1 强化学习与监督学习的区别

  • 监督学习有以下两个特点:

    1. 假设样本服从i.i.d独立同分布:“同分布” 意味着所有样本满足一个未知分布,每个样本都是从中采样获得的,训练数据和测试数据都服从此分布;“独立” 意味着,任意样本间不应该有相关性,之前选取的样本不应该对之后样本的选择有任何影响,若样本间有相关性,训练将不稳定
    2. Agent知道样本的标记:例如在训练一个网络时,网络会被告知每个样本的标记,错误被定义为损失函数,通过BP算法训练
  • 强化学习不满足这两点:

    1. Agent得到的观测数据不是同分布的,而是有时序性的(correlated time series data),上一帧会影响下一帧
    2. 没有立即的反馈

      agent 难以即时评价当前动作的好坏

  • 所以Reinforcement Learning不同于Supervised Learning之处在于以下几点

    1. Sequential data as input (not i.i.d)
    2. The learner is not told which action to take, but instead must discover which action yield the most reward by trying them
    3. balance between exploration and exploitation(Agent要在 “探索” 和 “利用” 中找到平衡)
    4. There is no supervisor, only a reward signal, which is also delayed
  • 虽然强化学习和监督学习有诸多不同,但这并不代表监督学习无法解决强化学习问题(这种称为 “模仿学习”)

    对于相同任务,强化学习和其他监督学习方法最大的区别是二者使用的训练信号不同 —— Richard S.Sutton

    1. 强化学习:使用 “评估性反馈”,训练信号用于评估动作的好坏,而非对动作的直接指导,这使得主动反复试验以试探出更好的动作变得非常必要。“评估性反馈” 依赖于当前的动作,采取不同动作会得到不同的反馈。
    2. 监督学习:使用 “指导性反馈” ,训练信号给出正确动作的范例进行直接指导。“指导性反馈” 表示的是应该选择的正确动作是什么,且这个动作和当前采取的动作无关。

1.2.2 强化学习与进化方法的区别

  • 进化方法本质是一类优化方法,比如遗传算法、遗传规划、模拟退火算法等,它们的目标一般是对一个目标值进行优化。对于一些比较简单的问题,数学上有很多数值优化方法,比如梯度下降、拟牛顿法等等,但对于复杂问题,比如旅行商问题这类的,往往使用进化方法求解。

  • 进化算法也可以用于解强化学习问题,这些方法采取大量静态策略,每个策略在扩展过的较长时间内与环境的一个独立示例进行交互,选择获取了最多收益的策略极其变种来产生下一代策略,然后继续循环更新,算法性能随着迭代不断提升。

  • 如果策略空间充分小,或者可以很好地结构化以找到好的策略,或者我们有充分时间进行搜索,那么进化方法是有效的。另外,进化算法在智能体不能精确地感知环境状态的问题上具有优势

  • 以下井字棋为例,由于我们不能获知对手的行动策略,博弈论的 “极大极小” 算法,或是序列决策问题的动态规划算法都无法使用,而强化学习和进化方法都适用

    1. 进化方法:每一代中,固定策略与对手进行大量博弈,这样其获胜频率就称为策略获胜概率的无偏估计,以此为指导进行下一步策略进化。每一次策略变化都基于大量对局,且只有对局结果被纳入考虑,对局中发生的细节都被忽略。也就是说,如果玩家获胜,则对局中的所有动作都被认为有同等的功劳。
    2. 强化学习:RL使用价值函数来解决这个问题,它首先建立一个表,记录棋局的每个状态的价值(比如用此状态下胜率作为价值),大多数情况下我们贪心地在高价值状态间动作,偶尔尝试没有走过的动作,在每局博弈后,反向回溯更新各个状态的价值,随着对局增加,价值的估计越来越准确,策略也将逐渐收敛至最优

    从这个例子中,我们可以看出,进化算法忽略了问题中的一些有用结构,比如:策略是从状态到动作的函数、个体在生命周期中经历的状态序列及相应动作,强化学习则关注到和环境的交互过程,通过建立价值函数利用了这些信息。总的来说

    1. 进化方法:以对完整策略的反复评估为引导,对策略空间进行直接搜索
    2. 强化学习:通过和环境交互,收集收益信号,建立价值函数,进而得到策略
  • 事实上,进化算法、爬山、退火这类优化算法,其在策略空间的搜索有很大的随机性,有点碰运气的意思,也没有很好的数学基础,几乎已经是过气的研究领域了。不过最近周志华组出了一本关于演进学习的新书,说是打实了数学基础,或许会带来一些改变。

1.3 强化学习的特点

  • 和其他机器学习方法相比,强化学习更侧于以交互目标为导向进行学习。学习者不会被告知应该采取什么动作,而是必须自己通过尝试去发现哪些动作(或动作序列)会产生最丰厚的收益。在困难的案例中,动作影响的往往不只是即时收益,也会影响下一个情境(状态),从而影响后续的收益。这是强化学习最显著的两个特征: 试错延迟收益。这种独特的问题设定带来了独有的挑战,简单说,欲探索潜在的更好的 action,就不得不牺牲短期的 reward,智能体必须在 “试探” 和 “开发” 之间进行权衡
  • 强化学习的另一特征是明确地考虑了 “目标导向的智能体与不确定的环境交互” 这整个问题,所有强化学习智能体都有一个明确的目标,它们能够感知环境的各个方面,并能选择动作来影响其所处的环境。通常规定智能体从最开始就要工作,尽管其面临的环境有很大的不确定性。当强化学习涉及规划时,它必须处理规划和实时动作选择之间的相互影响,已经如何获取/改善环境模型的问题。
  • 总的来说,RL具有四大特点
    1. Trial - and - error exploration (balance between exploration and exploitation)
    2. Delayed reward
    3. Time matters (sequential data, not i.i.d)
    4. Agent‘s action affect the subsequent data it received (Agent’s action changes the environment)
  • Big deal:强化学习有可能获得超过人类的表现!
    1. 监督学习中,由于标记来自人类标记者,所以性能上限仅限于人的水平
    2. 强化学习中,Agent的性能完全来自于其自发地和环境进行交互,因此不受人类水平的限制。AlphaGo就是基于强化学习的

1.4 强化学习的示例

1.4.1 生活示例

  1. 象棋大师走一步棋,这个选择是通过反复计算对手可能的策略和对特定位置走棋动作的直观判断做出的
  2. 一只羚羊幼崽出生后数分钟就能站起来,半小时后就可以奔跑
  3. 自适应石油控制器实时调整炼油参数,它以特定的边际成本为基础,权衡优化产品的收益率/成本/质量,而不需要严格遵守工程师的初始设置
  4. 菲尔准备早餐。这个简单的日常活动其实特别复杂,其中包含特定条件下的行为和连锁的目标关系:走进橱柜,打开橱柜,选择一种麦片盒子,伸手拿,抓住,取出盒子。而取出碗、勺子和牛奶又是其他复杂的需要调整的交互式行为序列。这些行为的每一步都需要我们环顾四周来获取信息,从而指导我们去移动和取物。需要注意到这个例子中其实具有着层次化的目标,菲尔不断进行快速判断,包括如何拿取物品、要不要把他们放到餐桌上,每一步都是由目标引导的,同样每一步也是为其他目标服务的,比如拿勺子是为了吃麦片,吃麦片是为了获取营养,事实上,菲尔的身体状态决定了他的营养需求、饥饿程度和食物偏好。
  5. 智能体不一定是完整的个体,也可能是更大的动作系统的组成部分,对于智能体来说,其所处的环境由系统的其他部分和系统所处的环境组成,智能体直接与系统其他部分交互,间接地与系统所处环境交互。比如一个智能体监控机器人电池的电量,并将指令发送至机器人的控制模块去。

1.4.2 游戏示例

  • 任务:训练一个玩乒乓球游戏的Agent,action只有move up和move down
    在这里插入图片描述

  • 设计出Agent的结构如下:把游戏画面转为像素数组后输入策略网络,最终得出各个动作的概率分布
    在这里插入图片描述
    我们可以把游戏中两个拍子位置的任意组合看作一个环境状态(state) s s s,游戏过程中环境的状态在不断变化

    准确地说,这里的游戏画面截图是状态state s s s,我们通过某个嵌入函数 embedding function ϕ \phi ϕ 将其映射为一个观测 observation o = ϕ ( s ) o = \phi(s) o=ϕ(s),然后带入强化学习算法处理,只是为了表示简便,通常不特别区分观测和状态。例如

    1. ϕ \phi ϕ 是 identity 函数,则观测 o o o 也是游戏的一帧画面,这种方式比较简便,但是输入维度可能太大
    2. ϕ \phi ϕ 是将游戏图像映射到两个拍子位置的函数,则观测 o o o 是两个拍子位置组成的二维向量
  • 这里的Policy Network可以用多种方式得到

    1. 监督学习的方式:给出大量的示教轨迹,从中提取 (state, action) \text{(state, action)} (state, action) 样本作为训练数据,然后使用反向传播算法训练网络。这种方式也称为 “模仿学习”
    2. 强化学习的方式:训练时从每一帧开始进行多次 rollout 获取多个序列(生成多局游戏,采样动作序列,直到游戏结束),每个序列称为一个 “轨迹episode” ,最后 WIN/LOSE 的结果作为每个轨迹的奖励,利用这些 (state, reward) \text{(state, reward)} (state, reward) 数据进行训练
      在这里插入图片描述

1.4.3 小结

  1. 所有智能体都有其目标,智能体依据这个来判断进展。
  2. 智能体的动作会影响未来环境的状态(如象棋中棋局状态、机器人下一刻位置和电量…)进而影响未来的决策和机会,正确的选择需要考虑到间接的、延迟的动作后果,需要有远见的规划。
  3. 智能体无法完全预测动作的影响,因此它必须频繁地监视环境并做出适当反应
  4. 虽然智能体可能有一些相关的先验知识(比如棋手的经验、羚羊的自然演化),但对于调整动作和研究任务特性来说,更重要的还是与环境交互,利用交互经验来改善性能。

1.5 强化学习面对的两个核心问题

1.5.1 探索-利用窘境(Exploration-Exploitation dilemma)

  • Agent的经验全部来自于其执行动作后的结果,如何平衡action?
    1. 探索(Exploration):agent 尝试新的 action,探索其价值,这有助于未来做出更好的决策
    2. 利用(Exploitation):使用经验中曾获取最好 reward 的 action,这能保证当前可以获取已知范围内最大的价值
  • 探索-利用窘境:探索和利用无法同时进行,要探索潜在的更好的action,就不得不牺牲短期的reward

    例子:选餐馆

    • Exploration:尝试一家没吃过的餐厅,但是可能踩雷
    • Exploitation:选一家以前吃过感觉不错的餐厅,但是这样也失去了发现更好餐馆的机会

1.5.2 贡献度分配问题 (Credit Assignment Problem)

  • 贡献度分配问题:agent 与环境交互得到一个很长的轨迹,这个过程中 agent 执行了很多动作,并获得一定的收益,如何判断各个动作(准确说是在某状态下执行某动作)对于获取收益贡献的大小?
  • 贡献度分配问题主要是由于强化学习的延迟反馈特性所导致的,通常我们使用一个价值表格或价值网络来估计各个 ( s , a ) (s,a) (s,a) 的贡献度
  • 贡献度分配特别重要,因为如果可以准确地估计所有 ( s , a ) (s,a) (s,a) 的价值,则通过简单贪心就能得到最优策略,绝大多数强化学习算法本质都是在做贡献度分配

2. 时序决策过程及相关概念

  • agent 要学习如何与环境进行交互,它感知环境的状态(state)获取一个观测(observation)并从环境获取奖励(reward),然后执行动作(action),动作又会影响环境的状态
  • agent 选择 action 的过程是一个时序决策过程,这里捋一下相关概念

2.1 基础概念

2.1.1 奖励 reward

  1. reward是一个标量反馈信号(scalar feedback signal),描述了agent在这一步动作的好坏程度
  2. 强化学习是基于累计折扣 reward 最大化的:agent的目标是最大化累计折扣 reward
  3. 示例
    1. 下棋游戏:胜/负棋局
    2. 股票:获利/亏损
    3. 电子游戏:得分/扣分

2.1.2 历史 history

  1. history是一个 “观测、动作、奖励” 序列
  2. 形式化描述: H t = O 1 , A 1 , R 1 , . . . , O t − 1 , A t − 1 , R t − 1 H_t = O_1,A_1,R_1,...,O_{t-1},A_{t-1},R_{t-1} Ht=O1,A1,R1,...,Ot1,At1,Rt1
  3. 下一步发生的事取决于历史

2.1.3 状态 state

  1. state是关于history的函数,决定了下一步发生什么
  2. state又分成环境状态和agent状态
    1. 环境状态 S t e = f e ( H t ) S_t^e = f^e(H_t) Ste=fe(Ht),这是环境的真实状态
    2. Agent状态 S t a = f a ( H t ) S_t^a = f^a(H_t) Sta=fa(Ht),Agent状态来自对环境状态的观测(observation)。由于不能观测到环境的方方面面, S t a S_t^a Sta S t e S_t^e Ste通常不等

2.1.4 全观测 full observability

  1. agent直接观测到环境的所有方面,此时有 O t = S t a = S t e O_t = S_t^a = S_t^e Ot=Sta=Ste
  2. 这是马尔科夫决策过程(MDP)中的形式

2.1.5 部分观测 partial observability

  1. agent不能观测到环境的所有方面,此时有 S t a ≠ S t e S_t^a \neq S_t^e Sta=Ste
  2. 这是部分可观察马尔可夫决策过程(POMDP)中的形式
  3. 比如玩乒乓球游戏时,Agent只能观测到游戏画面一帧的信息,不能获得游戏内部的所有信息(运作状态);另一个更直观的例子是 RTS 类游戏中的 “战争迷雾”,agent 只能观察到周围环境的状态,有许多全局信息都无法获取

2.2 时序决策

  • 对于Agent,要做出一系列决策,以在未来获取最大的reward,它具有以下特点
    1. action可能导致长期的后果(long term consequence)
    2. reward可能要延迟给出(每步action不能直接产生reward)
    3. Agent要在近期奖励和远期奖励中权衡(Trade-off),长期奖励更关键

3. 强化学习系统的四要素

在这里插入图片描述

3.1 策略(决策函数 π \pi π

  1. 决策函数是Agent的 “行为模型”,定义了智能体在特定时间的行为方式,本质上是环境状态到动作的映射 π : s ↦ a \pi:s \mapsto a π:sa
  2. 两种Policy
    1. 采样策略(Stochastic policy):执行的action来自动作概率分布上的一个采样(比如30%向上,70%向下)。这时 Π \Pi Π描述一个概率,通常采用的是这种策略
      Π ( a ∣ s ) = P [ A t = a ∣ S t = s ] \Pi(a|s) = P[A_t = a|S_t=s] Π(as)=P[At=aSt=s]
    2. 确定策略(Deterministic policy):执行的action为动作概率分布中概率最大的,这个动作记作 a ∗ a^* a
      a ∗ = a r g m a x a Π ( a ∣ s ) a^* = \mathop{argmax}\limits_{a} \Pi(a|s) a=aargmaxΠ(as)
  3. 某些情况下,策略可能是一个简单的函数或查询表,另一些情况下,它可能涉及大量计算,例如某些搜索过程。
  4. 关于策略有一个重要的概念称为 占用度量,它表示策略会访问到的状态或状态动作对的(折扣)概率分布,已经证明占用度量和策略是一一对应的。强化学习的策略在训练中会不断更新,其对应的数据分布(即占用度量)也会相应地改变。因此 agent 看到的数据分布是随着智能体的学习而不断发生改变的

    以下引用自 强化学习入门知识(基础篇)
    在这里插入图片描述

3.2 收益信号(奖励函数 R R R

  1. 收益信号定义了强化学习问题中的目标
  2. 在每一步中,环境向智能体发送一个称为 “收益/奖励” 的标量数值,智能体唯一的目标是最大化长期总收益。也就是说,收益信号决定了对于智能体来说何为好、何为坏。
  3. 收益信号是改变策略的基础,如果策略动作导致了低收益,那么智能体很可能会改变策略,从而在未来选择其他动作。
  4. 一般而言,收益是关于某个环境状态和智能体动作下的随机性函数(Stochastic function): R : ( s , a ) ↦ r R:(s,a) \mapsto r R:(s,a)r

3.3 价值函数

3.3.1 状态价值函数( V V V

  1. 价值函数是在确定Policy Π \Pi Π 的情况下,对未来奖励的一个加权总和(expected discounted sum of future rewards under a particular policy),简单说,一个状态的价值,是一个智能体从此处开始,对将来积累的收益的期望,我们把Policy π \pi π 下状态s的价值定义为
    V Π ( s ) = E π [ G t ∣ S t = s ] = E Π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] , s ∈ S V_{\Pi}(s) =\mathbb{E}_{\pi}[G_t | S_t = s] = \mathbb{E}_{\Pi}[\sum\limits_{k=0}^{\infty} \gamma^k R_{t+k+1} | S_t = s], s\in S VΠ(s)=Eπ[GtSt=s]=EΠ[k=0γkRt+k+1St=s],sS 这是Policy π \pi π状态s“未来可能获得的奖励的加权和( G t G_t Gt)” 的当前期望值,它描述了进入状态s的 “长期价值” (long-term value),真正表示了进入状态s有多好。(其中 γ \gamma γ 是折扣因子(discount factor),表示短期奖励和长期奖励的权重关系)
  2. 尽管收益信号决定了环境状态直接、即时、内在的吸引力,但价值表示了接下来所有状态的长期期望收益。从某种意义上说,收益更加重要,而作为收益预测的价值次之。然而,在指定了评估策略时,我们最关心的是价值,动作选择是基于对价值的判断做出的,我们寻求能带来最高价值而非最高收益的动作。
  3. 不幸的是,确定价值要比确定收益困难得多。收益基本是由环境直接给予的,而价值必须综合智能体收集的收益序列综合评估。事实上,价值评估方法几乎是所有强化学习算法中最重要的组成部分

3.3.2 状态动作价值函数( Q Q Q

  1. q函数和V函数非常像,定义如下
    q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] = E Π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s , A t = a ] , s ∈ S , a ∈ A q_{\pi}(s,a) = \mathbb{E}_{\pi}[G_t | S_t = s,A_t=a] =\mathbb{E}_{\Pi}[\sum\limits_{k=0}^{\infty} \gamma^k R_{t+k+1} | S_t = s,A_t=a], s\in S ,a\in A qπ(s,a)=Eπ[GtSt=s,At=a]=EΠ[k=0γkRt+k+1St=s,At=a],sS,aA
  2. 这是Policy π \pi π状态s且选择动作a“未来可能获得的奖励的加权和( G t G_t Gt)” 的当前期望值
  3. 这个q函数可以用来选择动作a,是RL算法在学习的一个函数

3.4 (可选的)环境模型

  1. 模型是对环境的反应模式的模拟,它决定了 Agent 认为的环境下一步的变化,描述了在状态s采取动作a以后下一步的外部环境状态和奖励情况
    1. 下一步状态的预测: P s s ’ a = P [ S t + 1 = s ′ ∣ S t = s , A t = a ] P_{ss’}^a = P[S_{t+1}=s'|S_t=s,A_t=a] Pssa=P[St+1=sSt=s,At=a]
    2. 下一步奖励的预测: R s a = E [ R t + 1 ∣ S t = s , A t = a ] R_s^a = \mathbb{E}[R_t+1|S_t=s,A_t=a] Rsa=E[Rt+1∣St=s,At=a]
  2. 环境模型常用于做 规划,就是在真正经历之前,先考虑未来可能发生的各种情况从而预先决定采用何种动作。
  3. 借助模型的方法被称为 model-based 方法,而简单的无模型方法称为 model-free 方法,只能通过不停地试错来学习。

4. Agent的分类(RL 方法的分类)

  • 下面会用这个迷宫任务举例
    在这里插入图片描述

4.1 按学习内容分

  • 按学习内容,强化学习算法(Agent)可以分成

    1. Value based 类方法,该类方法的实现通常基于 value iteration 思想
    2. Policy Gradient 类方法,其中 该类方法的实现通常基于 policy iteration 思想。该类方法内部又分为 policy based 类方法和 Actor-Critic 类方法两小类

    示意图如下
    在这里插入图片描述

4.1.1 基于价值函数的 Agent(value-based agent)

  1. 这种 Agent 先学习 value function,收敛后再从中推算出最优 policy
    • 显式学习:value function
    • 隐式学习:policy
  2. 特点:
    1. value-based 方法一般直接选择价值最高的动作,其他动作没有被选中的可能,是一种比较强硬的方式。这种严格的价值贪心策略可能导致试探不足而收敛到局部最优
    2. value-based方法只适用于离散动作空间环境,在连续环境中动作数量是无限的,无法对每个动作计算价值
  3. 示例:对于迷宫任务,value-based agent学得每个state下的value,从中可以推出action的策略(一直向v(s)增大的方向走)
    在这里插入图片描述
  4. 属于此类的方法:value-iteration、policy-iteration、Q-learning、Sarsa…

4.1.2 基于策略的 Agent(policy-based agent)

  1. 这种 Agent 直接学习策略,即直接学习从 state 到 action 的映射,收敛后给一个state,就输出最优 action(确定策略梯度方法)或最优 action 的概率分布(随机策略梯度方法)
    • 显式学习:policy
    • 不学习:value function
  2. 特点
    • policy-based 方法的好处在于每个动作都有一定概率被选中(对于随机策略梯度方法而言),保证了一定的试探性
    • policy-based 方法适用于离散和连续环境(直接学习 state 到 action 的映射,总能对输入的状态给出一个动作或动作分布)
  3. 示例:对于迷宫任务,value-based agent 直接学得每个 state 下的 policy,不学价值函数
    在这里插入图片描述
  4. 属于此类的方法:REINFORCE、TPRO、PPO…

4.1.3 表演者-评论家(Actor-Critic agent)

  1. 这种 Agent,同时学 policy 和 value function,通过交互获得最佳 action
    • 显式学习:policy 和 value function
  2. 可以把这种 agent 看作 value-based 和 policy-based 的结合
  3. 属于此类的方法:DDPG、AC、A2C、A3C…

4.2 按模型分

4.2.1 基于模型的 Agent(model-based agent)

  • 显式学习:model(关键是看agent能否获知环境状态转移和奖励函数,如果不能获知,是否对通过交互对环境进行建模)
  • 隐式学习:policy 和/或 value function可学可不学
  • 例如:value-iteration、policy-iteration、带规划的model-free方法…

4.2.2 不基于模型的 Agent(model-free agent)

  • 显式学习:policy 和/或 value function
  • 没有model(不能获知状态转移矩阵或奖励函数),只能通过和环境交互来间接地感受环境(做出一个动作,环境反馈新状态和奖励)
  • 例如:Q-learning、Sarsa、Policy Gradients…

4.3 小结

  • 基于value function、policy、model这三个方面的有无,可以把模型以下各类
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云端FFF

所有博文免费阅读,求打赏鼓励~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值