Note for Understanding Neural Networks Through Deep Visualization

2023-05-16

Note for Understanding Neural Networks Through Deep Visualization

Abstract

近年来,在训练大型深度神经网络方面取得了巨大进展,其中包括训练卷积神经网络识别自然图像。 然而,我们对这些模型如何工作的理解,特别是他们在中间层执行的计算,已经落后了。通过开发更好的可视化和解释神经网络的工具,这一领域的进展将进一步加速。 我们在这里介绍两种工具。 第一种是在处理图像或视频时,将训练过的每个图层上产生的激活可视化的工具。我们发现,随着用户输入的改变,通过查看实时的激活值有助于理解卷积网络的工作原理。 第二种工具通过图像空间中的正则化,可视化DNN每一层的特征。在这里我们介绍几种新的正则化方法,这些方法结合起来可以产生更清晰,更可理解的可视化图像。 这两种工具都是开源的。

简单说:
可视化工作分为两大类,一类是非参数化方法:这种方法不分析卷积核具体的参数,而是先选取图片库,然后将图片在已有模型中进行一次前向传播,对某个卷积核,我们使用对其响应最大的图片块来对之可视化;而另一类方法着重分析卷积核中的参数,使用参数重构出图像。

1. Introduction

过去几年在训练强大的深度神经网络模型方面取得了巨大的进步,这些模型在各种具有挑战性的机器学习任务中正在接近甚至超越人类能力。 一个标志性的例子是训练深度卷积神经网络AlexNet,分类自然图像。 该领域大放异彩受益于GPU强大的计算能力,更好的训练技巧(dropout),更好的激活单元(ReLU), 和较大的标记数据集(ImageNet)。

虽然我们对如何创建高性能架构和学习算法的知识有了相当大的改进,但我们对这些大型神经模型如何运作的理解却落后了。 神经网络一直被称为“黑盒子”,因为很难准确理解一个具有大量神经元相互作用、非线性变换的神经网络,训练之后会有什么功能。大型现代神经网络由于其规模更难研究。例如,了解广泛使用的AlexNet DNN需要理解6000万训练过的网络参数。

理解神经网络学习到了什么本身就很有趣,并且这也是进一步改善模型的关键途径:理解当前模型学习到的知识,才可以提出使它们变得更好的方法。 例如,使用反卷积技术,可视化DNN隐藏单元学习到的特征,提出了使用较小的卷积核的结构。这一改进(ZFNet),取得了2013年ImageNet的最佳水平。

本文提供了两种可视化的工具,这两种工具都是开源的,以便科学家和从业人员可以将它们与自己的DNN集成从而更好地理解DNN。第一种工具是交互式的软件,它根据用户提供的图像或视频,让它们通过DNN后,绘制出每一层上产生的激活。第二个工具可以更好地显示由DNN每层的单个神经元计算出的学习特征。观察已经学习到的特征对于理解当前的DNN如何工作以及如何改进它们很重要。

过去的研究大致分为两个不同的阵营:以数据集为中心和以网络为中心。前者需要一个训练好的DNN并在该网络上进行前向运算;后者只需要一个训练好的DNN。以数据集为中心的方法从训练或测试集挑选图像,让这些图像通过DNN网络,DNN网络的每个单元都会产生高或低的激活值。

以网络为中心的方法直接调查网络,而不需要数据集中的任何数据。典型代表是ZFNet的反卷积方法。例如2009年Visualizing higher-layer features of a deep network一文中,通过使特定单元产生高的激活值来合成图像。从初始输入x=x0x=x0开始,计算在某个单元ii处由该输入引起的激活ai(x)ai(x)。然后沿着梯度∂ai(x)/∂x∂ai(x)/∂x的方向在输入空间中步进迭代,使得单元ii产生的激活值越来越高,最终的x∗x∗被认为是该单元ii正在寻找的答案(最希望看到的特征)。在输入空间是图像的情况下,可以直接显示x∗x∗来解释。其他人也纷纷效仿,使用梯度来查找能使输出单元产生更高激活的图像或更低激活的图像。这些基于梯度的方法在简单性上很有吸引力,但优化过程倾向于生成与自然图像不相似的图像。(高激活产生的图像可能无法辨认)。但是如果能够适当地调整优化,可以用这种方法获得一些有用的可视化。2013年Deep inside convolutional networks: Visualising image classification models and saliency maps一文中,利用L2正则化生成了略微可辨别的图像。本文基于前人的基础研究提供了三种正则化的形式,这些正则化生成的图像比以前的方法更容易识别。

2. 实时卷积激活的可视化

我们的第一个可视化方法非常简单:绘制图像或视频经过神经网络的前向计算在每个卷积层中神经元的激活值。 在全连接的神经网络中,神经单元的顺序是不相关的,因此这些矢量的图不具有空间信息性。然而,在卷积网络中,卷积核的使用方式会考虑到输入图像空间信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5O6KF3eK-1608473067063)(/Users/liyan/Library/Application Support/typora-user-images/image-20201220211527519.png)]

上图绘制出了输入图像经过conv5层后的激活值。 conv5层的大小为256×13×13,我们将其描述为256个13×13灰度图像。每个256张小图像包含了与输入数据在相同的x-y空间中的激活值。并且这256个图像被简单地划分成16×16网格。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sNVPqMsg-1608473067065)(/Users/liyan/Library/Application Support/typora-user-images/image-20201220211955757.png)]

上图显示了一个conv5层上的第151通道的13×13激活的视图。该通道响应人脸和动物脸部。这个深度神经网络是在ImageNet上训练的,该网络中不包含脸部类,但包含许多带有脸部的图像。 但是该通道可以对人类和动物的脸部做出反应。

尽管这种可视化很容易实现,但我们发现它很有用,因为所有流经网络的数据都可以被可视化。 幕后没有任何神秘的事情发生。因为这个卷积网络只包含从输入到输出的单一路径,所以每一层都是一个bottleneck ,所有信息都必须通过这个bottleneck传递给分类决策。 迄今为止,我们已经从该工具中收集到了一些令人惊讶的发现:
**1.**在某些层面上的表示似乎是局部的。例如,我们可以在conv4和conv5上看到文本,鲜花,水果和脸部的检测器,而不是在所有图层上进行分布表示。
**2.**当直接使用来自Google Images 的照片文件进行分类时,分类通常是正确并且是高度自信的(对于正确分类的softmax概率接近1)。当使用来自网络摄像头的输入时,预测往往不能正确,因为训练集中没有相应的类别。训练集的1000个类虽然很多,但并不包含大多数常见的家庭用品。因此显示网络摄像头中的人时,如果这个人不在ImageNet类别内,输出就不会有很高的概率。这个概率向量是有噪声的,如果输入有微小变化,这个向量会产生显著的变化。绘制全连接层(fc6和fc7)也有类似情况发生。
**3.**最后三层对小的输入变化很敏感,大部分较低层是非常鲁棒的。 例如,当可视化conv5层时,通过移动摄像头前方的物体,可以找到许多面部,肩部等检测器。尽管1000个类别不包含明确标记的面部或肩部,但网络可以识别这些是因为它们是人的部位,识别整个人需要这些有用的局部信息,有了这些局部信息,将这些局部信息整合起来将有助于最终的分类决定。Conv5上第151通道是一个面部检测器,如上图所示的那样,它可以激活人脸、狮子脸、猫脸。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Note for Understanding Neural Networks Through Deep Visualization 的相关文章

  • 【旋转框目标检测】2201_The KFIoU Loss For Rotated Object Detection

    paper with code paper code Jittor Code https github com Jittor JDet PyTorch Code https github com open mmlab mmrotate Te
  • 【FTP工具linux错误】Job for vsftpd.service failed because the control process exited with error code

    环境 xff1a 阿里云centos7 2搭建ftp 问题 xff1a 启动vsftpd服务 xff0c 报错 xff1a Job for vsftpd service failed because the control process
  • Unable to allocate 130176KB bitmaps for parallel garbage collection for the requested 4165632KB heap

    我运行springboot中的 Springboot082ShiroApplicationTests时 xff0c 显示的是内存不足 xff0c 但是实际上我也没开多少应用 xff0c 而且之前一直没问题 xff0c 后来发现是因为我已经开
  • Vue 之v-for中获取index(element)

    可以通过事件 xff0c 把item和index传给函数 xff0c 这样就能获取到idenx了 xff0c 这样做的好处是我们定位一个数组元素的时候重名的时候用indexof就会获取到并不一定是我们想要的 xff0c 来看element官
  • HOW TO install nam for ns2 on debian

    Debian is convinent to install software packages for the tool aptl Like many other packages we can use apt get install n
  • gitpush出现remote: Support for password authentication was removed on August 13, 2021.

    git push 报错 xff1a Username span class token keyword for span span class token string 39 https github com 39 span span cl
  • 静态测试 vs 动态测试

    静态测试 静态测试又可分为代码走查 Walkthrough 代码审查 Inspection 技术评审 Review 代码走查 Walkthrough 开发组内部进行的 采用讲解 讨论和模拟运行的方式进行的查找错误的活动 代码审查 Inspe
  • linux-docker

    unix liunx windows linux 文件系统 所有的资源都是目录在 root 根目录下 一 指令 ip addr ifconfig cd ls vim sudo 管理员身份 代表换行输入 pwd 查看所在目录 sudo sys
  • C++笔记

    C 中的cast 1 const cast 2 dynamic cast 3 static cast 4 reinterpret cast C 中variable的definition initialization assignment d
  • ubuntu 安装360浏览器

    ubuntu 安装360浏览器 推荐一个我自己做的普法公众号 大可说法律 有法律方面咨询的可以关注 因为之前收藏的书签都在360浏览器 为了方便 我找到了下载360浏览器的方法 官方下载 https browser 360 cn se li
  • 如何考虑BLL层和DAL层的日志

    DAL层日志 DAL层与数据库交互 日志记录的目的是 1 发生异常时通过日志查找原始信息 便于快速定位原因 2 对于一些复杂的事务可以通过对日志的分析来发现错误的具体位置 BLL层日志 BLL层与UI交互 虽然UI已经对用户输入进行了一些过
  • AI三大主义:符号主义、联结主义、行为主义

    一 符号主义 symbolicism 符号主义 symbolicism 逻辑主义 Logicism 心理学派 Psychlogism 计算机学派 Computerism 其原理主要为物理符号系统 即符号操作系统 假设和有限合理性原理 早期的
  • Python语法:... for ... in ... if ...

    Python中 for in if 语句是一种简洁的构建List的方法 从for给定的List中选择出满足if条件的元素组成新的List 其中if是可以省略的 下面举几个简单的例子进行说明 for in for in 语句 实例如下 1 a
  • Python:使用循环语句for 做一个九九乘法表

    学会了循环语句后 就能做很多小程序了 在这里演示几种九九乘法表的编程方法 首先使用for循环来进行编程 for hang in range 1 10 定义行为hang 行数为9 for lie in range 1 hang 1 定义列为l
  • Loss和神经网络训练

    出处 http blog csdn net han xiaoyang article details 50521064 声明 版权所有 转载请联系作者并注明出处 1 训练 在前一节当中我们讨论了神经网络静态的部分 包括神经网络结构 神经元类
  • Java 控制结构练习题

    练习1 某人有100 000元 每经过一次路口 需要交费 规则如下 1 当现金 gt 50000时 每次交5 2 当现金 lt 50000时 每次交1000 编程计算该人可以经过多少次路口 要求 使用while break方式完成 publ
  • 教妹学Java(十五):for循环详解

    你好呀 我是沉默王二 一枚颜值与才华俱在的程序员 本篇教程通过我和三妹对话的形式来谈一谈 for while do while 循环之间的差别 以及重点介绍一下 for 循环 while do while 会在接下来的教程中单独介绍 教妹学
  • 接口继承_1

    摘自Jeffrey的CLR via CSharp 接口方法默认是virtual and sealed 意思是接口方法默认是没有继承的 这一点在你需要多态时需要注意 Base b new Base Derived d new Derived
  • 规则动词的过去式及发音规则

    规则动词的过去式词尾变化有几种 1 一般情况下加ed 如watched planted watered pulled climbed picked 2 以不发音字母e结尾的加d 如liked moved tasted 3 以辅音字母加y结尾
  • matlab for循环坑

    matlab 用 for 嵌套循环遍历数组时 可能有 bug matlab octave 环境 linux Matlab R2018a 1 windows GNU Octave version 5 2 0 以 for x vector 的形

随机推荐

  • linux常用命令(Beginner note)

    命令 ls 列出所有文件及文件夹 ls 路径 xff1a 列出所给路径下的所有文件及文件夹 选项 xff1a xff08 可组合使用 xff0c 也可简写组合形式 xff0c 例 xff1a alh xff0c 无先后顺序 xff09 a
  • 利用JS-SDK微信分享接口调用(后端.NET)

    一直都想研究一下JS SDK微信分享的接口调用 xff0c 由于最近工作需要 xff0c 研究了一下 xff0c 目前只是实现了部分接口的调用 xff1b 其他接口调用也是类似的 xff1b 在开发之前 xff0c 需要提前准备一个微信公众
  • Linux文件查找find

    1 find查找概述 为什么要有文件查找 xff0c 因为很多时候我们可能会忘了某个文件所在的位置 xff0c 此时就需要通过find来查找 find命令可以根据不同的条件来进行查找文件 xff0c 例如 xff1a 文件名称 文件大小 文
  • Linux文件打包与压缩

    1 文件打包与压缩 1 什么是文件压缩 将多个文件或目录合并成为一个特殊的文件 比如 搬家 脑补画面 img 2 为什么要对文件进行压缩 xff1f 当我们在传输大量的文件时 xff0c 通常都会选择将该文件进行压缩 xff0c 然后在进行
  • 集中式版本管理SVN与分布式版本管理Git的区别

    集中式版本控制系统SVN CVS 先说集中式版本控制系统 xff0c 版本库是集中存放在中央服务器的 xff0c 而大家工作的时候 xff0c 用的都是自己的电脑 xff0c 所以要先从中央服务器取得最新的版本 xff0c 然后开始工作 x
  • chatgpt Linux 定时任务 清理rancher pod启动服务的日志文件 脚本

    Linux 定时任务执行命令 假设我们想要每隔X分钟 每隔X天 每天X点执行一个脚本文件 xff0c 可以使用 Linux 自带的 cron 工具来创建定时任务 清理步骤 您可以使用 Linux 自带的 cron 工具来创建定时任务 xff
  • Http协议的几种常见状态码

    在开发好了网站后 xff0c 用户通过URL对资源进行操作 xff0c 服务器端要告诉用户交互的结果 xff0c 比如新增资源是成功还是失败了 一个较好的办法就是遵循HTTP协议 xff0c 使用请求响应的HTTP状态码 xff08 Sta
  • 推荐画UML图以及流程图的在线网站Site

    记得当年学UML课程的时候 xff0c 当你还在为了安装Rose而发愁的时候 xff0c 人家都把作业给交了 xff0c 并且现在大多数UML课程都会让学生使用Rational Rose做画图练习 近来 xff0c 做毕业设计需要提供各种流
  • 浙大PTA平台上的题目题解

    记载一些题目的代码 xff0c 之后想要在b站讲题目 xff0c 到时候会把录的视频上传b站 不是大佬 xff0c 是蒟蒻 xff0c 大佬勿喷 xff0c 仅供参考 xff0c 欢迎大家star xff0c qwq 浙大版 C语言程序设计
  • git 入门教程

    想要将一个项目托管到github xff0c 需要进入项目所在文件夹进行git init命令初始化 Git提交代码的基本流程 xff1a 创建或修改 本地文件使用 git add 命令 xff0c 将创建或修改的文件添加到本地的暂存区 xf
  • 博客搬家

    谢谢大家对我的blog的支持 现在本科毕业 xff0c 准备读研 方向大概是机器学习这一块 又是一个新的开始 我想将我读研学习Python以及机器学习 深度学习 以及数据分析处理 大数据等学习教程放在新的blog上 xff1a blog 欢
  • Python多线程笔记(Python_MultiThread)

    4 MultiThreading 多线程 使用 xff1a a 什么是多线程 xff1f 简单明了 xff0c 让计算机在同一时间内同时运行多个程序 xff0c 并且每个程序的计算互不干扰 xff0c 我们称这样的操作为多线程运算 b ad
  • Python多进程笔记(Python_MultiProcess)

    1 MutiProcessing 多进程 使用 xff1a a 什么是多进程 xff1f 在上面我们使用多线程去分别处理不同的事情 xff0c 看起来 xff0c 多线程处理并不比单线程循环处理的效率看起来那么的高 多进程是在利用我们电脑C
  • Python自带的GUI(Tkinter)教程

    1 Python Tkinter xff08 GUI图形界面 xff09 xff1a a What s Tkinter Tkinter 是什么 xff1f Tkinter是Python自带的一个GUI库 xff0c 他可以将我们在comma
  • Python科学计算包NumPy教程

    在我的Github上有一份代码与教程结合的jupyter Notebook文件 xff0c 大家可以clone下来看一看 下面会用实例的方式给出一些examples xff1a Tutorial教程 官方中文文档 span class to
  • 区块链入门的几个概念

    区块链入门的几个简单概念 1 What s Block Chain 区块链是一门软件技术 xff0c 从本质上来看就像是一个分布式的DataBase xff0c 是一个去中心化 xff0c 分布式技术 由于是分布式的 xff0c 所以区块链
  • Mysql GROUP_CONCAT与CONCAT_WS配合使用单选、多选拼接

    举例1 可以使用IF函数将单选和多选的值分别拼接 xff0c 并在最后的结果中使用CONCAT WS函数将它们合并 xff1a idcolors11223344 551 2 362 3 4 5 我们想要的结果为1 2 3 4 5 下面开始测
  • A Survey on Concept Drift Adaptation Note

    A Survey on Concept Drift Adaptation Abstract Concept drift primarily refers to an online supervised learning scenario w
  • Learning under Concept Drift:A Review

    Learning under Concept Drift A Review Abstract Concept drift describes unforeseeable changes in the underlying distribut
  • Note for Understanding Neural Networks Through Deep Visualization

    Note for Understanding Neural Networks Through Deep Visualization Abstract 近年来 xff0c 在训练大型深度神经网络方面取得了巨大进展 xff0c 其中包括训练卷积