本文一开始是《七月论文审稿GPT第2版:从Meta Nougat、GPT4审稿到Mistral、LongLora Llama》中4.3节的内容,但考虑到
故把这部分的内容抽取出来独立成本文
具体而言,LongLora是港中文和MIT的研究者通过此篇论文《LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models》于23年9月底提出的(这是其GitHub),其显著特点有三
通过本博客内的多篇文章可知,原始transformer的计算复杂度虽序列长度的二次方成正比,这一点一直导致模型的长下文长度不好扩展(比如把长度从2048扩展到8192,复杂度得上升4x4 = 16倍),对于该问题 很多研究者或团队做了各种改进与探索
如何降低资源开销呢?一种直接的方法是通过LoRA对预训练的LLM进行微调
For a pre-trained weight matrix W ∈ R d×k , it is updated with a low-rank decomposition W + ?W = W + BA, where B ∈ R d×r?and A ∈ R r×k .
The rank r ? min(d, k). During training, W is frozen with no gradient updates, while A and B are?trainable. This is the reason why LoRA training is much more efficient than full fine-tuning.
In the Transformer structure, LoRA only adapts the attention weights (Wq, Wk, Wv, Wo) and freezes all other layers, including MLP and normalization layers
LoRA利用低秩矩阵对自注意块中的线性投影层进行修改,从而减少了可训练参数的数量(LoRA modifies the linear projection layers in self-attention blocks by utilizing low-rank matrices, which are generally efficient and reduce the number of trainable parameters)
如下图所示
上面的描述还是不够形象具体,那到底怎么理解这个S2-Attn呢?如下图所示(值得一提的是,这个图是论文v2版的,和论文v1版稍有细微差别,当然 不影响本质)
为方便大家更快的理解,特再补充两点
- 为形象起见,举个例子,假定这8个单词是i am learning Machine Learning by julyedu online,然后上述过程可用下表表示
i 前一半(表示) i 后一半(表示) i 前一半 online 后一半:line am 前一半 am 后一半 am 前一半 i 后一半 learning 前一半 learning 后一半 learning 前一半 am 后一半 Machine 前一半 Machine 后一半 Machine 前一半 learning 后一半 Learning 前一半 Learning 后一半 Learning 前一半 Machine 后一半 by 前一半 by 后一半 by 前一半 Learning 后一半 julyedu 前一半 julyedu 后一半 julyedu 前一半 by 后一半 online 前一半 online 后一半 online 前一半:on julyedu 后一半 - 针对上面那个S2-Attn示意图
该图的左边部分 上文已经解释的很清楚了,那右侧的两个图呢?
咋一看,比较抽象,其实仔细琢磨之后,右侧的两个图描述的注意力范围,pattern2相对于pattern1的注意力窗口是“移位”了的 具体到某个token来观察会清楚一点,除了“pattern1中q1”和“pattern2中q1”的注意力范围是一致 都是k1之外
pattern1中q2的注意力范围是[k1,k2],pattern2中q2的注意力范围变成了仅[k2];
pattern1中q3的注意力范围仅是[k3],pattern2中q3的注意力范围变成了[k2,k3];
pattern1中q4的注意力范围是[k3,k4],pattern2中q4的注意力范围变成了仅[k4];
pattern1中q5的注意力范围是仅[k5],pattern2中q5的注意力范围变成了[k4,k5];
...
两个pattern从最开始的token注意力范围就是错位的,所以后续token注意力范围就一直是错开的,这样错开的形式使得两个pattern聚合起来就可以让组外信息有机会产生交互
如下图所示
1 | head2 | head3 | head4 | head1 | head2 | head3 | 4 |
2 | 1 | ||||||
3 | 2 | ||||||
4 | 3 |
在llama 13B上应用longlora技术,便是LongAlpaca-13B
// 待更