DeepLearning---Meta Learning Intruduction

Meta-Learning

Finn, Chelsea, P. Abbeel and Sergey Levine. “Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks.” International Conference on Machine Learning (2017).

Abstract

一种元学习算法,可以通过少量的训练样本解决不同的学习任务。对于新的学习任务,只需要少量数据的训练就可以取得不错的泛化效果。

Introduction

在元学习中,训练好的模型的目标是从少量的新数据中快速学习到一个新的任务,通过元学习器,使其能够在大量不同的任务上进行学习。

核心思想是训练模型的初始参数,使模型在新任务中通过少量的数据计算一个或多个梯度更新后,就可以在数据集上取得最大性能。

从特征学习的角度看,模型是在构建一个广泛应用于多种任务的内部表示。当特征表示适用于多种任务时,只需要微调最后的参数就可以得到好的结果。

端到端思想中,机器学习需要 “特征表示 -> 模型拟合” 的这一过程,其中特征表示通过特征工程由人类完成。

深度模型代替了人进行表示学习,此处意为模型已经学习到了一个具有广泛适用性的表示网络,因此微调学习拟合部分的即可。

从动力系统的角度看,这种学习方法可以最大化损失函数对参数的敏感性,当敏感性很高时,小的参数变化就可以引起损失函数较大的改进。

Model-Agnostic Meta-Learning

Problem Set-Up

元学习阶段模型在一个任务集合上训练,实际上将整个任务集合看作训练集。

考虑一个模型 f,将观测值 x 映射到输出 a,在元学习阶段,模型经过训练后可以适应很大甚至无限多的不同的任务,由于我们希望将这种框架应用到不同的任务类型,接下来介绍一种一般概念。

每个任务 \(T = \{L(x_1, a_1, . . . , x_H , a_H ), q(x_1), q(x_{t+1}|x_t, a_t), H\}\) ,由一个损失函数 L 、一个关于初始观测值 \(q(x_1)\) 的分布、一个转移分布 \(q(x_{t+1}|x_t,a_t)\),一个 episode length \(H\) ,对于监督学习来说 \(H=1\)。模型在每个时刻 \(t\) 选择一个输出 \(a_t\) 来生成一个长度为 \(H\) 的样本集。损失函数 \(L(x_1,a_1,…,x_H,a_H)\rightarrow R\) ,提供特定于某个任务的反馈。

考虑一个我们希望模型适应的 tasks 上的分布 \(p(T)\) ,在 k-shot learning 中,模型被训练用于学习一个新任务 \(T_i\) ,新任务取自 \(p(T)\) ,训练过程中只有 \(K\) 个从 \(q_i\) 中得到的样本和由 \(T_i\) 生成的反馈 \(L_{T_i}\)

元学习期间,从 \(p(T)\) 采样得到任务 \(T_i\) ,模型使用该任务的 K 个样本进行训练并通过和 \(T_i\) 想对应的损失函数 \(L_{T_i}\) 进行前馈,然后在 \(T_i\) 的新样本上进行测试。通过观察独立于参数变化的 \(q_i\) 中采样出的新数据的测试误差来改进模型。

实际上,抽样得到的任务 \(T_i\) 的测试误差充当了元学习阶段的训练误差。

在元训练的最后,从 \(p(T)\) 抽样得到新的任务,然后通过模型学习 K 个样本后的表现来衡量元学习的效果。一般来说,用于元测试的任务是留出的,不用于元训练。

MAML

某些内部表示比其他的内部表示更容易转移,例如,一个神经网络可能学习到广泛适用于 \(p(T)\) 中的所有任务的内部表示,而不是只针对于某一个特定的任务。那么如何让模型学习这种广泛的表示呢?

模型通过基于梯度的学习规则在新的任务上进行微调,我们通过基于梯度的学习规则来学习一个模型,使其在新任务上取得快速进展而不会过拟合。实际上我们在寻找这样一个模型,其参数对于任务的改变很敏感,参数的一点小的改变就会导致损失函数在任一任务上都有较大的上升。

一个使用 \(f_\theta\) 表示的模型,其参数为 \(\theta\) ,当适应一个新的任务 \(T_i\) 时,模型的参数 \(\theta\) 变为 \(\theta_i\) ,这个更新的 \(\theta_i\) 是通过在新任务 \(T_i\) 上进行一次或多次梯度下降更新得到的。

\[\theta_i ' = \theta - \alpha \partial_{\theta} L_{T_i}(f_\theta) \]

\(\alpha\) 更新步长作为超参数固定或者在元学习中确定。

通过最优化 \(f_{\theta_i’}\) 在从 \(p(T)\) 中采样出来的新任务上相对于 \(\theta\) 的表现来训练模型。

\[\mathop{min}\limits_{\theta} \sum_{T_i\sim p(T)} L_{T_i}(f_{\theta_i'})=\sum_{T_i\sim p(T)}L_{T_i}(f_{\theta - \alpha \partial_\theta L_{T_i}(f_\theta)}) \]

需要注意的是,元优化是对模型参数 \(\theta\) 的优化,而目标函数是使用更新后的 \(\theta'\) 计算得到。

实际上,我们想要优化这样一个模型,当模型在一个新任务上进行一次或很少次梯度步之后就可以在这个新任务上得到最好的表现。

跨 task 的 SGD 梯度更新如下:

\[\theta \leftarrow \theta - \beta \partial_\theta \sum_{T_i \sim p(T)} L_{T_i}(f_{\theta_i'}) \]

\(\beta\) 是元学习的步长。

Species

分类、强化学习请看原文

Supervised Regerssion

对于有监督的回归任务,可以将 \(T = \{L(x_1, a_1, . . . , x_H , a_H ), q(x_1), q(x_{t+1}|x_t, a_t), H\}\) 中的 \(H\) 定义为 \(H=1\) ,此时 \(T=\{L(x,a),q(x_1),q(x_{t+1}|x_t,a_t)\}\) ,每次模型接受一个输入,生成一个输出。任务 \(T_i\)\(q(_i)\) 生成 K 个 i.i.d 的观测 x。

如果使用 MSE 损失函数

\[L_{T_i}(f_\Phi) = \sum_{x^{(j)},y^{(j)} \sim T_i} || f_\Phi(X^{(j)}) - Y^{(j)} || ^2_2 \]

其中 \(X^{(j)},Y^{(j)}\) 是从任务 \(T_i\) 抽样得到输入输出对,在 K-shot 回归任务中, 每个任务提供 K 个输入输出对。

Evaluation & Experiment

posted @ 2024-06-18 16:32  RubySIU  阅读(6)  评论(0编辑  收藏  举报