摘要
截至目前,大模型发展迅速,真的是望眼欲穿,什么时候能到模型大一统时代QAQ,针对于想知道大模型原理的人,吾在此总结一篇“从Attention到LLm”,一下内容均出自项目经验和个人所学(互联网),我尽量用"大白话"来叭叭,后续还会更新RAG和Agent应用落地的一些经验。
注:本文的图均是个人手绘(drawio),懒得打水印了,如果你觉得有用,无偿给你~
一.LSTM
lstm不赘述了,直接放一个自己手绘的图。
二.Attention
Attention是一种用于提升基于RNN,LSTM的编码+解码(Encoder+Decoder)模型的效果的机制,话不多说,上图!
1. 流程图解释
分成两块来理解,计算已在图有显示:
Encoder:编码阶段,主要将输入向量化(Embedding)
Decoder:解码阶段,主要讲输出文本话
一些细节:
2.Sacled Dot-Product Attention(点积注意力机制)
该部分计算的是Query,Key的相似度,由简入深,下面列举一下简单的计算相似度的方法
a.向量内积
这里举例二维空间中两个点的距离cosθ。 <q, k>
b.矩阵变换
这里举例q,k为行向量,形状为:1xk,1xw。w矩阵型状为:kxw
c.Sacled Dot-Product Attention
Sacled Dot-Product Attention使用相似度计算的:
解释下这里为什么使用根号d(维度):
除以根号d(维度)可以将<q,k>缩小,防止过大,BP(反向传播)进入Softmax层后梯度消失,举个例子 x = (a, a, 2a, 4a), softmax(x)会将更多的权重分配到大数上,softmax(4a)远远大于softmax(a)。
会使BP时梯度消失。(a, a, 2a, 4a) -> y(0, 0, 0, 1)
Sacled Dot-Product Attention计算:
三.Transformer
首先关注self-attention部分:
1.self-attention
自注意力机制,将单个序列(一句话)的不同位置(单词)关联起来
可以看到,每个单词,embedding后分别乘了3个矩阵(wq, wk, wv)得到了Q,K,V,这个流程是一起被并行计算(优于了普通的Attention模型),得到的Q(query),K(Key), V(value)做Sacled Dot-Product Attention计算
2.Multi Head
图中输入的文本经过的Wq, Wk, Wv 矩阵原本是公用的一个,使用Multi Head会增加多组[Wq, Wk, Wv],这是因为模型可以通过并行处理多组头的结果,增加对文本的理解。
3.Feed Forward(FNN)
图中的Feed Forward本人理解是必须要用到的,因为正向传播需要非线性变换,如果没有,那堆叠再多的层也毫无意义
4.Padding Mask
在训练的时候使用,保持每个batch输入的长度一直。如果填充0毫无意义,所以一般替换成一个很大的负数,进入softmax后概率就是0
4. Masked Multi Head
只在decoder端进行,目的是让模型输出无法看见未来的信息,实现解码时只依赖前面的输出
5.Pre Norm,Post Norm,RMS Norm
模型把传统的Add之后做Layer Norm的方式叫做Post Norm
模型把传统的Add之前做Layer Norm的方式叫做Post Norm
RMS norm是在Layer Norm做了下改进经典(均值平方根),可以减少时间,Layer Norm/RMS(a)
四.LLM
简单聊完传统的模型直接转到大模型,大模型一些基础和需要了解的东西
1.LLM的内核
简单来说大模型就是一堆Transformer堆叠。
2.绝对位置编码和旋转位置编码
首先为什么要用位置编码?因为Attention对位置信息不敏感!
加入位置编码后会使token知道上下文的信息
RoPe(旋转位置编码)目前流行的,具体计算下次再发吧,有些疲惫。
3.长度扩展和外推
训练的时候,长度L为1024,如何在推理的时候,推理2048长度(或大于1024)
拖过缩小旋转位置编码的旋转弧度mθ,以达到长度扩展的目的。
4.调参选择
这里选择6B的模型
batch_size=5
MaxLength=样本平均长度*1.5
显存计算6*6B*batch_size=180
这里的6是optim存的前向结果,之前步骤梯度结果,大概为6
5.BPE分词
使用BPE分词可以忽略语言差异,例如中文、英文、发文
因为BPE把预料都转换成了UTF-8格式
6.高效微调
理解微调的原理,手撸代码后续也会更新
PEFT(Parametet-Efficient-FineTuning)
a.Prefix-Tuning/Prompt-Tuning
在模型的输入或隐层添加K个额外可训练的前缀tokens,之训练这些tokens
Prefix+问题: tk tk tk 今天生病了,我能否上班 答案:今天不能。(训练tk)
b.Adapter-Tuning
将较小的神经网络层或模块插入与训练模型的每一层
c.LoRA
通过学习小参数的低秩矩阵来近似模拟模型的权重矩阵W,训练时只优化低秩矩阵
注:在Attention时Q, K加入
五.结语
手撸代码和其他的概念下次再更。。