大模型学习

news2024/10/6 20:30:40

大模型学习

  • 计算机视觉方向
    • ViT
      • Image Token Embedding
      • Multi-head Self-attention
    • Stable Diffusion
      • stable diffusion支持功能
      • stable diffusion整体结构
      • ClipText如何训练
      • 图像信息创建器(Image information creator)
      • 自动编码解码器(降噪绘制图形)
      • 总的流程
    • MAE
    • DALL-E 2
      • 总体结构
      • 详细原理
        • 链接文本和视觉语义
        • 从视觉语义生成图像
        • GLIDE模型
  • 自然语言处理
    • BERT和GPT
  • 多模态
    • ViLBERT阶段
    • ViLT阶段
    • BLIP-2
      • Q-Former
      • LLM
      • 训练

计算机视觉方向

ViT

在这里插入图片描述

Image Token Embedding

模型输入一个将一张28x28x3的图片,模型先将图片切成一个16块,每一块为7x7。还是3通道的。

再将7x7,3通道的数据,并成一行,[1,7x7x3]=[1,147],
有16块那就是[16,147]。

接着将图片转为特征向量Embedding:
I m a g e 16 ∗ 147 ∗ W 147 ∗ 96 Image_{16*147}*W_{147*96} Image16147W14796=Embedding

其中 W 147 ∗ 96 W_{147*96} W14796就是要训练的参数,也就是下图中的Patch Embedding,
在这里插入图片描述

Multi-head Self-attention

依据模型输入的图片转换为的Image token Embedding,我们假设这个图像块集合为 [ x 1 , x 2 , . . . , x 16 ] [{x_1, x_2, ..., x_{16}}] [x1,x2,...,x16],每个图像块的维度为 96 × 16 96 \times 16 96×16,接着将这个embedding输入到transformer中。在transformer首先进入到Multi-head Self-attention进行以下四个步骤:线性变换、多头机制、scale和softmax、多头机制。下面我们将逐步说明这些步骤的算法流程。

线性变换
我们首先将每个图像块 x i x_i xi映射到一个10维的向量 z i z_i zi这个映射是通过对 x i x_i xi做一个线性变换得到的,具体而言,我们将 x i x_i xi乘以一个 96 × 10 96 \times 10 96×10的权重矩阵 W q W_q Wq得到一个10维的向量 z i z_i zi
z i = W q a i z_i = W_q a_i zi=Wqai
其中 z i z_i zi向量包含有 q i , k i , v i q_i,k_i,v_i qi,ki,vi模型训练需要算出参数有三个变换矩阵 W q , W k , W v W_q,W_k,W_v WqWkWv

MatMul
我们计算每个图像块 x i x_i xi与其他所有图像块的注意力分数。具体而言,我们计算每对图像块 ( x i , x j ) (x_i, x_j) (xi,xj)的注意力分数 a i , j a_{i,j} ai,j,并将其用于加权求和所有图像块的向量表示。
为了计算注意力分数,我们需要先计算每对图像块之间的“相似度”,这个相似度是通过将 q i q_i qi k j k_j kj做点积得到的。
其中, q i q_i qi k j k_j kj分别是图像块i和图像块j通过线性变换得到的向量。这个点积的结果可以看作是两个向量的余弦相似度,用于衡量它们之间的相似程度,i ∈ [ 1 , 16 ] , j ∈ [ 1 , 16 ] i \in[1,16],j\in [1,16]i∈[1,16],j∈[1,16].
s j = q i ⋅ k j s_j = q_i \cdot k_j sj=qikj
在这里插入图片描述
Scale和softmax
然而,直接计算点积可能会因为向量维度较大而导致计算上的不稳定性,因此我们在计算前先将 q i q_i qi k j k_j kj除以一个缩放因子 10 \sqrt{10} 10 ,就是特征的维度10,从而保证点积的值较小,不容易出现计算上的不稳定性,然后在进行softmax函数计算。

具体公式如下:
p j = s o f t m a x ( ∑ i ∑ j q i ⋅ k j 10 ) = q i ⋅ k j 10 ∑ i ∑ j q i ⋅ k j 10 p_j =softmax(\sum_{i}\sum_{j}\frac{q_i \cdot k_j}{\sqrt{10}})=\frac{ \frac{q_i \cdot k_j}{\sqrt{10}}}{\sum_{i}\sum_{j} \frac{q_i \cdot k_j}{\sqrt{10}}} pj=softmax(ij10 qikj)=ij10 qikj10 qikj

其中, ⋅ \cdot 表示向量点积运算。注意力分数的分母 10 \sqrt{10} 10

MatMul
最后结合向量 v i v_i vi计算出 x i x_i xi的注意力特征向量 z i z_i zi z i = ∑ i i = 16 p i ∗ v i z_i=\sum_{i}^{i=16} p_i*v_i zi=ii=16pivi
具体流程可以看下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上面这种是对于自注意力的,还有一种多注意力
多注意力实现其实就是多个自注意力这样的结构结合起来,如下图所示
在这里插入图片描述

上面的x,就是 [ x 1 , x 2 , x 3 , . . . , x 16 ] [x_1,x_2,x_3,...,x_{16}] [x1,x2,x3,...,x16]
组合起来,以第一个自注意力来看, Q 1 , K 1 , V 1 Q_1,K_1,V_1 Q1,K1,V1
​其实就是自注意力里的 [ q 1 , q 2 , q 3 , . . . , q 16 ] , [ k 1 , k 2 , k 3 , . . . , k 16 ] , [ v 1 , v 2 , v 3 , . . . , v 16 ] [q_1,q_2,q_3,...,q_{16}],[k_1,k_2,k_3,...,k_{16}],[v_1,v_2,v_3,...,v_{16}] [q1,q2,q3,...,q16],[k1,k2,k3,...,k16],[v1,v2,v3,...,v16]

Stable Diffusion

stable diffusion支持功能

  • 根据文字生成图片
    在这里插入图片描述
  • 文字+图片生成新的图片
    在这里插入图片描述

stable diffusion整体结构

在这里插入图片描述

  • ClipText: 用于文本编码。输入: 文本。输出: 77个token embeddings向量,每个向量有768维。
  • UNet+调度程序: 在信息(潜在)空间中逐步处理信息。输入: 文本embeddings和一个初始化的多维数组(结构化的数字列表,也称为张量)组成的噪声。输出:经过处理的信息数组。
  • 自动编码解码器(Autoencoder Decoder): 使用经过处理的信息数组绘制最终图像。输入:经过处理的信息数组(维数:(4,64,64))输出: 生成的图像(维数:(3,512,512),即(红/绿/蓝;宽,高))。

ClipText如何训练

在这里插入图片描述
图像和文本描述分别经过图像编码和文本编码,然后计算两个编码的相似度,并形成loss更新编码器参数。

图像信息创建器(Image information creator)

diffusion整体
在这里插入图片描述

  • diffusion采用多步的方式生成,每一步的latents可以通过解码器可视化
  • 每个step都在输入的latents数组上运行,并且会产生另一个latents数组

diffusion单步原理

  • 训练数据生成(生成的随机噪声作为label,加了噪声的图片作为输入)
    在这里插入图片描述
  • 训练一个可以预测出噪声的模型
    在这里插入图片描述

自动编码解码器(降噪绘制图形)

  • 经过训练的噪音预测器可以对噪音图像进行降噪处理,并且可以预测噪音。
    在这里插入图片描述
    通过采用将noise amount后的图像减去预测的噪声图像来去噪,逐步反向传播实现去噪。
    在这里插入图片描述

总的流程

在这里插入图片描述
正向扩散是使用Image Encoder生成图像数据,来训练噪声预测器。训练一旦完成,就可以执行反向扩散,使用Image Decoder生成图像。
在这里插入图片描述

MAE

DALL-E 2

openAI推出

总体结构

在这里插入图片描述

  • 首先,CLIP 文本编码器将图像描述映射到表征空间。
  • 然后扩散先验从 CLIP 文本编码映射到相应的 CLIP 图像编码。
    在这里插入图片描述
  • 最后,修改后的 GLIDE 生成模型通过反向扩散从表征空间映射到图像空间,生成许多可能的图像之一,这些图像在输入说明中传达语义信息。

详细原理

链接文本和视觉语义

训练 CLIP 的基本原则非常简单:

  • 首先,所有图像及其相关标题都通过它们各自的编码器,将所有对象映射到一个 m 维空间。
  • 然后,计算每个(图像,文本)对的余弦相似度。
  • 训练目标是同时最大化 N 个正确编码图像 / 标题对之间的余弦相似度,并最小化 N 2 - N 个不正确编码图像 / 标题对之间的余弦相似度。

从视觉语义生成图像

训练后,CLIP 模型被冻结,DALL-E 2 进入下一个任务。OpenAI 使用其先前模型 GLIDE (https://arxiv.org/abs/2112.10741) 的修改版本来执行此图像生成。GLIDE 模型学习反转图像编码过程,以便随机解码 CLIP 图像嵌入。
在这里插入图片描述
如上图所示,应该注意的是,目标不是构建一个自动编码器并在给定嵌入的情况下准确地重建图像,而是生成一个在给定嵌入的情况下保持原始图像显著特征的图像。为了执行这个图像生成,GLIDE 使用了一个扩散模型。

GLIDE模型

GLIDE 通过使用额外的文本信息增强训练来扩展扩散模型的核心概念,最终生成 text-conditional 图像。我们来看看 GLIDE 的训练过程:
在这里插入图片描述

自然语言处理

BERT和GPT

  • Bert的网络结构类似于Transformer的Encoder部分,而GPT类似于Transformer的Decoder部分

  • Bert使用Multi-Head-Attention,GPT使用Masked Multi-Head-Attention

  • 在Bert的预训练任务中,Bert主要使用“填空题"的方式来完成预训练:
    随机盖住一些输入的文字,被mask的部分是随机决定的,当我们输入一个句子时,其中的一些词会被随机mask。
    在这里插入图片描述
    GPT要做的任务是,预测接下来,会出现的token是什么
    在这里插入图片描述

  • Bert用的是上下文的信息,而GPT仅用了上文的信息。

  • GPT主要用于文本生成任务,而BERT则主要用于文本理解任务

  • BERT和GPT是一个预训练模型,其必须要适应各种各样的自然语言任务。

多模态

多模态问答需要什么能力

  • 图片里发生了什么:一位男士在船头搂着一位女士。(感知-CV模型的能力)
  • 问题问的什么:电影的结尾是什么?(感知-NLP模型的能力)
  • 图片和电影有什么关系:这是泰坦尼克号里的经典镜头。(对齐融合-多模态模型的能力)
  • 电影的结尾是什么:泰坦尼克号沉没了。(推理-LLM模型的能力)

ViLBERT阶段

19年20年的时候,ViLBERT和Uniter采用了Object-Text对来提升模型对图片的理解能力。Object的引入,不可避免的需要一个笨重的检测器,去检测各种框,使得图像模态显得比较笨重。而且检测器模型不可避免的会存在漏检的问题,可以参考后来Open-Vocabulary一些工作,比如ViLD。这一阶段,显然对图像的理解是多模态的重头戏,文本更多是辅助图像任务的理解。

ViLT阶段

到了21年22年,去掉检测器成了主流,ViLT,ALBEF,VLMo,BLIP 等等都抛弃了检测器,彻底摆脱了CNN网络的舒服,全面拥抱Transformer,当然这也得益于本身ViT模型在CV领域的大放光彩,让两个模态的有机融合成为了可能。在这一阶段,文本模态感觉已经可以和图像模态平起平坐了。从在各项具体下游任务(VQA、VG、ITR)的实际表现上来说,已经比较令人满意了。但总感觉差点味道,就是复杂推理。比如VQA上的问题,大多数是简单的逻辑计算或识别,感觉还不够智能。

BLIP-2

  • 由微软发展

在这里插入图片描述
23年1月,BLIP2出来了,引入了LLM。从图像上看,BLIP2大概由这么几个部分组成,图像(Image)输入了图像编码器(Image Encoder),得到的结果与文本(Text)在Q-Former(BERT初始化)里进行融合,最后送入LLM模型。

Q-Former

为了融合特征,那Transformer架构是最合适不过的了。熟悉ALBEF或者BLIP的同学或许发现,Q-Former的结构和ALBEF其实很像,如果看代码的话,可以发现就是在ALBEF基础上改的。

相较于ALBEF,最大的不同,就是Learned Query的引入。可以看到这些Query通过Cross-Attention与图像的特征交互,通过Self-Attention与文本的特征交互。这样做的好处有两个:(1)这些Query是基于两种模态信息得到的;(2)无论多大的视觉Backbone,最后都是Query长度的特征输出,大大降低了计算量。比如在实际实验中,ViT-L/14的模型的输出的特征是257x1024的大小,最后也是32x768的Query特征。

LLM

在这里插入图片描述
这里作者针对两类不同LLM设计了不同的任务:

  • Decoder类型的LLM(如OPT):以Query做输入,文本做目标;
  • Encoder-Decoder类型的LLM(如FlanT5):以Query和一句话的前半段做输入,以后半段做目标;

训练

训练细节
作为图文预训练的工作,工程问题往往是关键。BLIP2的训练过程主要由以下几个值得关注的点:

  • 训练数据方面:包含常见的 COCO,VG,SBU,CC3M,CC12M 以及 115M的LAION400M中的图片。采用了BLIP中的CapFilt方法来Bootstrapping训练数据。
  • CV模型:选择了CLIP的ViT-L/14和ViT-G/14,特别的是,作者采用倒数第二层的特征作为输出。
  • LLM模型:选择了OPT和FlanT5的一些不同规模的模型。
  • 训练时,CV模型和LLM都是冻结的状态,并且参数都转为了FP16。这使得模型的计算量大幅度降低。主要训练的基于BERT-base初始化的Q-Former只有188M的参数量。
  • 最大的模型,ViT-G/14和FlanT5-XXL,只需要16卡A100 40G,训练6+3天就可以完成。
  • 所有的图片都被缩放到224x224的大小。

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

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

相关文章

One Note插件——gem for onenote的安装

文章目录一、前言二、报错原因三、解决方法一、前言 平时写笔记都是用的OneNote来记录,但是Onenote没有 Markdown编辑器 ,写起来很不方便,搜索了解后知道gem for OneNote这个插件,于是下载安装了,但是插件每次都要手动勾选&#…

什么是小程序SDK?安全吗?

前面分享了很多小程序相关的内容,常常提到小程序SDK的概念,但似乎有很多小伙伴不是很理解,今天就来跟大家聊聊小程序SDK。 什么是小程序SDK? 小程序SDK是一种开发工具包,用于开发和构建小程序应用程序。它提供了一系列…

【thingsboard+chirpstack 下行数据通信测试】

这里写目录标题 7. 节点未收到 tb 平台下发数据原因分析7.1 收到的size为07.2 节点收不到数据7.3 可以收到数据的一组例子7.4 节点没收到数据原因分析本文主要描述 tb 下发的数据,节点接收不到原因分析。 主要是数据格式以及解析脚本的对应关系 7. 节点未收到 tb 平台下发数据…

Golang数据类型比较

直接使用比较的情况 分类说明是否能比较说明基本类型整型( int/uint/int8/uint8/int16/uint16/int32/uint32/int64/uint64/byte/rune等)浮点数( float32/float64)复数类型( complex64/complex128)字符串&a…

《Vue3实战》 第一章 nods/npm安装、配置

1、nods.js安装(Windows) 1.1、下载并安装node https://nodejs.org/en/ , 安装到d盘nodejs目录 1.2、配置环境变量 path配置 1.3、配置全局包存放目录和缓存目录 在根目录下创建node_global(全局包存放目录)和node_cache&…

关于药物|新药|药品市场调研报告(实操资料分享)

药品市场调研报告是指对药品行业进行详细的市场情况研究和分析。往往伴随着药品市场调研目的地不同,如战略探索、新药开发、投资决策等,报告编辑的内容要点要求也不一样。但总的核心要点内容笔者已提炼,如下: 一、药品市场调研报告…

DeePMD-kit 配置环境备忘

版本 Conda Conda是一个开源的包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖项,并在它们之间轻松切换。它可以在Linux、OS X和Windows上运行,是为Python程序创建的,但可以打包和分发任何软件。 conda enactivatec…

为何ChatGPT如此擅长编造故事?

“幻觉”——人工智能中的一个偏见性术语 AI聊天机器人(如OpenAI的ChatGPT)依赖于一种称为“大型语言模型”(LLM)的人工智能来生成它们的响应。LLM是一种计算机程序,经过数百万文本源的训练,可以阅读并生成“自然语言”文本语言,就像人类自然…

TCP报头结构和TCP协议特性

TCP报头结构 原端口号/目的端口号:表示数据是从哪个进程来,到哪个进程去; 32位序号/32位确认号:这个序号是取的发送方发送所用数据下一个字节的序号,发送方的序列号和接收方的确认号一样,才算接收成功&…

敏捷开发模式下如何用 PingCode 这类工具进行版本发布管理

在软件团队工作中,版本发布要达到好的发布效果,需要在版本发布前做好版本发布的规划,并对发布流程和进度进行管理 准备工作: 您已经创建了一个 PingCode 帐户【快速注册入口】 您创建了一个 PingCode Scrum或 Kanban 项目 您的…

【周末闲谈】文心一言,模仿还是超越?

个人主页:【😊个人主页】 系列专栏:【❤️周末闲谈】 周末闲谈 ✨第一周 二进制VS三进制 文章目录周末闲谈前言一、背景环境二、文心一言?(_)?三、文心一言的优势?😗😗😗四、文心一…

使用 arm 架构实例搭建 Harbor

使用 arm 架构实例搭建 Harbor事情准备(使用甲骨文云上实例时的准备事项)第1步,准备自签名证书第2步,安装Docker-ce第3步,构建arm镜像第4步,安装Harbor第5步,访问Harbor第6步,上传镜…

TensorFlow 深度学习第二版:1~5

原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只…

2023年【第十四届蓝桥杯】省赛java b组填空题

第一题 令 S 1! 2! 3! ... 202320232023!,求 S 的末尾 9 位数字。 提示:答案首位不为 0。 考试时的想法以及题解: 如果我们直接按照题目描述直接来求每个阶乘和的话恐怕没有什么数据类型能够胜任,在考试时我一开始使用了…

Linux中的read/write和recv/send的区别,并使用recv/send实现简单的聊天功能

Linux中的read/write和recv/send的区别read/writeread/writeread/write的用法recv/sendrecv/sendrecv/send的用法LinuxLinuxLinux中的read/writeread/writeread/write和recv/sendrecv/sendrecv/send的区别下面是一个使用read/write进行文件读写操作的例子:下面是一个…

【云原生】Kubernetes(k8s)部署 MySQL+Dubbo+Nacos服务

一、说明二、部署 MySQL三、部署 Nacos四、部署 Dubbo 服务4.1. 创建镜像仓库的密钥4.2. 部署 provider 服务4.3. 部署 consumer 服务五、测试一、说明 本文介绍基于 Kubernetes(k8s) 环境集成阿里云 私有镜像仓库 来部署一套 Dubbo Nacos 的微服务系统,并使用 Ku…

VUE前端项目环境搭建

背景: 想要使用vue搭建一个前端项目,写个小网站练练手,因为没有前端经验,所以从网上找了一个vue得开源模板使用,经过一番挑选选中了字节公司花裤衩大佬开源得项目,地址如下: 开源项目地址&…

第三代api自动化测试框架使用教程(pytest+allure+sql+yaml)

使用教程一、配置1、环境配置2、框架配置3、启动入口二、用例编写1、用例模板2、参数依赖写法2、函数(方法插件)写法3、接口上传文件和表单参数4、接口上传json参数5、接口无数据填写6、code断言7、body断言7、json断言8、sql断言9、完整断言写法&#x…

三种不同实现ublk的零拷贝I/O的方法

用户态块设备ublk,就是提供/dev/ublkbX这样的标准块设备给业务,业务读写这个块的实际IO处理由编写的用户态的代码决定。这就好比使用FUSE,所有对挂载于FUSE的目录的读写都是编写的IO handler来处理一样。使用用户态块设备,可以方便…

产品经理必读|用户研究方法总结①

众所周知,理解用户需求,识别用户痛点,是产品或功能成型之前绕不开的过程。而要获取到用户真实的需求和痛点,唯一的方法就是做用户调研。而用研的方法都有哪些呢?今天我就来给大家分享一下行业中常见的用研方法。 用研的…