【机器学习笔记】可解释机器学习-学习笔记 Interpretable Machine Learning (Deep Learning)

【机器学习笔记】可解释机器学习-学习笔记 Interpretable Machine Learning (Deep Learning)

机器学习子豪兄专栏:机器学习可解释性公开课 学习笔记

课前准备

Reference (CV Basics)

0.1 CV基础

Based on Lecture 1 of CS231N
CV和深度学习

  1. 计算机视觉的历史
    1. 寒武纪大爆发:产生眼镜
    2. 光学:墨子的小孔成像到达芬奇的针筒
    3. Hubel & Wiesel, Havard 1959 视觉神经的成像原理
    4. Larry Roberts 1963 Block World 边缘检测
    5. AI Group MIT 1966 Project Mac
    6. Stage of Visual Representation, David Marr, 1970s
    7. Generalized Cylinder, Pictorial Structure 弹簧和圆柱体模型 斯坦福
    8. Normalized Cut, Shi & Malek 抠图
    9. Face Detection by Adaboost, 2001, Viola & Jones
    10. 2000s 手动特征工程对图像解码
      1. SFT特征
      2. 空间金字塔特征
      3. 方向梯度特征
    11. 2010s Image Net
      1. 2012 AlexNet
      2. 2014VGG—2014GoogleNet—2015ResNet—Now
  2. 计算机视觉的应用
    1. 算法+数据+算力
    2. 语义分割
    3. Image cpationing
    4. 人体姿态估计
    5. 三维重建
    6. 医疗,VR/XR

Visualize Convolutional Neural Networks (CNN)

Based on Lecture 8 of CS231N

Visualizing what models have learned

  • Visualize Filters
    • 可视化权重和梯度
    • Krizhevsky, “One weird trick for parallelizing convolutional neural networks”, arXiv 2014
    • He et al, “Deep Residual Learning for Image Recognition”, CVPR 2016
    • Huang et al, “Densely Connected Convolutional Networks”, CVPR 2017
      -visualize weights
  • 可视化最后一层
    • visualize representation space
      -请添加图片描述

    • Van der Maaten and Hinton, “Visualizing Data using t-SNE”, JMLR 2008

  • 可视化激活层
    • Yosinski et al, “Understanding Neural Networks Through Deep Visualization”, ICML DL Workshop 2014.

Understanding input pixels

  • 找出影响最大的像素
    • visualize patches that maximally activate neurons
    • Mask part of the image before feeding to CNN, check how much predicted probabilities change
      Zeiler and Fergus, “Visualizing and Understanding Convolutional Networks”, ECCV 2014
      • Zeiler and Fergus, “Visualizing and Understanding Convolutional Networks”, ECCV 2014
  • Saliency via backprop
    • Simonyan, Vedaldi, and Zisserman, “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”, ICLR Workshop 2014.
    • Saliency Maps: Segmentation without supervision
      • Ribeiro et al, ““Why Should I Trust You?” Explaining the Predictions of Any Classifier”, ACM KDD 2016
  • Guided backprop to generate images
    • Zeiler and Fergus, “Visualizing and Understanding Convolutional Networks”, ECCV 2014 Springenberg et al,

    • “Striving for Simplicity: The All Convolutional Net”, ICLR Workshop 2015
      -请添加图片描述

    • 通过(引导)反向传播的中间特征

    • Zeiler and Fergus, “Visualizing and Understanding Convolutional Networks”, ECCV 2014

    • Springenberg et al, “Striving for Simplicity: The All Convolutional Net”, ICLR Workshop 2015

  • 梯度上升以可视化特征
    • 生成最大限度激活神经元的合成图像
      • a r g m a x I S c ( I ) − λ ∣ ∣ I ∣ ∣ 2 arg{max}_{I} S_c(I) - \lambda ||I||^2 argmaxISc(I)λ∣∣I2
        • S_c 是 C 类的分数
        • 惩罚图像的L2范数; 也在定期优化期间
      • 将图像初始化为零
      • 重复:
        1.正向图像计算当前分数
      1. 反向传播得到神经元值相对于图像像素的梯度
      2. 对图像进行小幅更新
    • Simonyan, Vedaldi, and Zisserman, “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”, ICLR Workshop 2014.

对抗扰动(Adversarial perturbations)

  • 愚弄图像/对抗性例子
    • Moosavi-Dezfooli、Seyed-Mohsen 等。 “普遍的对抗性扰动。” IEEE 计算机视觉和模式识别会议论文集。 2017.
  • 从任意图像开始
  • 选择一个任意类
  • 修改图像以最大化类别 (4) 重复直到网络被愚弄

风格迁移

  • 特征反转
    请添加图片描述 - Mahendran and Vedaldi, “Understanding Deep Image Representations by Inverting Them”, CVPR 2015
    • 不是合成图像来最大化特定神经元,而是
      尝试放大网络中某一层的神经元激活
    • 在 CNN 中选择一个图像和一个层; 重复:
      1. 前向:计算所选层的激活
      2. 设置所选层的梯度等于它的激活
      3. 向后:计算图像的梯度
      4. 更新图像
  • Texture synthesis
    • Wei and Levoy, “Fast Texture Synthesis using Tree-structured Vector Quantization”, SIGGRAPH 2000 Efros and Leung, “Texture Synthesis by Non-parametric Sampling”, ICCV 1999
  • 经风格迁移
    • 问题:样式迁移需要通过 VGG 进行多次前向/反向传递; 非常慢!
    • 解决方案:训练另一个神经网络为我们执行风格迁移!
      1. 为每种风格训练一个前馈网络
      2. 使用预训练的 CNN 计算与之前相同的损失
      3. 训练后,使用单个前向传递对图像进行风格化
    • Johnson, Alahi, and Fei-Fei, “Perceptual Losses for Real-Time Style Transfer and Super-Resolution”, ECCV 2016

第一课 ZF Net

Reference

ZF Net

如何读论文

笔记(ZF Net)

ZFNet 是一个经典的卷积神经网络。 该设计的动机是可视化中间特征层和分类器的操作。 与 AlexNet 相比,滤波器尺寸减小 (7x7),卷积步幅减小 (2x2)。

主要贡献:

  1. 一种可视化模型内活动的新颖方法。 这揭示了显示许多直观所需属性的功能,例如
    1.组合性
    2.增加不变性a
    3.阶级歧视,随着我们提升层次。
  2. 这些可视化可用于识别模型的问题,从而获得更好的结果
    1. 例如改进 Krizhevsky 等人。 的 [18] 令人印象深刻的 ImageNet 2012 结果。
    2. 通过一系列遮挡实验表明,该模型在进行分类训练时,对图像中的局部结构高度敏感,而不仅仅是使用广泛的场景上下文。
    3. 对模型的消融研究表明,具有最小深度的网络,而不是任何单独的部分,对模型的性能至关重要。
  3. 最后,我们展示了 ImageNet 训练的模型如何很好地泛化到其他数据集。

最后的贡献(后来被许多其他关于微调、迁移学习等的研究涵盖)和性能改进现在被认为不那么重要了。 尽管 ZF Net 当时是 2013 年 ImageNet 赢家,但它现在更被称为可解释 CNN 的鼻祖(可视化/理解 CNN 在做什么)

关键方法

  • Deconvnet技术
    • Unpooling
    • Rectification(反激活):仍然用ReLU
    • Filtering(反卷积):卷积神经网络使用学习到的过滤器对前一层的特征图进行卷积。 为了近似地反转它,deconvnet 使用相同过滤器的转置版本(作为其他自动编码器模型,例如 RBM),但应用于校正映射
    • 请添加图片描述
    • Detail
      • 大小裁剪:如果不进行大小裁剪,卷积核中会有一些卷积核特别的大。所以需要对过大的卷积核进行裁剪,把它限定在一个大小范围内
  • Convnet Visualization
    • Feature Visualization

      • 1st-layer:找到9个卷积核激活最大的数据集中原图前9个图片(patch-top9)
      • 2nd-layer:
        • 选出16个卷积核,找到能够使得激活最大的图片(9张图每个卷积),每个图片都来自验证集(使用已选出的图片可重构原始输入的像素空间)
        • 然后呢,我们把这 9 张图片传到第 2 层的feature map,使用反卷积的技巧重构回原始输入的像素空间。就变成了这个灰色的左图
      • 第3、4、5层卷积:所提取的特征逐渐变得高级,与第2层的流程相似
      • 请添加图片描述
        -请添加图片描述
    • Invariance

      • 对原图进行平移、缩放、旋转对网络的不同层提取信息的影响,其中计算变换之后的特征向量和原图的特征向量的欧式距离,观察其影响。
      • 垂直平移、缩放的影响:对网络的底层影响显著(急剧影响),对网络的高层影响较小(线性影响)
      • 旋转:每旋转90°,存在对称性,网络能够在此期间捕获同样的特征
  • change architecture
    • 对卷积核进行步长和尺寸的调整,可发现卷积核失效的变化,将步长从4变成2,将卷积核尺寸从11x11变成7x7,发现卷积核失效减少
  • Correspondence Analysis (Ablation Test)
    • 测试目的:使用小方块对图片进行遮挡,测试网络预测结果对遮挡的敏感性。
    • 论文中的图像含义:
      1. 灰色图片中的黑框部分:将不经遮挡的图片放入网络中,得到第5层激活最大的feature map,用反卷积的方法重构原始输入的像素空间,得到的可视化图像
      2. 热力图:使用灰色挡板遮挡原图中不同位置,在每次遮挡过程中,记录第5层激活最大的feature map,将所有该位置的feature map进行叠加,形成热力图
  • 测试验证对不同狗的图片遮挡相同位置,对网络模型的影响,通过计算海明距离的求和值进行比较,说明深度学习模型隐式定义了图片中局部位置的相关性。
    • 相关性分析的计算公式: Δ l = ∑ i , j = 1 , i ≠ j 5 H ( sign ( ϵ i l ) , sign ( ϵ j l ) ) \Delta_l = \sum_{i,j=1, i \neq j}^5 \mathcal{H}(\text{sign}(\epsilon_i^l), \text{sign}(\epsilon_j^l))
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenBox 是一个基于 Python 的黑盒优化库,它可以优化各种类型的函数,包括连续、离散和混合类型的函数。使用 OpenBox 可以自动调整模型参数,从而提高模型的性能。 以下是使用 OpenBox 进行优化的基本步骤: 1. 定义优化问题的目标函数。 2. 指定优化问题的搜索空间和约束条件。 3. 配置优化算法的参数。 4. 运行优化算法,获得最优解。 例如,如果你想使用 OpenBox 对一个连续的函数进行优化,可以按照以下步骤操作: 1. 定义目标函数。例如,我们想最小化函数 f(x) = x^2 + 2x。 ```python def f(x): return x ** 2 + 2 * x ``` 2. 指定搜索空间和约束条件。例如,我们希望 x 的取值范围在 [-5, 5] 之间。 ```python from openbox.utils.config_space import ConfigurationSpace from openbox.utils.constants import MAXINT cs = ConfigurationSpace() x = cs.add_hyperparameter(cs.FloatHyperparameter("x", -5, 5)) ``` 3. 配置优化算法的参数。例如,我们使用随机搜索算法进行优化,最大迭代次数为 100。 ```python from openbox.optimizer.generic_smbo import SMBO bo = SMBO(f, cs, max_runs=100, time_limit_per_trial=180, logging_dir='openbox_logs') ``` 4. 运行优化算法,获得最优解。 ```python inc_value, inc_config = bo.run() print("最小值为 %f,对应的参数配置为 %s" % (inc_value, inc_config)) ``` 需要注意的是,OpenBox 可以处理多维参数空间和多个目标函数,具体使用方法可以参考官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值