整理知识,温故而知新,学而时习之。路漫漫其修远兮,吾将上下而求索。
先叠个甲,毕业之后没有研究过AI相关的知识,所以可能对AIGC的理解不到位或者不正确,如果有理解偏差的地方,望各位大佬指出,帮助我更好地学习理解~三人行,必有我师焉
0.发展历程
一切都是有迹可循的。站在巨人的肩膀上。这是一系列的递进的工作。
基石 – Transformer
Transformer 是一个纯基于自注意力的编码-解码器
GPT系列、CLIP、DALL·E等模型都是基于Transformer框架
相关论文:
Attention Is All You Need – Transformer论文
Efficient Transformers: A Survey – Transformer相关论文综述
注意力机制(Attention)
Attention是什么?
灵长类动物的视觉系统接受了大量的感官输入, 这些感官输入远远超过了大脑能够完全处理的程度。 然而,并非所有刺激的影响都是相等的。 意识的聚集和专注使灵长类动物能够在复杂的视觉环境中将注意力引向感兴趣的物体,例如猎物和天敌。 只关注一小部分信息的能力对进化更加有意义,使人类得以生存和成功。
例如下图,一份报纸、一篇研究论文、一杯咖啡、一本笔记本和一本书。 所有纸制品都是黑白印刷的,但咖啡杯是红色的。 换句话说,这个咖啡杯在这种视觉环境中是突出和显眼的, 不由自主地引起人们的注意。 所以我们会把视力最敏锐的地方放到咖啡上。喝咖啡后,我们会变得兴奋并想读书, 所以转过头,重新聚焦眼睛,然后看看书。 与 关注咖啡杯不同,由于突出性导致的选择不同, 此时选择书是受到了认知和意识的控制, 因此注意力在基于自主性提示去辅助选择时将更为谨慎。
Query、Key、Value
-
Query,是自主性提示,即上面的想读书,我想要干嘛
-
Key、Value,一组键值对,环境,可以理解为感官输入,即上文的五个物体(报纸、论文、咖啡、笔记、书)是key,value可以是我对这五个物品的理解,例如报纸可以获取信息、论文可以学习、咖啡可以喝、笔记用来记录、书用来学习。当然key和value可以是一样的东西
给定任何查询,注意力机制通过注意力汇聚(attention pooling) 将选择引导至感官输入*(sensory inputs,例如中间特征表示)。 在注意力机制中,这些感官输入被称为值(value)。 更通俗的解释,每个值都与一个键(key)配对, 这可以想象为感官输入的非自主提示。 如 上图所示,可以通过设计注意力汇聚的方式, 便于给定的查询(自主性提示)与键(非自主性提示)进行匹配, 这将引导得出最匹配的值(感官输入)。 *——-FROM 《动手学深度学习》
注意力机制
一般的注意力机制可解释为计算 Query 和 Key 之间的相似性,并利用这种相似性确定 Query 和 Value 之间的注意力关系。
**一个键(key)越是接近给定的查询(query), 那么分配给这个键对应值(value)**的注意力权重就会越大,最终获取到注意力
Tip:
-
softmax是归一化函数,即将多个输入值映射到一个概率分布上,使得每个输出值都在0到1之间,并且所有输出值的和为1。通常用作为多分类的目标预测值。
-
上面的公式是最简单的注意力机制的公式,并不是以下所有模型使用的公式
自注意力机制
自注意力机制,即在上文注意力机制基础上,加上一个条件,即Query、Key、Value都是自己,所以叫“自”注意力机制。例如在文本中主要是通过自身输入获得Q和K(将输入映射到不同的向量空间,即Query、Key、Value的向量空间,关注输入信息的不同部分),来计算输入单词间的相互影响(权重)
Transformer模型 – 基于自注意力的编码-解码器架构
编码-解码器架构
编码器(Encoder):将输入编程为中间的表达形式(特征
解码器(Decoder):将中间表示解码成输出,也可以加上一些其他输入最后解码成输出
多头注意力
当给定相同的查询、键和值的集合时, 我们希望模型可以基于相同的注意力机制学习到不同的行为, 然后将不同的行为作为知识组合起来, 捕获序列内各种范围的依赖关系。即每个注意力学习的倾向不同,希望在一个背景下学到更多知识,然后把知识汇总起来。例如一句话或者一个单词有多种含义,所以要学习多种含义?
简单解释
从宏观角度来看,Transformer的编码器是由多个相同的层叠加而成的,每个层都有两个子层(子层表示为sublayer)。第一个子层是多头自注意力(multi-head self-attention)汇聚;第二个子层是前馈网络( feed-forward network)。具体来说,在计算编码器的自注意力时,查询、键和值都来自前一个编码器层的输出。最终编码器都将输出一个d维表示向量。
Transformer解码器也是由多个相同的层叠加而成的,并且层中使用了残差连接和层规范化。除了编码器中描述的两个子层之外,解码器还在这两个子层之间插入了第三个子层,称为编码器-解码器注意力(encoder-decoder attention)层。在编码器-解码器注意力中,查询来自前一个解码器层的输出,而键和值来自整个编码器的输出。在解码器自注意力中,查询、键和值都来自上一个解码器层的输出。但是,解码器中的每个位置只能考虑该位置之前的所有位置。这种掩蔽(masked)注意力保留了自回归(auto-regressive)属性,确保预测仅依赖于已生成的输出词元。(掩码即掩盖了后面的信息,利用前面的信息预测后面的信息)
Tips:
-
解码器是自回归的,即过去时刻的输出,作为当前时刻的输入。
-
两个超参数,n层,d维,gpt系列就是调整了这两个超参数;除此之外,多头注意力的头数也是一个超参数
优点:
-
有高度并行性,并允许数据战胜归纳偏置。这一特性使得Transformer非常适合大规模的预训练,使基于Transformer的模型能够适应不同的下游任务。
-
自注意力可以产生更具可解释性的模型。我们可以从模型中检查注意力分布。各个注意头(attention head)可以学会执行不同的任务。
影响:
应用于NLP、CV等等领域,多模态,大家都用Transformer抽取特征的话,那么文本、图片、音频、视频等模态在一个语义空间的话,使得可以进行模态融合,从而有跨模态的应用
“大力出奇迹”- GPT系列
相关论文
迁移学习(transfer learning)
迁移学习(transfer learning)通俗来讲,就是运用已有的知识来学习新的知识,核心是找到已有知识和新知识之间的相似性,用成语来说就是举一反三。由于直接对目标域从头开始学习成本太高,我们故而转向运用已有的相关知识来辅助尽快地学习新知识。比如,已经会下中国象棋,就可以类比着来学习国际象棋;已经会编写Java程序,就可以类比着来学习C#;已经学会英语,就可以类比着来学习法语;等等。世间万事万物皆有共性,如何合理地找寻它们之间的相似性,进而利用这个桥梁来帮助学习新知识,是迁移学习的核心问题。
理论上,任何领域之间都可以做迁移学习。但是,如果源域和目标域之间相似度不够,迁移结果并不会理想,出现所谓的负迁移情况。比如,一个人会骑自行车,就可以类比学电动车;但是如果类比着学开汽车,那就有点天方夜谭了。如何找到相似度尽可能高的源域和目标域,是整个迁移过程最重要的前提。
常见的迁移学习的应用方法:
-
特征抽取,然后用抽取的特征去做别的事情,例如作为其他任务的输入,例如Word2Vec, ResNet-50 feature, I3D feature
-
在相关的任务上训练一个模型,在另一个任务上直接使用它,例如GPT
-
训练好一个模型,然后在下游任务(利用预训练模型去微调的一些任务(例如前述文本分类)被称为下游任务(down-stream))上对其进行微调(fine-tuning),使其在下游任务上表现的更好
预训练模型(Pre-train model)
在一个特别大的、比较通用的数据集上训练一个大模型,即预训练过程(pre-training)。
**微调(fune-tuning)**阶段是利用预训练好的模型,去定制化地训练某些任务,使得预训练模型”更懂”这个任务。例如,利用预训练好的模型继续训练文本分类任务,将会获得比较好的一个分类结果,直观地想,预训练模型已经懂得了语言的知识,在这些知识基础上去学习文本分类任务将会事半功倍。大多数情况下,只需要改动模型的输出层参数,所以训练的成本相对较低,且微调加速了收敛,但是不能保证提高了精度。
GPT – Generative Pre-Training
-
数据集:BooksCorpus数据集,BooksCorpus有大约7000本未出版的书籍,这些书籍帮助在不可见的数据上训练语言模型。
-
框架:Transformer的Decoder。GPT目标是标准语言模型,主要想用于预测任务,所以选用Decoder可以利用Masked Multi Self-Attention的自回归特性进行预测。(对比BERT使用的是Transformer的Encoder,类似于完形填空)
- 意义:GPT通过在包含长段连续文本的不同语料库上进行预训练,模型获得了重要的世界知识和处理长期依赖关系的能力,然后成功地迁移到问题回答、语义相似度评估、语义确定、文本分类任务中,改进了12个数据集中的9个数据集的技术水平。
GPT2
与GPT-1的区别
-
参数量15亿,是GPT-1 的10倍
-
数据集为WebText,拥有来自800多万个文档的40GB文本数据
-
提出了Zero-shot,即在下游任务中不进行任何训练或微调。下游不提供任何示例,模型根据给定的**提示(prompt)**理解任务。
GPT-3
-
模型参数是GPT2的100倍,1750亿
-
数据集:Common Crawl, WebText2, Books1, Books2和Wikipedia
-
提出了Zero-shot、One-shot、Few-shot、in-context learning
- 意义:
多模态 ( 主要指图像和文本的跨模态)
相关论文
Learning Transferable Visual Models From Natural Language Supervision -CLIP
An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale – Vision Transformer
Zero-Shot Text-to-Image Generation – DALL·E
Hierarchical Text-Conditional Image Generation with CLIP Latents -DALL·E 2
Denoising Diffusion Probabilistic Models – Diffusion Model
High-Resolution Image Synthesis with Latent Diffusion Models – Stable Diffusion
多模态(Multimodal)
每一种信息的来源或者形式,都可以称为一种模态。例如,人有触觉,听觉,视觉,嗅觉;信息的媒介,有语音、视频、文字等;多种多样的传感器,如雷达、红外、加速度计等。以上的每一种都可以称为一种模态。
多模态机器学习,英文全称 MultiModal Machine Learning (MMML),旨在通过机器学习的方法实现处理和理解多源模态信息的能力。
Vision Transformer – Transformer应用到CV
将Transformer应用到CV中,有个需要解决的问题,即将三维图像转化为二维输入,否则用像素作为输入则计算复杂度太高了
-
作为CV领域最经典的 Transformer 算法之一,不同于传统的CNN算法,ViT尝试将标准的Transformer结构直接应用于图像
-
为了满足 Transformer 输入结构的要求,将整幅图像拆分成小图像块(patch),然后把这些小图像块的线性嵌入序列(Embedding)输入到Transformer 的Encoder
CLIP – 跨模态关联
模型架构
模型预训练
-
**Text Encoder **: GPT-2里的Transformer结构,即Transformer的解码器,具备掩码注意力机制。这个编码器由 12 层组成,每层有 8 个注意力头,总共有 63M 的参数。
-
Image Encoder:8个不同的image encoder(5 ResNets & 3 ViTs)。
-
对比学习,即将配对的图像、文本对作为正样本,不配对的图像、文本对作为负样本,从而学习跨模态之间的关联关系。学习过程中将文本编码器和图片编码器产生的特征进行点积,计算相似度。最后学习到的正样本之间的相似度应该更高
相关结果
-
Zero-shot,预训练出来的模型具有较高的泛化能力,不用再fine-tuning了
-
模型有比较好的可迁移学习的效果
- 通过Prompt engineering 可以很好的提升模型的效果,例如“A photo of a {label}, a type of pet.”“ A photo of a big {label}”“A photo of a small {label}”
DALL·E – 文本引导图像生成
模型架构
训练阶段:
-
第一个阶段,先训练一个dVAE把每张256×256的RGB图片压缩成32×32的图片token,每个位置有8192种可能的取值(也就是说dVAE的encoder输出是维度为32x32x8192的logits,然后通过logits索引codebook的特征进行组合,codebook的embedding是可学习的)。
-
第二阶段,用BPE Encoder对文本进行编码,得到最多256个文本token,token数不满256的话padding到256,然后将256个文本token与1024个图像token进行拼接,得到长度为1280的数据,最后将拼接的数据输入Transformer的自掩码解码器(类似于GPT系列)中进行自回归训练。所以,1280的数据前面一段是文本特征后面一段是图片特征,放到自掩码解码器就会掩盖掉后面的特征,用前面的特征预测后面的特征。
推理阶段
- 给定一张候选图片和一条文本,通过transformer可以得到融合后的token,然后用dVAE的decoder生成图片,最后通过预训练好的CLIP计算出文本和生成图片的匹配分数。
Tips:
- VAE(Variational Auto Encoder)是生成模型,把一堆真实样本通过编码器网络变换成一个理想的数据分布,然后这个数据分布再传递给一个解码器网络,得到一堆生成样本,生成样本与真实样本足够接近的话,就训练出了一个自编码器模型。包括了VQ-VAE、dVAE等等
DALL·E -2 (unCLIP)
模型架构
2段式训练过程:
-
使用CLIP模型,使得文本和图像都可以被编码到相应的特征空间(或语义空间);
-
训练prior,使用文本编码之后的特征去预测图像特征,在这个过程中用CLIP将文本特征输入进去获取CLIP关联的图像特征(即正样本),作为prior模型产出的图像特征的ground truth去监督学习,使得训练出来的模型可以生成与文本关联度较高的图像特征。
- 图像解码器:使用的是改进的GLIDE模型,改进包括分类引导改成 CLIP guidance 和 classifire-free guidance,以及进行级联式的生成,结构用的卷积(U-Net)而不是 Transformer 。这个模型可以根据CLIP图像编码的,还原出具有相同与 有相同语义,而又不是与 完全一致的图像。
推理过程:
- 将输入的文本通过text encoder提取特征,再用prior将文本特征预测图片特征,最后由decoder进行解码生成图像
两种prior先验模型:自回归式Autoregressive (AR) prior 和扩散模型Diffusion prior 。实验效果上发现两种模型的性能相似,而因为扩散模型效率较高,因此最终选择了扩散模型作为prior模块。
扩散模型 – 生成模型
扩散模型是一项受热力学启发的发明,近年来越来越受到学界欢迎。扩散模型学习通过逆转一个逐渐噪声过程来生成数据。如下图所示,噪声处理过程被视为一个参数化的马尔可夫链,它逐渐向图像添加噪声使其被破坏,最终(渐近地)导致纯高斯噪声。扩散模型学习沿着这条链向后走去,在一系列步骤中逐渐去除噪声,以逆转这一过程。
一个标准扩散模型有两个主要过程:正向扩散和反向扩散。
-
在正向扩散阶段,通过逐渐引入噪声来破坏图像,直到图像变成完全随机的噪声。
-
在反向扩散阶段,使用一系列马尔可夫链逐步去除预测噪声,从高斯噪声中恢复数据。
对于噪声的预测和去除,最常使用的是** U-Net**。U-Net的特点在于它能够将图像作为入口,并通过减少采样来找到该图像的低维表示,这使得它更适合处理和查找重要属性,然后通过增加采样将图像恢复回来。
- 扩散模型对比GAN模型有以下优势:
- 生成的图片多样性变高了。GAN生成的图片是为了”逼真”、”以假乱真”,所以会跟原来图像很相似,而扩散模型生成的图片保留了语义,而不一定跟原来图片一样
影响:
- DALL-E 2体现了扩散模型在深度学习中的能力,DALL-E 2中的先验子模型和解码器都是基于扩散模型的。
Stable Diffusion
Stable Diffusion作为一款高性能模型,它生成的图像质量更高、运行速度更快、消耗的资源以及内存占用更小,是AI图像生成领域的里程碑。
最重要的是它是**开源****的 **,相比”Open”AI
模型结构:
-
TextEncoder – ClipText: 用于文本编码。输入: 文本。输出: 77个token embeddings向量,每个向量有768维。
-
UNet+调度程序: 在信息(潜在)空间中逐步处理信息。输入: 文本embeddings和一个初始化的多维数组(结构化的数字列表,也称为张量)组成的噪声。输出:经过处理的信息数组。
-
ImageDecoder – 自动编码解码器(Autoencoder Decoder): 使用经过处理的信息数组绘制最终图像。输入:经过处理的信息数组(维数:(4,64,64))输出: 生成的图像(维数:(3,512,512),即(红/绿/蓝;宽,高))。
潜在空间(Departure to Latent Space)
为了加快图像生成过程,Stable Diffusion论文没有在像素图像上进行运行,而是在图像的压缩版本上运行。论文将这称为前往潜在空间(Departure to Latent Space)。压缩(随后是解压缩/绘图)通过编码器完成。自动编码器使用Image Encoder将图像压缩进潜空间,然后使用Image Decoder再对压缩信息进行重构。
上图中 表示输入图像,表示生成的图像;是编码器,是解码器,二者共同构成了感知压缩;是潜在向量; 是增加噪声后的潜在向量;是文本/图像的编码器(比如Transformer或CLIP),实现了语义压缩。
正向扩散在潜空间上完成。噪声信息应用于潜空间,而不是应用于像素图像。因此,训练噪声预测器(noise predictor)实际上是为了预测压缩表示(compressed representation)上的噪音,这个压缩表示也被称为潜空间(latent space)。训练一旦完成,就可以执行反向扩散,使用Image Decoder生成图像。
Stable Diffusion v1 vs v2 区别 From
Stable Diffusion v2 使用 OpenClip 进行文本embedding. Stable Diffusion v1 使用 Open AI的 CLIP ViT-L/14。这个改变的原因在于:
-
OpenClip 是 ViT-L/14 模型的5倍大小,一个更大的文本编码模型意味着更好的图片质量
-
尽管 Open AI 的 CLIP 模型是开源的,但这些模型是使用专有数据训练的。切换到 OpenClip 模型使研究人员在研究和优化模型时更加透明,更利于长远发展。
Try it
开源框架Stable Diffusion : github.com/AUTOMATIC11…
开源模型网站:
WebUI使用文档: