CS231n 随堂笔记 - Visualizing and Understanding 可视化与理解

第十一章 Visualizing and Understanding 可视化与理解

11.1 卷积网络中发生了什么

11.1.1 第一层 可视化滤波器

提取图像最基本的特征:有向边和两个相反的颜色

在神经网络中间的层做相同的可视化的结果却很难解释。

11.1.2 最后一层

神经网络分类器(如 Softmax 层)之前的最后一层,这里是一个 4096 维的特征向量。每个维度代表图像的一种抽象特征(如纹理、形状、物体部件的组合模式),而非具体像素。
同时,相似的图像(如不同角度的猫)对应的 4096 维向量在数学空间中也更接近。
早期网络(如 AlexNet)全连接层设计为 4096 维,平衡表达能力和计算成本。

1748322251571.png

11.1.2.1 邻居算法(Nearest Neighbor)

在神经网络提取了高维特征后,在其高维空间里对目标图像进行基于距离的相似性搜索(类似前文邻居算法)。

1748322330786.png

这里的“邻居图像”是通过 AlexNet 算出来的,最后一个隐藏层中的 4096 维的向量通过全连接层计算图像近邻。

有的图片单看像素距离的话差的很远,比如一张在图片左边的大象和在右边的大象。但是通过 AlexNet 提取了高维特征,或者说“理解了图片的语义特征”后,它能够将这两张图像匹配在一起。

11.1.2.2 dimensionality reduction 降维

在这个例子中,就是将 4096 维的向量压缩成二维表示:

  • 输入图像后用某个神经网络(如 AlexNet、VGG)提取每张图像的特征向量(例如维度为 4096 的向量)。
  • 这些高维向量是图像在深层神经网络中经过卷积和全连接层后形成的抽象表示,代表图像的“语义”。
  • 将这些高维特征降维到 2D 或 3D 空间中,便于可视化和观察它们之间的相似性关系(聚类效果)

降维的方法:

  1. Principle Component Analysis 主成分分析(PCA)
  2. t-distributed stochastic neighbor embeddings t-分布邻域嵌入(t-SNE)

​ 更强大的降维方法,在深度学习中常被用来对可视化特征进行非线性降维。

​ 将无序的输入通过神经网络以及降维过后,形成了聚类:

​ 神经网络能自动学习到有意义的图像特征,即便原始图像顺序是打乱的,提取出的特征在降维后可以反映语义结构(比如狗的图片聚 在一起,食物的图片聚在一起)。

11.1.3 中间层
11.1.3.1 中间层可视化

当把中间的激活映射图作可视化时,还是能发现他似乎在寻找某些信息,比如一张人脸的区域之类的。

一个卷积核关注图像的一个特征。

11.1.3.2 Saliency Maps 显著图

显著图就是一张“热力图”,告诉你图像的哪些区域对模型的决策最重要。

通过适当地扰动某些像素,再来看看显著图中是否能看到原图的轮廓,来判断这个像素对于最终分类的重要程度。

或者通过计算模型输出(比如“猫”的概率)对输入图像每个像素的梯度(敏感度),即用反向传播算 ∂(输出概率)/∂(输入像素),取绝对值生成热力图。梯度大说明这个像素重要,​​梯度小说明不重要。

在一定程度上也可以利用显著图提供目标定位先验和边界约束,进行语义分割的无监督学习。

11.2 反向引导和梯度上升

11.2.1 Intermediate features via (guided) backprop 反向引导

反向引导(Guided Backpropagation)是一种改进的反向传播方法,用于可视化 CNN 中特定神经元对输入图像的敏感区域。在反向传播时,仅保留对目标神经元激活有正向贡献的梯度(即“引导”梯度回传),从而生成更清晰、更有解释性的可视化结果。

  1. 前向传播(Forward Pass)​

    • 输入​:左侧的大象图像(尺寸 224×224)经过 CNN 的多层卷积、ReLU 和池化操作。
    • 关键层​(图中标注):
      • 中间特征图尺寸为 128×13×13(128 个通道,空间分辨率 13×13)。
      • 目标:选择一个神经元(如第 (5,5) 位置的某个通道的激活值),计算其对输入图像的梯度。
  2. 反向传播(Backward Pass)​

    • 普通反向传播​:

      • 梯度通过所有层回传,包括 ReLU 的负梯度(可能导致噪声)。
      • 图中示例:
      前向 ReLU 输入: [1, -1, 5] → 输出: [1, 0, 5]
      反向梯度: [2, -5, -7] → 回传: [2, 0, -7](ReLU 抑制负输入对应的梯度)
      
    • 反向引导的改进​:

      • 双重抑制​:不仅抑制ReLU负输入的梯度(常规操作),还额外抑制反向传播中的负梯度
         反向梯度: [2, -5, -7] → 回传: [2, 0, 0](仅保留正梯度)
      
    • 数学表达​:
      ∂ReLU(x)∂x={1if x>0且梯度>00otherwise \frac{\partial \text{ReLU}(x)}{\partial x} = \begin{cases} 1 & \text{if } x > 0 \text{且梯度} > 0 \\ 0 & \text{otherwise} \end{cases} xReLU(x)={10if x>0且梯度>0otherwise

  3. 可视化结果

    • 普通反向传播​:生成的热力图可能包含无关噪声(负梯度干扰)。
    • 反向引导​:仅高亮对目标神经元激活有明确正向贡献的像素,结果更干净、更聚焦(如图中右侧的清晰边缘和纹理)。
  4. 应用场景

    1. 模型可解释性​:
      • 例如,可视化大象图像中哪些像素激活了“耳朵”或“鼻子”对应的神经元。
    2. 调试网络​:
      • 若反向引导的热力图聚焦在无关背景(如草地),说明模型可能学习到错误特征。
    3. 弱监督定位​:
      • 用反向引导生成伪标签,辅助语义分割或目标检测。
  5. 总结

    • 反向引导通过双重梯度过滤,生成比普通反向传播更干净、更语义化的可视化结果。
    • 其核心是​“只关注对激活有正向贡献的路径”​,类似一种“乐观”的梯度回传策略。
    • 图中展示的 ReLU 和梯度矩阵的对比,直观体现了反向引导的过滤逻辑(如将 [-3, 1, -1] 变为 [0, 1, 0])。
11.2.2 Gradient Ascent 梯度上升
11.2.2.1 反向引导 vs 梯度上升

梯度上升是一种用于可视化 CNN 学习到的特征的技术,其核心思想是通过最大化特定神经元的激活值,生成一张能“最强烈激活”该神经元的输入图像,从而直观展示该神经元(或卷积核)所响应的特征模式。

反向引导(Guided Backprop)​和**梯度上升(Gradient Ascent)**对比:

  1. 左侧:反向引导(Guided Backprop)​

    • 目标​:找到真实图像中哪些区域激活了特定神经元​(即神经元“看到”了什么)。
    • 原理​:
      • 对输入图像做前向传播,记录目标神经元的激活值。
      • 反向传播时,​仅保留正梯度​(即对激活有正向贡献的像素),抑制负梯度(类似 ReLU 的截断)。
    • 结果​:生成一张热力图,高亮图像中实际存在的、能激活该神经元的局部区域​(如猫的耳朵、眼睛)。
    • 用途​:解释模型对真实图像的决策依据(类似显著图)。
  2. 右侧:梯度上升(Gradient Ascent)​

    • 目标​:生成一张合成的、能最大化激活神经元的图像​(即神经元“最喜欢”什么)。

    • 原理​:

      • 从随机噪声(比如高斯噪声)或空白图像(初始化为 0)出发,通过迭代优化输入像素:
        $$

        • = \arg\max_I \left[ f(I) + R(I) \right]
          $$
        • f(I)(红色框):目标神经元的激活值,需最大化。
        • R(I)(蓝色框):正则化项(如 L2 范数),确保生成的图像看起来自然。
      • 通过梯度上升更新输入: I←I+η⋅∂f(I)∂II \leftarrow I + \eta \cdot \frac{\partial f(I)}{\partial I}II+ηIf(I)

    • 结果​:生成一张抽象图案,反映神经元的“理想输入”(如深层卷积核可能生成狗脸纹理或车轮形状)。

    • 用途​:理解卷积核学习的特征模式(如边缘、纹理、物体局部)。

  3. 对比总结

    方法反向引导(Guided Backprop)梯度上升(Gradient Ascent)
    输入真实图像随机噪声/空白图像
    输出图像中激活神经元的区域(热力图)合成的最大化激活的图像
    数学核心反向传播 + 梯度截断梯度上升 + 正则化
    用途解释模型对真实数据的响应理解卷积核的抽象特征偏好
  4. 图中公式的进一步解释

    • I∗=arg⁡max⁡I[f(I)+R(I)]I^* = \arg\max_I \left[ f(I) + R(I) \right]I=argmaxI[f(I)+R(I)]​:
      • f(I)(红色):神经元的激活值,直接优化目标。
      • R(I)(蓝色):正则化项(如 L2 约束、模糊抑制),防止生成无意义的极端像素(如高频噪声)。
    • 红蓝箭头​:强调两者在优化中的协同作用——既要激活值高,又要图像合理。
  5. 实例说明

    • 反向引导​:
      • 若用 VGG16 的“猫”类别神经元分析一张猫狗合影,热力图会高亮猫的区域。
    • 梯度上升​:
      • 同一神经元生成的合成图像可能是模糊的猫脸纹理(因为该神经元被训练为响应猫的特征)。
  6. 总结
    图示完美展示了两种方法的互补性:

    • 反向引导用于“模型看到什么”(基于真实数据)。
    • 梯度上升用于“模型想看到什么”(生成理想数据)。
      两者结合,能全面理解 CNN 的视觉特征提取机制。
11.2.2.2 梯度上升作可视化


图片中的彩虹色噪声是无约束优化与后处理缩放共同作用的结果,反映了梯度上升方法在“最大化激活”与“生成自然图像”之间的根本矛盾。这一现象并非技术缺陷,而是 CNN 特征可视化的一种权衡选择——它揭示了模型对非自然高频特征的敏感性,与对抗样本的生成机制有深刻关联。

有一种解释是:真实像素值被约定在 0~255 之间,所以是一种有约束优化问题。但是梯度上升采用的是无约束优化问题,然后最后用投影或者缩放来生成可视化图像,所以这个像素值是被变幻过的,不能太当真。

11.2.2.3 一种改进措施:改进正则化

新增的迭代后处理:在梯度上升过程中定期执行以下操作:

  • 高斯模糊:平滑高频噪声(抑制彩虹色条纹)。
  • 裁剪小像素值:将接近 0 的像素置零,突出显著区域。
  • 裁剪小梯度:剔除对激活贡献微弱的像素,增强关键特征。

image.png

多面性特征可视化

通过改进梯度上升(如更细致的正则化、中心偏置约束),生成同一神经元识别的多种特征模式(称为“多面性”)。

左侧:同一“杂货店”神经元激活的多种特征模式(如不同水果、蔬菜的模糊重建图像)。

右侧:训练集中实际被该神经元响应的图像(如苹果、香蕉、杂货店货架)。

意义:说明单个神经元可能学习到同一语义类别下的不同视觉子模式(如“杂货店”包含水果、蔬菜、货架等多种特征)。

注:“多面性”是单模态内的特征解耦,而非跨模态特征对齐或融合。

11.3 Fooling Images / Adversarial Examples 欺骗图像 / 对抗样本

对抗样本(Adversarial Examples)的生成方法

  1. 从任意图像开始:选择一张正常图像(如猫、风景等)。
  2. 选择任意目标类别:指定一个与原始图像无关的类别(如“烤面包机”)。
  3. 修改图像以最大化目标类别概率:通过梯度上升或优化算法,轻微扰动图像像素,使得神经网络将该图像错误分类为目标类别。
  4. 重复优化直至成功欺骗网络:迭代调整,直到网络以高置信度输出错误分类结果。

通过生成对抗样本,暴露神经网络的脆弱性,测试其鲁棒性。是一种基于优化的对抗攻击技术,直接修改输入以欺骗模型,与 GAN 无直接技术关联,但共享对抗性研究的底层思想。

GAN:生成器(Generator)与判别器(Discriminator)对抗,生成逼真数据。

11.4 DeepDream

利用 CNN 中间层的激活值来“增强”图像中的特征,使图像产生独特的梦幻效果。

  1. 选择图像和网络层:DeepDream 选择神经网络中的某一层
  2. 计算激活值:通过神经网络进行前向传播,计算所选层的激活值
  3. 梯度调整 :反向传播时,将所选层的梯度设置为其激活值的值(I∗=arg⁡max⁡I∑ifi(I)2I^* = \arg\max_I \sum_i f_i(I)^2I=argmaxIifi(I)2),以此增强某些特征的表现
  4. 图像更新 :基于计算出的梯度,更新输入图像,从而放大图像中的特定特征

11.5 Feature Inversion 特征反演

给定一个 CNN 的特征向量,找到一个新的图像,这个图像有以下两个特性:

  • 它的特征向量与给定的特征向量尽量匹配。
  • 它看起来是自然的(符合图像先验,即图像的自然规律)。

11.6 Texture Synthesis 纹理合成

11.6.1 最基本方法:Nearest Neighbor 最近邻
  1. 逐像素生成:该方法通过扫描方式(scanline order)逐像素生成新的图像。
  2. 形成邻域:每生成一个像素时,会根据已经生成的像素来形成一个邻域区域。即,对于每个新的像素,考虑其周围已经生成的像素,作为其邻域。
  3. 选择最近邻像素:从输入图像中找到最相似的邻域像素,并将其复制到新图像中。这些像素被用来构建新图像的纹理。

做一些简单的纹理生成挺好用。

11.6.2 Neural Texture Synthesis: Gram Matrix
11.6.2.1 Gram Matrix 简介

每层 CNN 的输出:每一层 CNN 的输出是一个大小为 C×H×WC \times H \times WC×H×W 的张量,其中:

  • CCC 是通道数(每个通道对应一个特征向量)。
  • HHH 和 WWW 是图像的高和宽,表示特征图的空间维度。
  • 这些特征是每个像素位置的 CCC-维向量,表示在该位置上的不同特征。

Gram 矩阵的计算:

  • 外积计算:计算两个 CCC-维向量的外积,得到一个 $ C \times C $ 的矩阵,用来度量特征的共现(即两个特征的关联度)。
  • 所有像素对的平均:通过对所有 H×WH \times WH×W 对像素的外积求平均,得到一个形状为 C×CC \times CC×CGram 矩阵。该矩阵捕捉了图像的统计特征(抛弃了空间特征),尤其是特征之间的相互关系。

为了提高计算效率,可以将特征从 C×H×WC \times H \times WC×H×W 重新排列为一个 C×HWC \times HWC×HW 的矩阵。

计算 Gram 矩阵时,使用矩阵乘法的形式: G=FFTG = FF^TG=FFT,其中 FFF 是重新排列后的特征矩阵,FTF^TFT 是它的转置,矩阵乘法的结果给出了 Gram 矩阵。

11.6.2.2 Gram Matrix 应用

在**神经纹理合成(Neural Texture Synthesis)**中使用 Gram 矩阵来优化和合成纹理图像。

图中左侧翻译:

  1. **预训练 CNN:**首先在 ImageNet(VGG-19)上对卷积神经网络(CNN)进行预训练。
  2. **前向传播:**将输入的纹理图像通过 CNN 进行前向传播,记录每一层的激活值,得到每一层的特征图,特征图的形状为 Ci×Hi×WiC_i \times H_i \times W_iCi×Hi×Wi,其中 CiC_iCi 是通道数,HiH_iHiWiW_iWi 是特征图的高度和宽度。
  3. **计算 Gram 矩阵:**对每一层,计算 Gram 矩阵,表示特征之间的共现关系。具体计算方法是对每一对特征进行外积,得到一个形状为 Ci×CiC_i \times C_iCi×Ci 的矩阵,用来描述特征之间的相关性。
  4. **初始化图像:**随机噪声初始化生成的图像。
  5. **生成图像的前向传播:**将生成的图像输入到 CNN 中,计算每一层的 Gram 矩阵。
  6. **计算损失:**计算损失,损失函数是所有层 Gram 矩阵之间的 L2 距离的加权和,目标是让生成的图像的 Gram 矩阵与目标图像的 Gram 矩阵尽量匹配。
  7. **反向传播:**使用反向传播计算生成图像的梯度,以便对图像进行调整。
  8. **图像更新:**通过梯度下降方法,更新生成图像,继续优化使得生成图像的 Gram 矩阵更接近目标图像的 Gram 矩阵。
  9. **重复优化:**重复执行上述步骤,直到生成的图像与目标纹理图像的 Gram 矩阵足够接近。

图中右侧详解:

  • 输入图像:在最下方显示的就是输入的图像(例如石头纹理)。
  • 逐层 CNN 处理:图像通过不同的卷积层(如 conv1、conv2 等)和池化层(如 pool1、pool2 等),在每一层计算并生成对应的 Gram 矩阵。
  • 生成图像的优化:右侧的流程图展示了如何通过反向传播计算梯度,并根据损失函数调整生成图像,最终使图像逐渐逼近目标纹理。

可以看到层越高效果越好。

11.7 Neural Style Transfer 风格迁移

和 DeepDream 随机选取某一层和某一迭代次数,然后让狗和蛞蝓的形状随机出现在结果中不同,利用最小化特征重构损失是可控的,甚至还可以调整超参数来达到想要的效果。

甚至还能通过同时匹配多个 Gram 矩阵达到多风格迁移的效果:

11.8 Fast Style Transfer 快速风格转换

上面的方法有个弊端,训练一个网络所需的算力资源要求太高,时间也长。于是就有了下面的:

  1. 为每种风格训练一个前馈网络
  2. 使用预训练的 CNN 计算相同的损失,如前所述
  3. 训练完成后,使用一次前向传播对图像进行风格转换

主要内容与过程:

  1. 训练过程:

    • 每种风格一个网络:对于每种目标风格(例如《星空》这样的艺术风格),都会训练一个前馈神经网络。这些网络被训练来接受不同内容图像并生成它们的风格化版本。
  2. 使用预训练的 CNN 计算损失

    • 训练过程中,使用预训练的卷积神经网络(CNN)(例如 VGG 网络)来提取图像的内容特征和风格特征。然后,计算内容损失和风格损失,风格损失用于确保生成的图像保持目标风格的特征。
  3. 训练完成后的风格转换

    • 训练完成后,可以通过一次前向传播生成风格化的图像。这意味着输入一张内容图像后,网络会直接输出带有目标风格的图像,无需像传统的风格转换方法那样进行反向传播和优化。

图示解释:

  • 输入图像与风格目标

    • 左侧的图像显示了内容图像(例如城市景观)和风格目标(例如《星空》),其中内容图像是想要传达的主要结构,风格目标则是想要赋予内容图像的艺术风格。
  • 前馈网络(Feedforward Network)

    • 中间部分的前馈神经网络 fWf_WfW 通过训练来接受内容图像和风格图像,生成风格化图像。
  • 损失计算

    • 风格损失(红色部分)通过计算目标风格图像和生成图像在 CNN 中的激活差异来实现。
    • 内容损失(蓝色部分)通过计算内容图像和生成图像在 CNN 中的激活差异来实现。这样可以确保生成的图像保留原始图像的内容结构。
  • 输出图像

    • 生成的风格化图像 y^\hat{y}y^ 保持了原始内容图像的结构,同时融入了目标风格的纹理和色彩。

快速风格转换方法通过训练每种风格的专用前馈网络,使得在训练后,只需要一次前向传播就能生成风格化图像,从而大大提高了风格转换的速度和效率。这种方法结合了卷积神经网络的强大特征提取能力,使得图像能够保留原始内容的同时,完美地结合艺术风格,应用非常广泛,例如实时的图像风格转换、图像增强等。

11.9 总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值