可以做反链的网站,网站怎么在百度搜到,网易游戏财报,张家界seo文献阅读#xff1a;Sparse Low-rank Adaptation of Pre-trained Language Models 1. 文章简介2. 具体方法介绍 1. SoRA具体结构2. 阈值选取考察 3. 实验 结论 1. 基础实验 1. 实验设置2. 结果分析 2. 细节讨论 1. 稀疏度分析2. rank分析3. 参数位置分析4. 效率考察 4.…文献阅读Sparse Low-rank Adaptation of Pre-trained Language Models 1. 文章简介2. 具体方法介绍 1. SoRA具体结构2. 阈值选取考察 3. 实验 结论 1. 基础实验 1. 实验设置2. 结果分析 2. 细节讨论 1. 稀疏度分析2. rank分析3. 参数位置分析4. 效率考察 4. 总结 思考 文献链接https://arxiv.org/abs/2311.11696GitHub链接https://github.com/TsinghuaC3I/SoRA
1. 文章简介
这篇文章是清华大学在23年11月发表的一篇针对LLM的高效finetune方面的工作。
众所周知LLM虽然效果很好但是由于其极其巨大的参数量对LLM的finetune一直是一个老大难问题因此最近针对这方面的研究也是层出不穷其中最为知名的可能就是微软提出的LoRA算法了我自己之前也整理了一篇水文来介绍过这篇工作文献阅读LoRA: Low-Rank Adaptation of Large Language Models。
整体上来说LoRA的核心思路就是用一个额外的Adapter网络来模拟模型finetune之后的参数微扰使得原始模型的输出加上Adapter模型的输出近似于finetune之后的模型输出。此时我们只需要train一个很小的adapter就可以来模拟模型的finetune了既不用改动原始大模型的结构也不需要增加很多额外的参数。
但是LoRA有一个比较大的问题就是它默认了微扰对于各个层的影响都是一样的且都是比较小的因此LoRA对所有层都共享一个超参就是adapter中间层的维度。而这个假设事实上是有点强的因此后续也有一些工作尝试对这个点进行优化文中提到的一个典型工作就是AdaLoRA它通过奇异值分解的方式来动态调整不同层所需的Adapter中间层的维度但是因为他引入了奇异值分解因此需要挺多的额外计算量且需要引入一些额外的正交假设。
基于此文中提出了一个新的他们命名为SoRA的方法本质上来说它和AdaLoRA一样也是希望动态调整不同层中Adapter中间层的维度但是相较于AdaLoRA更加简单直接无需引入额外的假设且不会增加多少额外的计算量。
下面我们来具体看一下文中提出的SoRA方法的具体实现和对应的实验以及实验结果。
2. 具体方法介绍
1. SoRA具体结构
下面我们首先来看一下SoRA的整体结构。 可以看到本质上来说SoRA依然走的还是LoRA的降维投影的模式不过SoRA的思路是先给一个较大的中间维度然后通过 L 1 L_1 L1正则来获取参数的稀疏性然后通过要给阈值来对维度进行剪裁使得最终使用的中间矩阵 W u W_u Wu与 W d W_d Wd是两个较小维度的矩阵。
具体来说的话我们先给出一个具有较大中间维度的系数投影矩阵 W u W_u Wu与 W d W_d Wd这部分的定义是和LoRA完全一样的然后我们给出一个门向量来对中间维度进行稀疏化剪裁使得 W u W_u Wu与 W d W_d Wd当中用不到的部分直接置零被抹去。
具体的扰动量输出结果就是 z W u ( g ⊙ ( W d ⋅ x ) ) z W_u(g \odot (W_d \cdot x)) zWu(g⊙(Wd⋅x))
然后关于这个门向量 g g g的训练方式的话就是通过如下的方式 g t 1 Γ η t ⋅ λ ( g t − η t ∇ L 0 ( △ t ) ) g_{t1} \Gamma_{\eta_t \cdot \lambda} (g_t - \eta_t \nabla L_{0}(\triangle_t)) gt1Γηt⋅λ(gt−ηt∇L0(△t))
其中阈值函数的定义为 Γ ξ ( x ) { x − ξ , x ξ 0 , − ξ x ≤ ξ x ξ , x ≤ − ξ \Gamma_{\xi}(x) \left\{ \begin{aligned} x - \xi, x \xi \\ 0, -\xi x \leq \xi \\ x \xi, x \leq -\xi \\ \end{aligned} \right. Γξ(x)⎩ ⎨ ⎧x−ξ,0,xξ,xξ−ξx≤ξx≤−ξ
这个实现的本质事实上就是 L 1 L_1 L1正则换用另一个等价形式可以写为 g t 1 a r g m i n g η t ⋅ λ ∥ g ∥ 1 1 2 ∥ g − ( g t − η t ∇ L 0 ( g t ) ) ∥ 2 2 g_{t1} \mathop{argmin}\limits_{g} \eta_t \cdot \lambda \| g \|_1 \frac{1}{2} \| g - (g_t - \eta_t \nabla L_0(g_t)) \|_2^2 gt1gargminηt⋅λ∥g∥121∥g−(gt−ηt∇L0(gt))∥22
而这个恰好就是 L 1 L_1 L1正则项 L ( △ ) L 0 ( △ ) λ ∑ k 1 K ∥ g ( k ) ∥ 1 L(\triangle) L_0(\triangle) \lambda \sum\limits_{k1}^{K} \| g^{(k)} \|_1 L(△)L0(△)λk1∑K∥g(k)∥1
因此我们可知 g g g会趋向于稀疏而由此我们就可以对参数矩阵 W u W_u Wu与 W d W_d Wd进行降维剪裁。
可以看到上述实现和AdaLoRA基本上是有异曲同工之妙的本质上都是先设置一个较大的中间维度之后进行剪裁不过相较于AdaLoRA用文中的话来说SoRA并没有引入额外的正交限制且只使用 L 1 L_1 L1正则来动态控制每一层中间层的剪裁力度因此多少显得更加直接以及优雅一些。
2. 阈值选取考察
最后文中还讨论了一下上述实现中的阈值参数 ξ \xi ξ的选择通过控制 ξ \xi ξ我们就可以有效地控制最终的输出向量 g g g的稀疏性因此关于 ξ \xi ξ的选择事实上是需要注意一下的显然太稀疏的话会影响模型的效果而太稠密的话那么稀疏化的意义也就没有了耗费的计算量也大。
因此文中给出了一个 ξ \xi ξ的schedule算法如下 通过上述算法文中得到了一系列不同稀疏度的模型然后对其进行分析就可以获得一些关于 ξ \xi ξ的直观认知了。
3. 实验 结论
下面我们来看一下文中给出的具体实验内容。
1. 基础实验
1. 实验设置
首先关于SoRA的具体实验设计方面文中使用的baseline模型主要包括以下一些
AdapterBitFitLoRAAdaLoRA
其次文中使用的实验数据集为GLUE数据集。
最后关于文中实验所使用的模型文中主要是使用DeBERTaV3-base和RoBERTa-large模型进行考察不过主要还是前者为主。
2. 结果分析
下面我们给出文中得到的基础实验的结果如下 可以看到
SoRA与AdaLoRA的效果相近均基本都能够干掉LoRA。
为了更好地比较SoRA与LoRA文中还控制两者在拥有相同的中间维度进行了一下比较得到结果如下 可以看到
SoRA的参数量均少于LoRA但是效果基本都能够优于LoRA模型。
2. 细节讨论
然后我们来看一下文中关于SoRA的细节讨论分析。
1. 稀疏度分析
首先我们来看一下稀疏度对SoRA效果的影响文中给出结果示意图如下 可以看到
整体来说只需要很小的参数量SoRA的效果就能控制和完整的参数量差不多。
2. rank分析
其次文中还对不同任务下SoRA在各个层当中保留的中间层的维度进行了分析讨论得到结果如下 可以看到
不同任务下SoRA保留的中间层的维度是不相同的QQP的保留维度明显就要高于QNLI任务同一任务当中网络的不同部分所需要保留的中间维度也不尽相同多数情况下FFW层所需的中间维度是要高于其他部分的。
3. 参数位置分析
此外文中还对attention层当中QKV矩阵进行了更细致的讨论看看SoRA分别作用于这几部分时的影响得到结果如下 可以看到
整体上还是所有部分都使用了SoRA之后能获得最优的效果。
4. 效率考察
最后文中还对比了SoRA与AdaLoRA的训练效率得到结果如下 可以看到
相较于AdaLoRASoRA在训练上成本更低耗时更少。
4. 总结 思考
综上文中提出了一个LoRA的优化算法SoRA目的是动态调整LoRA的中间维度使得模型可以在保留tuning效果的前提下进一步压缩extra模型的参数量。
当然考虑到我们当前的工作事实上来LoRA都用不到根本不涉及LLM的tuning因此这部分暂时应该也没有机会去上手实操看看了不过整体上感觉还是非常有价值的一个工作后面有机会的话还是想试试……
啊啊啊啊啊我想train模型啊天天调prompt真的是烦死了