这种用于可视化网络究竟学到了什么的技术是把网络视作黑盒,修改它的输入然后观察输出。假设我们有一张被这个网络能准确地分类成博美犬的图片,现在,我们要做的是将这个图片的某一块「屏蔽(block)」(将这个地方的像素值设置为 0 或 255,或者颜色设置为黑或白即可)。这样,这个网络的输出是对这张被屏蔽的图片的输出。我们可以发现,当我们屏蔽的部位越是重要,比如脸部,那么这个网络做出正确分类可能性就越低。
一个有趣的发现是,比如,我们有一张照片,其正中部位有一只阿富汗猎犬,旁边是一位男子,网络能正确的将其标记为阿富汗猎犬。但是,如果将男人的脸用像素为 0 的方块遮盖,网络认为是阿富汗猎犬的概率激增。发生这种现象的原因在于,每一张图片只被分配了一个正确的标签,当我们遮盖一些可能会引起网络会做出其他决定的部位,那么,得出这个正确的标签的概率就大大提高了。这也是一种完整性检查,这样网络可以一种通过调整图片可能所属类别标签的概率大小来做出合理判断。 VI. 去卷积方法(Deconvolution Approaches) 通常,我们尝试去计算出关于网络权重的损失函数梯度,这样当我们每做一次更新操作,我们就能优化权重。现在,让我们思考一个问题:给出一张图片,怎样才能得出网络中任何一个随机神经元的梯度?有一种可行的方案是:
1)将图片输入网络,对于网络深处的某一个神经元,我们将其命名为神经元 a。 2)将它的梯度设置为 1,同层的所有其他神经元的梯度设置为 0。 3)一路将梯度反向传播回图片,得到一张略古怪的噪声图片。 尽管这张梯度图片很难解释,但至少可以告诉你,如果把这张图片和原始图片叠加,将会提高神经元 a 的激活函数值。而反向传播过程只会改变修正线性单元 ReLU 层。这里的直觉就是:沿着梯度(反向)传递到 ReLU 层的某一个神经元,那么说明这个神经元被激活了。否则,传递就会停止。 另一种替代方法是不使用简单的反向传播,而是使用所谓的导向反向传播(guided backpropagation)。
这种技术并不仅能够识别一个修正线性单元 ReLU 是否被激活,而且可以识别所有值为负的梯度。本质上,除了能把所有不被激活的修正线性单元 ReLU 关闭,所有反向传播时遇到的负信号还能被设置到阈值 0。最终,我们只需要反向传递梯度为正的值即可。这样的话,反向传播最后获得的图片就会更加清晰,因为我们去除了所有负梯度对我们所选的神经元造成的影响,只保留了正面的影响(详见: Striving for Simplicity: The all Convolutional Net, Springenberg, Dosovitskiy, et al., 2015 for more information)。
图注:使用 guided backpropagation 后噪声明显减少 VII. 对图像进行最优化 i. 类别可视化
接下来讲授的技巧涉及在图像上进行最优化操作。考虑如下问题:我们能否找到一个图像,它能够最大化某些类别的分数?为达到该目的,我们希望保持神经网络架构不变,而使用不同损失函数以在图像上进行最优化。这个方法包括如下步骤:
(1) 向神经网络中传入一个随机的图像; (2) 设定梯度分数向量为 [0,0,…,1,0,...0](将感兴趣的那一类设为 1,不感兴趣的则为 0),接着对对象进行反向传播;
(3) 进行一个小规模「图像更新」; (4) 将更新的图像进行正向传播; (责任编辑:本港台直播) |