Guided Meta-Policy Search读书笔记

文章目录

Introduction

MAML的优化目标是
min ⁡ θ ∑ τ L ( θ − α ∇ θ L ( θ , D τ t r ) , D τ v a l ) \min_\theta \sum_{\tau} L(\theta -\alpha \nabla_\theta L(\theta, D_\tau^{tr}),D_\tau^{val}) minθτL(θαθL(θ,Dτtr),Dτval)
MAML应用到强化学习上,那么损失函数应当为负期望累计奖励
L R L ( θ , D τ ) = − 1 ∣ D τ ∣ ∑ s t , a t ∈ D τ r ( s t , a t ) L_{RL}(\theta, D_\tau)=-\frac{1}{\vert D_\tau\vert}\sum_{s_t,a_t\in D_\tau} r(s_t, a_t) LRL(θ,Dτ)=Dτ1st,atDτr(st,at)
内层优化(优化每个task的 θ i \theta_i θi)可以使用Policy Gradient来估计梯度,而外层优化(优化全局的 θ \theta θ)如果仍采用Policy Gradient,那么就需要对内层优化后的policy进行采样,再估计梯度,这样的话会导致优化非常不稳定。本文提出,外层优化可以改为另外一种更稳定的方法进行,从而提高meta leanring的效果。

Method

本文将meta learning分为两个阶段:第一阶段单独解决每个task,第二阶段用这些policy进行meta-learning。

假设第一阶段已经得到每个task上的接近optimal的policy { π i ∗ \pi_i^* πi}。Meta-learning的目标是找到一组参数 θ \theta θ,使得policy以这组参数初始化能够很快adapt到新的task上。Adapt的过程仍采用policy gradient的方法,但是meta-objective改为supervised imitation(也叫behavior cloning)
L B C ( θ i , D i ) = − ∑ ( s t , a t ) ∈ D i l o g π θ i ( a t ∣ s t ) L_{BC}(\theta_i, D_i)=-\sum_{(s_t,a_t)\in D_i} log \pi_{\theta_i}(a_t|s_t) LBC(θi,Di)=(st,at)Dilogπθi(atst)
其中 D i D_i Di是被模仿的行为,在这里采用{ π i ∗ \pi_i^* πi}的行为。因此,meta-objective成为下面的表达式
min ⁡ θ ∑ τ i ∑ D i v a l ∼ D i ∗ E D i t r ∼ π θ [ L B C ( θ − α ∇ L R L ( θ , D i t r ) , D i v a l ) ] \min_\theta \sum_{\tau_i} \sum_{D_i^{val} \sim D_i^*}E_{D_i^{tr}\sim \pi_\theta}[L_{BC}(\theta - \alpha \nabla L_{RL}(\theta, D_i^{tr}), D_i^{val})] minθτiDivalDiEDitrπθ[LBC(θαLRL(θ,Ditr),Dival)]
简单来说,这个meta-objective就是每次adapt后的policy能够很好的模仿这个task上的专家policy π i ∗ \pi_i^* πi, 而以前的meta-objective是adapt后的policy的reward尽可能大。
注意到当专家policy是available的时候,behavior cloning还可以采用类似DAgger的方式进行训练,即 D ∗ D^* D根据训练过程中得到的state不断更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Guided Grad-CAM方法可以通过以下步骤实现: 1. 对输入图像进行预处理,包括归一化、缩放等操作。 2. 在模型中添加Guided Backpropagation模块,该模块通过反向传播特征图的梯度,并将与正激活相关的梯度保留。 3. 计算目标类别的Grad-CAM热力图,包括卷积层特征图的梯度和分类器权重的结合。 4. 对Grad-CAM热力图进行平滑处理,减少噪声和不确定性,并提高可视化效果。 5. 将平滑后的Grad-CAM热力图与Guided Backpropagation模块生成的梯度结合,生成Guided Grad-CAM热力图。 6. 将Guided Grad-CAM热力图与原始图像进行叠加,可视化模型的注意力区域。 下面是一个简单的代码示例,说明如何使用Guided Grad-CAM方法可视化图像分割模型的注意力区域: ```python import torch from torchvision import models, transforms import cv2 import numpy as np # 加载模型 model = models.segmentation.deeplabv3_resnet50(pretrained=True).eval() # 定义预处理函数 preprocess = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) # 定义反向传播函数 class GuidedBackpropRelu(torch.autograd.Function): @staticmethod def forward(ctx, input): ctx.save_for_backward(input) return input.clamp(min=0) @staticmethod def backward(ctx, grad_output): input, = ctx.saved_tensors grad_input = grad_output.clone() grad_input[input < 0] = 0 return grad_input # 定义Guided Grad-CAM函数 def guided_grad_cam(img, target_class): # 转换为tensor格式 img_tensor = preprocess(img).unsqueeze(0) # 前向传播 features = model.backbone(img_tensor)['out'] output = model.classifier(features) # 计算梯度 target = output[0, target_class] target.backward() # 计算Grad-CAM热力图 grads = model.backbone.grads['out'] pooled_grads = torch.mean(grads, dim=[2, 3], keepdim=True) cams = (pooled_grads * features).sum(dim=1, keepdim=True) cams = torch.relu(cams) # 平滑Grad-CAM热力图 sigma = 0.1 cams = torch.nn.functional.conv2d(cams, torch.ones((1, 1, 3, 3)).to(device=cams.device) / 9, padding=1, groups=1) cams = torch.nn.functional.interpolate(cams, img_tensor.shape[-2:], mode='bilinear', align_corners=False) cams = cams.squeeze().cpu().numpy() cams = cv2.GaussianBlur(cams, (5, 5), sigmaX=sigma, sigmaY=sigma) cams = np.maximum(cams, 0) cams_max = cams.max() if cams_max != 0: cams /= cams_max # 计算Guided Grad-CAM热力图 gb = model.backbone.grads['out'] gb = gb.cpu().numpy()[0] cam_gb = np.zeros_like(cams) for i, w in enumerate(model.classifier.weight[target_class]): cam_gb += w * gb[i] cam_gb = cv2.resize(cam_gb, img_tensor.shape[-2:]) cam_gb = np.maximum(cam_gb, 0) cam_gb_max = cam_gb.max() if cam_gb_max != 0: cam_gb /= cam_gb_max cam_gb = cv2.cvtColor(cv2.applyColorMap(np.uint8(255 * cam_gb), cv2.COLORMAP_JET), cv2.COLOR_BGR2RGB) # 叠加Guided Grad-CAM热力图和原始图像 img = cv2.cvtColor(np.uint8(255 * img), cv2.COLOR_RGB2BGR) cam_gb = cv2.resize(cam_gb, img.shape[:2][::-1]) result = cv2.addWeighted(img, 0.5, cam_gb, 0.5, 0) return result # 加载图像 img = cv2.imread('test.jpg') img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 可视化Guided Grad-CAM result = guided_grad_cam(img, target_class=15) cv2.imshow('Guided Grad-CAM', result) cv2.waitKey() ``` 这个代码示例是使用PyTorch框架实现的,其中`model`是已经训练好的图像分割模型,`preprocess`函数是预处理函数,`GuidedBackpropRelu`函数是Guided Backpropagation模块,`guided_grad_cam`函数是Guided Grad-CAM函数。你需要将模型和预处理函数替换为你自己的模型和预处理函数,然后将图像和目标类别作为输入,即可可视化Guided Grad-CAM热力图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值