做招标应该关注什么网站,wordpress公共函数在哪,网站推广系统,百度一下你就知道网页目录
1 预先基础知识
1.1 对抗生成网络#xff08;GAN#xff09;
1.1.1 基本概念
1.1.2 损失函数
1.1.2.1 固定G#xff0c;求解令损失函数最大的D
1.1.2.2 固定D#xff0c;求解令损失函数最小的G
1.2 对抗式生成模仿学习特点
2 对抗式生成模仿学习#xff08;…目录
1 预先基础知识
1.1 对抗生成网络GAN
1.1.1 基本概念
1.1.2 损失函数
1.1.2.1 固定G求解令损失函数最大的D
1.1.2.2 固定D求解令损失函数最小的G
1.2 对抗式生成模仿学习特点
2 对抗式生成模仿学习GAIL详细说明
3 参考文献 1 预先基础知识
1.1 对抗生成网络GAN
1.1.1 基本概念
在GAN生成对抗网络中包含两个模型一个生成模型一个判别模型。
生成模型负责生成看起来真实自然和原始数据相似的实例。判别模型负责判断给出的实例是真实的还是人为伪造的。
生成模型努力去欺骗判别模型判别模型努力不被欺骗这样两种模型交替优化训练都得到了提升。 对于辨别器如果得到的是生成图片辨别器应该输出0如果是真实的图片应该输出 1得到误差梯度反向传播来更新参数。对于生成器首先由生成器生成一张图片然后输入给判别器判别并的到相应的误差梯度然后反向传播这些图片梯度成为组成生成器的权重。直观上来说就是辨别器不得不告诉生成器如何调整从而使它生成的图片变得更加真实。 1.1.2 损失函数
GAN模型的目标函数 其中参考GAN的架构图字母 V是原始GAN论文中指定用来表示该交叉熵的字母x 表示任意真实数据z 表示与真实数据相同结构的任意随机数据G(z)表示在生成器中基于 z 生成的假数据而D(x)表示判别器在真实数据 x上判断出的结果D(G(z))表示判别器在假数据 G(z)上判断出的结果其中 D(x) 与D(G(z))都是样本为“真”的概率即标签为1的概率。
上式主要意思是先固定生成器G从判别器D的角度令损失最大化紧接着固定D从生成器G的角度令损失最小化即可让判别器和生成器在共享损失的情况下实现对抗。其中第一个期望是所有x都是真实数据时(log(D(x)))的期望第二个期望是所有数据都是生成数据时log(1-D(G(z)))的期望。可以看出在求解最优解的过程中存在两个过程
固定G求解令损失函数最大的D固定D求解令损失函数最小的G
判别网络是一个2分类目标是分清真实数据和伪造数据也就是希望D(x) 趋近于1D(G(z))趋近于0这也就体现了对抗的思想。G网络的loss是log(1-D(G(z)))D的loss是-(log(D(x)))log(1-D(G(z)))。
1.1.2.1 固定G求解令损失函数最大的D
判别器D的输入x有两部分一部分是真实数据设其分布为另一部分是生成器生成的数据参考架构图生成器接收的数据z服从分布P(z)A输入z经过生成器的计算生成的数据分布设为。
这两部分这两部分都是判别器D的输入不同的是G的输出来自分布而真实数据来自分布经过一系列推导后的结果 可以看出固定G将最优的D带入后此时VGD*实际上是在度量和之间的JS散度同KL散度一样他们之间的分布差异越大JS散度值也越大。换句话说保持G不变最大化V(G,D)就等价于计算JS散度。对于判别器来说尽可能找出生成器生成的数据与真实数据分布之间的差异这个差异就是JS散度。
1.1.2.2 固定D求解令损失函数最小的G
对于生成器来说让生成器生成的数据分布接近真实数据分布。现在第一步已经求出了最优解的D*代入损失函数 在最小化JS散度JS散度越小分部之间的差异越小正好印证了第二个原则。
1.2 对抗式生成模仿学习特点
逆强化学习Inverse Reinforcement Learning, IRL作为一种典型的模仿学习方法顾名思义逆强化学习的学习过程与正常的强化学习利用奖励函数学习策略相反不利用现有的奖励函数而是试图学出一个奖励函数并以之指导基于奖励函数的强化学习过程。IRL可以归结为解决从观察到的最优行为中提取奖励函数 Reward Function的问题这些最优行为也可以表示为专家策略 。基于IRL的方法交替地在两个过程中交替一个阶段是使用示范数据来推断一个隐藏的奖励Reward或代价 Cost函数另一个阶段是使用强化学习基于推断的奖励函数来学习一个模仿策略。IRL的基本准则是IRL选择奖励函数来优化策略并且使得任何不同于的动作决策尽可能产生更大损失。
对抗式生成模仿学习Generative Adversarial Imitation LearningGAIL是逆强化学习的一种重要实现方法之一。逆强化学习旨在从专家示范的行为中推断环境的奖励函数或者价值函数而GAIL是逆强化学习的一种实现方式它利用了生成对抗网络GAN的概念来进行模仿学习。
GAIL的关键点在于
1生成对抗网络 GAIL使用生成对抗网络的框架其中包括生成器和判别器。
2生成器与判别器 生成器尝试生成与专家示范行为相似的状态-动作对而判别器则尝试区分专家行为和生成器生成的行为。
3对抗优化 GAIL使用对抗训练的思想通过生成器和判别器的对抗优化来使得生成器的输出逼近专家的行为。
GAIL的工作方式使得它在逆强化学习中发挥着重要作用因为它提供了一种有效的方式来从专家示范中学习环境的奖励结构以指导智能体的学习行为。通过对抗式生成模仿学习智能体可以学习并模仿专家的行为而无需显式地使用环境的奖励信号。
因此GAIL作为逆强化学习的一种方法为从专家示范中学习环境的奖励函数或者价值函数提供了一种有效的框架和方法。
2 对抗式生成模仿学习GAIL详细说明 生成式对抗模仿学习的整体优化流程如图所示。通过 GAIL 方法策略生成器通过生成类似专家示教样本的探索样本泛化示教样本的概率分布 逼近专家示范行为数据进而实现模仿专家技能的目的。该过程直接优化采样样本的概率分布计算代价较小且算法通用性更强实际模仿效果也更好。
伪代码
# 初始化策略 π、判别器 D、专家示范数据 D_expert、策略缓冲区 D_policy函数 GAIL_Training():初始化策略 π 的参数初始化判别器 D 的参数循环 直到收敛 或 达到最大迭代次数:# 使用当前策略 π 生成轨迹并存储在策略缓冲区 D_policy 中生成 trajectories 使用 π 并存储在 D_policy 中# 判别器训练循环 discriminator_updates 次数:# 从策略缓冲区 D_policy 中采样数据采样 (s_policy, a_policy) 从 D_policy 中# 从专家示范数据 D_expert 中采样数据采样 (s_expert, a_expert) 从 D_expert 中# 更新判别器 D计算 L_D -[log(D(s_expert, a_expert)) log(1 - D(s_policy, a_policy))]使用梯度下降法更新判别器参数以最小化 L_D# 策略更新采样 (s, a, ...) 从 D_policy 中计算伪奖励 r -log(1 - D(s, a))# 使用伪奖励 r 更新策略 π计算 L_π 使用 PPO 或 其他强化学习方法使用梯度下降法更新策略 π 的参数以最大化 L_π
能够表征GAIL流程的主程序如下
import torch
from torch import nn
import torch.nn.functional as F
from torch.optim import Adamfrom .ppo import PPO
from gail_airl_ppo.network import GAILDiscrimclass GAIL(PPO):def __init__(self, buffer_exp, state_shape, action_shape, device, seed,gamma0.995, rollout_length50000, mix_buffer1,batch_size64, lr_actor3e-4, lr_critic3e-4, lr_disc3e-4,units_actor(64, 64), units_critic(64, 64),units_disc(100, 100), epoch_ppo50, epoch_disc10,clip_eps0.2, lambd0.97, coef_ent0.0, max_grad_norm10.0):super().__init__(state_shape, action_shape, device, seed, gamma, rollout_length,mix_buffer, lr_actor, lr_critic, units_actor, units_critic,epoch_ppo, clip_eps, lambd, coef_ent, max_grad_norm)# Experts buffer.self.buffer_exp buffer_exp# Discriminator.self.disc GAILDiscrim(state_shapestate_shape,action_shapeaction_shape,hidden_unitsunits_disc,hidden_activationnn.Tanh()).to(device)self.learning_steps_disc 0self.optim_disc Adam(self.disc.parameters(), lrlr_disc)self.batch_size batch_sizeself.epoch_disc epoch_discdef update(self, writer):self.learning_steps 1for _ in range(self.epoch_disc):self.learning_steps_disc 1# Samples from current policys trajectories.states, actions self.buffer.sample(self.batch_size)[:2]# Samples from experts demonstrations.states_exp, actions_exp \self.buffer_exp.sample(self.batch_size)[:2]# Update discriminator.self.update_disc(states, actions, states_exp, actions_exp, writer)# We dont use reward signals here,states, actions, _, dones, log_pis, next_states self.buffer.get()# Calculate rewards.rewards self.disc.calculate_reward(states, actions)# Update PPO using estimated rewards.self.update_ppo(states, actions, rewards, dones, log_pis, next_states, writer)def update_disc(self, states, actions, states_exp, actions_exp, writer):# Output of discriminator is (-inf, inf), not [0, 1].logits_pi self.disc(states, actions)logits_exp self.disc(states_exp, actions_exp)# Discriminator is to maximize E_{\pi} [log(1 - D)] E_{exp} [log(D)].loss_pi -F.logsigmoid(-logits_pi).mean()loss_exp -F.logsigmoid(logits_exp).mean()loss_disc loss_pi loss_expself.optim_disc.zero_grad()loss_disc.backward()self.optim_disc.step()if self.learning_steps_disc % self.epoch_disc 0:writer.add_scalar(loss/disc, loss_disc.item(), self.learning_steps)# Discriminators accuracies.with torch.no_grad():acc_pi (logits_pi 0).float().mean().item()acc_exp (logits_exp 0).float().mean().item()writer.add_scalar(stats/acc_pi, acc_pi, self.learning_steps)writer.add_scalar(stats/acc_exp, acc_exp, self.learning_steps)
3 参考文献
https://zhuanlan.zhihu.com/p/628915533
【强化学习】GAIL_gail算法-CSDN博客
代码https://github.com/toshikwa/gail-airl-ppo.pytorch.git