尚硅谷大模型技术之高频面试题
版本:V2.1.9
核心技术 / 多模态

多模态

7 个问题

Vit架构#

整体思路#

Vision Transformer,简称 ViT,就是把图像识别问题转化成类似 NLP 的序列建模问题。原来我们处理句子是把句子拆成单词,ViT 就是把一张图拆成小块(patch),再用 Transformer 去理解这些块之间的关系。

具体流程#
切图&向量化#

一张图会先被切成很多小块,比如16×16的patch。每个patch都会被拉直,再映射成一个向量,相当于给它一个“词向量”。

加入位置信息#

因为Transformer不像卷积那样天然有位置信息,所以我们要给每个patch加上位置编码,让模型知道这个patch在图里是哪里来的。

加一个分类token#

在所有patch前面,加一个特殊的<CLS> token,专门用来聚合整张图的信息。最后分类的时候,就用它的输出。

Transformer编码器#

接下来就是一堆标准的Transformer层:多头自注意力、前馈网络、残差连接和归一化。这样模型就能学习到图像中任意两个patch之间的全局关系。

分类头#

最后,拿到<CLS> token的表示,送到一个小的全连接网络里,输出类别。

特点和优势#
ViT的最大特点是它不再像CNN那样只关注局部,而是通过自注意力直接建模全局关系。#
它在小数据集上不如CNN,但在大规模数据上训练后,往往能超过CNN的表现。#
而且它的扩展性很好,模型越大、数据越多,效果提升越明显。#

QVit图像补丁嵌入是什么#

在 ViT 里面,图像补丁嵌入就是把原始图像切成小块,再把这些小块转换成向量表示的过程。

具体来说,一张图像会被均匀切分成很多小patch,比如常见的是大小。每个小patch就像是NLP里的“一个词”。但是模型不能直接处理原始像素,所以会先把每个 patch 展平,再用一个线性映射(其实就是全连接层)把它转成固定维度的向量。这个步骤就叫做 补丁嵌入(Patch Embedding)。

这样,整张图就被表示成一串向量序列,可以直接送进Transformer去做自注意力建模。

其实patch embedding和CNN的卷积很像,如果把卷积核的大小和步幅设置得跟patch一样,就能达到相同效果。CLIP源码中就是这样实现的。

Q讲一讲ViT的图像是怎么输入模型的,class token的作用是什么#

ViT把图像切成小块做embedding,加上位置信息,再在前面拼一个[CLS] token输入模型。最后分类就是用这个token的输出,因为它在自注意力机制中相当于收集了全图的语义。

CLIP架构#

CLIP的架构就是一个图像编码器+文本编码器+投影层的双塔结构,在同一个嵌入空间里通过对比学习实现图文对齐。

双塔结构(Two-Tower)#
图像编码器(Image Encoder):可以是ResNet或Vision Transformer(ViT),输入图像后得到一个全局图像特征向量。#
文本编码器(Text Encoder):是Transformer(类似GPT/BERT的结构),输入tokenized的文本后,取最后的[EOS]向量作为整句的表示。#
共同嵌入空间(Joint Embedding Space)#

两个编码器输出的特征会通过一个线性投影层(Projection Head)映射到同一个维度空间。这样图像和文本就可以直接比较相似度。

对比学习训练目标(InfoNCE Loss)#

在一个batch内,模型会计算所有图像和文本之间的相似度(点积/cosine similarity)。正确的图文对被拉近,错误的被推远。

Q投影层的作用是什么#

在CLIP里,图像编码器和文本编码器出来的特征,原本不在同一个空间:

图像特征可能来自CNN/ViT,分布和尺度不同;#
文本特征来自Transformer,也有自己的分布。#

如果直接拿它们比相似度,效果会很差。

投影层(Projection Layer)的作用就是:

  • 统一维度:把图像和文本特征映射到相同的维度空间,方便对齐。
  • 对齐表征空间:通过可学习的线性变换,让两种模态的特征在一个共享语义空间里可比较。
  • 简化训练目标:投影之后,可以直接用点积或余弦相似度计算图文对的相似性,再配合对比损失来优化。

扩散模型#

扩散模型架构一般分为前向扩散和逆向扩散:

前向扩散(Forward Diffusion)指的是:在训练阶段,我们从一张干净的原始图像开始,按照预设的噪声调度表,一步一步往图像里加高斯噪声。

一开始,图像还很清晰;

随着步数增加,噪声越来越多,图像内容逐渐模糊;

直到最后几步,图像几乎完全变成随机噪声。

这样做的目的,是构造一个“破坏过程”,让模型学会如何在反向过程中把噪声去掉、逐步恢复出清晰的图像。

逆向扩散(Reverse Diffusion):在推理或采样阶段,模型从一张几乎完全是噪声的图像开始,一步一步去掉噪声,逐渐还原出清晰的图像。

每一步,模型都会根据输入的带噪图像和时间步,预测出当初加进去的噪声。

然后把噪声减掉,得到更干净的。

这样不断迭代,噪声逐渐减少,图像内容越来越清晰。

最终,经过多步去噪,就能从随机噪声生成出符合分布的真实图像。

Q扩散模型在训练模型时,预测目标是什么#

在扩散模型的训练里,预测的目标其实就是加在原始图像上的噪声。

具体来说:#

我们从一张干净的图像出发,逐步往里面加高斯噪声,得到不同噪声水平的。

模型的任务就是:给定和时间步,预测出当初加进去的噪声。

这样在反向采样的时候,我们就能通过“减掉这个噪声”一步一步把图像还原回来。

所以总结一下:#

训练阶段:预测噪声,用L2损失去拟合。

生成阶段:用预测的噪声把带噪图像逐步去噪,直到得到清晰图像。

Q为什么扩散模型要对X0步加上的噪声算L2损失?这和Xt-1步的状态有什么联系#

在扩散模型里,我们的目标是学会“从噪声逐步还原出原始图像”。训练时会给加噪声,得到带噪声的图像。模型的任务就是在已知的情况下,去预测当初加上的噪声。

为什么用L2损失?#

因为我们假设加的噪声是高斯分布。对高斯分布来说,最大似然推导的结果就是等价于一个L2(均方误差)损失。

换句话说,用L2去拟合噪声,就是在做“最大化真实噪声分布的似然”。

这和有什么关系?#

在采样的时候,我们不是直接预测,而是一步一步从还原出,再从还原,直到走到原图。

这里关键在于:如果模型能准确预测噪声,那就能把去噪成一个更干净的图像,即得到。

所以说,学习预测噪声(并用L2来训练)和一步步生成是直接挂钩的。预测噪声准确,去噪过程才能稳定,最终才能生成清晰的。

QUnet网络结构#

U-Net是一种最早用在医学图像分割上的神经网络结构,它的名字来自它的形状,像字母U。核心思想是:

编码器部分(左边下采样):逐层卷积+池化,把图像分辨率降下来,提取越来越抽象的语义特征。

解码器部分(右边上采样):逐层上采样,把低分辨率的特征图恢复成高分辨率,逐步还原空间信息。

跳跃连接(skip connections):编码器的特征会直接传给对应层的解码器,这样既能利用全局语义信息,也不会丢掉局部细节。

因为有这种“下采样提语义+上采样还原细节+跳跃连接补充信息”的设计,U-Net在处理需要同时关注全局和局部的任务时特别有效。

QUnet在扩散模型中的作用#

在扩散模型里,U-Net常作为核心网络来预测噪声:

编码器负责理解带噪图像的全局特征;#
解码器逐步恢复图像结构;#
跳跃连接保证了模型能同时保留细节和语义。#

如何处理prompt和生成的图像不对齐的问题#

在扩散模型里,prompt和生成图像不对齐,本质上是语言条件没有被很好地映射到图像生成过程。常见的解决思路有几类:

加强文本编码#

如果prompt的语义没有被准确理解,模型就会偏离。

可以用更强的文本编码器(比如更大的Transformer、或者经过图文对比学习的CLIP编码器),让模型更清楚地理解prompt的含义。

优化条件注入方式#

现在主流方法是用交叉注意力把文本特征融入到图像生成。

如果对齐度不够,可以在更多层次、或者更细粒度上注入条件,让模型在生成的每一步都能参考prompt。

增加训练时的对齐约束#

在训练过程中,可以引入额外的损失函数,比如CLIP对比损失,让生成结果和prompt在语义空间里更接近。

这样不仅学会生成图像,还强制学会“和文字对上号”。

采样和后处理技巧#

在推理阶段,用classifier-freeguidance(CFG)增强条件的影响力,让模型更听prompt。

或者生成多个候选图像,再用CLIPscore筛选出和prompt更贴合的结果。

总之,处理prompt和图像不对齐的问题,核心就是四步:文本要理解准→条件要注入好→训练要加对齐约束→推理要有调控和筛选。这样才能保证文字和图像一致。