Pre
想认真整理却没时间,很无奈,大概就这样吧
Zero-Shot Text-to-Image Generation (DALL-E)
code
https://github.com/openai/DALL-E
Idea
提出 dVAE 将离散采样问题放松为连续近似,VQ-VAE迫使模型在所有情况下只选择一个向量,dVAE量化不是每个都确定地映射到单个码本向量,而是输出每个潜在的码本向量上的分布。
Method
图1 原始图片和离散VAE重建效果比较
图2 在不同程度的可靠性的情况下,DALLE能够结合不同概念,并画出拟人化动物、渲染文本,以及进行一些图像翻译。
两个阶段
- dVAE就是 离散的变分自编码器,输入图片256分辨率RGB,下采样八倍,32x32的token,特征维度8192(码本大小)。
但是这跟VQ-VAE有所区别。VQ-VAE迫使模型在所有情况下只选择一个向量,而 dVAE 将离散采样问题放松为连续近似,它不是每个向量都确定地映射到单个码本向量,而是输出码本向量上的分布,不使用显式的codebook。 - 文本通过BPE(Byte Pair Encoding)编码成256长度,跟1024个图片token简单拼接然后进行自回归建模。
前面说过dVAE输出的是码本向量的分布,因此想要获取token还得用argmax处理dVAE的logits,但实际上dVAE的结果不能直接argmax,因为跟VQ一样会导致梯度无法传播,因此要按概率采样,论文使用了gumbel-softmax。作者说这相当于是一种正则化,但模型参数不足(underparameterized)时就没必要进行,因此论文里写的还是argmax。
公式1 公式中q_phi表示dVAE编码器输出的分布,p_theta表示dVAE解码器输出的分布,p_psi是Transformer建模的文本图片联合分布。训练过程就是要最大化这个证据下界(ELB)
Critique
看代码,dVAE的编码器接收 256x3 RGB图片然后卷积出 32x8192 的特征,没有显式的codebook。文本通过BPE编码成256长度,跟1024个图片token(用argmax处理dVAE的logits得来)简单拼接然后进行自回归建模。实际上dVAE的结果不能直接argmax,而要按概率采样,作者说这相当于是一种正则化,但模型参数不足(underparameterized)时就没必要,因此论文里写的还是argmax。最后将图片token与文本模态拼接后做自回归建模。
BEiT: BERT Pre-Training of Image Transformers
Idea
将图片用dVAE(DALLE那个)变成token,同时又划分为patch,然后随机遮掩patch,根据patch(包括遮住的)预测相应token
Method
图1 BEiT预训练总览。将图片用dVAE(DALLE那个)变成token,作为一个view,同时又划分为patch,是另一个view。随机遮掩一些patch,将所有patch(包括遮住的)送入ViT-Base,然后在masked对应输出用相应token进行约束。
公式3 z是token,x是原始图片。一阶段根据给定z重建x,二阶段根据部分遮掩的x重建z
Critique
但这个工作感觉很怪,相当于用dVAE做教师模型来教BEiT?BEiT能做的dVAE似乎也行?毕竟这样训练完BEiT实际上就是一个根据输入图像x输出其量化token z的量化器,就是蹭个BERT的名字?
todo
- MaskGIT[MaskGIT: Masked Generative Image Transformer.] 在VQGAN的基础上引入了并行解码,并行预测所有被mask的部分,对于每个mask掉的像素位置给出一个概率最高的码字,其概率值作为置信度。根据时刻进行mask调度,根据调度函数计算本轮要保留的预测码字数n。保留置信度最高的n个码字,其余预测结果继续mask掉,重新预测mask部分。
- Gumbel Softmax trick: 简单来说就是arg max不可导,可以用softmax来近似代替max,而arg softmax是可导的,https://kexue.fm/archives/6705/comment-page-1, https://zhuanlan.zhihu.com/p/59550457
- BLIP2(Q-Former): 通过可学习的Q来聚合图片的信息(KV),将图片编码为固定长度且可被LLM处理,实践中
v=crossattention(q, k, v), k=v=concat(q, f)
,让q能自注意力自己 - MiniGPT-4, LLaVA: 实际上依靠预训练BLIP2的Q-Former来融合视觉信息,但只微调线性层
- LQAE, SPAE, V2L: 认为 BLIP-2, MiniGPT-4, LLaVA 缺乏生成视觉内容的能力,需要额外的图像-文本对来训练视觉-语言对齐模块,而它们把图片量化到LLM的词汇空间,省去了在特征空间进行多模态对齐的过程(用多模态数据进行微调)。感觉就是能直接用预训练的LLM来处理图片和文本,不再需要提前对齐两个模态,比如重新训练或微调LLM。
- LQAE训练VQVAE来把图片量化到冻结的LLM码本,仅英文词汇表,但实际上量化后的token很少包含语义概念,且重建质量比可学习codebook更差。
- SPAE引入分层且粗到细的金字塔量化和CLIP的语义引导,多语言词汇表,超越VQGAN的重建质量
- V2L把图片量化到共享的多模态空间中,为给定图片分配有意义的语言token,并引入不同量化器分了全局和局部token,分别对图片理解和图片生成有用。
- SEED: 先通过causal/reverse Q-Former训练SEED tokenizer,然后量化图片,线性投影到prompt"a photo of"特征所在维度,二者拼接送入OPT,用目标caption以预测下一个token的形式LoRA微调OPT。同时也做文本到图片的自回归,prompt"Generate an image",让LLM生成图片token来增强性能。跟DALL-E一样,把图片文本token都放到同一个词汇表中建模。推理时就输入caption去生成图片token,然后过Reverse Q-Former得到caption的嵌入,再用stable diffusion解码器生成图片。SEED通过因果Q-Former来提取图片嵌入再进行量化,与DALL-E一样将图片token与文本模态拼接后做自回归,并设计图片到文本和文本到图片两个任务来增强LLM的能力。