乐趣区

关于深度学习:深度学习应用篇元学习16基于模型的元学习Learning-to-Learn优化策略MetaLearner-LSTM

深度学习利用篇 - 元学习[16]:基于模型的元学习 -Learning to Learn 优化策略、Meta-Learner LSTM

1.Learning to Learn

Learning to Learn by Gradient Descent by Gradient Descent
提出了一种全新的优化策略,
用 LSTM 代替传统优化办法学习一个针对特定工作的优化器。

在机器学习中,通常把优化指标 $f(\theta)$ 示意成

$$
\theta^{*}=\operatorname{argmin}_{\theta \in \Theta} f(\theta)
$$

其中,参数 $\theta$ 的优化形式为

$$
\theta_{t+1}=\theta_{t}-\alpha \nabla f\left(\theta_{t}\right)
$$

上式是一种针对特定问题类别的、人为设定的更新规定,
常见于深度学习中,次要解决高维、非凸优化问题。

依据 No Free Lunch Theorems for Optimization 实践,
[1] 提出了一种 基于学习的更新策略 代替 人为设定的更新策略
即,用一个可学习的梯度更新规定,代替人为设计的梯度更新规定。
其中,
optimizer 为 $g$ 由 $\phi$ 参数化;
optimizee 为 $f$ 由 $\theta$ 参数化。

此时,optimizee 的参数更新形式为

$$
\theta_{t+1}=\theta_{t}+g_{t}\left(\nabla f\left(\theta_{t}\right), \phi\right)
$$

optimizer $g$ 的更新则由 $f$, $\nabla f$ 及 $\phi$ 决定。

1.2 学习机制

图 1 是 Learning to Learn 中 optimizer 和 optimizee 的工作原理。

图 1 Learning to Learn 中 optimizer 和 optimizee 工作原理。
optimizer 为 optimizee 提供更新策略,
optimizee 将损失信息反馈给 optimizer,帮助 optimizer 更新。

给定指标函数 $f$ 的散布,那么通过 $T$ 次优化的 optimizer 的损失定义为整个优化过程损失的加权和:

$$
\mathcal{L}(\phi)=\mathbb{E}_{f}\left[\sum_{t=1}^{T} \omega_{t} f\left(\theta_{t}\right)\right]
$$

其中,

$$
\begin{aligned}
& \theta_{t+1}=\theta_{t}+g_{t} \\
& {\left[g_{t}, h_{t+1}\right]=\operatorname{LSTM}\left(\nabla_{t}, h_{t}, \phi\right)}
\end{aligned}
$$

$\omega_{t} \in \mathbb{R}_{\geq 0}$ 是各个优化时刻的任意权重,
$\nabla_{t}=\nabla_{\theta} f\left(\theta_{t}\right)$。

图 2 是 Learning to Learn 计算图。

图 1 Learning to Learn 计算图。
梯度只沿实线传递,不沿虚线传递(因为 optimizee 的梯度不依赖于 optimizer 的参数,即
$\partial \nabla_{t} / \partial \phi = 0$),这样能够防止计算 $f$ 的二阶导。

[1] 中 optimizer 选用了 LSTM。
从 LSTM 优化器的设计来看,
简直没有退出任何先验的人为教训。
优化器自身的参数 $\phi$ 即 LSTM 的参数,
这个优化器的参数代表了更新策略。

1.2 Coordinatewise LSTM optimizer

LSTM 须要优化的参数绝对较多。
因而,[1] 设计了一个优化器 $m$,它能够对指标函数的每个参数重量进行操作。
具体而言,每次只对 optimizee 的一个参数重量 $\theta_{i}$ 进行优化,
这样只须要维持一个很小的 optimizer 就能够实现工作。

对于每个参数重量 $\theta_{i}$,
optimizer 的参数 $\phi$ 共享,隐层状态 $h_{i}$ 不共享。
因为每个维度上的 optimizer 输出的 $h_{i}$ 和 $\nabla f\left(\theta_{i}\right)$ 是不同的,
所以即便它们的 $\phi$ 雷同,它们的输入也不一样。

这样设计的 LSTM 变相实现了优化与维度无关,
这与 RMSprop 和 ADAM 的优化形式相似(为每个维度的参数实施同样的梯度更新规定)。

图 3 是 LSTM 优化器的一步更新过程。

图 3 LSTM 优化器的一步更新过程。所有 LSTM 的 $\phi$ 共享,$h_{i}$ 不共享。

1.3 预处理和后处理

因为 optimizer 的输出是梯度,梯度的幅值变动绝对较大,
而神经网络个别只对小范畴的输入输出鲁棒,因而在实践中须要对 LSTM 的输入输出进行解决。
[1] 采纳如下的形式:

$$
\nabla^{k} \rightarrow \begin{cases}\left(\frac{\log (|\nabla|)}{p}, \operatorname{sgn}(\nabla)\right) & \text {if}|\nabla| \geq e^{-p} \\ \left(-1, e^{p} \nabla\right) & \text {otherwise}\end{cases}
$$

其中,$p>0$ 为任意一个参数([1] 取 $p=10$),用来裁剪梯度。
如果第一个参数的取值大于 $-1$,
那么它就代表梯度的 $\log$,第二个参数则是它的符号。
如果第一个参数的取值等于 $-1$,
那么它将作为一个标记指引神经网络寻找第二个参数,此时第二个参数就是对梯度的缩放。

  • 参考文献

[1] Learning to Learn by Gradient Descent by Gradient Descent

2. Meta-Learner LSTM

元学习在解决 few-shot 问题时的学习机制如下:

  • 基学习器在元学习器的疏导下解决特定工作,发现工作个性;
  • 元学习器总结所有工作共性。

基于小样本的梯度降落存在以下问题:

  • 小样本意味着梯度降落的次数无限,在非凸的状况下,失去的模型偶然性能很差;
  • 对于每个独自的数据集,神经网络每次都是随机初始化,若干次迭代后也很难收敛到最佳性能。

因而,元学习能够为基于小样本的梯度降落提供一种进步模型泛化性能的策略。
Meta-Learner LSTM 应用单元状态示意 Learner 参数的更新。
训练 Meta-Learner 既能发现一个良好的 Learner 初始化参数,
又能将 Learner 的参数更新到一个给定的小训练集,以实现一些新工作。

2.1 Meta-Learner LSTM

2.1.1 梯度降落更新规定和 LSTM 单元状态更新规定的等价性

个别的梯度降落更新规定

$$
\theta_{t}=\theta_{t-1}-\alpha_{t} \nabla_{\theta_{t-1}} L_{t}
$$

其中,$\theta_{t}$ 是第 $t$ 次迭代更新时的参数值,$\alpha_{t}$ 是第 $t$ 次迭代更新时的学习率,$\nabla_{\theta_{t-1}} L_{t}$ 是损失函数在 $\theta_{t-1}$ 处的梯度值。

LSTM 单元状态更新规定

$$
c_{t}=f_{t} \cdot c_{t-1}+i_{t} \cdot \tilde{c}_{t}
$$

其中,$c_{t}$ 是 $t$ 时刻的细胞状态,$f_{t}\in[0,1]$ 是忘记门,$i_{t}\in[0, 1]$ 是输出门。

当 $f_{t}=1,\ c_{t-1}=\theta_{t-1},\ i_{t}=\alpha_{t},\ \tilde{c}_{t}=-\nabla_{\theta_{t-1}} L_{t}$ 时,$\mathrm{Eq.\ (1)=Eq.\ (2)}$。

通过这样的替换,利用 LSTM 的状态更新替换学习器参数 $\theta$。

2.1.2 Meta-Learner LSTM 设计思路

Meta-Learner 的指标是学习 LSTM 的更新规定,并将其利用于更新 Learner 的参数上。

(1) 输出门

$$
\begin{align}
i_{t}=\sigma\left({W}_{I} \cdot\left[\nabla_{\theta_{t-1}} L_{t}, L_{t}, {\theta}_{t-1}, i_{t-1}\right]+{b}_{I}\right)
\end{align}
$$

其中,$W$ 是权重矩阵;$b$ 是偏差向量;$\sigma$ 是 Sigmoid 函数;
$\nabla_{\theta_{t-1}} L_{t}$ 和 $L_{t}$ 由 Learner 输出 Meta-Learner。

对于输出门参数 $i_t$,它的作用相当于学习率 $\alpha$,
在此学习率是一个对于 $\nabla_{\theta_{t-1}} L_{t}$,$L_{t}$,${\theta}_{t-1}$,$i_{t-1}$ 的函数。

(2) 忘记门

$$
\begin{align}
f_{t}=\sigma\left(W_{F} \cdot\left[\nabla_{\theta_{t-1}} L_{t}, L_{t}, \theta_{t-1}, f_{t-1}\right]+b_{F}\right)
\end{align}
$$

对于忘记门参数 $f_t$,它代表着 $\theta_{t-1}$ 所占的权重,这里将其固定为 1,但 1 不肯定是它的最优值。

(3) 将学习单元初始状态 $c_0$ 视为 Meta-Learner 的一个参数,
正对应于 learner 的参数初始值。
这样当来一个新工作时,Meta-Learner 能给出一个较好的初始化值,从而进行疾速学习。

(4) 参数共享

为了防止 Meta-Learner 产生参数爆炸,在 Learner 梯度的每一个 coordinate 上进行参数共享。
每一个 coordinate 都有本人的单元状态,然而所有 coordinate 在 LSTM 上的参数都是一样的。
每一个 coordinate 就相当于 Learner 中的每一层,
即对于雷同一层的参数 $\theta_i$,
它们的更新规定是一样的,即 $W_I$,$b_I$,$W_I$,$b_I$ 是雷同的。

2.2 Meta-Learner LSTM 单元状态更新过程

将 LSTM 单元状态更新过程作为随机梯度降落法的近似,实现 Meta-Learner 对 Leraner 参数更新的领导。

(1) 候选单元状态:$\tilde{c}_{t}=-\nabla_{\theta_{t-1}} L_{t}$,是 Meta-Learner 从 Leraner 失去的损失函数梯度值,间接输出 Meta-Learner,作为 $t$ 时刻的候选单元状态。

(2) 上一时刻的单元状态:$c_{t-1}=\theta_{t-1}$,是 Learner 用第 $t-1$ 个批次训练数据更新后的参数。每个批次的数据训练完后,Leraner 将损失函数值和损失函数梯度值输出 Meta-Learner,Meta-Learner 更新一次参数,将更新后的参数回馈给 Leraner,Leraner 持续解决下一个批次的训练数据。

(3) 更新的单元状态:$c_{t}=\theta_{t}$,是 Learner 用第 $t$ 个批次训练数据更新后的参数。

(4) 输入门:不思考。

(5) 初始单元状态:$c_{0}=\theta$,是 Learner 最早的参数初始值。LSTM 模型须要找到最好的初始细胞状态,使得每轮更新后的参数初始值更好地反映工作的共性,在 Learner 上只须要大量更新,就能够达到不错的精度。

2.3 Meta-Learner LSTM 算法流程

Meta-Learner LSTM 前向传递计算如图 1 所示,其中,
基学习器 $\mathrm{M}$,蕴含可训练参数 $\theta$;元学习器 $R$,蕴含可训练参数 $\Theta$。

<center>
图 1 Meta-Learner LSTM 前向传递计算图。
Learner 计算损失函数值和损失函数梯度值,
Meta-Learner 应用 Learner 提供的信息,更新 Learner 中的参数和本身参数。
在工作中,每个批次的训练数据处理实现后,Meta-Learner 为 Learner 更新一次参数,
工作中所有批次的训练数据处理实现后,Meta-Learner 进行一次更新。
</center>

Meta-Learner LSTM 算法流程

  1. $\Theta_{0}$ $\leftarrow$ random initialization
  2. for $d=1,…,n$ do:

    1. $D_{\mathrm{train}}$, $D_{\mathrm{test}}$ $\leftarrow$ random dataset from ${D}_{\mathrm{meta-train}}$
    2. intialize learner parameters: $\theta_{0} \leftarrow c_{0}$
    3. for $t=1,…,T$ do:

      1. $\mathbf{X}_{t}$, $\mathbf{Y}_{t}$ $\leftarrow$ random batch from $D_{\mathrm{train}}$
      2. get loss of learner on train batch: $\mathcal{L}_{t} \leftarrow \mathcal{L}\left(M\left(\mathbf{X}_{t} ; \theta_{t-1}\right), \mathbf{Y}_{t}\right)$
      3. get output of meta-learner using Eq. (2): $c_{t} \leftarrow R\left(\left(\nabla_{\theta_{t-1}} \mathcal{L}_{t}, \mathcal{L}_{t}\right) ; \Theta_{d-1}\right)$
      4. update learner parameters: $\theta_{t} \leftarrow c_{t}$
    4. end for
    5. $\mathbf{X}, \mathbf{Y} \leftarrow D_{\mathrm{test}}$
    6. get loss of learner on test batch: ${L}_\mathrm{test} \leftarrow {L}\left(M\left(\mathbf{X} ; \theta_{T}\right), \mathbf{Y}\right)$
    7. update $\Theta_{d}$ using $\nabla_{\Theta_{d-1}} {L}_{\mathrm{test}}$
  3. end for
  • 对于第 $d$ 个工作,在训练集中随机抽取 $T$ 个批次的数据,记为 $\left(\boldsymbol{X}_{1}, \boldsymbol{Y}_{1}\right), \cdots, \left(\boldsymbol{X}_{T}, \boldsymbol{Y}_{T}\right)$。
  • 对于第 $t$ 个批次的数据 $\left(\boldsymbol{X}_{t}, \boldsymbol{Y}_{t}\right)$,计算 learner 的损失函数值 $L_{t}=L\left[M\left(X_{t}; \theta_{t-1}\right), Y_{t}\right]$ 和损失函数梯度值 $\nabla_{\theta_{t-1}} L_{t}$,将损失函数和损失函数梯度输出 meta-learner,更新细胞状态:${c}_{t}=\boldsymbol{R}\left[\left(\nabla_{\theta_{t-1}} L_{t}, L_{t}\right); \Theta_{d-1}\right]$,更新的参数值等于更新的细胞状态 $\theta_{t}=c_{t}$。
  • 解决完第 $d$ 个工作中所有 $T$ 个批次的训练数据后,应用第 $d$ 个工作的验证集 $(X, Y)$, 计算验证集上的损失函数值 $L_{\mathrm{test}}=L\left[M\left(X; \theta_{T}\right), Y\right]$ 和损失函数梯度值 $\nabla_{\theta_{d-1}} L_{\mathrm{test}}$,更新 meta-learner 参数 $\boldsymbol{\Theta}_{d}$。

2.4 Meta-Learner LSTM 模型构造

Meta-Learner LSTM 是一个两层的 LSTM 网络,第一层是失常的 LSTM 模型,第二层是近似随机梯度的 LSTM 模型。
所有的损失函数值和损失函数梯度值通过预处理,输出第一层 LSTM 中,
计算学习率和忘记门等参数,损失函数梯度值还要输出第二层 LSTM 中用于参数更新。

2.5 Meta-Learner LSTM 和 MAML 的区别

  • 在 MAML 中,元学习器给基学习器提供参数初始值,基学习器给元学习器提供损失函数值;
    在 Meta-Learner LSTM 中,元学习器给基学习器提供更新的参数,基学习器给元学习器提供每个批次数据上的损失函数值和损失函数梯度值。
  • 在 MAML 中,基学习器的参数更新在基学习器中进行,元学习器的参数更新在元学习器中进行;
    在 Meta-Learner LSTM 中,基学习器和元学习器的参数更新都在元学习器中进行。
  • 在 MAML 中,元学习器应用 SGD 更新参数初始值,使得损失函数中存在高阶导数;
    在 Meta-Learner LSTM 中,元学习器给基学习器提供批改的 LSTM 更新参数,元学习器本身的参数并不是基学习器中的参数初始值,元学习器本身的参数应用 SGD 进行更新,并不会呈现损失函数高阶导数的计算。
  • 在 MAML 中,元学习器和基学习器只在每个工作训练实现后才进行信息交换;
    在 Meta-Learner LSTM 中,元学习器和基学习器在每个工作的每个批次训练数据实现后就进行信息交换。
  • MAML 实用于任意模型构造;
    Meta-Learner LSTM 中的元学习器只能是 LSTM 构造,基学习器能够实用于任意模型构造。

2.6 Meta-Learner LSTM 分类后果

<center>
表 1 Meta-Learner LSTM 在 miniImageNet 上的分类后果。
</center>

Method 5-way 1-shot 5-way 5-shot
Baseline-finetune 28.86 $\pm$ 0.54 $\%$ 49.79 $\pm$ 0.79 $\%$
Baseline-nearest-neighbor 41.08 $\pm$ 0.70 $\%$ 51.04 $\pm$ 0.65 $\%$
Matching Network 43.40 $\pm$ 0.78 $\%$ 51.09 $\pm$ 0.71 $\%$
Matching Network FCE 43.56 $\pm$ 0.84 $\%$ 55.31 $\pm$ 0.73 $\%$
Meta-Learner LSTM 43.44 $\pm$ 0.77 $\%$ 60.60 $\pm$ 0.71 $\%$
  • 参考文献

[1] Optimization as a Model for Few-Shot Learning

[2] 长短时记忆网络 LSTM

更多优质内容请关注公号:汀丶人工智能

退出移动版