当前位置:   article > 正文

多快好省的预训练模型:你丢我也丢

什么是 layerdrop

©AI学术前沿原创 · 作者 | IanChi

研究方向 | 机器学习、NLP

本文将罗列几篇通过 Drop 一些组件来提升预训练模型效率的工作。

STRUCTURED DROPOUT Pruning

论文标题:

Reducing Transformer Depth on Demand with Structured Dropout

论文链接:

https://arxiv.org/abs/1909.11556

代码链接:

https://github.com/pytorch/fairseq/tree/master/examples/layerdrop

idea 非常简单,类似 Huang Gao 的 Stochastic Depth,在 Train 和 Test 阶段利用结构化的 Dropout,对网络结构的一些 layer 进行丢弃操作。

文章提出了三种丢弃策略:

1. Every Other:每隔几层丢一层;

2. Search on Valid:在valid set搜索一些layer丢弃组合;

2. Data Driven Pruning:将丢弃任务建模成一个函数拟合任务,来学习如何丢弃。

结果发现最简单的 Every Other 效果最好,简单太秀了……

这里起名字为 DropLayer,和一般的 Dropout 不同,是丢弃 weight 的(DropConnect),本质上就是在权重矩阵中乘个 Mask 矩阵({0,1} 矩阵)。

很多问题的本质都是一个 subset selection 的问题,包括一些工作是做 sparse attention,提高 Transformer 的时间和空间效率。

Dynamic Early Exiting

论文标题:

DeeBERT: Dynamic Early Exiting for Accelerating BERT Inference

论文链接:

https://arxiv.org/abs/2004.12993

代码链接:

https://github.com/castorini/DeeBERT

这个工作乍一看和上面的思路一模一样,同样也是受启发于 Huang Gao 的工作。大概的思路是,作者认为 BERT 中堆叠了这么多的 Transformer Layer,有很多的冗余。所以,想尝试着,在每个 Transformer 之后,都做一次预测,试试看是不是 ok,这里 ok 不 ok 是用 prediction entropy 来度量的(手动设定个阈值,一顿调)。如果 ok 直接给出预测,后面的 transformer 就不计算了,所以可以省下不少 inference time。 

当然作者也尝试了 ensemble 一下多个 layer 的 prediction,貌似没啥效果。

实验方面,也和论文 1 中的 LayerDrop 进行了对比,在有限的对比实验中,提升效率上不如 LayerDrop。

这个工作有点像更加粗糙的 LayerDrop,人家 drop 的是 layer,这里 drop 的 transfomer,粒度更大一些。

Scheduled DropHead

论文标题:

Scheduled DropHead: A Regularization Method for Transformer Models

论文链接:

https://arxiv.org/abs/2004.13342

本文也是 Drop 的思想,不同于上面的两篇文章,这里关注的是 Head 的位置。多头是 Transformer 成功的重要原因之一,有些研究表明只有一部分 attention 对于结果影响很大,其他的 attention 是冗余的,所以 drop 掉一些 attention 一方面可以 prevent overfitting,另一方面可以达到 prune 的效果,提升 efficiency。 

当然这里,drop 的时候,颗粒度比较大,直接对整个 head attention 进行 drop。除了这个点之外,本文另一个重要的点,是提出了一种 V 字 dropout rate scheduler,而不是 fixed rate,通过烧蚀实验验证了这种 scheduler 的作用。

Big Bird Transformers

论文标题:

Big Bird: Transformers for Longer Sequences

论文链接:

https://arxiv.org/abs/2007.14062

代码链接:

https://github.com/google-research/bigbird

这个工作不同于文章 3 的粗暴,而是更加细腻的做 sparse attention,drop 的更加精细,self-attention 也好,encoder-decoder attention 也罢,最大的问题是效率问题,但其实并不是所有的 token 都有直接联系,这里存在着巨大的冗余。此次作为一个引子,回头专门针对 sparse attention 写一篇文章,这里先不赘述。

总结

简单总结几句,因为 transformer based models 已经横扫了这么多 NLP task,也包括 CV 和 speech 的一些 task,那么 More Efficient Transformer 一定是个大趋势。本文节选了几篇通过 drop 的思路来 improve transformer 的工作,肯定不够全面,但基本上说清了一个趋势。 

如果我们将 neural network 从结构上拆解成不同粒度的组件来看,可以写个简单的伪代码如下: 

  1. for component in [neuron, weight, layer, block, head, attention, ...]:
  2. performance, time = drop(component)
  3. if performance is sota:
  4. a novel drop based transformer is proposed
  5. elif time is sota:
  6. a novel prune method of transformer is proposed
  7. elif performance and time both sota:
  8. a big news is coming soon
  9. else:
  10. continue
  11. Auto Drop will be a new direction to follow.

调侃完了之后,说句公道话,不管是黑猫还是白猫,抓住老鼠就是好猫咪。 

抖个机灵,Transformer 最大的瓶颈在于芝麻街的主人公太少,快不够用了。

·

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/625966
推荐阅读
相关标签
  

闽ICP备14008679号