zl程序教程

您现在的位置是:首页 >  其他

当前栏目

论文阅读《 AutoTinyBERT》

论文 阅读
2023-09-14 09:13:20 时间

高能预警,高能预警!
终于慢慢领悟到那句隔行如隔山了。看了近一天,才搞懂这篇文章的一点点 ┭┮﹏┭┮。不过我发现国内的开源工作做的真是太差了,automl相关的工作网上是一点儿都没有?!NAS细分方向更是寥寥几篇文章!希望本篇文章能让那些非AutoML方向的小伙伴有所了解~
关键字NASone-shot learningTransformerAutoML

推荐指数:★★☆☆☆

0.预备

因为本文是基于 NAS(Neural Architecture Search) 而展开的一篇工作,所以在详细介绍本文前,需要对 NAS 进行一个简单的了解。

0.1 NAS 是什么?

NAS,即Neural Architecture Search,神经结构搜索。

0.2 NAS 做什么?

当前神经网络纷繁复杂,调参是大家心头的一把利刃,有的时候明明是同样的模型,如果参数使用不同,那最后得到的效果可能相差甚远。那么有没有一种方法帮助优化参数设计呢?于是NAS应运而生。

0.3 NAS 怎么做?

NAS的工作可以划分为三个部分:search space(搜索空间)、search strategy(搜索策略)、performance estimation strategy(性能评估策略)。而其中search strategy 又有三种流行的搜索方法:Reinforcement Learning(RL), Evolutionary Algorithm(EA), Gradient Based(GB)。 本文使用的方法是第二种(Evolutionary Algorithm)。

NAS 过程中,最耗时的操作就是对于候选模型的训练评估(假设我们有100w种参数选择方式,那么直接暴力的方法就是训练100w次,然后把模型效果最好的挑选出来。),这种方法相当耗时,一个直接的想法就是:能否有办法让训练好的网络尽可能复用?

介绍完了预备知识,接着就开始分析一下本文。本文想解决什么问题?解决逻辑是什么?效果又如何?
论文题目《 AutoTinyBERT: Automatic Hyper-parameter Optimization for Efficient Pre-trained Language Models》
论文链接 https://arxiv.org/abs/2107.13686

0.4 Transformer详解

Transformer 包括 MHA(multi-head Attention) 和 FFN(Feed-forward Network) 两个子结构。为了表述清楚,我们将 MHA 分解,MHA 包括h个独立且并行的 self-attention moudles(也就是常说的head)。通过加和所有头得到 MHA 的输出。具体来说,每个头由四个主要的矩阵表示:
W i q ∈ R d m ∗ d q / h W i k ∈ R d m ∗ d k / h W i v ∈ R d m ∗ d v / h W i o ∈ R d o ∗ d v / h W_i^q \in R^{d^m * d^{q/h}}\\ W_i^k \in R^{d^m * d^{k/h}}\\ W_i^v \in R^{d^m * d^{v/h}}\\ W_i^o \in R^{d^o * d^{v/h}} WiqRdmdq/hWikRdmdk/hWivRdmdv/hWioRdodv/h
因为有h个头,所以这些维度上都有 1 / h 1/h 1/h作为分母。采用之前的隐藏层 H ∈ R l ∗ d m H \in R^{l*d^m} HRldm作为输入。MHA 的输出由下列公式给出:
Q i , K i , V i = H W i q , H W i k , H W i v 【 计 算 K , Q , V 矩 阵 】 A t t n ( Q i , K i , V i ) = s o f t m a x ( Q i K i T d q / k / h ) V i 【 计 算 A t t e n t i o n 结 果 】 H i = A t t n ( Q i , K i , V i ) W i o 【 每 个 头 的 输 出 通 过 W i o 映 射 到 H i ∈ R l ∗ d o 】 M H A ( H ) = ∑ i = 1 h H i 【 对 每 个 头 结 果 求 和 得 到 最 后 的 输 出 】 \begin{aligned} &Q_i, K_i, V_i = HW_i^q, HW_i^k,HW_i^v 【计算K,Q,V矩阵】\\ &Attn(Q_i,K_i,V_i) = softmax(\frac{Q_iK_i^T}{\sqrt{d^{q/k}/h}})V_i 【计算Attention结果】\\ &H_i=Attn(Q_i,K_i,V_i)W_i^o 【每个头的输出通过W_i^o 映射到H_i \in R^{l*d^o}】\\ &MHA(H) = \sum_{i=1}^{h}H_i 【对每个头结果求和得到最后的输出】 \end{aligned} Qi,Ki,Vi=HWiq,HWik,HWivK,Q,VAttn(Qi,Ki,Vi)=softmax(dq/k/h QiKiT)ViAttentionHi=Attn(Qi,Ki,Vi)WioWioHiRldoMHA(H)=i=1hHi

  • A t t n Attn Attn是一个scaled dot-product attention

H M H A = L a y e r N o r m ( H + M H A ( H ) ) H^{MHA} = LayerNorm(H+MHA(H)) HMHA=LayerNorm(H+MHA(H)) 【过add&Norm层,残差网络】

在传统的BERT的超参设置上, d q , k , v , o = d m d^{q,k,v,o}=d^m dq,k,v,o=dm。然而实际上,只需要 两个要求: d q = d k d^q=d^k dq=dk, d o = d m d^o=d^m do=dm,第一个要求是因为dot-attention,第二个要求是因为残差网络
在MHA之上,有一个FFN,
H F F N = m a x ( 0 , H M H A W 1 + b 1 ) W 2 + b 2 H^{FFN}=max(0,H^{MHA}W^1+b_1)W^2+b_2 HFFN=max(0,HMHAW1+b1)W2+b2
其中

  • W 1 ∈ R d m ∗ d f W^1 \in R^{d^m * d^f} W1Rdmdf W 2 ∈ R d f ∗ d m W^2 \in R^{d^f * d^m} W2Rdfdm b 1 ∈ R d f b_1 \in R^{d^f} b1Rdf b 2 ∈ R d m b_2 \in R^{d^m} b2Rdm

在传统的Transformer中, d f = 4 d m d^f = 4d^m df=4dm,所以对于传统的超参数设置时,需要满足如下规则 d q , k , v , o = d m , d f = 1 4 d m d^{q,k,v,o}=d^m,d^f = \frac{1}{4}d^m dq,k,v,o=dm,df=41dm

0.5 名词解释

为了更好地理解本文,这里给出了本文中常用的一些缩写词。

  • PLM(Pre-trained Language Model),也就是预训练模型。
  • TinyBERT 即缩小版的BERT

1.研究内容

神经网络虽然实用,但是太大了。移动设备通常资源有限(比如计算资源,内存资源等等),从而限制了大型神经网络在移动设备上的应用。所以就需要考虑能不能降低传统预训练模型(如BERT)的大小而将其用在移动设备中?所谓降低预训练模型的大小也就是使用预训练模型的 tiny版本。
本文的研究对象就是BERT的tiny版本,简称为 TinyBERT。使用TinyBERT没有问题,但是传统的工作中针对BERT都是使用其默认的结构参数,那么对于TinyBERT这种已经调整过结构大小的模型,即使在默认的参数结构下还能取到高性能吗?本文想解决的问题就是:针对TinyBERT,如何做一个自动的超参数优化(也就是论文题中的AutoTinyBERT),从而让模型在保持较优的推理速度(也就是论文题中的Automatic Hyper-parameter Optimization)下还能保持不错的性能?(这里的超参数应该就是特指 architecture hyper-parameters。)

2.出发点

Transformer结构中默认的规则是:
d m = d q , k , v = 1 4 d f d^m = d^{q,k,v} = \frac{1}{4} d^f dm=dq,k,v=41df
这个公式的含义就是:隐藏层vector d m d^m dm 的维度与 d q d^q dq d k d^k dk d v d^v dv 都相同,且是 d f d^f df的 1/4, 这个 d f d^f df 是前馈神经网络的大小。【这里需要一张图用来表示,或者参考一下BERT原来的设计。======】

由于计算能力和缓慢的推理速度,Bert(12/24层,110M/340M 个参数),GPT-2(48层,1.5B个参数)这种大模型很难应用在小机器上,所以需要布置具有较小的参数的模型到这些机器中。之前有一些工作使用知识蒸馏的方法来构建小的PLMs,然而这些都着眼于蒸馏技术的应用,却忽略了结构超参数对模型效果的影响。最近,在CV领域有一些研究模型架构超参数优化的工作,同时已经证明能够存在更好的设计结构参数。正是基于这些研究,本文得以提出。

因为模型推理速度太慢,所以直接评估这些模型是不现实的。因此在有效的PLMs 上,作者引入 one-shot Neural Architecture Search(NAS) 去做自动的 hyper-parameter 优化操作。具体步骤如下:

  • step 1:首先使用 one-shot 学习获取一个大的 SuperPLM ,这个可以作为一个代理去获取潜在的 sub-architectures

为了让 SuperPLM 更加有效,我们提出如下训练 tricks:head sub-matrix extractionbatch-wise training。同时,通过使用SuperPLM, 我们可以利用搜索算法去寻找超参数。

3.本文贡献

  • 发现了 design hyper-parameters for efficient PLMs 的问题,也就是本文的研究课题
  • 同时在 pre-traing settingknowledge distillation 上做实验,结果优异
  • 总结出了一些快速构建有效的PLM的一些规则,由此诞生 AutoTinyBERT-Fast

4.模型结构

在这里插入图片描述

5. 方法

5.1 问题定义

给出推理时间的限制,我们的目标是寻找一个结构超参数的最优配置 α o p t \alpha ^{opt} αopt,使其在下游任务上能够获取到最佳性能。这个优化问题可以表达成:
α o p t = a r g m a x α ∈ A P r e f ( α , θ α ∗ ) s . t . θ α ∗ = a r g m i n θ L α ( θ ) , L a t ( α ) ≤ T \begin{aligned} &\alpha ^{opt} = argmax_{\alpha \in \bold{A}} Pref(\alpha ,\theta_\alpha^{*}) \\ &s.t. \theta_\alpha^{*} = argmin_{\theta} L_{\alpha}(\theta), Lat(\alpha) \leq T \end{aligned} αopt=argmaxαAPref(α,θα)s.t.θα=argminθLα(θ),Lat(α)T

  • P r e f ( α , θ α ∗ ) Pref(\alpha ,\theta_\alpha^{*}) Pref(α,θα) 指的就是模型的 performance
  • T T T就是指定模型的推理时间限制,在本工作中,作者设置的值是 L a t ( α ) < 1 4 ∗ L a t ( B E R T b a s e ) Lat(\alpha) < \frac{1}{4} * Lat(BERT_{base}) Lat(α)<41Lat(BERTbase)
  • L a t ( ⋅ ) Lat(·) Lat() 指的就是latency evaluator

上面这两个公式的想要表达的含义就是:先最小化各个模型的损失,得到候选模型集合;然后再从候选模型集合中找出一个performance 最好的模型,并将这个模型的参数作为最优参数 α o p t \alpha ^{opt} αopt

5.2 方法

具体的方法包括三个步骤:

  • step 1:使用 one-shot learning 去获取 SuperPLM, 这个可以作为 proxy 去学习不同的架构
  • step 2:针对优化参数的搜索过程
  • step 3:训练带有优化结构和对应子模型

5.3 搜索空间

所谓搜索空间,其实就是这些参数的取值空间。

6. 实验

6.1 Dataset 和参数设置

在GLUE 和 SQuAD v1.1上做实验。二者的实验参数如下:

6.1.2 GLUE

  • batch size:32
  • learning rate : {1e-5,2e-5,3e-5}
  • epoch:{4,5,10}

6.1.3 SQuADv1.1

  • batch size : 16
  • learning rate : {3e-5}
  • epoch :{4}

6.2 AutoTinyBERT

所有的 one-shotfurther training 都是使用 BooksCorpus 和 English Wikipedia 作为训练数据。详细的参数设置这里就不介绍了~

如前所述,训练 AutoTinyBERT 的方法有两种:

  • pre-training
  • task-agnostic BERT distillnation

6.3 结果&分析

在不同的 latency constraints(4x / 30x B e r t b a s e Bert_{base} Bertbase) 下,我们做了如下几个实验,结果如下:

6.3.1 pre-training setting

在这里插入图片描述

结论如下:

  • AutoTinyBERT 和 NAS-BERT 的模型优化方法超过 使用默认超参数的BERT 和 PF。
  • AutoTinyBERT 的性能超过 NAS-BERT(不完全相同的层和异构模块) => 表明提出的模型效果不错。

6.3.2 task-agnostic BERT distillnation

在这里插入图片描述

结论如下:

  • 在有推理速度限制的情况下,AutoTinyBERT的性能始终超过传统的结构
  • AutoTinyBERT 超过了 经典的蒸馏方法(BERT-PKD, DistilBERT,…)

综合Table 1 和 Table 2,可以得到如下几个结论:

  • 在相同的推理速度下,pre-training setting 和 task-agnostic BERT distillation 两种模型的效果存在显著差距。这说明,即使对于训练有效的PLMs,模型结构参数优化也是一个必要的过程。

6.3.3 Ablation Study of One-shot Learning

如何证明one-shot model 的有效性?无非就是一组消融实验了。基于文中给出的结构,作者将one-shot model替换成了 stand-alone trained model(没给出这个图是不是差点儿意思了?还是说替换了之后还是用的同样的结构,只是训练的方法变化了而已?)。

6.3.4 Fast Development of Efficient PLM

搞了这么多实验,总得总结一下什么样的参数情况下,tinyBERT 的效果比较好吧,否则不是白调参了?作者就总结出了一些有效的超参设置规则。
先看一下传统的BERT模型和 AutoTinyBERT 的在加速上的对比:
在这里插入图片描述

根据上图可以得到的规则就是: 1.6 d m ≤ d f ≤ 1.9 d m , 0.7 d m ≤ d q , k , v ≤ 1.0 d m {1.6 d^m \leq d^f \leq 1.9d^m, 0.7 d^m \leq d^{q,k,v} \leq 1.0d^m} 1.6dmdf1.9dm,0.7dmdq,k,v1.0dm。 根据这个规则,我们就可以快速构建出一个有效的PLM,将其表示成 AutoTinyBERT-Fast。同样,作者在这些参数上有做了一些实验,实验结果这里就不再介绍了~

7. 疑问

文末这里列举一下阅读本文中可能会产生的疑惑,方便大家进行排查~

7.1 什么是 one-shot learning?

这里的one-shot 和 zero-shot,few-shot 中的shot都是一样的概念,而其前的系数则是指训练样本的多少。这里举个简单的例子:比如我们进入一家公司上班时,我们可能会首先使用软件进行人脸信息采集,日后用于公司的门禁中的人脸识别。人脸信息采集后这个识别系统只有你的一张图片(样本)进行训练,我们就可以将这个过程理解成 one-shot learning。

7.2 什么是 one-shot 模型?

One-shot 模型应该就是一个包含了所有可选操作的大型神经网络

7.3 什么是 one-shot NAS ?

本文中使用 one-hot NAS 搜索 α o p t \alpha^{opt} αopt

7.4 什么是 SuperPLM?

  • SuperPLM 作为proxy 的角色是怎么体现的?
    文中我也没有看到 SuperPLM的相关内容。在知乎里面找到了一点儿零星的描述。我个人的理解就是:SuperPLM是一个超大的预训练网络,包含各种组件。想搞清楚这个东西,问作者,作者也不理我,真是醉了 还是太菜了 ┭┮﹏┭┮ (好像国内的学者都不屑于回答咨询邮件的吧,感觉在看其他论文的时候,也经常会碰到这种情况,hh

7.5 intermediate dimensionthe hidden dimension

the hidden dimension is a quarter of the intermediate dimension in feed-forward sub-networks

这个维度在上面的 section 0.5 Transformer 讲得很清楚了,这里我就不再叙述了。

7.6 Evaluator 和 Evolver 是什么意思?在本文的作用是什么?

二者都是AutoTinyBERT模块的重要组成部分,二者有非常频繁的交互。
step 1. Evolver 从参数 A \bold A A中实例化一个具体的结构
step 2. 然后Evaluator 从SuperPLM中抽取对应的sub-models,并根据它们在SQuAD和MNLI上的性能将其排序。
step 3. 具备高性能的结构会被选择,同时再用Evolver 在这个结构上执行一个 Mut(·) 操作,从而产生了一个新的结构。
step 4. 上面这些操作会被重复执行
step 5. 使用Lat(·) 过滤出候选模型的延迟
那么这个 Mut(·) 操作是什么玩意儿?

8. 训练技巧

本文涉及到的一些训练技巧如下:

8.1 head sub-matrix extraction

这个 head sub-matrix extraction 指的应该是下面这个蓝色部分:
在这里插入图片描述

这个图的含义就是:使用两种不同的策略进行MHA sub-matrix extraction。 本文的想法是从 B e r t b a s e Bert_{base} Bertbase 延伸到 tiny size的bert应用,所以 W q , k , v W^{q,k,v} Wq,k,v 这些参数的维度也会被修改,所以这里提出了两种方法,分别对应(b), ( c )两种。

  • (b)以前的head有4个,现在只需要用其中的两个就可以了
  • ©以前的head有4个,现在从其中每个都抽一半出来,那么也可以达到一样的效果。
    这两种不同的抽取方式都是可以的,这个维度需要结合上面的分析来理解。在本文中,我们使用(b)针对 pre-training; 针对 task-agnostic distillnation 使用( c ) 。

8.2 efficient bathc-wise training

文中提出了 batch-wise 算法:
在这里插入图片描述

8.3 consider the case of identical structure for each Transformer layer

使用这个 trick ,有如下两点优势:

  • 降低搜索空间,(从指数空间=> 到线性空间)

  • 如果相同的结构实际上更利于硬件和软件架构。

9. 参考资料

  • https://zhuanlan.zhihu.com/p/74985066
    该文章对NAS 有一个较全的描述,对于理解本文有很大的益处。

  • https://zhuanlan.zhihu.com/p/143730467
    该文章谈到Supernet,应该就可以类比本文中的的 SuperPLM了,有兴趣的同学可以对照看一下。

  • https://zhuanlan.zhihu.com/p/60414004
    该文章对 NAS (Neural Architecture Search) 进行了一个详细的介绍,