2019-03-18 09:23:24 cindy_1102 阅读数 3479

李宏毅深度强化学习课程 https://www.bilibili.com/video/av24724071

李宏毅深度强化学习笔记(一)Outline
李宏毅深度强化学习笔记(二)Proximal Policy Optimization (PPO)
李宏毅深度强化学习笔记(四)Actor-Critic
李宏毅深度强化学习笔记(五)Sparse Reward
李宏毅深度强化学习笔记(六)Imitation Learning
李宏毅深度强化学习课件

Q-Learning介绍

基本思想

Q-learning – value-base

什么是Critic:
critic并不直接决定采取什么行动,但是会用来衡量一个actor的好坏
critic的输出值取决于被评估的actor

状态价值函数 Vπ(s)V^\pi(s):
对于actor π\pi, 给定状态s,期望得到的累积收益,该值取决于状态s和actor π\pi

如何估计状态价值函数 Vπ(s)V^\pi(s):

  1. 基于蒙特卡洛的方法Monte-Carlo (MC)
    critic 观察 π\pi 进行游戏的整个过程, 直到该游戏回合结束再计算累积收益(通过比较期望收益和实际收益G,来训练critic)
    Tip: 有时一个游戏回合可能会很长,这个等到游戏回合结束再计算收益的方法训练起来会很慢,因此引入另外一种方法 Temporal-difference(TD)
  2. 时序分差方法Temporal-difference (TD)
    时序分差算法计算的是两个状态之间的收益差. (通过比较期望差异与实际差异r之间的差别来训练critic)

MC vs. TD
由于从游戏中获取的收益是一个随机变量,而MC方法是各状态下收益的加总,相对而言,MC方法得到的实际累积收益G的方差会很大.
相比较而言,TD只考虑状态之间的收益差,因此方差较小,但是由于没有从整体收益进行考虑,因此该方法的准确性不能得到保证

状态-行动价值方程 (another critic) Qπ(s,a)Q^\pi(s, a):
对于给定的actor π\pi, 在状态s采取行动a预计能够得到的累计收益

Q-Learning:

  1. 使用一个初始的actor π\pi 与环境进行互动
  2. 学习该actor对应的 Q function
  3. 一定存在另外一个表现更好的actor π\pi' , 用这个更好的actor来替代原来的actor
  4. 重复上述步骤

更好的 π\pi' 的含义是,对于所有的状态s,一定有 “采取π\pi'获得的状态价值函数不小于π\pi得到的状态价值函数 ”,那么π\pi'就是由对Q求argmax返回的actor
在这里插入图片描述
Tips:

  1. π\pi' 不包含额外的参数,它只取决于Q
  2. 对于连续的action不适用

证明 (π\pi'的存在性):
在这里插入图片描述

Tip1: Target network
计算Q的方式与TD类似,但是,在训练的过程中,由 sts_tst+1s_{t+1} 生成的值是不固定的,在这种情况下训练会比较困难。
因此,在训练的时候,用来计算 的网络会被固定 st+1s_{t+1},称为固定网络,于是,目标问题就变成了一个回归问题。
如下图,当前时间t网络生成的Q值与下一个时间网络生成的Q值(固定)之间应该只相差rtr_t,因此需要用真实的 rtr_t 与模型计算出来的 rtr_t 进行回归逼近。
在这里插入图片描述

Tip2: Exploration
对于Q方程,它是policy的基础,这会导致actor每次都会选择具有更大Q值的行动action,对于收集数据而言是一个弊端,可以采用以下方法解决:

  1. Epsilon Greedy (在训练的过程中 ϵ\epsilon 的值会逐渐减小)
    下述公式的含义是,在采取action的时候,actor会有 1ϵ1-\epsilon 的概率选择使得Q值最大的a,随着训练时间变长,ϵ\epsilon 的值逐渐减小,在后期actor选择最大Q值对应的a才会变大。
    在这里插入图片描述
  2. Boltzmann Exploration (和 policy gradient 类似, 根据一个概率分布来进行采样)
    在这里插入图片描述

Tip3: Replay Buffer
step1:π\pi 和环境互动
step2: 将步骤1中互动得到的经验放入一个 buffer (放在buffer里面的经验来自不同的policy,当buffer满了的时候,移除旧的经验)
(这里所说的经验是指集合 st,at,rt,st+1{s_t, a_t, r_t, s_{t+1}})
step3: 在每一次迭代中,学习 Qπ(s,a)Q^\pi (s,a): 1. 部分采样 2. 更新 Q-function
step4: 找到一个比 π\pi 更好的 π\pi'
step5: 重复上述步骤

典型的 Q-Learning 算法
先对Q function进行初始化,并令目标Q function和初始Q function相等。
在每个episode中,对于每个时间t:

  1. 给定状态state sts_t,基于使用epsilon greedy的Q采取行动action ata_t
  2. 得到对应的回报reward rtr_t 以及新的状态state st+1s_{t+1}
  3. 将收集到的{st,at,rt,st+1}\{s_t, a_t, r_t, s_{t+1}\}存入reply buffer
  4. 从reply buffer当中任意采样得到{si,ai,ri,si+1}\{s_i, a_i, r_i, s_{i+1}\}(通常是取一部分样本)
  5. 目标值为 y=ri+maxaQ^(si+1,a)y = r_i + max_{a} \hat{Q}(s_{i+1},a)
  6. 根据目标值进行回归,不断更新Q的参数,使得计算出来的 Q(si,ai)Q(s_i, a_i) 接近于真实值y
  7. 每C步更新一次 Q^=Q\hat{Q} = Q
    在这里插入图片描述

关于Q-Learning 的几点建议

Double DQN
由于Q值总是基于使得Q最大的action得出的,因此会趋向于被高估,于是引入double DQN
double DQN的真实Q值往往比Q-learning高

  1. 为什么 Q 经常被高估
    因为目标值 rt+maxQ(st+1,a)r_t+maxQ(s_{t+1}, a) 总是倾向于选择被高估的行动action
  2. double DQN 是如何工作的?
    使用两个Q function(因此称为double), 一个用来选择行动action,另外一个用来计算Q值,通常会选择target network来作为另外一个用于计算Q值的Q‘ function.
    在这里插入图片描述
    如果Q高估了 a 从而被选择, Q’ 会给这个被选择的a一个合适的Q值
    入股Q’会高估某个action a,这个action并不会被Q选择到

Dueling DQN
只对网络结构进行改变!
在这里插入图片描述
这里计算出来的值有两个:
V(s): 表示静态环境,状态s所具有的价值.
A(s,a): 表示在状态s下采取行动a时的 advantage function
这种类型的网络结构可以用来学习不被行动action影响下的state的价值
通常,在计算 A(s,a) 时,使用单个行动对应的 advantage function 的值减去在该状态下采取所有行动所获得的 advantage function 的值的平均值,因此,对于一个状态下的所有action,具有零和特征。(normalise 在和 V(s)V(s)相加之间进行)
此外,如果只需要通过改变V(s)的值就能改变某个状态下所有的Q的话,会比较方便

Prioritized Experience Replay
简单地说,在训练的过程中,对于在经验buffer里面的样本,那些具有更好的TD 误差的样本会有更高的概率被采样,这样可以加快训练速度。
在这个过程中,参数更新的过程也会有相应的更改。

Multi-step: Combination of MC and TD
此处,模型需要学习多步累积起来的回报reward,也就是说将MC和TD进行了折中,同时引入了一个超参数,即累积reward的步长N
在这里插入图片描述
Noisy Net:
Epsilon Greedy vs. Noisy Net
Epsilon Greedy: 在行动上加噪声
在这里插入图片描述
即便给定相同的状态state,agent也有可能采取不同的行动,因此,实际上这里并没有真正意义上的policy
Noisy Net: 在参数上加噪声
在每个episode开始时,在Q function的参数上引入噪声,但在每一个episode内,参数不会发生改变。给定同样的state,agent会采取同一个action
在这里插入图片描述
Distributional Q-function
状态-行动价值函数 Qπ(s,a)Q^\pi(s,a) 是累积收益的期望值,也就是说是价值分布的均值。然而,有的时候不同的分布得到的均值可能一样,但我们并不知道实际的分布是什么。
在这里插入图片描述
Distributional Q-function 认为可以输出Q值的分布,当具有相同的均值时,选择具有较小方差(风险)的那一个
但实际上,这个方法很难付诸实践。

Rainbow:
在这里插入图片描述
上述图像表明 DDQN 对于rainbow来说用处不大,这是因为DDQN是用来解决高估问题的,而这个问题在 distributional Q function 中已经得到了解决

连续行动下的 Q-Learning

连续行动:
在某些情况下,action是一个连续向量(比如驾驶类游戏,需要决定一个连续的角度)
在这种情况下,Q learning 并不是一个用来寻找最佳action的好方法
解决方式一:
采样一系列行动,看哪个行动会返回最大的Q值
解决方式二:
使用梯度上升来解决这个优化问题(具有较高的计算成本)
解决方式三:
设计一个网络来使得这个优化过程更简单
在这里插入图片描述
这里 \sumμ\mu 是高斯分布的方差和均值,因此,该矩阵 \sum 一定是正定的。
要让Q值较高,意味着要使得 (aμ)2(a-\mu)^2 的值更小,也就是说 a=μ\mu.
解决方式四:
不使用 Q-learning
具体细节将在下一个笔记中进行介绍
在这里插入图片描述

2019-07-13 11:06:32 csdn_47 阅读数 98

李宏毅深度强化学习笔记(一)Policy Gradient

参考jessie_weiqing博客:https://blog.csdn.net/cindy_1102/article/details/87905272
李宏毅深度强化学习课程 https://www.bilibili.com/video/av24724071

Policy Gradient

术语和基本思想

基本组成:

  • actor (即policy gradient要学习的对象, 是我们可以控制的部分)
  • 环境 environment (给定的,无法控制)
  • 回报函数 reward function (无法控制)

Policy of actor π:

如下图所示,Policy 可以理解为一个包含参数 θ \thetaθ的神经网络,该网络将观察到的变量作为模型的输入,基于概率输出对应的行动action
在这里插入图片描述

Episode:
游戏从开始到结束的一个完整的回合

actor的目标:
最大化总收益reward

Trajectory τ\tau:
行动action和状态state的序列

给定神经网络参数θ \的情况下,出现行动状态序列 τ\tau的概率:
以下概率的乘积:初始状态出现的概率;给定当前状态,采取某一个行动的概率;以及采取该行动之后,基于该行动以及当前状态返回下一个状态的概率,用公式表示为:
pθ(τ)=p(s1)pθ(a1s1)p(s2s1,a1)pθ(a2s2)p(s3s2,a2)=p(s1)t=1Tpθ(atst)p(st+1st,at) \begin{array} { l } { p _ { \theta } ( \tau ) } \\ { \quad = p \left( s _ { 1 } \right) p _ { \theta } \left( a _ { 1 } | s _ { 1 } \right) p \left( s _ { 2 } | s _ { 1 } , a _ { 1 } \right) p _ { \theta } \left( a _ { 2 } | s _ { 2 } \right) p \left( s _ { 3 } | s _ { 2 } , a _ { 2 } \right) } \\ { \quad = p \left( s _ { 1 } \right) \prod _ { t = 1 } ^ { T } p _ { \theta } \left( a _ { t } | s _ { t } \right) p \left( s _ { t + 1 } | s _ { t } , a _ { t } \right) } \end{array}

给定一个行动状态序列 τ \tauτ, 我们可以得到它对应的收益reward,通过控制actor,我们可以得到不同的收益。由于actor采取的行动以及给定环境下出现某一个状态state是随机的,最终的目标是找到一个具有最大期望收益(即下述公式)的actor。

累积期望收益:采取某一个行动状态序列τ \tauτ的概率, 以及该行动状态序列对应的收益reward的乘积之和。
Rθ=τR(τ)pθ(τ)=Eτpθ(τ)[R(τ)] \overline { R } _ { \theta } = \sum _ { \tau } R ( \tau ) p _ { \theta } ( \tau ) = E _ { \tau \sim p _ { \theta } ( \tau ) } [ R ( \tau ) ]

Policy Gradient

得出目标函数之后,就需要根据目标函数求解目标函数最大值以及最大值对应的policy的参数 θ。类比深度学习中的梯度下降求最小值的方法,由于我们这里需要求的是目标函数的最大值,因此需要采取的方法是梯度上升。也就是说,思想起点是一样的,即需要求出目标函数的梯度。

求解梯度的步骤如下,以前文所述目标函数为基础,对参数 θ 求导,其中,对概率加权的reward求和就是求reward的期望,因此有红框部分的改写,又因为训练的过程中会进行采样训练,采样个数为N,因此公式可以近似表示为N词采样得到的reward的平均。
在这里插入图片描述

Tip 1: 添加基准线

由于训练过程中采样是随机的,可能会出现某个行动不被采样的情况,这会导致采取该行动的概率下降;另外,由于采取的行动概率和为一,可能存在归一化之后,好的action的概率相对下降,坏的action概率相对上升的情况,因此需要引入一个基准线baseline b bb.
具体的例子:当policy决定采取的三个action a,b,c均有正的reward时,比如3,4,5,在计算各个action的概率的时候,本来应该给action c分配较大的概率,但是归一化之后,a的概率反而可能上升,c的概率可能会下降,与对应reward应该被分配的概率分布不符。但是引入baseline之后,可能a的reward会变为负,这样的话,采取该行动的概率就会下降。
Rθ1Nn=1Nt=1Tn(R(τn)=b)logpθ(atnstn)bE[R(τ)] \nabla \overline { R } _ { \theta } \approx \frac { 1 } { N } \sum _ { n = 1 } ^ { N } \sum _ { t = 1 } ^ { T _ { n } } \left( R \left( \tau ^ { n } \right) = b \right) \nabla \log p _ { \theta } \left( a _ { t } ^ { n } | s _ { t } ^ { n } \right) \quad b \approx E [ R ( \tau ) ]

Tip 2: 进一步考虑各个时间点的累积收益计算方式

考虑到在时间t采取的行动action与t时期之前的收益reward无关,因此只需要将t时刻开始到结束的reward进行加总。并且,由于行动action对随后各时间点的reward的影响会随着时间的推移而减小,因此加入折旧因子 γ。这样就得到了一个考虑比较全面,比较完善的梯度计算方式。
在这里插入图片描述

2019-03-01 11:15:41 cindy_1102 阅读数 1097

李宏毅深度强化学习课程 https://www.bilibili.com/video/av24724071

李宏毅深度强化学习笔记(一)Outline
李宏毅深度强化学习笔记(二)Proximal Policy Optimization (PPO)
李宏毅深度强化学习笔记(三)Q-Learning
李宏毅深度强化学习笔记(四)Actor-Critic
李宏毅深度强化学习笔记(五)Sparse Reward
李宏毅深度强化学习课件

为什么要模仿学习 Imitation Learning

(也称为 learning by demonstration, apprenticeship learning)
在某些情况下:

  1. 机器也可以和环境进行互动,但是不能明显的得到reward
  2. 在某些任务中很难定义reward
  3. 人为涉及的奖励可能会得到不受控制的行为

因此需要 imitation learning: 让一个专家来示范应该如何解决问题,而机器则试着去模仿专家

行为克隆

这个方法可以看做是一个监督学习,在这个方法中,actor需要学习在某些特定的state下尽可能像专家一样行动

然而,专家只能进行有限的采样,因此需要引入Dataset Aggregation(让专家处于机器所处的state中)

Dataset Aggregation:

  1. 通过行为克隆得到一个 actor π1\pi_1
  2. 使用 π1\pi_1 和环境进行互动
  3. 让专家对观察对象作标签 π1\pi_1
  4. 使用新的数据来训练 π2\pi_2

缺点:
agent可能会复制专家所有的动作,包括一些无关的动作。如果机器只有有限的学习能力,可能会导致它复制到错误的行为。
有些行为必须被复制,但有些可以被忽略,但监督学习对所有的误差都平等处理。
在监督学习中,我们希望训练数据和测试数据有相同的分布,但是在行为克隆中,训练数据来自于专家的分布,而测试数据来自于actor,因为专家的 π\pi 和actor的是不一样的,生成的state也是不一样的,分布可能会不相同,因此引入 IRL

Inverse Reinforcement Learning (IRL)

在这里插入图片描述

在前面介绍过的RL中:环境和reward是用来生成一个actor的,但是在IRL中,没有reward function,而是用一个专家来和环境做互动并学到一个reward function,然后这个reward function才会被用来训练actor。

生成的reward可能会很简单,但也可能会导致复杂的policy
在这里插入图片描述

  1. 专家和actor都会生成对应的 trajectory.
  2. 生成的reward function需要满足专家的累积reward总是比actor的大
  3. 使用reward function来训练一个新的actor替换原来旧的actor
  4. 重复上述步骤.

这里的模型和GAN十分相似,actor就是generator,reward function就是discriminator。

(假设:专家永远是最棒的)

在这里插入图片描述

2019-02-27 21:07:29 cindy_1102 阅读数 1059

李宏毅深度强化学习- Sparse Reward

李宏毅深度强化学习课程 https://www.bilibili.com/video/av24724071

李宏毅深度强化学习笔记(一)Outline
李宏毅深度强化学习笔记(二)Proximal Policy Optimization (PPO)
李宏毅深度强化学习笔记(三)Q-Learning
李宏毅深度强化学习笔记(四)Actor-Critic
李宏毅深度强化学习笔记(六)Imitation Learning
李宏毅深度强化学习课件

Reward Shaping

当reward的分布非常分散时,对于机器而言学习如何行动会十分困难。
比如说要让一个机器人倒水进水杯里,如果不对机器人做任何指导,可能它做很多次尝试,reward都一直是零。(不知道杯子在哪,不知道拿着手上的水壶干嘛,不知道水壶靠近杯子之后应该怎么做)
因此,在训练或指导一个actor去做你想要它做的事情时,需要进行reward shaping

好奇法:
在这里插入图片描述
在原来的模型当中,actor与环境做互动,根据环境给的state,采取一定的action,并得到reward。而新的模型引入了一个新的函数,ICM(图中的橙色部分)

ICM函数st,at,st+1s_t, a_t, s_{t+1} 作为输入,得到一种新的reward rir^i,actor的目标现在变为最大化两个部分的reward,即 rrrir^i。可以理解为,新的模型中,actor被鼓励基于好奇去采取不一样的行动,这样的好奇带来的行动可以给actor带来额外的收益。

ICM函数的全称为 Intrinsic curiosity module,是用来为actor生成好奇感的函数,它的网络结构如下:
在这里插入图片描述
在这个模型中,两个网络 network1 和 network2 是单独进行训练的。

Network 1:将提取的ata_tsts_t 的特征作为输入,输出 st+1s_{t+1} 的提取特征的估计。然后真实的 st+1s_{t+1} 的提取特征用来与估计值比较,得到两者之间的差别。两者差别越大则reward rir^i 越大,也就是说,模型鼓励actor去冒险。

Network2::用来提取与action相关的游泳的特征,输入 sts_tst+1s_{t+1}ϕ\phi 值,输出估计的action at^\hat{a_t},如果估计的action和真实的action ata_t 接近,则 ϕ\phi 可以用来提取有用的特征。

注意:当没有network 2的时候,由network 1给出来的较大的reward意味着 st+1s_{t+1} 很难预测,模型会鼓励actor去冒这个险,但有的时候很难预测的这个state可能是一点都不重要的,因此需要引入network 2来进行重要性计算。比如说,在一个游戏中,对于游戏背景并不会进行太多的state的规定,如果有的时候机器学习到站在一棵树下会导致state难以预测,那么就可能会一直站在树下,但是这一行为对于游戏而言完全没有意义,因此不予考虑。

课程式学习

意味着学习的任务从简单到困难(为机器设计一套课程计划)

比如前文提到的机器人倒水的例子,最开始可以人引导机器人手臂到杯子的附近,教它做倒水的动作,之后再慢慢改变水杯,水壶等变量,让机器从简单学到复杂。

反向课程生成:
在这里插入图片描述
给定一个目标state sgs_g,在 sgs_g 的附件取一些靠近 sgs_g 的样本 s1s_1,从 s1s_1 开始,每个trajectory 都会有一个reward R(s1s_1),删除那些reward太大(意味着已经学会了,课程太简单)的 s1s_1,以及那些太小的 s1s_1(意味着当前对于机器来说这个课程难度太大),然后继续以 s1s_1 为中心采样,重复上述过程。

级联强化学习

如果低一层的agent没法达到目标,那么高一层的agent会受到惩罚(高层agent将自己的愿景传达给底层agent)
如果一个agent到了一个错误的目标,那就假设最初的目标本来就是一个错误的目标(保证已经实现的成果不被浪费)

2019-02-27 20:13:15 cindy_1102 阅读数 1909

李宏毅深度强化学习课程 https://www.bilibili.com/video/av24724071

李宏毅深度强化学习笔记(一)Outline
李宏毅深度强化学习笔记(二)Proximal Policy Optimization (PPO)
李宏毅深度强化学习笔记(三)Q-Learning
李宏毅深度强化学习笔记(五)Sparse Reward
李宏毅深度强化学习笔记(六)Imitation Learning
李宏毅深度强化学习课件

Asynchronous Advantage Actor-Critic (A3C)

回顾 – Policy Gradient

先对policy gradient进行回顾,只需要记得几个要点:

  1. 给定某个state采取某个action的概率
  2. 考虑到行动输出的概率和为一,为了保证reward越大的有更大的概率被sample到,需要加上baseline b
  3. 考虑到当先action对过去的reward没有影响,从当前时间点开始进行reward的累加
  4. 考虑到时间越久,当前action对后期reward的影响越小,添加折扣系数γ\gamma

由于无法sample到如此多的G,因此我们引入了Q-learning
在这里插入图片描述

回顾 – Q-Learning

Q-learning部分主要记住以下几个点:
状态价值函数Vπ(s)V^\pi(s)(state value function,表示当使用某个actor时,观察到state之后预计会得到的累积reward)

状态行动价值函数Qπ(s,a)Q^\pi(s, a)(state-action value function,当使用某个actor与环境互动时,在某个state采取某个action预计会得到的累积reward)
在这里插入图片描述

Actor-Critic

在policy gradient和Q-learning的基础上,我们引入actor-critic。
将两者结合,即用Q-learning当中的V和Q来替换policy gradient公式里面的累积reward和baseline,分别表示为Qπθ(stn,atn)Vπθ(stn)Q^{\pi_\theta}(s_t^n, a_t^n)-V^{\pi_\theta}(s_t^n)Vπθ(stn)V^{\pi_\theta}(s_t^n)

但是,在这个时候我们需要估计两个network,Q和V,这会导致整个模型的结果更加不稳定,因此引入advantage actor-critic
在这里插入图片描述

Advantage Actor-Critic
相比于前面所介绍的计算G的方法,即用Q减去V,这里引入对G的另外一个估计,将Q表示为下一个状态的V加上当前状态下获得的reward变化值r,这样做的好处是降低了模型整体方差(类似于MC到TD)

实验表明,这个方法是对Q值的最好估计。
在这里插入图片描述
算法:
先用一个actor π\pi 与环境做互动,利用TD或MC的方法学习V值,根据学到的V值对actor进行更新ππ\pi \rightarrow \pi',替换原来的π\pi 之后继续与环境互动,重复上述步骤。
在这里插入图片描述
注意:
actor π(s)\pi(s)'s 和 critic Vπ(s)V^\pi(s) 网络的前几层的参数是可以共享的,因为他们具有相同的输入s,在对s的处理上可以共享该部分参数。

使用output entropy 作为 π(s)\pi(s) 的正则项的时候,最好用较大的entropy(与之前的课笔记中所述的exploration方法类似,避免总sample到reward较大的几个action)

Asynchronous Advantage Actor-Critic (A3C)

效率来源: multi-workers

方法步骤:

  1. 每个worker都会copy全局参数
  2. 每个worker都与环境进行互动,并得到sample data
  3. 计算梯度
  4. 更新全局参数

Pathwise Derivative Policy Gradient

另外一种使用 Critic 的方式:
对于最原始的actor-critic,critic只会告诉actor,某个行动是好的还是坏的。而这里引入的Pathwise Derivative Policy Gradient不仅仅会告诉actor某一个action的好坏,还会告诉actor应该采取哪一个action(使用以下训练出来的actor告知)

即训练一个actor π\pi,如果给这个actor输入state,会返回一个使得Q值最大的action a
在这里插入图片描述
然后将这个actor 返回的action和state一起输入到一个固定的Q中,计算出来的Q值一定会增大,然后使用梯度上升更新actor,重复上述步骤。
在这里插入图片描述
以上网络实际上是两个网络的叠加,类似于conditional GAN,其中actor是generator,Q是discriminator
在这里插入图片描述
算法:
在这里插入图片描述

  1. 当前采取的action由训练的actor决定
  2. Q是用state s以及 π^\hat{\pi} 采取的action来计算的
  3. 不仅需要更新Q,也需要更新 π\pi.

由于该方法与GAN类似,可以根据已有的研究进行两个领域的研究方向迁移,为之后的研究提供一定的思路。
在这里插入图片描述

没有更多推荐了,返回首页