首页 > 其他分享 >51c视觉~合集30

51c视觉~合集30

时间:2024-09-19 22:52:35浏览次数:3  
标签:编码 SaRA 训练 51c 30 参数 位置 合集 模型

#SaRA

修改一行代码就能实现高效微调!上海交大&腾讯开源:兼顾原始生成和下游任务

仅修改一行训练代码即可实现微调过程。

文章链接:https://arxiv.org/pdf/2409.06633

项目链接:https://sjtuplayer.github.io/projects/SaRA/

1.引言

SaRA是一种针对预训练扩散模型的高效微调方法。通过微调预训练扩散模型中的无效参数,赋予模型对下游任务的处理能力。SaRA能够显著节省计算显存开销与代码复杂度,仅修改一行训练代码即可实现微调过程。该方法的核心创新在于:

参数重要性分析:SaRA首先对预训练模型中的参数重要性进行分析,发现预训练扩散模型中绝对值最小的10%至20%的参数在生成过程中的作用微乎其微。并且这些参数的无效性并非模型固有属性,而是由于训练过程中的不稳定性导致。

稀疏低秩训练:基于上述发现,SaRA提出利用这些暂时无效的参数,通过优化稀疏权重矩阵来学习特定任务的知识。为了避免过拟合,SaRA采用了基于核范数的低秩稀疏训练方案,有效约束了学习过程中的参数秩。

渐进式参数调整策略:SaRA设计了一种参数重调整策略,通过在微调过程中重定向可训练参数,确保几乎所有参数都能有效地贡献于新任务的学习。

非结构化反向传播策略:SaRA提出了一种新颖的反向传播策略,显著降低了微调过程中的内存成本。

SaRA在多个下游任务上进行了广泛的实验验证,包括基模型能力提升、下游数据微调、图像定制化、可控视频生成等。实验结果表明SaRA不仅能够提升基础模型在原始任务的生成能力,在下游任务中,能兼顾下游任务的学习以及预训练先验的维护,实现优越的模型微调效果。

2. 参数重要性分析2.1 预训练模型中的无效参数

在深度学习模型中,参数的数量往往非常庞大,但根据模型剪枝理论,并非所有参数都对模型的输出有积极的影响。作者首先研究了多个版本的预训练Stable Diffusion(包括1.4,1.5,2.0,与3.0)中,绝对值权重较小的参数对生成结果的影响。通过将绝对值权重小于θ的参数置为0后,让模型根据GPT-4o生成的1000个文本,生成对应的1000张图像,计算生成图像的FID指标以及CLIP Score(如图图 1所示),发现将模型10%~20%的参数置为0时,模型的生成结果并没有受到影响,甚至有些情况下还能略微提升,证明了这些小参数在预训练Stable Diffusion模型中的无效性。

图 1:Stable Diffusion预训练模型参数分布与小参数对生成结果的影响

2.2 无效参数的潜在有效性

2.1中导致无效参数的原因可能有两个:一是由于模型结构设计的原因,这些参数天生就是冗余、无效的参数,因此无法在训练过程中起到作用,另外一个原因则可能是由于模型训练过程中的随机性,导致这些参数恰好在训练结束的时候停留在0附近。因此,作者进一步对参数无效的原因展开研究。选取了Stable Diffusion在FFHQ的预训练模型,标记了初始权重最小的1%参数,将该模型继续在FFHQ上训练,并在训练过程中实时跟踪这1%参数的变化,结果如图 2所示,可见,随着训练的进行,初始的小参数(蓝色线条)逐渐跳出了1%的阈值,而初始大于1%阈值的参数,大部分跌入了1%以内,并且小于该阈值的参数总量始终维持在1%左右,证明了在训练过程中,所有参数都以一定的概率跳出或者跌入1%阈值中,说明初始的小参数是由训练过程的随机性导致的,因此,可以在微调过程中利用这些暂时无效的参数,赋予模型针对下游任务的生成能力。

图 2:训练过程中权重绝对值小于初始1%阈值θ_t的参数分布变化

3. 方法介绍

为了充分利用这些暂时无效的参数,SaRA提出了一种渐进式稀疏低秩训练方法。该方法的核心思想是,通过对这些无效参数进行微调,使其在下游任务中发挥作用。具体来说,SaRA首先确定一个阈值θ,将小于该阈值的参数视为暂时无效的参数。然后,通过优化一个稀疏权重矩阵,使得这些参数能够学习到新任务的知识。为了避免在训练过程中出现过拟合,SaRA引入了基于核范数的低秩约束。核范数是一种用于估计矩阵秩的凸松弛,通过最小化核范数,可以有效地限制稀疏矩阵的秩,从而避免模型在训练过程中学习到过多的噪声信息。

3.1 稀疏矩阵训练

SaRA致力于微调预训练模型中暂时无效的参数(即权重绝对值小于一定阈值θ的参数),使预训练的扩散模型适应下游任务,同时尽可能地保留原始的模型先验。具体而言,首先为初始参数P计算一个稀疏掩码M,满足:

SaRA基于该稀疏掩码来更新初始无效的参数 , 同时保持初始有效参数  不变。在训练期间, 对于所有参数的梯度 , 利用该稀疏掩码  来保留所需要更新参数的梯度, 并更新相应的可训练参数 

3.2 基于核范数的低秩约束

稀疏参数矩阵可能会具有较高的秩,从而导致过于强大的表征能力,使得模型在下游任务训练过程中出现过拟合的问题。为了缓解这个问题,我们在稀疏矩阵上引入了基于核范数的低秩约束,以防止约束系数矩阵的秩。低秩约束的一种直接方法是最小化稀疏参数矩阵的秩Rank(P_M )。然而,由于其矩阵秩求解的非凸性,()难以实现可微的求解。因此,我们使用矩阵的核范数来估计系数参数矩阵的秩:

其中  是参数矩阵  的第 i 个奇异值, 通过最小化该式子, 可以实现对参数矩阵的低质约束。

为了计算核范数 , 对参数矩阵进行奇异值分解 , 其中 U 和 V 是正交矩阵,  是包含奇异值  的对角矩阵。  关于  的次梯度可以由下式求出:

基于核范数梯度的推导, 可以低质约束的可微性, 从而实现基于核范数的低秩约束损失:

3.3 渐进式参数调整

在模型的微调过程中,由于训练的随机性,仍然会存在部分参数停留在阈值以下,尤其是微调过程的总轮次往往较少,导致最终存在一部分的参数仍然无效。如图 2 所示,初始的小参数在训练初期会快速跳出阈值,而后期的趋势逐渐放缓,当微调轮次较少时,可训练参数中可能存在15%的参数仍然无效。因此,SaRA提出渐进式的参数调整策略,在微调的前半阶段,首先对初始的无效参数进行训练,使得大部分的无效参数跳出阈值,而在后半阶段,再次对剩余的无效参数进行训练,使其快速跳出阈值。通过这种分阶段的渐进式训练策略,SaRA可以更有效地利用这些无效参数,提高模型在新任务上的性能。

3.4 非结构化反向传播策略

目前,基于 LoRA 的方法和参数选择的高效微调方法都对计算资源造成了沉重的负担:1)对于基于 LoRA 的方法,由于 LoRA 模块的引入,它不需要存储模型参数的梯度,但却需要额外的内存成本来存储 LoRA 模块中的中间变量,如图3 (a) 所示。2)对于参数选择的方法,一个一直困扰的问题是:它们需要与全参数微调相同甚至更多的计算资源(尤其是 GPU 显存)。虽然它们只对模型参数的子集进行微调,但它们保留了整个参数矩阵P的梯度,因为主流的深度学习库(如PyTorch和TensorFlow)只支持对整个参数矩阵的梯度反向传播。因此,以往的基于参数选择的方法必须在整个参数矩阵P上执行梯度反向传播,然后使用预先计算的掩码矩阵  通过  屏蔽不需要的参数梯度,并通过  实现整体参数的更新(如图4(b) 所示)。这种方法需要存储所有模型参数的梯度和额外的掩码矩阵,导致比全参数微调更大的计算资源需求。因此,为了解决这些问题,SaRA提出了非结构化梯度回传策略, 通过将可训练参数从参数矩阵中剥离与非结构化前向和反向传播, 实现训练过程中显存的大幅降低。

具体地, SaRA首先将训练模型的所有参数变为非叶节点, 并通过系数矩阵 , 获取可学习参数 , 将可学习参数作为真实的叶节点。定义非结构化映射函数 , 在前向过程中将可学习参数映射到模型参数中:

在反向过程中,定义非结构化反向传播函数,将模型参数的梯度自动回传至可训练参数:

由于模型参数成为了非叶子节点, , 因此, 梯度流经模型参数到  达后, 模型参数的梯度会自动消除, 最终存储的梯度仅有  的梯度, 从而节省大量的计算显存。

图3:非结构化梯度反向传播

4.实验效果

为了验证方法的有效性,SaRA在多个主流与下游的任务上进行了验证,包含基模型提升、下游数据集微调、图像定制化与可控视频生成。

4.1 基模型提升

SaRA主要致力于将预训练模型中的无效参数利用起来,赋予模型更强大的生成能力,这与一般微调方法仅针对下游任务设计的理念不尽相同。因此,SaRA可以用来提升预训练模型在原本任务上的生成能力。实验选取了在ImageNet、FFHQ、CelebA-HQ上预训练的Stable Diffusion,利用SaRA在相应数据集对模型进行进一步的微调,以完全利用模型中的无效参数,结果如图4所示,可以看出,SaRA能够稳定地提升基模型的生成能力(降低约5%的FID)。

图4:基模型在原始任务上的微调

4.2下游数据集微调

在下游数据集微调实验中,将SaRA应用于多个不同的数据集,并在不同StableDiffusion版本(1.5,2.0,3.0)与参数规模(50M,20M,5M)下进行了训练。数据集包括BarbieCore, Cyberpunk, Elementfire, Expedition, Hornify五个风格,结果如图5所示,可见SaRA取得了学习到了最丰富的数据特征,同时能够保持语义与文本的一致性。此外,实验还计算了生成数据的FID,与文本的CLIP Score,以及一个归一化指标VLHI同时衡量FID与CLIP Score,定量结果如表1所示,可见,SaRA在不同版本的Stable Diffusion以及不同的参数量下,均取得了最好的表现。

图5:不同微调方法在下游数据集微调的表现。

表1:不同微调方法在下游数据集微调的定量表现。

4.3 图像定制任务

图像定制化通过从少量几张图像中学习到共有的对象特征,然后将该对象生成到新的图片中。Dreambooth作为一种主流的图像定制化,需要微调扩散模型实现对目标特征的捕捉,因此,SaRA可以直接用于Dreambooth的微调过程。实验比较了不同微调方法在DreamBooth上的表现,定性结果如图6所示,可见,SaRA在成功捕捉目标对象特征的同时,还较好地维护了生成图像语义与文本的一致性。表2计算了不同方法在三个定制化数据集上的定量表现,可以看出,SaRA同时兼顾了特征捕捉与图文一致性,展现了在定制化任务重的优秀表现。

图6:不同微调方法在Dreambooth上的定性表现

表2:不同微调方法在Dreambooth上的定量表现

4.4 视频生成任务

SaRA不仅在图像生成任务中大展身手,在视频生成任务重也同样能取得较好的结果。实验将不同微调方法应用在视频生成模型AnimateDiff上,在不同运镜数据集下进行微调(镜头放大、缩小、右移)。结果如图7所示,其他的微调方法在视频生成任务中展现出一定的过拟合与内容崩溃的问题,相较之下,SaRA在微调过程中展现出丰富的运镜理解能力,同时较好地维护了模型的先验,保证了生成视频的质量以及与文本的一致性。

图7:不同微调方法在可控运镜的视频生成上的表现

4.5 计算资源比较

SaRA引入了非结构化梯度回传策略,有效解决了基于参数选择的微调方法中遇到的显存开销大的问题。图8的实验比较了LT-SFT(一种基于参数选择的方法)、LoRA以及SaRA在Stable Diffusion 2.0用不同Batch size训练过程中的显存开销与训练时间。可以看出,SaRA比LT-SFT减少了固定的9.2GB显存占用(对应所有参数的梯度占用空间),在Batch Size较小时(<=4)节省了45%的显存。而LoRA随着Batchsize的增大,显存占用急速上升。SaRA在Batch Size=16时比LoRA节省了52%的显存占用,并且节省了49%的训练时间。

图8:基于参数选择的方法、LoRA、SaRA在不同batch size下的显存开销与训练时间

4.6 训练参数分析

一个好的微调方法,在微调过程中,应该能够学习到更多的任务相关的信息,同时最大化保留预训练权重的先验知识。因此,作者实验分析了SaRA与LoRA在Expedition数据集上微调后的学习到的参数ΔP与预训练权重P之间的关系。表3通过F范数量化了ΔP前r维子空间与预训练权重P子空间的相关性,可见SaRA学习到的参数与P相关性更小,说明相较于LoRA学习到了更多的下游任务的知识。此外,还计算了放大因子Amplification Factor,量化了ΔP对P中未强调的特征方向的放大倍数,同样证明了SaRA对新知识更强的学习能力。

表3:SaRA与LoRA训练参数ΔP,与预训练参数P的关系

图9计算了SaRA与LoRA训练后的模型参数ΔP+P与预训练参数P的前r维子空间的相似性,可以看出,SaRA的相似性在95%以上,而LoRA维持在80%附近,证明了融合SaRA训练参数的模型,能够更好地维护预训练权重的先验知识。

图9:SaRA与LoRA训练后的模型参数ΔP+P与预训练参数P的关系

结论

本文提出了 SaRA,一种新颖的参数高效微调方法,该方法充分利用了预训练模型中绝对值最小的无效参数。作者提出了一种基于核范数的低秩损失,以约束学习到的稀疏矩阵的秩,从而避免模型过拟合。此外,设计了一种渐进式参数调整策略,进一步提高了微调参数的有效性。最后,提出了一种新型的非结构化反向传播方法,大大节省了参数微调过程中的内存开销,同时也能降低其他选择性 PEFT 方法的内存成本。大量实验证明了本文方法的有效性,它在保持预训练模型的先验信息的同时,实现了最佳的拟合能力。此外,作者高效地封装了本文的方法,使其只需修改一行代码即可实现,这大大增强了代码在其他模型和任务中的易用性和适应性。





#RoPE

避开复数推导,我们还可以怎么理解RoPE?

本文通过几何和可视化的方法解释了Transformer模型中的位置编码,特别是旋转位置编码(RoPE),如何在不涉及复数推导的情况下工作。文章讨论了RoPE在二维和高维空间中的实现,以及如何通过调整基数来优化模型的性能和外推性。最后,文章提出了一种训练策略,即先用小基数和短文本数据训练,再用大基数和长文本数据微调,以提高模型的泛化能力。

这里所说的“可视化”,不仅仅是大家熟悉的“空间向量的旋转”,而是:

具体能让你在调控RoPE的超参时,可以在脑海里快速绘制出一副图,预估你的调参对模型效果的大致影响

或者是当你想探寻衰减性和外推性时,你的脑海里不再仅有代表结果的那一副曲线图,你能动态地绘制出这些重要的性质是怎么一步步产生的。

诸如此类。而当你看完这篇文章,你就能站在几何的角度去理解复数推导的过程了(复数的运算本身就具有几何意义,本文也会给出一定解读)。

【全文目录如下】

一、原始Transformer函数式位置编码1.1 从旋转的角度理解原理1.2 这个位置编码为什么得不到人们的青睐

二、RoPE2.1 在做一件什么事2.2 旋转角度:二维空间2.3 旋转角度:高维空间(1)可以使用一个很小的吗(2)钟表视角下的高维旋转2.4 理解衰减性:从傅立叶变换的角度(快乐版)2.5 理解外推性:基数的选择(1)可视化位置编码的训练过程(2)基数的选择

一、原始Transformer函数式位置编码
1.1 从旋转的角度解读

transformer位置编码原理我们在这篇文章中详细讲过,这里我们对它进行一个快速的回顾解读。了表达方便,我们先以二维特征空间为例,根据transformer PE的构造方法,我们有:

  •  位置的编码为
  •  位置的编码为

其中  是我们设定好的常数。

那么根据:

51c视觉~合集30_视觉

我们可以把  和  的关系拆解成:

51c视觉~合集30_视觉_02

从这个拆解关系我们可以直观看出, 由于  是一个表示顺时针旋转的正交矩阵(正交意味着旋转不改变向量的模长, 只改变方向), 则  其实就是以  为基础, 顺时针旋转  这个角度而来。

为了直观体会到这点, 我们以  为基础, 画图看一下不同的  是如何旋转而来的:

51c视觉~合集30_视觉_03

在直观理解了如何从  推导至  的基础上, 我们来探究  的性质:

51c视觉~合集30_视觉_04

由于  是预先设定好的一个常数, 所以当我们假设某个 t 固定不变, 然后慢慢增大  时,  逐渐变小, 这也意味着相距较远的两个位置编码的内积越小, 即内积可以用于反馈两个位置向量在绝对位置上的远近。

但是,细心的你一定发现了,如果我保持红色不变,顺时针慢慢转动绿色PE时,可能会出现下图的情况,即图中所示的两个绿向量和红向量的内积是一样的,但是左侧绿向量明明距离红向量更远,此时,我们似乎无法从内积大小判断两个位置向量的远近:

51c视觉~合集30_视觉_05

那该怎么办呢?我们有一个粗暴但有效的解决方法:让每次位置变动时的转动角度小一些,不就可以了吗? 由于我们转动角度为 , 这意味着只要我们尽量把  设置得小一些(这就意味着调大了  的周期), 让绿线旋转的幅度小一些, 使得不管有多少个位置向量, 绿线都在第一和第四象限内移动, 不就可以了吗? 这就是关于  的一个最简单的直观解释, 在后文中, 我们还会结合更细致的内容, 继续探寻  在更高维的位置向量特种空间中的作用。

1.2 缺陷

从1.1节的介绍中,我们提取到两个关于transformer原始位置编码的重要信息:

  • 在设置合适的值的前提下,每个位置都能取到唯一的位置编码(绝对性)
  • 一个位置编码可以由另一个位置编码旋转而来(相对性),且在设置合适的值的前提下,两个位置编码的内积大小可以反应位置的远近,内积越大,距离越远(远程衰减性)。

我们固定住某个 t , 变动 , 来可视化一下  的变动趋势:

51c视觉~合集30_视觉_06

如图:

  • 横轴表示
  • 纵轴表示固定某个  的情况下, 改变  后得到的  和  的内积
  • d表示不同的hidden_size(例如在1.1节中,我们就假设d = 2)

从图中我们可以发现:

  • 在固定某个的情况下,两个位置编码的内积具有对称性(很简单,对照1.1的圆圈,想象cos函数的对称性。更严谨的推导参见开头引用的文章的3.3节(1)部分)
  • 在固定某个的情况下,两个位置编码的内积具有远程衰减性(在上面实验图对应的原始论文中被称为“距离意识(distance-aware)”),即两个位置编码相距越远,距离越小。

看起来,transformer的原始位置编码应该已经足够好了,可是为什么在很长的一段时间里,人们还是普遍用可学习式的位置编码,甚至还有很多实验证明了transformer的这种位置编码对最终的效果没有起到实质性帮助呢?

这是因为, 我们上述的一切分析, 都是在原始位置编码  上的结果, 我们一般把位置编码和输入层的token相加, 然后让他们继续去做接下来的计算。可是, transformer架构是复杂的, 更详细地说, 当 token向量进入attention层时, 起作用的还是  这个部分吗?

为了更详细探究这个问题,我们假设:

  •  分别为两个不同位置的原始token向量, 其尺寸为(hidden_size, 1)
  •  分别为两个不同位置的原始PE向量, 其尺寸为 (hidden_size, 1)
  •  分别为尺寸为 (hidden_size, hidden_size) 的Q、K矩阵

那么数据过attention部分可以表示成:

51c视觉~合集30_视觉_07

我们只关注其中和两个位置变量都相关的部分,也就是:

51c视觉~合集30_视觉_08

从中我们不难发现, 经过attention层后, 位置编码真正起作用的不再是 , 而是引入了线性变化后的  。那么再引入这种线性变化后,位置编码还能保持上述所说的绝对性、相对性和远距离衰减性这种优良性值吗? 我们同样用实验的方式来细看这一点。

由于  本质上可以合成一种线性变化, 所以我们可以随机初始化一个线性矩阵来代替它, 在我们的实验中, 我们做了三组试验:

  • , 其中  是我们随机初始化的一个线性矩阵
  • , 其中  是我们随机初始化的一个线性矩阵

同样, 我们固定住某个我们固定住某个 , 变动 , 来可视化一下这三组试验的结果:

51c视觉~合集30_视觉_09

上图中的榾线和绿线即表示两位置编码内积间引入线性变化  后的结果, 可以发现相比于标准的蓝线  ,原始位置编码的优良性质(远程衰减性等)都受到了极大程度的破坏。

总结来看, 虽然原始transfomer位置编码本身考虑了绝对性、相对性和远程衰减性, 但是由于位置编码经过 attention层后, 最终起作用的形式是  而不是 , 而进一步我们通过实验直观证明了插入一个线性变化会极大破坏位置编码设计之初的各种优良性质, 所以早期 transformer的这种函数式的位置编码并没有得到大家的青睐。

二、RoPE

在第一部分的分析中,我们已经知道attention层的计算会破坏掉输入层位置编码的优良性质,那么我们自然而然会想到:如果我直接在attention层中融入位置信息,也就是我直接把位置编码作用于,这样我不就能维持位置编码优良性质不变吗?(在接下来的讲解中,为了表达方便,我们直接用下标m和n表示两个位置)

2.1 在做一件什么事

这里都是尺寸为(hidden_size, 1)的向量。

我们知道,当我们计算时,我们是在做attention score的计算,其结果表示m位置的token和n位置token间的相关性分数。现在让我们切换一下视角,这个相关性分数其实就是两个特征向量之间的内积,在一定程度上衡量了两个向量之间的相似性。

现在我们希望把位置编码的信息直接引入中,这也就意味着,我们希望根据|n-m|的结果,给这个内积计算一定的惩罚:

  • 当  较小时, 我们希望拉进  的距离
  • 当  较大时, 我们希望拉远  的距离

你可能觉得有些抽象,不要紧,我们马上仿照1.1中的方式,给出可视化的解释

2.2 旋转角度:二维空间

假设原始  的特征向量如下:

51c视觉~合集30_视觉_10

模仿 1.1 的方式, 如果我们想让  具备位置信息, 我们可以分别把他们旋转 m 和 n 度。在 1.1 中我们采用顺时针旋转,在这里我们使用逆时针旋转(没有特殊原因,只是为了和原始rope旋转方式贴合),那么我们可以得到如下结果, 其中  分别表示旋转后的结果:

51c视觉~合集30_视觉_11

可以发现, 旋转过后, 随着  差值的变大, 在保持向量模长不变的情况下, 我们拉远了  两者之间的距离, 也即降低了它们的内积, 最后达到降低(惩罚)attention score的效果。

同时, 和1.1中一样, 我们同样需要引入用于参数 , 通过拉长三角函数周期的方式确保不同位置的向量不发生碰撞。 我们以上图中的  为例, 当保持其模长不变的情况下, 它的逆时针运动轨迹是一个圆, 这也意味着一个较小的  和一个较大的  代表的向量可能会重合, 所以我们需要使用  这种形式, 对  每次旋转的幅度加以控制。

总结起来,在二维特征空间下,我们定义了一个逆时针正交旋转矩阵(正如1.1所说,正交旋转矩阵保证了模长不变,即维护q,k原始的特征,只单纯做旋转使其拥有绝对位置信息):

51c视觉~合集30_视觉_12

其中表示绝对位置,例如0,1,2...

接着我们将其作用到attention部分的计算上,则有:

51c视觉~合集30_视觉_13

端详上面这个等式,我们可以发现:

  •  :两者分别赋予  绝对位置信息
  •  :绝对位置信息相乘的结果拥有了相对位置的概念
2.3 旋转角度:高维空间(1) 可以使用一个很小的吗

到目前为止,我们都在讨论二维特征空间下的位置编码,那么到了高维特征空间,位置编码应该如何设计,比如此时我们有:

51c视觉~合集30_视觉_14

其中就是我们所说的hidden_size。

我们先再次把目光聚焦回二维特征空间上, 这次我们只看  (因为  也是同理)

51c视觉~合集30_视觉_15

正如2.2节所说, 我们通过旋转的方式赋予原始  绝对位置的信息, 由于  是一个逆时针的圆周旋转, 这也意味着一个较小的  可能和一个较大的  代表的向量重合, 为了避免这一点, 我们引入一个较小的调控参数 , 使得旋转角度变为 , 放慢  旋转的步调。

你可能会想:这个方法真是不错。如果我面对的是一排数量很多的token(长文本),那么我只要把  设置得尽可能小, 我就能保证不同位置的绝对位置向量一定是唯一的了!

但是,过小的  会产生一个问题:由于旋转角度十分微弱,不同位置的向量几乎重合,这就使得"位置"这个信息带来的帮助有限了。

(2) 钟表视角下的高维旋转

当你看见上图中,向量逆时针做圆周运动时,不知道是否让你想起了日常生活中一个很熟悉的物体:钟表。对于一块钟表:

  • 秒针:走得最快
  • 分针:走得中等
  • 时针:走得最慢

而“时刻”这个东西,就是由这三个频率各不相等的圆周运动组成的。

当两块表摆在你面前时,即使走得最快的秒针重合了,但是如果走得较慢的分针和时针不一样,他们照样能代表不同的时刻。

现在,让我们把高维的位置编码想象成一个“时刻”,那么如下图所示:

51c视觉~合集30_视觉_16

在这幅图中:

  • 横向表示不同位置的位置编码(m =0和m=1)
  • 纵向可以看成是3个不同频率的逆时针旋转运动(秒针、分针、时针),你可以发现,从m=0变到m=1,秒针旋转的幅度最大,时针最小。

更具体一点来说,假设这三个旋转运动对应的旋转矩阵分别是:

51c视觉~合集30_视觉_17

则有。

我们继续做一些延展,对于向量:

51c视觉~合集30_视觉_18

两两为一组 , 每一组都可以看成是一个旋转速度不一样的指针, 我们可以用  个指针来表示  的位置向量, 如下图所示:

51c视觉~合集30_视觉_19

因此在高维度空间中, 用于表示  绝对位置的旋转矩阵  最终可以表示成:

51c视觉~合集30_视觉_20

由于以上的是一个稀疏矩阵,大部分位置为0,为了节省算力,在代码开发时我们一般采用下列方式:

51c视觉~合集30_视觉_21

为了满足我们所说的  的特性, 同时又不能让  太大, 我们设:

51c视觉~合集30_视觉_22

其中,10000这个数决定了的大小,我们称其为基数(base)。在后面的章节中,我们回来讨论基数应该如何选择。

2.4 理解衰减性:从傅立叶变换角度(快乐版)

(⚠️本节没有令人抓狂的数学公式,所以是快乐版,大家可以放心食用)

傅立叶变换的基本思想,是一个函数可以用无穷多个周期性的线性组合来逼近,我们通过一张经典的示例图来可视化这句话:

51c视觉~合集30_视觉_23

在图中,红色方波就是我们想做傅立叶变换的原始函数,它可以被分解成无穷个频率不一致的蓝色三角函数(sin)的线性和。再形象一点解释的话,这些频率不一致的sin函数加总后,在各个方向上的趋势相互影响,最终生成了红色方波有的地方平,有的地方陡峭的模样。(当然,并不是只有方波可以被分解,这里只是给出了一个例子)

现在,让我们回到那个逆时针转动的圆盘上。我们画出两个空的二维坐标系。一个坐标系我们放着这个圆(圆心在原点),记录下它每次转动的角度,和对应的y轴坐标。然后我们在另一个坐标系上绘制出角度和y的关系,你会发现自己得到了一个周期性的三角函数,如下图所示(快快回忆起高中的知识):

51c视觉~合集30_视觉_24

我们只需关注第一行的图即能帮助我们理解上面说的内容。第二~三行的图是在从圆周旋转的角度帮助我们理解方波是如何形成的。图片来自wiki百科。

理解到这一步,我们结合“旋转角度”和“傅立叶变换”角度,再来看一次我们的RoPE,不难理解,一块钟表的旋转,可以被转换成一个周期性的三角函数。

51c视觉~合集30_视觉_25

现在再让我们回头看看这个内积计算(假设我们已经把RoPE的信息赋给q和k了),当向量中的各项相加时:

  • 是不是就相当于各个不同的周期的三角函数在做线性组合?
  • 那么线性组合的结果,是不是就可以看成是某种具有周期性的波形?(就像时分秒针组成了一个时刻一样)
  • 当我们固定住某个m,改变n,去计算这个内积。如果|n-m|越大,内积越小,这不就是我们所说的“衰减性”吗?那现在我们再来看下面张图(注意箭头),你是不是能体会到衰减性是怎么来的?

51c视觉~合集30_视觉_26

  • 那么再进一步, 你可能在实验中会发现, 对于  的base, 它设置得越大, 衰减曲线越平缓。现在你对照着上图, 大base引起小 , 也即相当于加大了每个蓝线分量的周期(把它们变得更宽更平缓了), 那么红线的趋势自然也就拉平了。

(注意,这里并不是说内积就长成方波的样子,只是结合这个图例,给大家一个感性的理解)

现在,你是不是已经能渐渐认识到了RoPE的魅力,并且能从图像化的角度去思考它的超参意义了呢?

2.5 理解外推性:基数的选择(1)可视化理解位置编码的训练过程

在2.3节中,我们提过原始RoPE中,的设置为:

51c视觉~合集30_视觉_27

你的每一个值就控制着一块圆盘的转动速度,一共有d/2个圆盘,这里我们再把这张图放一次:

51c视觉~合集30_视觉_28

结合这张图,我们再来看下旋转矩阵的定义,其中每个[]表示一个圆盘:

51c视觉~合集30_视觉_29

我们单独拎出一个圆盘来看:

51c视觉~合集30_视觉_30

在二维空间中, 这个圆盘表示逆时针方向的旋转, 结合我们学过的极坐标的知识, 它可以被画成一个单位圆, 也就是指针将在这个单位圆上每次做角度为  的逆时针旋转(这就是复数 的几何意义, 理解了这一点, 也能从可视化的角度去看复数推导了, 不理解的话直接忽略)

所以,当我们训练位置编码时,我们其实就是在训练这d/2个转速不一的单位圆盘:

51c视觉~合集30_视觉_31

(2)基数的选择

理论上,当我们把的基数设得很大时,每个圆盘的转速都很慢,这样就可以保证不管有多少个token,它们的绝对位置编码都不会重复,也就是如果仅从编码表示的范围上看,较大的基数已经能够允许我们灵活表示不同长度的token了。

但是,从模型效果上来看呢?例如:假设我想训练一个能处理长文本的模型,我直接用“长文本数据 + 大基数”去做这件事,效果会怎么样呢?

我们可以从(1)中的示意图的角度来可视化地思考这个问题:当我们使用“长文本数据+大基数”时,每个圆盘的旋转速度都变慢了,当我们完成训练后,我们会发现大部分圆盘都没有转完一周(被训练完),也就是我们的位置编码信息训练不到位(没有收敛),这时如果我们想用这个模型做推理,就可能得不到好效果。

同样地,如果我们直接用一个“短文本数据 + 小基数”的方式去训练模型,那么虽然有更多的圆盘旋转过一周了,但是并不是圆盘上的每一个点都能训练到(见下图)。所以如果我们直接用这个模型去做长文本的推理,也得不到好效果

这时,我们可以换一个角度思考:如果我能尽量让每个圆盘都转一周(当然这个过程并不是把圆周上的每一个点都走过),把大致的信息学到。然后再去微调圆盘上点和点之间的缝隙,尽量把这个圆周的细节都填满(在填的过程中你可能会经过之前已经学过的点,有了先验知识,那效果就更好了),那不就能快速学到尽可能完整的位置信息,加速模型收敛了吗?

把这个思想用于实践,就得到了目前训练长文本的一个常用方法:

  • 现用“小基数 + 短数据”做训练(让每个圆盘都尽量转满一圈)
  • 再用“大基数 + 长文本”做微调(弥补圆盘上的空隙)

51c视觉~合集30_视觉_32

所以,当你想探究位置编码的外推性,或者想研究基数选择对外推性的影响时,不妨在脑海里可视化这d//2个圆盘,想想如何让圆盘上尽可能多的点位被训练到。

标签:编码,SaRA,训练,51c,30,参数,位置,合集,模型
From: https://blog.51cto.com/whaosoft/12059371

相关文章

  • AirBus A330-700L Beluga XL 超级大白鲸运输机 All In One
    AirBusA330-700LBelugaXL超级大白鲸运输机AllInOne空中客车A330-700LBelugaXL“超级大白鲸”(制造数量6架)空中客车A300-600STBeluga“大白鲸”(制造数量5架现役)newsWheels-upforthefinalBelugaXL!为最后的BelugaXL做好准备https://www.airbu......
  • 【专题】2024年9月游戏行业报告合集汇总PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=37732在当今数字化高速发展的时代,游戏行业已然成为了文化与科技融合的前沿阵地。中国游戏行业凭借着不断创新的技术、丰富多元的内容以及日益拓展的市场,正以蓬勃之姿在全球舞台上绽放光彩。阅读原文,获取专题报告合集全文,解锁文末153份游戏相关行业......
  • 辽宁2024下半年软考报名8月22日8点30后开始
    一、辽宁2024下半年软考报名时间8月22日8:30-8月27日16:30二、辽宁2024下半年软考报名入口1.1.考生登录辽宁省信息技术教育中心网站(http://www.lnitec.com/)进入考生报名入口,用有效手机号或邮箱注册,按网上报名系统提示信息进行网上报考。报考信息提交后,经本地考试管理机构审核(审核时......
  • 大连2024下半年软考报名8月20日9点30后开始
    一、大连2024下半年软考报名时间8月20日9:30-9月13日16:00二、大连2024下半年软考报名入口1.考生登录大连电子信息应用教育中心官网(http://www.dlrkb.com/rkb),进入右侧考生报名入口,按网上报名系统提示信息进行网上报名,考区选择大连(请勿选择辽宁省),报名信息提交后,经本地考试管理机构审......
  • kube-vip搭建k8s1.30.5高可用集群
    实验环境机器五台系统:ubuntu24.04cat/etc/hosts192.168.0.11jichao11k8s-master01192.168.0.12jichao12k8s-master02192.168.0.13jichao13k8s-master03192.168.0.14jichao14k8s-worker01192.168.0.15jichao15k8s-worker02192.168.0.200lb.kub......
  • 山西2024下半年软考报名9月2日2点30后开始
    一、山西2024下半年软考报名时间9月2日下午14:30至9月9日上午11:30二、山西2024下半年软考报名入口考生登录中国计算机技术职业资格网网上报名系统(https://www.ruankao.org.cn/),点击对应报名入口,按要求注册、填报报考信息、上传近期免冠照片,保存提交,通过照片审核后完成缴费即算报名......
  • 已经30岁了,想转行从头开始现实吗?什么样的工作算好工作?
        我是29岁那年,完成从转行+裸辞+副业的职业转型。如果你把职业生涯看成是从现在开始30岁,到你退休那年,中间这么漫长的30年,那么30岁转行完全来得及;如果你觉得必须在什么年纪,什么时间内必须完成赚到几十万上百万的目标,或者成为某个领域的大神,或者实现买车买房的愿望,对不......
  • 【洛谷 P5730】【深基5.例10】显示屏 题解(数组+循环)
    【深基5.例10】显示屏题目描述液晶屏上,每个阿拉伯数字都是可以显示成的点阵的(其中X表示亮点,.表示暗点)。现在给出数字位数(不超过)和一串数字,要求输出这些数字在显示屏上的效果。数字的显示方式如同样例输出,注意每个数字之间都有一列间隔。输入格式第一行输入一个正整数,表示数......
  • Maximum execution time of 30 seconds exceeded
    遇到 Maximumexecutiontimeof30secondsexceeded 这个错误,通常是因为PHP脚本执行时间超过了设定的最大执行时间限制。这可能是由于脚本执行了耗时的操作,例如长时间的数据库查询或其他资源密集型任务。以下是一些解决步骤:1.增加最大执行时间限制可以在PHP配置文件(ph......
  • 易优eyoucms网站报错 \core\library\think\db\Connection.php 第 307 行左右,SQLS
    根据提供的错误信息 SQLSTATE[HY000][1045]Accessdeniedforuser'cs2021'@'localhost'(usingpassword:YES),这个错误表明数据库访问被拒绝了,通常是因为用户名或密码不正确导致的。以下是几个可能的解决步骤:检查数据库连接配置:确认数据库连接配置文件中的用户名和密......