元学习MAML算法详解

Meta learning

Meta learning 基本定义

元学习:又称“学习如何学习”,就像我们人类学习新知识往往从以往得经验出发而很少从头开始一样,元学习以一种系统得、数据驱动得方式从先前得经验中学习,是一个可用于描述所以基于其他先前任务经验来学习的方法的概念。学习学习的方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

MAML and Model Pre-training

区别:
MAML:MAML的loss是训练后的结果在评估模型上计算得到
Pre-training:loss在预训练上的模型上计算的

在这里插入图片描述

为了进一步区分两者,MAML在意训练后KaTeX parse error: Undefined control sequence: \thea at position 6: \hat{\̲t̲h̲e̲a̲}^{n}表现得好,如图处,对task1和task2都下降很快
MAML:

  • MAML注重找到一个任务最优点,对于所有的任务都能较快收敛,关注于潜力都不关注于此时任务上的收敛情况

  • 在MAML中找到的 ϕ \phi ϕ在task1上不是全局最优解,但是他在两个任务上都下降很快
    Pre-training:

  • 预训练在训练任务上找最优,收敛

  • 在Pre-training在task1上找到全局最优作为初始值可能就在task2上陷入局部最优

在这里插入图片描述

在图中Model Pre-training在所有task上都最好
在这里插入图片描述
两者就像刚毕业学生一样,Model Pre-training就是直接毕业工作拿工资,对于当前是很好,MAML相当于去读博,有了高学历对于以后发展会很好。

在这里插入图片描述

Example

在这里插入图片描述
可以看到

  • Model Pre-training,学习到的网络初始参数预测出来的是绿色曲线,找到不同的sin函数上都好的,而不同sin函数叠加起来波峰与波谷抵消,为了使每个任务上都好最后得到一条近乎水平的线,所以用transfering learning在新任务上用这几个点迭代几次依然不好
  • 而MAML学习到了初始参数预测有一些波动,在经过几个训练点上几次迭代很快就能拟合到橙色曲线。
    在这里插入图片描述
    https://towardsdatascience.com/paper-repro-deep-metalearning-using-maml-and-reptile-fd1df1cc81b0

Two way one shot
在这里插入图片描述

理论证明

在这里插入图片描述
算法分析

  • 给定task分布,由于MAML执行两次梯度更新,所以可以设置两个学习率
  • 第一步随机初始化参数
  • 2,相当于epocjh
  • 3,采batch task
  • 4-7在采的task上计算梯度
  • 8在第一次所有采样任务上再算一次梯度,然后将梯度方向作用于 θ \theta θ

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Reptile

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

元学习应用

在这里插入图片描述

迁移学习其实也可以算元学习的一种,但是更多关注于两个相似模型上的关联性,其原理更多偏向于预训练,而不是元学习的典型算法MAML,迁移学习可以称为单独的一种学习方式

在这里插入图片描述

在这里插入图片描述

变形

在这里插入图片描述

在这里插入图片描述

问题
在这里插入图片描述

解决
在这里插入图片描述

在这里插入图片描述

### MAML算法概述 MAML(Model-Agnostic Meta-Learning)是一种元学习方法,旨在使模型能够快速适应新的任务。该算法的核心思想是在大量不同但相关联的任务上进行训练,从而获得一组初始参数,这组参数能够在遇到新任务时仅需少量梯度更新就能达到较好的性能[^1]。 对于任何给定的新任务,经过微调后的模型可以迅速调整其权重以优化特定于该任务的目标函数。这种能力特别适合few-shot learning场景,在这些情况下只有有限的数据可用作训练集的一部分[^2]。 然而,值得注意的是尽管MAML表现出色,但它也有局限性:相比于其他类型的元学习技术如基于距离的方法,它确实需要更多的计算资源来处理较大的神经网络架构,并且当面对非常大规模的问题时可能会遇到困难[^3]。 ```python import torch from torch import nn, optim class SimpleNN(nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.fc = nn.Linear(784, 10) def forward(self, x): return self.fc(x.view(-1, 784)) def maml_train(model, tasks, inner_lr=0.01, meta_lr=0.001, K=5): optimizer = optim.Adam(model.parameters(), lr=meta_lr) for task in tasks: # Prepare data and clone model parameters X_task, y_task = get_data_for_task(task) fast_weights = {name: param.clone() for name, param in model.named_parameters()} # Inner loop (adaptation on the current task) for _ in range(K): logits = model(X_task) loss = F.cross_entropy(logits, y_task) grads = torch.autograd.grad(loss, model.parameters()) for i, (name, param) in enumerate(model.named_parameters()): fast_weights[name] = param - inner_lr * grads[i] # Outer loop update using adapted weights from all tasks with higher.innerloop_ctx(model, copy_initial_weights=False) as (fmodel, diffopt): fmodel.load_state_dict(fast_weights) logits_meta_test = fmodel(X_task) loss_meta_test = F.cross_entropy(logits_meta_test, y_task) optimizer.zero_grad() loss_meta_test.backward() optimizer.step() # Note: This is a simplified version of MAML training process. ``` 此代码片段展示了如何使用PyTorch实现简单的MAML框架来进行元训练。这里定义了一个基本的全连接层作为演示用途的基础分类器,并实现了内外循环机制用于模拟多个任务的学习过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pinn山里娃

原创不易请多多支持

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

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

打赏作者

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

抵扣说明:

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

余额充值