【深度学习】卷积神经网络的可视化---Visualization by activation Maximization

本文主要是介绍【深度学习】卷积神经网络的可视化---Visualization by activation Maximization,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

The Overview:

Activation Maximization (AM)是用来可视化各个卷积层的输入偏好。 通过观测输入偏好,我们可以更好的了解CNN的卷积层到底学习到了什么。卷积学习得到的特征可以通过一帧合成图像来最大化神经元的激活。为了合成这个输入偏好,我们可以通过对CNN的输入像素进行反复迭代来最大化神经元的激活。

换言之,我们可以通过合成一个输入样式来激活神经元,使得神经元激活最大化的输入样式便是神经元的输入偏好,也就是通过输入偏好可以观察神经元到底学习了什么。

Activation Maximization 是由Erhan在2009年提出 D. Erhan, Y. Bengio, A. Courville and P. Vincent, Visualizing higher-layer features of a deep network, (2009), p3 。Erhan利用Activation Maximization观测了Deep Belief Net隐层神经元的输入偏好和Stacked Denoising Auto-Encoder在MNIST数据集学习到的特征。之后,Simonyan 用这个算法来可视化CNN的最后一层神经元。K. Simonyan, A. Vedaldi and A. Zisserman, Deep inside convolutional networks: Visualising image classification models and saliency maps。Google也通过这种方法来集成可视化特征样式应用在Inception网络中Inceptionism: Going deeper into neural networks。Yosinksi则将AM运用到更广泛的范围中,可以可视化CNN所有层中的各个神经元。Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps

近来一些的AM算法则尝试对输出的样式进行在更加容易的解释和。总而言之,AM在解释神经元的interests和层次特征方面体现出了强大的能力。

Algorithm

AM算法是通过输入一帧合成样式图像 x ∗ x^{*} x来最大化神经元的激活函数,其表达式可以为:

x ∗ = a r g m a x x a i , l ( θ , x ) x^{*} = \mathop{argmax} \limits_{x} a_{i,l} (\theta, x) x=xargmaxai,l(θ,x)

其中 θ \theta θ表示为网络参数(权重weight与bias)。

算法流程可以分为以下四部:
(1) 设置一个随机的输入图像,获得某一层(i)的特定卷积(l)的激活 a i , l a_{i,l} ai,l
(2)在固定CNN参数的情况下,计算激活 a i , l a_{i,l} ai,l 与 输入图像的梯度 ∂ a i , l ∂ x \frac{\partial a_{i,l}}{\partial x} xai,l
(3) 通过迭代来更改输入图像的像素,从而使得激活最大化。此处采用梯度上升算法:
x = x + η ∗ ∂ a i , l ∂ x x = x + \eta * \frac{\partial a_{i,l}}{\partial x} x=x+ηxai,l
(4)这个过程终止在一个特定模式图像x∗,当图像没有任何噪音。该模式被视为该神经元的首选输入

注意:

如果是可视化CNN最后一层,我们应该采取logits,而不是softmax过的概率。这是因为softmax是通过normalize最后一层的概率介于0-1之间,最大化类别概率可以通过降低其他类别的置信概率得到。

实验

这里提供keras-blog的例子,该例子实现在VGG16网络:
keras实现方法见:https://blog.keras.io/how-convolutional-neural-networks-see-the-world.html
我复现了tensorflow的方法见:https://github.com/XiaotianM/CNN_Visual_tensorflow
在这里插入图片描述

这篇关于【深度学习】卷积神经网络的可视化---Visualization by activation Maximization的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/489080

相关文章

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一