Optimization as a model for few-shot learning. (优化一个模型,用于少样本学习)---论文阅读笔记

正在更新中。。。。。。
参考博客:

  1. 参考博客1:https://blog.csdn.net/weixin_37589575/article/details/96995985
  2. 参考博客2

论文链接:《Optimization as a model for few-shot learning》:https://openreview.net/forum?id=rJY0-Kcll

1. 摘要

尽管深度神经网络已经在大数据领域取得了巨大的成功,但是他们通常在少样本学习任务上表现很糟糕。少样本任务需要分类器必须在仅看到每个类很少的样本后快速推广泛化。一般认为,在高容量的分类器中的基于梯度的优化算法需要 在大量样本上进行大量的迭代步骤 以取得良好的表现。本文提出了一个基于 LSTM 的 元学习者(meta-learner) 用以学习一个用于训练另一个在少样本情况下的 学习者(learner) 神经网络分类器的优化算法。我们模型的参数化允许我们的模型学习恰当的、专门用于只能进行一定量更新的参数更新方法。同时我们的模型为 学习者(learner) 网络,也就是分类器网络学习了一个通用的初始化,这个初始化可以帮助 学习者(learner) 网络在训练的时候快速收敛。

为了更好理解,我把 学习者(learner) 改为 任务学习者(task learner) , 元学习者(meta-learner) 不变。文中有的地方的 dataset 理解为 task 会更加符合 meta-learning 的哲学。

(1)新的任务(新的类);(2)训练样本很少;(3)学习一个优化过程和一个易于微调的初始化参数;
这三个特征满足 few-shot learning,meta-learning 的基本特征,而且可以看成属于 meta-learning 中的学习微调 (Learning to Fine-Tune)。

2. 介绍

深度学习在各种具有大量数据的任务上取得了巨大的成功,这些成就依赖于这些深度高容量模型需要大量的有标签数据以及大量的迭代更新的优化。但是这种优化在少样本情况下会崩塌。本文主要关注这个方面,我们没有很大的数据集,我们只有一少组有标记的数据,其中每个类别的样本只有很少的几个有标签。本文的动机不仅在于人类智能和深度学习之间的差异:人类甚至是小孩可以在看过一个给定目标的样本后做到快速的归纳泛化,而深度学习模型则需要大量的数据。并且如果模型具有这种能力将会有很多有用的用途:首先,可以缓解数据收集的麻烦;其次,有很多情况下,类别很多,但是每个类的样本很少,如果模型具有少样本学习的能力,那么可以很好地学习这种情况下的数据。

基于梯度下降的优化算法在少样本问题上失效的原因:

基于梯度下降的算法:momentum、adagrad、adadelta 以及 adam 等都不是专门设计以用于少样本少量参数更新迭代的。
对于分离的多个任务,网络参数通常会从一个随机的初始化参数开始训练,这就严重影响了在少量参数更新迭代之后的表现。
迁移学习可以通过微调一个从另一个任务中预训练出来的模型来缓解这个问题,但是如果预训练的任务与目标任务之间的差异太大,那么预训练的收益很大大降低。因此我们需要一种系统的方法来训练一个 有益的共同的初始化 可以作为一个在少样本学习条件下好的训练起点。这不仅可以提供和迁移学习一样的好处,而且可以保证这个初始化是一个用于微调的最佳起点。

元学习建议将学习问题制定为两层:

  • 任务学习者(task-learner,或者文中的learner):在每个独立的任务之中快速获取知识。
  • 元学习者(meta-learner):从大量的任务中缓慢的学习和提取信息,这些信息用于指导任务学习者学习。

本文旨在解决基于梯度优化的模型在少样本情况下问题,文章把少样本学习问题放在了元学习的框架下。

  • 文章提出了一个基于 LSTM 的元学习者,它被训练来用于优化任务学习者,任务学习者是一个分类器神经网络。
  • 元学习 LSTM 学习目标任务(meta-testing task)中的短期知识以及大量任务(meta-training tasks)中的长期知识。

使用一个直接捕获的优化算法在少样本设置下的归纳泛化能力的目标,元学习者模型被训练以在每个任务上任务学习者分类器可以快速收敛到一个好的解决方案。另外,元学习者模型还可以为任务学习者学习一个任务共同的初始化,这个初始化中具有所有任务共享的基础知识。

3. 任务描述

文中有很多地方的 dataset 我觉得理解为 task 会好很多。
文中的 D \mathscr{D}D 指的其实就是一个任务,Dmeta−train Dmeta−train,D meta−validation 和 Dmeta−test
分别是用于训练,验证和测试的任务。D其实就是每个任务中的数据,Dtrain和 Dtest 就是我们常见的 support set 和 query set。

3.1 问题设置

文中的问题还是最典型的 few-shot learning 问题的设置,就以 few-shot classification 问题为例。
在这里插入图片描述
这里为了方便读者和自己理解,对原论文的这一部分做了修改,用了最 meta-leaning 的解释,其实本质是一样的。

在 few-shot learning 中有一个术语叫做 N NN-way K KK-shot 问题,简单的说就是我们需要分类的样本属于 N NN 个类中一种,但是我们每个类训练集中的样本只有 K KK 个,即一共只有 N∗K N * KN∗K 个样本的类别是已知的(其实这就是 Support Set)。

在 Meta-learning 中之前学习的 task 我们称为 meta-training task,我们遇到的新的 task(包含新的类)称为 meta-testing task。因为每一个 task 都有自己的训练集和测试集,因此为了不引起混淆,我们把 task 内部的训练集和测试集一般称为 Support set 和 Query set。文中有一个特别经典的示意图,每一行就是一个 task,虚线之前的就是support set,虚线之后的就是 query set。图中问题是一个 5-way 1-shot 分类问题,每个任务有 5 个类,每个类只有一个样本,图中 query set 中有 2 个样本,这个数据是没有要求的,通常会设置为 15-20(5-way 1-shot 任务)以保证测试结果的有效性。注意:meta-test 任务中的类别和 meta-train 中的类别完全不同,也就是全新的类。

4. 模型

4.1 模型描述

对一个单一任务来说,我们的任务学习者的参数 θ \thetaθ 是在 support set 上面训练的。一种常规的梯度下降优化方法形式是:
在这里插入图片描述
其中,θt 是第 t 次更新迭代之后的参数,αt 是第 t 步时的学习率,∇θt−1Lt 是使用第 t-1 次时候的参数 θt−1 时候的损失函数相对于 θt−1
的梯度,这里损失函数的下标 t 其实只是代表这个损失函数是我们这第 t 次更新时候的损失函数,而损失函数的计算和求梯度都是相对于上一次迭代完之后的参数 θt−1的。
上述公式与 LSTM 中的单元状态(cell state)的更新很类似:
在这里插入图片描述
只要我们令:ft=1,ct−1=θt−1,it=αt,c˜t=−∇θt−1Lt
因此我们提出使用一个 LSTM 的元学习者来学习一个更新规则,其实这个更新规则可以看成一种新的类似于但不同于梯度下降的优化算法。
本文的问题:常用的基于梯度的优化面对少样本学习问题会崩溃。
本文的思路:学习一种新的优化方法(更新规则),来在少样本学习任务上使用少量的样本和少量的更新迭代可以产生好的效果。

LSTM 的单元状态就是任务学习者的参数:ct=θt ,候选的单元状态是:c˜t=∇θt−1Lt 。我们给出 it 和 ft的参数化形式,这样元学习者可以通过更新过程确定最佳的值。
在这里插入图片描述
在这里插入图片描述
这样学习率 it=αt 就成了一个关于 t-1 迭代次时的参数值 θt−1 ,当前的损失函数,当前损失函数相对于 θt−1 的梯度以及上一个学习率 it−1 的函数。这样元学习者就可以控制任务学习者在少样本学习任务上快速学习同时避免发散。
对于 ft ,之前的梯度下降都是一个常数 1。但是假设我们的参数先于一个糟糕的局部最优解中,我们需要收缩当前的参数并忘掉部分之前的参数,才能更快的逃离这个局部最优解。例如在这个局部最优解时,损失函数很大但是梯度却很小。

这样,我们不仅学习了一个新的优化过程,并且还学习了一个 c0 作为我们任务学习者的初始化参数。这个初始化参数可以作为一个最佳的训练起点,可以加快优化过程。

最后就是其实不仅可以看成 LSTM 还可以看成 GRU,除了遗忘门和输入门的和不恒为 1 。

4.2 参数共享和预处理

因为我们的模型需要一个元学习者 LSTM 学习更新一个深度神经网络。为了避免元学习者的参数爆炸,我们使用了一种参数共享 ---- 在任务学习者的梯度坐标上共享参数。这意味着每个坐标有自己的隐藏状态和单元状态值,但是 LSTM 的参数在坐标所有的坐标之间是一样的。这样就可以使用一个紧凑的 LSTM,并且具有一个额外的优点:所有的坐标共享一个更新规则,但是更新规则又依赖于每个坐标在优化过程中的各自的历史。参数共享的实施:将输入作为一批梯度坐标和每个维度的损失输入 (∇θt,iLt,Lt) 又由于不同坐标的梯度和损失大小可能很不一样,所以我们进行了一个标准化以便元学习者可以在训练的时候恰当的使用它们。这个预处理可以调整梯度和损失,同时也能分类它们大小和符号所包含的信息(后者主要用于梯度)。
在这里插入图片描述

4.3 训练

标准的 meta-learning 训练过程:meta-testing 的任务和 meta-training 的任务相匹配。即在多个 meta-training tasks 上进行训练,然后学到我们需要的更新规则和初始化。面对一个新的 few-shot task 时,我们在这个任务的 support set 上面使用我们的更新规则对这个初始化参数进行优化更新,在 query set 上面进行性能评估。
具体算法分析:
在这里插入图片描述
首先是输入:元学习训练集,任务学习者 M 参数为 θ \thetaθ,元学习者 R 参数为 Θ 。
然后随机初始化 Θ ,Θ 可以理解为包含我们的更新规则和初始化参数。
然后遍历 n 个元学习任务:从每个任务中采样出 support set 和 query set。从 support set 中批采样 T 次:
每次过程:使用任务学习者当前参数计算损失函数,然后用当前的元学习者指导的更新规则来更新任务学习者的参数,迭代 T 次。
在 query set 中,使用上面最后一次,也就是第 T 次更新之后的参数来计算损失函数,来更新元学习者的参数。
注意一下: Support 上只更新任务学习者的参数,不更新元学习者参数。 Query 上则相反。我们可以理解 Support 上我们用当前的更新规则去试验一下效果好不好,然后在 Query 上我们在来更新修改这个更新规则。相当于 Support 中的信息会帮助我们来更新更新规则。

4.4 梯度独立性假设

我们的公式包含一个隐藏假设: 就是任务学习者损失和梯度依赖于元学习者的参数。元学习者参数的梯度应该考虑这种依赖性,但是这会导致计算更加复杂。因此,本文对此做了一个简化假设:假设这些对梯度的贡献不重要且可以忽略,这使我们避免求 2 阶导数。
看到这里,是不是想到了 MAML 啊,其实 MAML 应该就是在这篇论文上演变过来了的,有简化也有新增的考量。具体分析参考后续对基于微调元学习方法的总结博客

5. 个人理解

理解这篇论文,死死抓住这个脉络:
本文的问题:常用的基于梯度的优化方法面对少样本学习问题会崩溃。
本文的思路:学习一种新的优化方法(更新规则),来在少样本学习任务上使用少量的样本和少量的更新迭代可以产生好的效果。同时一个额外的好处就是有一个好的初始化,可以将这个初始化作为训练起点,这样只需要少量的梯度更新就可以收敛到一个好的解决方案。

6. 其他

实验,结论,相关工作等请参考原论文。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值