前言
标准的transformer block并不简介,每个block由attention, mlp, skip connection, normalization各子模块构成。一些看似微小的修改可能导致模型训练速度下降,甚至导致模型无法收敛。
在本篇工作中,我们探索了transformer block精简的方式。结合了信号传播理论以及一些经验性的观察,我们在不损失训练速度的前提下,移除了skip connection, out project, value project, normalization操作 以及串行组织block的形式。在decoder-only和encoder-only两类模型上,我们减少了15%可训练参数,并提高了15%的训练速度。
官方仓库:
bobby-he/simplified_transformers
论文:simplifying transformer blocks.
一些标记注解:
每个transformer block如上述公式组成,每个子模块都配备了一个系数,这个后续会使用到
removing skip connection
作者先前的一项工作deep transformers without shortcuts: modifying self-attention for faithful signal propagation 删除了残差连接,提出的操作value-skipinit,将自注意力相关操作修改为:
其中i代表的是一个identity操作,a(x)表示原始注意力操作。这两个操作各自有一个可训练标量 和 ,初始化为 , 。
这个设计的insight是每个token在训练前期更多的是关注自身相关性,类似的如pre-ln操作,在batch normalization biases residual blocks towards the identity function in deep networks这项工作发现,pre-ln相当于把 skip-branch 权重提高,降低residual-branch权重,以在较深的神经网络里仍然有良好的信号传播。
而the shaped transformer: attention models in the infinite depth-and-width limit 该工作里提出了shape attention,也是收到信号传播理论的启发,将注意力公式更改为:
相比之下多了一个c矩阵,这是个常量矩阵(论文称其为centering matrix),不参与训练。他的值被设置为当 querykey dot 为0时候,a(x)的值,那么我们回去看a(x)公式,就剩一个mask值,因此代码里是这么写的:
# centered attention, from https://arxiv.org/abs/2306.17759 uniform_causal_attn_mat = torch.ones( (max_positions, max_positions), dtype=torch.float32 ) / torch.arange(1, max_positions + 1).view(-1, 1) self.register_buffer( uniform_causal_attn_mat, torch.tril( uniform_causal_attn_mat, ).view(1, 1, max_positions, max_positions), persistent=false, )
对于causallm来说,mask是个下三角矩阵,形状为(s, s)的矩阵,第i行,只有前i个位置有值,经过softmax后,1.0概率被平分到有值的位置,这就是为什么它要做一个 ones / arange 的操作,一段示例代码为:
import torchmax_positions = 32mask = torch.tril(torch.ones(max_positions, max_positions)) + torch.triu(torch.ones(max_positions, max_positions), 1) * -65536print(torch.softmax(mask, -1))tensor([[1.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000], [0.5000, 0.5000, 0.0000, ..., 0.0000, 0.0000, 0.0000], [0.3333, 0.3333, 0.3333, ..., 0.0000, 0.0000, 0.0000], ..., [0.0333, 0.0333, 0.0333, ..., 0.0333, 0.0000, 0.0000], [0.0323, 0.0323, 0.0323, ..., 0.0323, 0.0323, 0.0000], [0.0312, 0.0312, 0.0312, ..., 0.0312, 0.0312, 0.0312]])
而新的可训练标量 = ,以保证初始化时,
其中这些可训练标量如果改成headwise,即每个注意力头独立,则性能有部分提升。当然作者还是强调其中的一个重要的点是,显式的将mlp block的系数降低:
论文里针对18层transformer,设置为0.1
recovering training speed
在引入shape attention并移除残差连接后,训是没问题了,但是会导致收敛变慢:
经过前面的修改,那么对于attention模块里,在训练初期其实就简化成x和vproject矩阵和outproject矩阵做矩阵乘操作。
众所周知,这种没有残差连接的网络训练是要比带残差结构的网络要慢的。我们从别的工作也可以得知,pre-ln操作,是会降低残差分支的占比系数,相当于降低了学习率,也缩减了线性层里参数更新的scale
x matmul w,那么计算x的梯度公式有一项就是w嘛
这促使我们开始引入重参数化操作思考v矩阵和outproject矩阵
作者针对vproject和outproject两个矩阵乘操作,给残差分支和跳跃分支各引入一个可训练参数 , ,通过实验发现,大部分层最终系数比值 收敛到了0
这意味着 和 两个矩阵是一个identity矩阵,因此作者将这两个参数移除掉,并称为simplified attention sub-block (sas),使用sas比原始pre-ln block收敛更快了:
removing the mlp sub-block skip connection
在这部分实验里,作者把目光投向了gpt-j里提出的parallel block,其移除了mlp的残差分支,保留了另外一个残差分支:
对应公式为:
作者直接将sas block进行替换,得到parallel形式的 sas-p block。我们比较下和原始串行的实现:
在训练初期,attention部分是identity输出,因此两种形式的sas block在训练初期是等价的。
removing normalisation layers
最后作者尝试将norm层给移除,得到
作者的idea来自于,先前preln的作用(如把 skip-branch 权重提高,降低residual-branch权重)已经通过前面的一系列修改实现了,因此可以直接删除norm层
当然还是得看实验效果,回到这张图,可以看到移除了norm对收敛还是有一定影响的。作者猜测在信号传播理论范围之外,norm层能加速训练收敛,如scaling vision transformers to 22 billion parameters
引入了更多layernorm层,将vit缩放至22b参数量上
因此作者还是主张保留preln结构:
最后实验
作者也补充了一些训练速度benchmark,模型准确率,以及收敛趋势的实验:
总结
作者对transformer block移除了各种参数,减少了15%参数量,提高了15%的训练速度,各个环节都有做充分的实验,但一些经验性得到的结论也并没有直接回答一些问题(如ln为什么影响收敛速度)。
实验规模并不大,而标准的transformerblock还是在各个scale里得到广泛验证的,期待有人进一步试验
你说的对,但我还是套llama结构
关于RIGOL电子负载强大功能的分析和应用
SEMI发表报告指出,2017年全球半导体封装材料市场规模达167亿美元
密钥管理说明
恒流二极管的检测方法_恒流二极管的测量_恒流二极管的应用技巧
热电偶测量剖面假体植入物的水泥固化特性
探索Transformer Block精简的方式
美国“量刑”过重 中兴成为“筹码”
深商“科技向善”理念引领人工智能发展
哪吒汽车选择BlackBerry QNX为中国新能源轿跑——哪吒S保驾护航
NXP下一代系统基础芯片符合全球汽车OEM厂商严格的EMC要
阿希莫双子猫儿童智能音箱评测 各方面的表现可圈可点
M12-4芯航空插头
一个“乌托邦式”的交通系统将不再遥远
恩智浦助推本土COG创新设计
锆石FPGA A4_Nano开发板视频:PS/2的实际应用
基于虚拟仪器和机器视觉技术实现影像增强器可靠性试验系统的设计
思必驰:拥抱数字化生活 打造成熟语音语言交互解决方案
5G接入网之后会有什么改变
我国实现低轨星间激光通信链路在轨稳定工作,通信速率达 2.5Gbps
真比麒麟960强?骁龙835性能细节:竟是这