文章目录
- 1 Qwen-VL(2023, Alibaba)
- 1.1 网络结构
- 1.2 模型训练
- 2 Llama2(2023, Meta)
- 2.1 网络结构
- 2.1.1 MHA/GQA/MQA
- 2.1.2 RoPE(Rotary Position Embedding, 旋转式位置编码)
- 2.1.3 RMSNorm
- 2.2 推理
- 2.2.1 集束搜索(beam search)
- 2.2.2 RoPE外推
- 3 GPT系列(OpenAI)
1 Qwen-VL(2023, Alibaba)
参考资料:
- Paper:https://arxiv.org/pdf/2308.12966.pdf
- Github:https://github.com/QwenLM/Qwen-VL/blob/master/README_CN.md
- WebUI:https://tongyi.aliyun.com/qianwen/
- Demo:https://modelscope.cn/studios/qwen/Qwen-VL-Chat-Demo/summary
Qwen-VL是阿里巴巴2023年开源的视觉语言大模型,包含Qwen-VL和Qwen-VL-Chat,以通义千问70亿参数模型Qwen-7B为基座,支持图文输入,具备多模态信息理解能力,其特点如下:
- 支持中英文等多种语言;
- 支持图文识别、描述、问答及对话能力外,还新增了视觉定位、图像文字理解等能力;
- Qwe-VL-Chat可理解、比较多个输入图片之间的上下文关系;
- 使用高分辨率和细粒度预料训练带来的极具竞争力的细粒度视觉理解能力;
1.1 网络结构
Qwen-VL的网络架构主要由三个组件组成:
- 大语言模型LLM: 使用Qwen-7B作为其基座;
- 视觉编码器Vision Encoder: 使用Openclip的ViT-bigG模型,图像patch个数为14x14;
- 位置感知视觉语言适配器Position-aware Vision-Language Adapter: 使用Cross attention,融合可学习的Queries和图像embedding,一张图片由256个queries;
1.2 模型训练
Qwen-VL训练包含三个阶段:两个阶段的预训练和最后的一个指令微调阶段。
第一阶段:用大量低质量数据将视觉和文本对齐,冻结LLM,只训练Vision Encoder和VL adapter
- 数据:开源、网络爬虫的图像-文本对
- 输入图像分辨率:224x224
- 优化目标:最小text tokens的交叉熵
第二阶段:多任务训练,全参数优化
- 数据:GQA , VGQA, VQAv2, DVQA, OCR-VQA, DocVQA.
- 输入图像分辨:448x448
- 优化目标:与第一阶段相同
图文区分: 在图像特征序列的开头和结尾加上特殊token(和);
图文关联: 使用<ref>和</ref>将标记边界框与其描述文本关联;
检测文本与常规文本区分: 使用<box>和</box>对边界框文本进行标记;
边框编码格式: (x1, y1), (x2, y2),即左上和右下角点坐标
第三阶段:监督微调,增强跟随指令对话的能力,冻结Vision Encoder,只训练LLM和VL Adapter
- 数据:Instruction Tuning的训练数据 ,纯文本的单图,多图的Instruction Tuning的训练数据共350K
- 目标:训练多图Infer能力,识别Instruction的能力
在训练期间只监督答案和特殊tokens(图中的蓝色部分)来确保预测和训练分布之间的一致性,而不监督角色名称或问题提示。
2 Llama2(2023, Meta)
参考资料:
- Paper:https://arxiv.org/abs/2307.09288
- Gitthub:https://github.com/facebookresearch/llama-recipes
- Huggingface:https://hf-mirror.com/meta-llama
Llama 2是一系列预训练和微调的大型语言模型(LLMs),参数规模从70亿到700亿不等。Meta的微调LLMs,叫做Llama 2-Chat,是为对话场景而优化的。Llama 2模型在大多数基准上都比开源的对话模型表现得更好,并且根据人类评估的有用性和安全性,可能是闭源模型的合适替代品。
2.1 网络结构
Llama只使用32个transformer的decoder层,是decoder-only的模型。bert是encoder-only,google t5是encoder-decoder结构。
主要改进:
- transformer中的LayerNorm换成了RMSNorm
- Multi-Head Attention换成GQA
- 位置编码换成了RoPE(相对位置编码)
2.1.1 MHA/GQA/MQA
Source:Joshua Ainslie et al.
- 原始的 MHA(Multi-Head Attention),QKV 三部分有相同数量的头,且一一对应。每次做 Attention,head1 的 QKV 就做好自己运算就可以,输出时各个头加起来就行。
- 而 MQA 则是,让 Q 仍然保持原来的头数,但 K 和 V 只有一个头,相当于所有的 Q 头共享一组 K 和 V 头,所以叫做 Multi-Query 了。实验发现一般能提高 30%-40% 的吞吐,性能降低不太大。
- GQA 综合MHA 和 MQA ,既不损失太多性能,又能利用 MQA 的推理加速。不是所有 Q 头共享一组 KV,而是分组一定头数 Q 共享一组 KV,比如上图中就是两组 Q 共享一组 KV。
2.1.2 RoPE(Rotary Position Embedding, 旋转式位置编码)
参考资料:
- https://spaces.ac.cn/archives/8265
- https://spaces.ac.cn/archives/9675/comment-page-2
一般采用绝对位置编码对token编码,但是绝对编码可能丢失了相对位置关系。RoPE是利用绝对位置编码表示相对位置的一种方式,不仅能保持位置编码,还能保持相对的位置关系。实现方式如下:
也就说给位置为m的向量q乘上矩阵Rm,其中 θ i = 1000 0 − 2 i / d θ_i = 10000^{-2i/d} θi=10000−2i/d。Rm矩阵其实相当于是m的β进制表示,其中 β = 1000 0 2 / d β=10000^{2/d} β=100002/d。由于Rm的稀疏性,直接用矩阵乘法会浪费算力,可以通过下面的方式来实现。
注:一个10进制数n的β进制表示的(从左往右数)第m位数字计算公式为:
⌊ n β m − 1 ⌋ m o d β \left\lfloor\frac{n}{\beta^{m-1}}\right\rfloor \bmod \beta ⌊βm−1n⌋modβ
2.1.3 RMSNorm
参考资料: https://blog.csdn.net/qinduohao333/article/details/131061240
LayerNorm计算如下:
a i = ∑ j = 1 m w i j x j , y i = f ( a i + b i ) , a ˉ i = a i − μ σ g i , y i = f ( a ˉ i + b i ) , μ = 1 n ∑ i = 1 n a i , σ = 1 n ∑ i = 1 n ( a i − μ ) 2 . \begin{gathered} a_i=\sum_{j=1}^m w_{i j} x_j, \quad y_i=f\left(a_i+b_i\right), \\ \bar{a}_i=\frac{a_i-\mu}{\sigma} g_i, \quad y_i=f\left(\bar{a}_i+b_i\right), \\ \mu=\frac{1}{n} \sum_{i=1}^n a_i, \quad \sigma=\sqrt{\frac{1}{n} \sum_{i=1}^n\left(a_i-\mu\right)^2} . \end{gathered} ai=j=1∑mwijxj,yi=f(ai+bi),aˉi=σai−μgi,yi=f(aˉi+bi),μ=n1i=1∑nai,σ=n1i=1∑n(ai−μ)2.
改造后的RMSNorm如下:
a ˉ i = a i RMS ( a ) g i , where RMS ( a ) = 1 n ∑ i = 1 n a i 2 \bar{a}_i=\frac{a_i}{\operatorname{RMS}(\mathbf{a})} g_i, \quad \text { where } \operatorname{RMS}(\mathbf{a})=\sqrt{\frac{1}{n} \sum_{i=1}^n a_i^2} aˉi=RMS(a)aigi, where RMS(a)=n1i=1∑nai2
RMS中去除了Mean的统计值的使用,只使用均方根(Root Mean Square)进行归一化。
2.2 推理
2.2.1 集束搜索(beam search)
参考资料:https://zhuanlan.zhihu.com/p/114669778
在模型解码过程中,模型是根据前一个结果继续预测后边的,依次推理,此时为了生成完整的句子,需要融合多个step的输出,目标就是使得输出序列的每一步的条件概率相乘最大。最直接的方法就是贪心算法(greedy search),每步取概率最大的输出,然后将从开始到当前步的输出作为输入,取预测下一步,直到句子结束。如下图所示,第一步先去概率最大的A,依次是B,C。这种的缺点就是如果中间某一步取值不对,将影响后续的结果。
beam search对贪心算法做了优化,在每个step取beam num个最优的tokens。下图beam num=2,第一步先选取最优的2个值{A,C};在第二步,A和C作为输入,继续预测,则有10个可能得结果,然后再取其中最大的2个,作为输入,进行第三步,取结果中概率最大的2个,得到2个结果,然后再在2个结果中取最优的一个作为输出。
2.2.2 RoPE外推
llama1训练时token长度是2048,llama2虽然升级到了4096,但相比gpt-4的32K还是比较短,对于长文本的生成会有限制。
结合RoPE的特性,可以通过位置插值,扩展token的长度。最简单的方法就是线性插值,如下图所示:
Source: Shouyuan Chen et al.
对于下图的上半部分,对于2048之后的位置超出了训练2048的长度,模型推理时,该部分很可能就随机乱猜了,导致生成的结果不好。可以将超出的部分通过线性插值压缩到2048,这样只需要用少量4096长度的数据微调,就能达到很好的效果。其压缩方式就是基于m的β进制展开来实现的,进制越大,能覆盖的范围就 。
3 GPT系列(OpenAI)
参考资料:
- Paper:
- GPT: Improving Language Understanding by Generative Pre-Training
- GPT-2: Language Models are Unsupervised Multitask Learners
- GPT-3: Language Models are Few-Shot Learners
- Blog:https://tooabstractive.com/how-to-tech/difference-between-gpt-1-gpt-2-gpt-3-gpt-4/
GPT系列是OpenAI发布的生成式预训练语言模型GPT(Generative Pre-trained Transformer),可用于生成文章、代码、机器翻译、问答等各类内容。每一代GPT模型的参数量都爆炸式增长,效果也越来越惊艳,真~大力出奇迹。
GPT-1 | GPT-2 | GPT-3 | GPT-4 | |
---|---|---|---|---|
发布时间 | 2018 | 2019 | 2020 | 2023 |
参数量 | 117M | 1.5B | 175B | 估计超过100T |
训练数据量 | 5G训练语料 | 40G训练语料 | 45T训练语料 | 13万亿个token |
能力 | 能够生成文本、翻译语言和回答问题 | 能够生成更逼真、更复杂的文本 | 能够生成更逼真、更复杂的文本,并在没有任何额外培训的情况下执行许多任务 | 能够生成更逼真、更复杂的文本,并在没有任何额外培训的情况下执行许多任务。它还可以处理图像和文本 |
GPT系列模型是Decoder-only的模型,即只使用transformer的decoder部分,参数量的增长取决于embedding维度、decoder层堆叠的数量和multi-head的数量。
Source: 京东云开发者