【大模型系列】问答理解定位(Qwen-VL/Llama2/GPT)

文章目录

  • 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=100002i/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 βm1nmodβ

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=1mwijxj,yi=f(ai+bi),aˉi=σaiμgi,yi=f(aˉi+bi),μ=n1i=1nai,σ=n1i=1n(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=1nai2

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-1GPT-2GPT-3GPT-4
发布时间2018201920202023
参数量117M1.5B175B估计超过100T
训练数据量5G训练语料40G训练语料45T训练语料13万亿个token
能力能够生成文本、翻译语言和回答问题能够生成更逼真、更复杂的文本能够生成更逼真、更复杂的文本,并在没有任何额外培训的情况下执行许多任务能够生成更逼真、更复杂的文本,并在没有任何额外培训的情况下执行许多任务。它还可以处理图像和文本

GPT系列模型是Decoder-only的模型,即只使用transformer的decoder部分,参数量的增长取决于embedding维度、decoder层堆叠的数量和multi-head的数量。
ChatGPT背后的AI背景、技术门道和商业应用(imgs/13110543_64377187df0f336524.webp)_人工智能_18
Source: 京东云开发者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android中单例模式为什么会引起内存泄漏?

单例模式使用不恰当会造成内存泄漏。因为单例的静态特性使得单例的生命周期和应用的生命周期一样长&#xff0c; 如果一个对象已经不需要使用了&#xff0c;但是单例对象还持有该对象的引用&#xff0c;那么这个对象就不能被正常回收&#xff0c;因此会导致内存泄漏。 举个例子…

【数据可视化】使用Python + Gephi,构建中医方剂关系网络图!

代码和示例数据下载 前言 在这篇文章中&#xff0c;我们将会可视化 《七版方剂学》 的药材的关系&#xff0c;我们将使用Python制作节点和边的数据&#xff0c;然后在Gephi中绘制出方剂的网络图。 Gephi是一个专门用于构建网络图的工具&#xff0c;只要你能提供节点和边的数…

机器学习算法在数据挖掘中的应用

在数据挖掘的实践中&#xff0c;各种机器学习算法都扮演着重要的角色&#xff0c;它们能够从数据中学习规律和模式&#xff0c;并用于预测、分类、聚类等任务。以下是几种常见的机器学习算法以及它们在数据挖掘任务中的应用场景和优缺点。 1. 决策树&#xff08;Decision Tree…

Golang的CSP模型讲解

一.CSP是什么 CSP 是 Communicating Sequential Process 的简称&#xff0c;中文可以叫做通信顺序进程&#xff0c;是一种并发编程模型&#xff0c;是一个很强大的并发数据模型&#xff0c;是上个世纪七十年代提出的&#xff0c;用于描述两个独立的并发实体通过共享的通讯chann…

Stable Diffusion科普文章【附升级gpt4.0秘笈】

随着人工智能技术的飞速发展&#xff0c;我们越来越多地看到计算机生成的艺术作品出现在我们的生活中。其中&#xff0c;Stable Diffusion作为一种创新的图像生成技术&#xff0c;正在引领一场艺术创作的革命。本文将为您科普Stable Diffusion的相关知识&#xff0c;带您走进这…

微信小程序睡眠X秒【while循环模式】

// 微信小程序睡眠X秒sleep(numberMillis) { var now new Date(); var exitTime now.getTime() numberMillis; while (true) { now new Date(); if (now.getTime() > exitTime) {return;}} }, // 微信小程序睡眠X秒 this.sleep(2000); 参考&#xff1a;微信小程序睡眠…

Linux/Ubuntu/Debian控制台启动的程序和terminal分离的方法-正在运行怎么关闭窗口

disown 是一个 shell 内置函数&#xff0c;它从 shell 的作业表中删除指定的作业&#xff0c;使它们免受挂起的影响。 使用方法如下&#xff1a; 首先&#xff0c;正常运行命令&#xff1a; 你的命令然后&#xff0c;按 Ctrl Z 暂停命令。 现在&#xff0c;运行&#xff…

MT1069 圆切平面

n个圆最多把平面分成几部分&#xff1f;输入圆的数量N&#xff0c;问最多把平面分成几块。比如一个圆以把一个平面切割成2块。 不考虑负数&#xff0c;0或者其他特殊情况。 格式 输入格式&#xff1a;输入为整型 输出格式&#xff1a;输出为整型 样例 1 输入&#xff1a; …

全量知识系统“全基因序列” 的百度AI答问 之1

在您所描述的框架下&#xff0c;我们可以开始探索“知识”实体的起点以及如何认识它。首先&#xff0c;让我们明确一下“实体”的定义和性质。实体&#xff0c;在哲学和许多其他学科中&#xff0c;通常被理解为存在于我们世界中的具体事物或抽象概念。它们可以是物理的&#xf…

Flink 集群部署模式

文章目录 前言一、会话模式&#xff08;Session Mode&#xff09;二、单作业模式&#xff08;Per-Job Mode&#xff09;三、应用模式&#xff08;Application Mode&#xff09; 前言 Flink支持多种集群部署模式&#xff0c;以满足不同场景和需求。以下是Flink的主要集群部署模…

springboot多模块下swaggar界面出现异常(Knife4j文档请求异常)或者界面不报错但是没有显示任何信息

继上一篇博文&#xff0c;我们解决了多模块下扫描不到子模块的原因,建议先看上一个博客了解项目结构&#xff1a; springboot 多模块启动报错Field XXX required a bean of type XXX that could not be found. 接下来我们来解决swaggar异常的原因&#xff0c;我们成功启动项目…

QML 布局管理器之ColumnLayout

一.ColumnLayout讲解 QML中的ColumnLayout是一种布局元素&#xff0c;用于在垂直列中排列其子元素。它的主要使用下列附加属性: Layout.minimumWidth Layout.minimumHeight Layout.preferredWidth Layout.preferredHeight Layout.maximumWidth Layout.maximumHeight Layout.fil…

代码随想录算法训练营 Day25|回溯算法2

216.组合总和III 思路 按照回溯算法的逻辑&#xff0c;写代码。 递归函数的参数&#xff0c;除了原有的n, k, startIndex&#xff0c;增加一个sum&#xff0c;计算当前path中的和。 终止条件用sum与n比较&#xff0c;如果满足相等&#xff0c;且满足长度为k&#xff0c;则加入…

WPF-后台设置控件Background

有时候需要在后台设置控件的背景 方法1&#xff1a; Btn_SendNeedle_Admin.Content "送针结束"; Btn_SendNeedle_Admin.Background new SolidColorBrush((Media.Color)Media.ColorConverter.ConvertFromString("#AAFFFFFF")); 方法2&#xff1a; Btn…

SqlServer2008(R2)(一)SqlServer2008(R2)经典宝藏操作收集整理

一、常见操作 1、TRUNCATE TABLE 语句 删除表数据 TRUNCATE TABLE语句比DELET删除表中的所有行更快。从逻辑上讲&#xff0c;TRUNCATE TABLE它类似于DELETE没有WHERE子句的语句。 TRUNCATE TABLE语句从表中删除所有行&#xff0c;但表结构及其列&#xff0c;约束&#xff0c;…

JSON 配置文件

JSON 配置文件的作用 JSON 是一种数据格式&#xff0c;在实际开发中&#xff0c; JSON 总是以配置文件的形式出现。小程序项目中也不例外&#xff1a;通过不同的 .json 配置文件&#xff0c;可以对小程序项目进行不同级别的配置。 小程序项目中有 4 种 json 配置文件&#xff0…

1.AD域控如何强制删除不可以用域控服务器

(1)原因需求 (2)不可用的域控不删掉造成的问题 (3)实战配置步骤 第一步:连接登录到特定服务器 第二步:选择要删除域控所在的站点和名称 第三步:执行删除命令

Ubuntu 20.04 系统如何优雅地安装NCL?

一、什么是NCL&#xff1f; NCAR Command Language&#xff08;NCL&#xff09;是由美国大气研究中心&#xff08;NCAR&#xff09;推出的一款用于科学数据计算和可视化的免费软件。 它有着非常强大的文件输入和输出功能&#xff0c;可读写netCDF-3、netCDF-4 classic、HDF4、b…

Elasticsearch快速检索的法宝: 倒排索引

倒排索引&#xff08;Inverted Index&#xff09;是搜索引擎和信息检索系统中的一个关键数据结构&#xff0c;它允许快速进行全文搜索。在倒排索引中&#xff0c;文档的内容被分析并分割成一系列的词条&#xff08;tokens&#xff09;&#xff0c;然后每个词条被映射到包含它的…

3048. 标记所有下标的最早秒数 I(补题 ,二分 正序 逆序)

3048. 标记所有下标的最早秒数 I 给你两个下标从 1 开始的整数数组 nums 和 changeIndices &#xff0c;数组的长度分别为 n 和 m 。 一开始&#xff0c;nums 中所有下标都是未标记的&#xff0c;你的任务是标记 nums 中 所有 下标。 从第 1 秒到第 m 秒&#xff08;包括 第…