2023.2.26第17次周报

摘要

This week, I learned about the self-attention mechanism, how it works and how it is computed. In addition, I read a paper on the use of structured falloff to reduce transformer depth on demand, and the method introduced in the paper significantly reduces the use of computational resources and parameters while maintaining a high accuracy rate.
本周,我学习了self-attention机制,了解了其具体的工作原理以及计算过程;另外,我阅读了一篇利用结构化落差按需减少变压器深度的论文,文章介绍的方法在保持较高准确率的同时大幅减少计算资源和参数的使用。

深度学习

self-attention模型

Self Attention 模型的架构

第一步:获取Q、K、V
首先 Self Attention 有三个输入 Q、K、V,分别来自句子 X 的 词向量 x 的线性转化,即对于词向量 x,给定三个可学习的矩阵参数 WQ,Wk,Wv,x 分别右乘上述矩阵得到 Q、K、V,如下图所示。

举例:如上图两个单词 Thinking 和 Machines,通过线性变换,即 x1 和 x2 两个向量分别与Wq,Wk,Wv三个矩阵点乘得到 q1,q2,k1,k2,v1,v2 共 6 个向量。

矩阵 Q 则是向量 q1,q2的拼接,K、V 同理,如下图:

第二步:MatMul(两个数组的矩阵乘积)

如上图所示:向量 q1与k1做点乘得到得分 112, q1与k2做点乘得到得分96。因为q1与k1都跟x1有关,k2与x2有关,所以相乘得分较大,而q1与k2相乘得分则较小。(通过 q1得到 x1,x2 中的重要信息

第三步:Scale + Softmax

注意:这里除以√ dk=8是对该得分进行规范(即对得到的得分做一个缩放,避免两个分数相差太大导致概率分布不稳定)

第四步:MatMul

用得分比例 [0.88,0.12] 乘以 [v1,v2]值得到一个加权后的值,将这些值加起来得到 z1。

文献阅读

1、题目

Reducing Transformer Depth on Demand with Structured Dropout

2、摘要

在各种自然语言处理任务中,如机器翻译、语言建模和问题回答,超参数化变压器网络已经获得了最先进的成果。这些模型包含数以亿计的参数,需要大量的计算,并使它们容易过度拟合。在这项工作中,我们探索了LayerDrop,一种结构化退出的形式,它在训练中具有正则化效应,并允许在推理时进行有效的修剪。特别是,我们表明有可能从一个大的网络中选择任何深度的子网络,而不需要对它们进行微调,并且对性能的影响有限。我们通过改善机器翻译、语言建模、总结、问题回答和语言理解基准的技术水平,证明了我们的方法的有效性。此外,我们表明,与从头开始训练或使用蒸馏法相比,我们的方法导致了更高质量的小型BERT-like模型。

3、介绍

这篇论文提出了一种新的结构化随机失活方法来动态减少Transformer模型的深度。Transformer是一种非常强大的神经网络模型,用于自然语言处理任务,但它通常需要大量的计算资源和参数,限制了其在移动设备等资源受限的环境中的应用。

作者提出了一种基于结构化随机失活的新方法,它可以根据当前输入文本的复杂度动态地减少Transformer模型的深度,从而在保持较高准确率的同时大幅减少计算资源和参数的使用。具体来说,该方法使用结构化随机失活对Transformer的不同层进行随机选择,从而产生一组不同的浅层Transformer子集,这些子集可以以较低的计算成本进行前向计算。

实验表明,这种方法可以在不损失准确率的情况下将计算成本降低了1.5-4倍,同时还能够有效地提高模型的泛化能力。这种方法的创新之处在于,它允许模型在运行时根据输入的复杂度自适应地减少模型的深度,从而提高了模型的灵活性和可应用性。
在这里插入图片描述LayerDrop(右)在训练时随机丢弃层。在测试时,由于网络已经被训练成对修剪的鲁棒性,这允许对任何需要的深度进行子网络选择。与那些必须为每个模型大小从头开始重新训练一个新模型的标准方法相比(左),只训练一个网络,可以从中提取多个浅层模型。

4、方法

4.1 The Transformer Architecture

Transformer是一个由两个子层组成的堆叠层:多头自理层和前馈子层。多头自我注意子层由多个平行应用的注意头组成。每个注意力头接受一个矩阵X,其中每一行代表输入序列的一个元素,并通过使用注意力机制从其上下文中收集信息来更新其表示:
在这里插入图片描述

4.2 Training Transformers with Random Structured Pruning

在训练时随机放弃结构
DropConnect是一种随机的非结构化修剪,它导致了更小的,但不一定更有效的模型。
随机结构化剪除: 一个Transformer网络的权重属于多个重叠的结构,如头、FFN矩阵或层。使用遵循其中一些固有结构的组来丢弃权重,可能会导致推理时间的大幅减少。这相当于约束掩码M在一些预定义的权重组上是常数。更确切地说,给定一组预定义的权重组G,{0,1}掩码矩阵M在组上随机取样,而不是权重:
在这里插入图片描述
推理时的修剪
选择要修剪的层 用LayerDrop进行训练可以使网络对缺失层的预测更加稳定,以下是几种不同的修剪策略:

  • 每一个其他的。一个直接的策略是简单地放弃每一个其他层。修剪率p意味着删除深度为d的层,使 d≡0(modb[1/p])。这种策略是直观的,并导致了平衡的网络。
  • 对有效的搜索。另一种可能性是使用验证集计算各种层的组合以形成较浅的网络,然后选择表现最好的进行测试。这很直接,但计算量很大,可能会导致验证时的过度拟合。
  • 数据驱动的修剪。最后,我们提出了数据驱动的修剪,我们学习每层的下降率。给定一个目标下降率p,我们为深度为d的层学习一个单独的下降率pd,使各层的平均下降率等于p。更确切地说,我们将pd参数化为其层的激活的非线性函数,并应用softmax。在推理时,我们只转发基于softmax输出的固定的前k个最高得分层(例如,选择的层不取决于输入特征)。

设置最优剪枝的放弃率: 在组的放弃率和网络应该有弹性的平均修剪水平之间有一个直接的关系。假设有N个组和一个固定的放弃率p,网络在训练期间使用的组的平均数量是N(1-p)。因此,为了达到r组的修剪规模,最佳的放弃率是。
在这里插入图片描述

5、实验

5.1 WMT en-de机器翻译和Wikitext-103语言建模基准的结果

在这里插入图片描述

5.2 实验结果

如下图,在各种生成任务(测试集)上,与从头开始训练较小的模型和修剪没有LayerDrop训练的Transformer基线相比,性能是修剪的一个函数。与这些方法相比,用LayerDrop修剪网络的表现非常好。
在这里插入图片描述

如下图,(左)与从头开始训练的BERT和RoBERTa以及DistilBERT相比,MNLI和SST2的性能是剪枝的函数。修剪一个用LayerDrop训练的网络(蓝色)优于为每个点需要一个新网络的替代方案。(右图)在更多数据上训练时的性能显示,修剪后的模型在MNLI和SST2上的结果更强。
在这里插入图片描述

6、结论

结构化剔除使神经网络在推理时对应用结构化剪枝更加稳健。文章专注于结构是层的设置,使任何所需深度的浅层和高效模型的修剪成为可能。在各种文本生成和预训练任务中,作者表明LayerDrop可以实现并稳定训练更深的网络,并同时允许提取具有强大性能的各种深度的模型。

总结

本周学习了self attention机制,了解了其具体工作过程及其相应计算,与RNNs相比,Self-Attention 得到的新的词向量具有句法特征和语义特征(词向量的表征更完善),而RNNs 长序列依赖问题,无法做并行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用PyCharm 2023.2版本,你需要按照以下步骤进行操作: 1. 首先,你需要下载PyCharm 2023.2的安装程序。你可以在官方网站上找到最新版本的安装程序。双击下载的安装程序(pycharm-professional-2023.2.exe)来启动安装程序。 2. 在安装程序启动后,按照提示完成安装过程。你可以选择安装路径和其他选项,根据自己的需要进行设置。 3. 安装完成后,你可以在开始菜单或桌面上找到PyCharm的快捷方式。双击快捷方式来打开PyCharm。 4. 当PyCharm第一启动时,它会要求你设置一些初始配置,如选择界面语言和键盘布局等。根据个人喜好进行设置。 5. 在PyCharm的主界面上,你可以创建一个新项目或导入已有的项目。如果是第一使用PyCharm,你可以选择创建一个新项目来开始你的工作。 6. 在新项目中,你可以编写代码、运行程序、调试代码等。如果你需要了解PyCharm的常用操作和功能,你可以参考官方文档或其他教程。引用中的指导文章提供了一些常用操作的实验指导,你可以参考它来学习更多关于PyCharm的使用技巧。 请注意,中的引用是一个示例,显示了PyCharm 2021.3.2版本的界面。实际上,如果你使用的是PyCharm 2023.2版本,界面可能会有所不同。但整体使用方式和功能大致相同,你可以根据实际界面进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Win10中PyCharm2020.1.4安装使用入门(修订版)](https://blog.csdn.net/cnds123/article/details/107656496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值