论文阅读《 AutoTinyBERT》
高能预警,高能预警!
终于慢慢领悟到那句隔行如隔山了。看了近一天,才搞懂这篇文章的一点点 ┭┮﹏┭┮。不过我发现国内的开源工作做的真是太差了,automl相关的工作网上是一点儿都没有?!NAS细分方向更是寥寥几篇文章!希望本篇文章能让那些非AutoML
方向的小伙伴有所了解~
关键字:NAS
,one-shot learning
, Transformer
,AutoML
推荐指数:★★☆☆☆
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}}
Wiq∈Rdm∗dq/hWik∈Rdm∗dk/hWiv∈Rdm∗dv/hWio∈Rdo∗dv/h
因为有h个头,所以这些维度上都有
1
/
h
1/h
1/h作为分母。采用之前的隐藏层
H
∈
R
l
∗
d
m
H \in R^{l*d^m}
H∈Rl∗dm作为输入。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,HWiv【计算K,Q,V矩阵】Attn(Qi,Ki,Vi)=softmax(dq/k/hQiKiT)Vi【计算Attention结果】Hi=Attn(Qi,Ki,Vi)Wio【每个头的输出通过Wio映射到Hi∈Rl∗do】MHA(H)=i=1∑hHi【对每个头结果求和得到最后的输出】
-
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} W1∈Rdm∗df, W 2 ∈ R d f ∗ d m W^2 \in R^{d^f * d^m} W2∈Rdf∗dm, b 1 ∈ R d f b_1 \in R^{d^f} b1∈Rdf, b 2 ∈ R d m b_2 \in R^{d^m} b2∈Rdm
在传统的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 extraction
和 batch-wise training
。同时,通过使用SuperPLM, 我们可以利用搜索算法去寻找超参数。
3.本文贡献
- 发现了
design hyper-parameters for efficient PLMs
的问题,也就是本文的研究课题 - 同时在
pre-traing setting
和knowledge 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(α)<41∗Lat(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-shot
和 further 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.6dm≤df≤1.9dm,0.7dm≤dq,k,v≤1.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
intermediate dimension
和 the hidden dimension
7.5 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) 进行了一个详细的介绍,
相关文章
- 有了这个机器学习画图神器,论文、博客都可以事半功倍了!
- 论文阅读–Semantic Grouping Network for Video Captioning
- 【论文阅读】Next Point-of-Interest Recommendation with Inferring Multi-step Future Preferences
- 【论文阅读】Modeling Spatio-temporal Neighbourhood for Personalized Point-of-interest Recommendation
- 【论文阅读笔记】Myers的O(ND)时间复杂度的高效的diff算法
- 论文阅读报告_小论文
- 【每周CV论文推荐】基于GAN的图像数据增强有哪些经典论文值得阅读
- 【每周CV论文推荐】初学基于GAN的图像语义编辑,需要阅读哪些论文?
- 论文文献阅读笔记_IN characteristic of learning
- GNN论文周报 | 来自北航、中科院、MSRA、新加坡国立大学、慕尼黑工业大学等机构前沿论文研究
- 张益唐111页零点猜想论文出炉!自称比孪生素数猜想意义更大,每天思考12小时被太太骂
- [IJCAI 2022 | 论文简读] 基于知识蒸馏的持续联邦学习
- [Nat. Commun. | 论文简读] 一个连接分子结构和生物医学文本的深度学习系统,其理解力可与人类专业人士相媲美
- [IJCAI 2022 | 论文简读] 多波段VAE:用于持续学习中知识整合的潜在空间对齐
- [Briefings in Bioinformatics|论文简读]NetTDP:基于互换的真实发现比例的差异性共表达网络分析
- [IJCAI | 论文简读] 图像重建的残差对比学习:从噪声图像中学习可转移表示
- 宾大机器学习PhD:我是如何从头开始写一篇顶级论文的?
- 2023美赛B题成品(论文+数据+代码+支撑材料+思路讲解)成品来了~