20170325#cs231n#10.Understanding and Visualizing Convolutional Neural Networks
来源:互联网 发布:js控制div滚动条位置 编辑:程序博客网 时间:2024/05/22 15:21
Visualize patches that maximally activate neurons
这个意思是是把数据输入某一层中,然后看数据的哪一部分最能激活这层的神经元
Visualize the filters/kernels (raw weights)
但对高层的weight可视化的意义就不是特别大了
Visualizing the representation
t-SNE visualization
t-SNE是我们输入一个高维的数据,然后可以根据数据之间的关系进行聚集。
similar things end up in similar places.dissimilar things end up wherever
Occlusion experiments 遮挡实验
这里遮挡块是可以滑动的,对图片中的某一部分作遮挡处理,然后向卷积神经网络输入遮挡过的图片,查看网络将其分为正确类的可能性
如上图中图一中的狗,遮挡块挡住狗的脸部的时候,图片被正确识别的probability就会降低
如上图中图三,正确类为狗。因此如果挡住人脸部,图片被正确识别为狗的概率会大大增加
Visualizing Activations
http://yosinski.com/deepvis
介绍视频:https://www.youtube.com/watch?v=AgkfIQ4IGaM
Deconv approaches
如果要求网络中任意一个神经元对于输入的梯度,那么可以前向传播到这层神经元然后停止,再把这一个神经元Gradient设置为1.00(把这层其他神经元Gradient设置为0),然后再直接从这个神经元进行后向传播,就可以计算得到这个神经元对于输入的梯度
Guided backpropagation
在上图中要先把某层数据进行置0置1.00(方法看上文Deconv approaches部分的文字)然后再使用Guided backpropagation
上图中Guided Backprop对于ReLU,相比于普通的反向传播会改变。
也就是说Guided Backprop会阻断输入的梯度是负的传播。在Guided Backprop只能保留和后向传播正的影响值,所以可视化之后的图片看起来就不会太奇怪,更加清晰
Guided Backprop其实是backprop和deconv的结合体(deconv是如上图中的红框所示)
不过如果单纯使用deconv也有相似的不错的结果
结果如下图
一些例子
Optimization to Image
找到一个图片
- 如上图所示,输入一个全为0的图片,然后在最末端得到一个score
- 对于我们感兴趣的那一个class的score就设置为1,其他的class的score就设置为0,然后用反向传播去发现网络是如何改变这个全为0的图片的(这是普通的反向传播,不做guided backprop也不做有关ReLU层的事)
- 设置特定score为1是因为我们只关心感兴趣的梯度信号,用这些梯度信号去更新图片,找到某一个图片能够最大化这个class的score。
这样做是为了更新图片而不是更新weight
Find images that maximize some class score
例子:
Visualize the Data Gradient
上图中的数据梯度在物体所在位置的梯度绝对值比较大。这是每个像素对score的影响的体现。如果改变图二的狗所在位置的像素,那么可能就会对score造成相对比较大的影响。
score与pixel的关系可以由score对这个pixel的Gradient体现
我自己举个例子
例如假设score与pixel成线性关系,那么梯度就是他们之间的scale,如果这个scale也就是梯度比较大,那么pixel变化对score的影响就比较大,也可以说是这个pixel对最后的score贡献比较大
grabcut算法根据梯度信号抽取出图像的一部分
不仅仅对score,可以对网络中任意一个神经元做这种操作
另一种可视化数据梯度的方法
上图是另一种方法。它忽略了正则化,转而是在前向后向的一次小更新的时候对图像做一点blur模糊处理,这就在某种程度上阻止图像在高频区域的积累。
初始化的影响可以看下图(四个方格内代表四种不同初始化)
下图是score对input的梯度
然后是各个layer对input的梯度
这些图像都是表明神经元喜欢”看”什么或者什么东西会让神经元”感兴趣”,也就是说能够最大激活网络中某些神经元的图像(而这些图像是通过optimization得到的,通过前向后向很多次,图像就出现了)
(与上文中deconv不同的是只需要做一次反向就行了)
给定一个某一层的输出特征(也称之为code)能否再现原始的图像
举个例子及:这种操作在于,如果我们只给定最后一层FC层在分类之前的输出结果,我们要通过网络反推出生成这个输出结果的原图
原理就是通过optimization的方法找到一个code输出特征值和已经给定的CNN输出code特征值相似的图片
上图是在给定最后一层FC的输出code时候的重建(复现)
可以看出从最后一层pooling层(也就是在第一层FC之前那层)开始重建效果要远好于从最后一层FC层开始重建
从上图中CONV1的输出特征开始重建和从fc8开始重建的结果是很不一样的。很明显CONV1开始重建与原图很接近。这说明随着卷积神经网络的逐渐进行有信息被逐渐丢掉了。
上图表明即使给定相同的CNN code,也可能有不同的重建结果
Something fun
DeepDream
上文查看某个单独神经元的梯度时候是把梯度设置为1.00,在这里不一样,是直接把Gradient设置为激活数据,也就是dx=x
。
在这里就是为了寻找一个使得激活更强的图像。
NeuralStyle
[ A Neural Algorithm of Artistic Style by Leon A. Gatys,Alexander S. Ecker, and Matthias Bethge, 2015]
good implementation by Justin in Torch:https://github.com/jcjohnson/neural-style
“fool” ConvNets 欺骗卷积神经网络(adversarial example 对抗样本)
有时候把input作细微的改变/变形,就可以使得网络的预测结果出现变化。如上图中correct→ostrich,把图片沿着ostrich鸵鸟类的梯度方向变化一下,就可能会使正确类变为鸵鸟类
上面两幅图就是把原图混入一点点金鱼分类器的权值,就可以做到使得图片被网络分类为金鱼的概率增加不少
但是实际上在深度学习里面,我们经常会有一些扭动,这可以让我们解决这个问题。不过我们仍然不知道怎么去改变线性分类器。
adversarial example 对抗样本
http://blog.csdn.net/cdpac/article/details/53170940
- 20170325#cs231n#10.Understanding and Visualizing Convolutional Neural Networks
- CS231n系列课程Lecture9: Understanding and Visualizing Convolutional Neural Networks
- Understanding and Visualizing Convolutional Neural Networks
- Visualizing and Understanding convolutional networks
- Visualizing and Understanding Convolutional Networks
- Visualizing and Understanding Convolutional Networks
- Visualizing and Understanding Convolutional Networks
- Visualizing and Understanding Convolutional Networks
- Visualizing and Understanding Convolutional Networks
- Visualizing and Understanding Convolutional Networks
- Visualizing and Understanding Convolutional Networks(精读)
- 论文提要“Visualizing and Understanding Convolutional Networks”
- 论文笔记 Visualizing and understanding convolutional networks
- Visualizing and Understanding Convolutional Networks论文笔记
- Visualizing and Understanding Convolutional Networks笔记
- Visualizing and Understanding Convolutional Networks笔记
- Visualizing and Understanding Convolutional Networks翻译总结
- 论文Visualizing and Understanding Convolutional Networks
- 终身机器学习(Lifelong Machine Learning)综述
- 递推递归练习E
- 【实验三】多媒体文件的读写和转换
- Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present 记忆化搜索
- 利用LaTeX展现C++代码
- 20170325#cs231n#10.Understanding and Visualizing Convolutional Neural Networks
- 懒人后台模板
- fortify——Unreleased Resource: Streams
- mysql 索引原理
- Linnux无名管道的创建例子
- Gson使用指南(一)
- 快速排序
- nginx实现反向代理
- iOS的10个实用小技巧,mark