写在前文
今天主要学习基于检索的模型,以及拓展学习了一下cv方面的Transformer-vit,混合专家模型由于我的能力不足,只能放在后面再进行回顾。
10.2 基于检索的模型
基于检索的模型,它主要是可以帮助我们突破稠密Transformer的缩放上限。
10.2.1 编码器-解码器
首先,在编码器-解码器的框架下序列到序列的任务是:
i
n
p
u
t
x
−
>
o
u
t
p
u
t
y
input \ x->output\ y
input x−>output y
示例(开放回答):
输入x:What is the capital of Canada?
输出y:Ottawa
编码器-解码器模型的原理:
在编码器-解码器模型中,编码器负责将输入序列转换为一个低维表示,而解码器则将这个低维表示转换为输出序列。它们通常使用循环神经网络(如 LSTM 或 GRU)或者自注意力机制(如 Transformer)作为基础组件。它通过将长序列的信息转化为固定长度的表示,并通过解码器逐步生成输出,实现了对序列数据的建模和生成。
10.2.2检索方法
假设我们有一个存储库 ,它是一组序列(通常是文档或段落)的集合。
基于检索的模型直观的生成过程:
基于输入
x
,检索相关序列
z
。给定检索序列
z
和输入,生成输出
y
。
基于输入x ,检索相关序列z 。 给定检索序列 z和输入,生成输出y。
基于输入x,检索相关序列z。给定检索序列z和输入,生成输出y。
最近邻是常用的一种的检索方法,示例:
1.S’是训练集。
2.检索 (x',y') ,使得 x' 和 x 最相似。
3.生成 y=y' 。
其实还有层次式索引(Hierarchical Indexing):
层次式索引将数据组织成多个层次结构,其中高层次的索引具有粗糙的聚类,低层次的索引细化了聚类。它可以提高检索效率,使相似的数据更加集中,减少不必要的计算开销。它的主要特点是可以通过低维度的形式来处理高维度的数据。
10.2.3 Retrieval-augmented generation (RAG) (Lewis et al., 2020)
rag-architecture
形式上,RAG模型定义如下:
( y ∣ x ) = ∑ z ∈ S p ( z ∣ x ) ⏟ retriever p ( y ∣ z , x ) ⏟ generator . (y \mid x) = \sum_{z \in S} \underbrace{p(z \mid x)}\text{retriever} \underbrace{p(y \mid z, x)}\text{generator}. (y∣x)=z∈S∑ p(z∣x)retriever p(y∣z,x)generator.
在实践中, 由前k个代替(类似于为混合专家选择前1个或2个专家)。
10.2.3.1 检索器:
Dense Passage Retrieval (DPR)** (Karpukhin et al., 2020)
p ( z ∣ x ) = exp ( BERTd ( z ) ⋅ BERTq ( x ) ) ∑ z ′ ∈ S exp ( BERTd ( z ′ ) ⋅ BERTq ( x ) ) . p(z \mid x) = \frac{\exp(\text{BERT}\text{d}(z) \cdot \text{BERT}\text{q}(x))}{\sum_{z' \in S} \exp(\text{BERT}\text{d}(z') \cdot \text{BERT}\text{q}(x))}. p(z∣x)=∑z′∈Sexp(BERTd(z′)⋅BERTq(x))exp(BERTd(z)⋅BERTq(x)).
这里以用维基百科文章的标题来检索段落为例
使用QA数据集(如NaturalQuestions、TriviQA等)的query、正例、负例
来训练模型:
负例:随机或者使用BM25检索出的不包含答案的段落
推理:使用FAISS(Facebook AI相似性搜索)
10.2.3.2 生成器:
使用BART-large(400M参数),其中输入为检索出的段落 和输入
回想一下,BART是基于网络、新闻、书籍和故事数据,使用去噪目标函数(例如,掩码)训练得到的
10.2.3.3 训练:
用BART、DPR(用BERT初始化)初始化
训练 和
BERT
q
\text{BERT}_\text{q}
BERTq
10.2.4 RETRO (Borgeaud et al., 2021)
基于32个token的块进行检索
存储库:2 trillion tokens
70亿参数(比GPT-3少25倍)
使用冻结的BERT进行检索(不更新)
在MassiveText上训练(与训练Gopher的数据集相同)
10.2.4.1 实验结果
在语言建模方面表现出色
NaturalQuestions准确率:45.5%(SOTA为54.7%)
vit模型:
论文地址:An Image is Worth 16x16 Words:Transformers for Image Recognition at Scale
之前的算法大都是保持CNN整体结构不变,在CNN中增加attention模块或者使用attention模块替换CNN中的某些部分。ViT算法中,作者提出没有必要总是依赖于CNN,仅仅使用Transformer结构也能够在图像分类任务中表现很好。
受到NLP领域中Transformer成功应用的启发,ViT算法中尝试将标准的Transformer结构直接应用于图像,并对整个图像分类流程进行最少的修改。具体来讲,ViT算法中,会将整幅图像拆分成小图像块,然后把这些小图像块的线性嵌入序列作为Transformer的输入送入网络,然后使用监督学习的方式进行图像分类的训练。ViT算法的整体结构如 图1 所示。
该算法在中等规模(例如ImageNet)以及大规模(例如ImageNet-21K、JFT-300M)数据集上进行了实验验证,发现:
Tranformer相较于CNN结构,缺少一定的平移不变性和局部感知性,因此在数据量不充分时,很难达到同等的效果。具体表现为使用中等规模的ImageNet训练的Tranformer会比ResNet在精度上低几个百分点。
当有大量的训练样本时,结果则会发生改变。使用大规模数据集进行预训练后,再使用迁移学习的方式应用到其他数据集上,可以达到或超越当前的SOTA水平。
图2 为大家展示了使用大规模数据集预训练后的 ViT 算法,迁移到其他小规模数据集进行训练,与使用 CNN 结构的SOTA算法精度对比。
图2:ViT模型精度对比
图中前3列为不同尺度的ViT模型,使用不同的大规模数据集进行预训练,并迁移到各个子任务上的结果。第4列为BiT算法基于JFT-300M数据集预训练后,迁移到各个子任务的结果。第5列为2020年提出的半监督算法 Noisy Student 在 ImageNet 和 ImageNet ReaL 数据集上的结果。