Cogview

文本编码 +(图像编码)-> 自回归 -> 新图像编码 ->dVAE decoder-> 条件图片,文生图

什么是 Cogview ?

  • 结合 VQVAE 和 Transformers 的文本到图像的生成框架

Cogview 的训练过程?

  • 1)文本 token:首先将文本部分转换成 token,利用的是已经比较成熟的 SentencePiece 模型
  • 2)图像 token: 然后将图像部分通过一个离散化的 AE (Auto-Encoder) 转换为 token,
  • 3)训练 transformer:文本 token 和图像 token 拼接到一起,之后输入到 GPT 模型中学习生成图像,如图在每个序列中添加四个分隔符标识 [RO|1]、[BASE]、[BO|1]、[EO|1],指示文本和图像的边界

Cogview 的推理过程?

  • 1)文本 token :利用 SentencePiece 模型得到文本 token
  • 2)图片 token:仅使用文本 token + 标识符 [BO|1] 生成图片的第一个 token,然后利用文本 token + 第一个图片 token 生成第二个图片 token,依次类推,直到生成固定次数,得到需要的图片 token
  • 3)VAE Decoder:输入图片 token,生成图片

训练过程,Precision Bottleneck Relaxation (PB-Relax) 如何保持稳定?

  • 在分析了训练的动态性之后,作者发现溢出(NAN loss)总是发生在两个瓶颈操作上,即最后一层 LayerNorm 或注意层
  • 1)在深层网络中,LayerNorm 中输出的值可能会爆炸到 10000+,导致溢出。解决的方法是令 LayerNorm (x)=LayerNorm (x/max (x)),即通过除以 x 的最大值来减小爆
  • 2)注意力分数明显大于输入元素,因此将注意力改

softmax(QTKd)=softmax((QTadK)max(QTadK)×α).\mathrm{softmax}\left(\frac{\mathrm{Q^TK}}{\sqrt{\mathrm{d}}}\right)=\mathrm{softmax}\left(\left(\frac{\mathrm{Q^T}}{\mathrm{a\sqrt{d}}}\mathrm{K}\right)-\mathrm{max}\left(\frac{\mathrm{Q^T}}{\mathrm{a\sqrt{d}}}\mathrm{K}\right)\times\alpha\right).

训练过程,Sandwich LayerNorm (Sandwich-LN) 如何保持稳定?

  • Transformer 中的 LayerNorm 对于稳定训练至关重要。LayerNorm 的输出为,基本上与 x 的隐藏维度大小的平方根成比例,但有些维的输入值明显大于其他维,会导致对应维的输出值加大,在残差分支中,这些较大的值被放大并放回到主支中,加剧 transformer 层的现象,最后导致深层的 value explosio

(xx~)di(xix~)2γ+β\frac{(\mathrm{x}-\tilde{\mathrm{x}})\sqrt{\mathrm{d}}}{\sqrt{\sum_i\left(\mathrm{x}_\mathrm{i}-\tilde{\mathrm{x}}\right)^2}}\gamma+\beta

  • 因此,提出了 Sandwich LayerNorm,** 其在每个残差分支结束时添加一个新的 LayerNorm。** 该残差分支确保了每层的输入值的比例在一个合理范围内,帮助模型更好的收敛

参考:

  1. 【精选】Text to image 论文精读 CogView: Mastering Text-to-Image Generation via Transformers (通过 Transformer 控制文本生成图像)-CSDN 博客
  2. CogView:通过 Transformer 掌握文本到图像的生成 - 知乎